# OutcomeOS > Outcome-based automation. Define a business result (e.g. "every qualified lead replies within 24 hours"), attach durable workflows, and verify success from trusted events — not from workflows finishing. OutcomeOS runs on Cloudflare Workers. Every dashboard action is available over REST (Bearer API key) and MCP. ## Docs - [Quickstart](https://outcomeos.cloud/docs/quickstart): signup → outcome → workflow → signed webhook → verified result - [Authentication](https://outcomeos.cloud/docs/authentication): API keys, roles, organizations - [Signed webhooks](https://outcomeos.cloud/docs/webhooks): HMAC-SHA256 signature format and idempotency - [Outcomes & verification](https://outcomeos.cloud/docs/outcomes): how success is decided - [Retries, idempotency & replay](https://outcomeos.cloud/docs/reliability) - [Errors](https://outcomeos.cloud/docs/errors) - [API reference](https://outcomeos.cloud/docs/api) · [OpenAPI](https://outcomeos.cloud/api/v1/openapi.json) · [Full action list](https://outcomeos.cloud/llms-full.txt) - [MCP](https://outcomeos.cloud/docs/mcp): endpoint https://outcomeos.cloud/mcp - [Self-hosting](https://outcomeos.cloud/docs/self-host) ## Actions ### Outcomes - list_outcomes (GET /api/v1/outcomes): List outcomes with progress, verified counts and status. - get_outcome (GET /api/v1/outcomes/:id): Get one outcome: success criteria, verification config, progress and linked workflows. - create_outcome (POST /api/v1/outcomes): Create a business outcome with explicit success criteria and a verification method. - update_outcome (PATCH /api/v1/outcomes/:id): Update an outcome's definition, or cancel / reactivate it (status: cancelled | not_started). - delete_outcome (DELETE /api/v1/outcomes/:id): Delete an outcome and its events. Linked workflows are kept and unlinked. - list_outcome_events (GET /api/v1/outcomes/:id/events): List the latest events recorded for an outcome, with whether each was counted as verified. - list_outcome_subjects (GET /api/v1/outcomes/:id/subjects): List evaluated subjects (e.g. leads, invoices) with achieved / failed / pending status and reason. - ingest_outcome_event (POST /api/v1/outcomes/:id/events): Record an outcome event (e.g. customer.reply_received for a lead). Counted only if its source is trusted by the outcome. - reveal_outcome_ingest_secret (POST /api/v1/outcomes/:id/ingest-secret): Reveal (or rotate) the HMAC secret for the outcome's signed event webhook. ### Workflows - list_workflows (GET /api/v1/workflows): List workflows with trigger, linked outcome, status, executions and success rate. - validate_workflow (POST /api/v1/workflows/validate): Validate a workflow definition without saving it. - get_workflow (GET /api/v1/workflows/:id): Get a workflow: draft definition, webhook URL and version history. - create_workflow (POST /api/v1/workflows): Create a draft workflow, empty, from a template id, or from a JSON definition. - update_workflow (PATCH /api/v1/workflows/:id): Save the draft (name, description, linked outcome, definition). Returns validation issues; publishing requires none. - publish_workflow (POST /api/v1/workflows/:id/publish): Publish the draft as a new immutable version. Running executions keep the version they started with. - set_workflow_status (POST /api/v1/workflows/:id/status): Activate or deactivate a published workflow. Inactive workflows reject webhook triggers. - duplicate_workflow (POST /api/v1/workflows/:id/duplicate): Copy a workflow's draft into a new draft workflow. - delete_workflow (DELETE /api/v1/workflows/:id): Delete a workflow, its versions and execution history. - test_workflow (POST /api/v1/workflows/:id/test): Run the current draft once with a sample payload. Test runs never record outcome events. - run_workflow (POST /api/v1/workflows/:id/run): Start an execution of the published version with a JSON payload (same as the webhook trigger, authenticated by API key). - get_workflow_version (GET /api/v1/workflows/:id/versions/:version): Get the immutable definition of a published version. - reveal_webhook_secret (POST /api/v1/workflows/:id/webhook-secret): Reveal (or rotate) the workflow's webhook signing secret. ### Executions - list_executions (GET /api/v1/executions): List executions, newest first. Filter by status (use `attention` for failed + requires_attention), workflow or outcome. - get_execution (GET /api/v1/executions/:id): Get an execution's full step timeline: inputs, outputs, errors, retries, logs (secrets masked) and related outcome events. - replay_execution (POST /api/v1/executions/:id/replay): Replay a failed, cancelled or attention-required execution. Default mode reuses steps that already succeeded and re-runs from the failure. - cancel_execution (POST /api/v1/executions/:id/cancel): Cancel a pending, running or waiting execution. Steps already in flight finish; nothing new starts. ### Integrations - list_integration_catalog (GET /api/v1/integrations/catalog): List every integration with its real availability: available, beta, needs operator setup, or coming soon. - list_connections (GET /api/v1/integrations): List connections. Credentials are never returned; only which secret fields are set. - create_connection (POST /api/v1/integrations): Save a connection (status pending). It only becomes connected after test_connection succeeds against the real provider. - update_connection (PATCH /api/v1/integrations/:id): Update a connection's name or credentials. Changing credentials resets it to pending until tested again. Blank secret fields keep the stored value. - test_connection (POST /api/v1/integrations/:id/test): Verify a connection against the real provider. Marks it connected only on success; otherwise records the provider's error. - delete_connection (DELETE /api/v1/integrations/:id): Delete a connection and its encrypted credentials. Workflow steps using it will fail with needs_credentials. ### Marketplace - submit_community_connector (POST /api/v1/marketplace/connectors): Submit (or resubmit) a declarative community connector for review. Once approved it is listed in the marketplace and anyone can connect it. A resubmission goes back to review while the approved version stays live. - list_my_community_connectors (GET /api/v1/marketplace/connectors): List community connectors your organization has submitted, with review status and reviewer notes. - list_connector_review_queue (GET /api/v1/marketplace/review): Platform admins only: community connector submissions, pending first. - review_community_connector (POST /api/v1/marketplace/review/:id): Platform admins only: approve (publish the submitted version), reject, or unpublish a community connector. The submitter is emailed. ### Organization - get_organization (GET /api/v1/org): Get the active organization: plan, limits, usage, workspaces and your role. - update_organization (PATCH /api/v1/org): Rename the organization. - create_workspace (POST /api/v1/org/workspaces): Create a workspace inside the organization. - list_audit_logs (GET /api/v1/audit-logs): List audit log entries for the organization, newest first. ### Team - list_members (GET /api/v1/org/members): List organization members and their roles. - update_member_role (PATCH /api/v1/org/members/:id): Change a member's role (admin, editor, viewer). - remove_member (DELETE /api/v1/org/members/:id): Remove a member from the organization. Their API keys for this org are revoked. - list_invitations (GET /api/v1/org/invitations): List pending invitations. - invite_member (POST /api/v1/org/invitations): Invite someone by email. Returns a one-time invite link (also emailed when email sending is configured). - revoke_invitation (DELETE /api/v1/org/invitations/:id): Revoke a pending invitation. ### API keys - list_api_keys (GET /api/v1/api-keys): List API keys (prefix only; keys are stored hashed and cannot be shown again). - create_api_key (POST /api/v1/api-keys): Create an API key bound to this organization. The full key is returned once. - revoke_api_key (DELETE /api/v1/api-keys/:id): Revoke an API key immediately. ### Templates - list_templates (GET /api/v1/templates): List outcome and workflow templates. ### Analytics - get_overview (GET /api/v1/analytics/overview): Dashboard overview: active outcomes, verified results, success rate, running and failed executions, recent activity. scope=real (default) or scope=demo; demo and real data are never combined. - get_analytics (GET /api/v1/analytics): Outcome and workflow analytics computed from recorded executions and verified outcome events. scope=real (default) or scope=demo; demo and real data are never combined. ### Assistant - list_assistant_proposals (GET /api/v1/assistant/proposals): List recent assistant proposals. - propose_automation (POST /api/v1/assistant/proposals): Turn a plain-language goal into a proposed outcome and draft workflow. Nothing is created until the proposal is approved. - approve_assistant_proposal (POST /api/v1/assistant/proposals/:id/approve): Approve a proposal: creates the outcome and a draft (unpublished) workflow linked to it. - reject_assistant_proposal (POST /api/v1/assistant/proposals/:id/reject): Reject a proposal. Nothing is created. ### Billing - get_billing (GET /api/v1/billing): Current plan, limits, usage this month and available plans. - start_checkout (POST /api/v1/billing/checkout): Create a Stripe Checkout session for a paid plan. The plan changes only after Stripe's signed webhook confirms payment. - open_billing_portal (POST /api/v1/billing/portal): Open the Stripe customer portal to manage or cancel the subscription. ### Demo - load_demo_data (POST /api/v1/demo/seed): Load the clearly labelled "never lose a qualified lead" demo: one outcome, one workflow and 100 sample leads. Nothing is sent anywhere. - clear_demo_data (DELETE /api/v1/demo): Remove all demo outcomes, workflows, executions and events from this organization. ## Action details ### list_outcomes GET https://outcomeos.cloud/api/v1/outcomes Permission: outcomes:read List outcomes with progress, verified counts and status. Input schema: {"type":"object","properties":{"filter":{"default":"all","type":"string","enum":["all","active","achieved","at_risk","failed"]},"workspace_id":{"type":"string"}}} Errors: unauthorized, forbidden, validation ### get_outcome GET https://outcomeos.cloud/api/v1/outcomes/:id Permission: outcomes:read Get one outcome: success criteria, verification config, progress and linked workflows. Input schema: {"type":"object","properties":{"id":{"type":"string","minLength":1}},"required":["id"]} Errors: unauthorized, forbidden, not_found ### create_outcome POST https://outcomeos.cloud/api/v1/outcomes Permission: outcomes:write Create a business outcome with explicit success criteria and a verification method. An outcome is achieved only when verified events satisfy its success criteria — never because a workflow completed. Input schema: {"type":"object","properties":{"workspace_id":{"type":"string"},"name":{"type":"string","minLength":2,"maxLength":120},"description":{"default":"","type":"string","maxLength":2000},"category":{"type":"string","enum":["lead_response","payment_recovery","customer_onboarding","appointment_booking","sales_followup","support_resolution","custom"]},"priority":{"default":"medium","type":"string","enum":["low","medium","high","critical"]},"success_criteria":{"type":"object","properties":{"subject_label":{"default":"record","type":"string","minLength":1,"maxLength":40},"start_event":{"type":"string","maxLength":100},"required_events":{"minItems":1,"maxItems":10,"type":"array","items":{"type":"object","properties":{"event_type":{"type":"string","minLength":1,"maxLength":100},"match":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":["string","number","boolean"]}},"label":{"type":"string","maxLength":120}},"required":["event_type"]}},"require":{"default":"all","type":"string","enum":["all","any"]},"failure_events":{"default":[],"maxItems":10,"type":"array","items":{"type":"string","maxLength":100}},"subject_deadline_seconds":{"type":"integer","minimum":1,"maximum":31536000},"target_metric":{"type":"string","minLength":1,"maxLength":120},"target_value":{"type":"integer","minimum":1,"maximum":100000000},"value_field":{"type":"string","maxLength":60},"value_currency":{"type":"string","maxLength":8}},"required":["required_events","target_metric","target_value"]},"verification_config":{"default":{"trusted_sources":["api","signed_webhook","integration"],"at_risk_threshold":0.2},"type":"object","properties":{"trusted_sources":{"default":["api","signed_webhook","integration"],"minItems":1,"type":"array","items":{"type":"string","enum":["api","signed_webhook","integration","workflow","manual","demo"]}},"at_risk_threshold":{"default":0.2,"type":"number","minimum":0,"maximum":1},"method_description":{"type":"string","maxLength":500}}},"execution_strategy":{"default":"","type":"string","maxLength":4000},"deadline":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},{"type":"null"}]},"required_integrations":{"default":[],"maxItems":20,"type":"array","items":{"type":"string","maxLength":50}},"activate":{"default":true,"type":"boolean"}},"required":["name","category","success_criteria"]} Example: {"name":"Reply to every qualified lead within 5 minutes","category":"lead_response","success_criteria":{"subject_label":"lead","start_event":"lead.received","required_events":[{"event_type":"customer.reply_received"}],"subject_deadline_seconds":300,"target_metric":"Leads replied","target_value":100}} Errors: unauthorized, forbidden, validation, not_found ### update_outcome PATCH https://outcomeos.cloud/api/v1/outcomes/:id Permission: outcomes:write Update an outcome's definition, or cancel / reactivate it (status: cancelled | not_started). Input schema: {"type":"object","properties":{"workspace_id":{"type":"string"},"name":{"type":"string","minLength":2,"maxLength":120},"description":{"default":"","type":"string","maxLength":2000},"category":{"type":"string","enum":["lead_response","payment_recovery","customer_onboarding","appointment_booking","sales_followup","support_resolution","custom"]},"priority":{"default":"medium","type":"string","enum":["low","medium","high","critical"]},"success_criteria":{"type":"object","properties":{"subject_label":{"default":"record","type":"string","minLength":1,"maxLength":40},"start_event":{"type":"string","maxLength":100},"required_events":{"minItems":1,"maxItems":10,"type":"array","items":{"type":"object","properties":{"event_type":{"type":"string","minLength":1,"maxLength":100},"match":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":["string","number","boolean"]}},"label":{"type":"string","maxLength":120}},"required":["event_type"]}},"require":{"default":"all","type":"string","enum":["all","any"]},"failure_events":{"default":[],"maxItems":10,"type":"array","items":{"type":"string","maxLength":100}},"subject_deadline_seconds":{"type":"integer","minimum":1,"maximum":31536000},"target_metric":{"type":"string","minLength":1,"maxLength":120},"target_value":{"type":"integer","minimum":1,"maximum":100000000},"value_field":{"type":"string","maxLength":60},"value_currency":{"type":"string","maxLength":8}},"required":["required_events","target_metric","target_value"]},"verification_config":{"default":{"trusted_sources":["api","signed_webhook","integration"],"at_risk_threshold":0.2},"type":"object","properties":{"trusted_sources":{"default":["api","signed_webhook","integration"],"minItems":1,"type":"array","items":{"type":"string","enum":["api","signed_webhook","integration","workflow","manual","demo"]}},"at_risk_threshold":{"default":0.2,"type":"number","minimum":0,"maximum":1},"method_description":{"type":"string","maxLength":500}}},"execution_strategy":{"default":"","type":"string","maxLength":4000},"deadline":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},{"type":"null"}]},"required_integrations":{"default":[],"maxItems":20,"type":"array","items":{"type":"string","maxLength":50}},"activate":{"default":true,"type":"boolean"},"status":{"type":"string","enum":["not_started","cancelled"]},"id":{"type":"string"}},"required":["id"]} Errors: unauthorized, forbidden, validation, not_found ### delete_outcome DELETE https://outcomeos.cloud/api/v1/outcomes/:id Permission: outcomes:write · DESTRUCTIVE: confirm with the user first Delete an outcome and its events. Linked workflows are kept and unlinked. Input schema: {"type":"object","properties":{"id":{"type":"string","minLength":1}},"required":["id"]} Errors: unauthorized, forbidden, not_found ### list_outcome_events GET https://outcomeos.cloud/api/v1/outcomes/:id/events Permission: outcomes:read List the latest events recorded for an outcome, with whether each was counted as verified. Input schema: {"type":"object","properties":{"id":{"type":"string","minLength":1},"limit":{"default":200,"type":"integer","minimum":1,"maximum":500}},"required":["id"]} Errors: unauthorized, forbidden, not_found ### list_outcome_subjects GET https://outcomeos.cloud/api/v1/outcomes/:id/subjects Permission: outcomes:read List evaluated subjects (e.g. leads, invoices) with achieved / failed / pending status and reason. Input schema: {"type":"object","properties":{"id":{"type":"string","minLength":1},"status":{"type":"string","enum":["pending","achieved","failed"]},"limit":{"default":200,"type":"integer","minimum":1,"maximum":500}},"required":["id"]} Errors: unauthorized, forbidden, not_found ### ingest_outcome_event POST https://outcomeos.cloud/api/v1/outcomes/:id/events Permission: outcome_events:write Record an outcome event (e.g. customer.reply_received for a lead). Counted only if its source is trusted by the outcome. Events sent with an API key have source `api`; events added from the dashboard have source `manual`. Both are recorded; whether they count is decided by the outcome's verification config. Send `idempotency_key` to make retries safe. Matching `wait_for_event` steps resume automatically. Input schema: {"type":"object","properties":{"event_type":{"type":"string","minLength":1,"maxLength":100},"subject_id":{"type":"string","maxLength":200},"data":{"default":{},"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},"idempotency_key":{"type":"string","maxLength":200},"occurred_at":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},"id":{"type":"string"}},"required":["event_type","id"]} Example: {"event_type":"customer.reply_received","subject_id":"lead_123","data":{"channel":"whatsapp"},"idempotency_key":"msg_abc"} Errors: unauthorized, forbidden, validation, not_found ### reveal_outcome_ingest_secret POST https://outcomeos.cloud/api/v1/outcomes/:id/ingest-secret Permission: outcomes:write · not an MCP tool Reveal (or rotate) the HMAC secret for the outcome's signed event webhook. Input schema: {"type":"object","properties":{"id":{"type":"string","minLength":1},"rotate":{"default":false,"type":"boolean"}},"required":["id"]} Errors: unauthorized, forbidden, not_found ### list_workflows GET https://outcomeos.cloud/api/v1/workflows Permission: workflows:read List workflows with trigger, linked outcome, status, executions and success rate. Input schema: {"type":"object","properties":{"workspace_id":{"type":"string"},"outcome_id":{"type":"string"}}} Errors: unauthorized, forbidden ### validate_workflow POST https://outcomeos.cloud/api/v1/workflows/validate Permission: workflows:read Validate a workflow definition without saving it. Input schema: {"type":"object","properties":{"definition":{}},"required":["definition"]} Errors: unauthorized, forbidden ### get_workflow GET https://outcomeos.cloud/api/v1/workflows/:id Permission: workflows:read Get a workflow: draft definition, webhook URL and version history. Input schema: {"type":"object","properties":{"id":{"type":"string","minLength":1}},"required":["id"]} Errors: unauthorized, forbidden, not_found ### create_workflow POST https://outcomeos.cloud/api/v1/workflows Permission: workflows:write Create a draft workflow, empty, from a template id, or from a JSON definition. Input schema: {"type":"object","properties":{"workspace_id":{"type":"string"},"name":{"type":"string","minLength":2,"maxLength":120},"description":{"default":"","type":"string","maxLength":2000},"outcome_id":{"type":["string","null"]},"definition":{"type":"object","properties":{"schema_version":{"default":1,"type":"number","const":1},"nodes":{"minItems":1,"maxItems":100,"type":"array","items":{"oneOf":[{"type":"object","properties":{"id":{"type":"string","pattern":"^[A-Za-z0-9_-]{1,64}$"},"name":{"type":"string","maxLength":120},"position":{"type":"object","properties":{"x":{"type":"number"},"y":{"type":"number"}},"required":["x","y"]},"type":{"type":"string","const":"trigger"},"config":{"type":"object","properties":{"kind":{"default":"webhook","type":"string","enum":["webhook","manual"]},"subject_path":{"type":"string","maxLength":200},"idempotency_path":{"type":"string","maxLength":200},"require_signature":{"default":true,"type":"boolean"}}}},"required":["id","type","config"]},{"type":"object","properties":{"id":{"type":"string","pattern":"^[A-Za-z0-9_-]{1,64}$"},"name":{"type":"string","maxLength":120},"position":{"type":"object","properties":{"x":{"type":"number"},"y":{"type":"number"}},"required":["x","y"]},"type":{"type":"string","const":"http_request"},"config":{"type":"object","properties":{"method":{"default":"POST","type":"string","enum":["GET","POST","PUT","PATCH","DELETE"]},"url":{"type":"string","minLength":1,"maxLength":2000},"headers":{"default":{},"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"string","maxLength":4000}},"body":{"anyOf":[{"type":"string","maxLength":100000},{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}}]},"timeout_ms":{"default":10000,"type":"integer","minimum":1000,"maximum":30000},"idempotent":{"type":"boolean"},"idempotency_header":{"type":"string","maxLength":100},"integration_id":{"type":"string"},"retry":{"type":"object","properties":{"max_attempts":{"default":3,"type":"integer","minimum":1,"maximum":10},"backoff":{"default":"exponential","type":"string","enum":["exponential","fixed"]},"initial_delay_ms":{"default":2000,"type":"integer","minimum":100,"maximum":3600000},"max_delay_ms":{"default":300000,"type":"integer","minimum":100,"maximum":86400000},"retry_on":{"default":["network","timeout","http_5xx","http_429"],"type":"array","items":{"type":"string","enum":["network","timeout","http_5xx","http_429"]}}}}},"required":["url"]}},"required":["id","type","config"]},{"type":"object","properties":{"id":{"type":"string","pattern":"^[A-Za-z0-9_-]{1,64}$"},"name":{"type":"string","maxLength":120},"position":{"type":"object","properties":{"x":{"type":"number"},"y":{"type":"number"}},"required":["x","y"]},"type":{"type":"string","const":"condition"},"config":{"type":"object","properties":{"combinator":{"default":"all","type":"string","enum":["all","any"]},"rules":{"minItems":1,"maxItems":20,"type":"array","items":{"type":"object","properties":{"left":{"type":"string","maxLength":500},"operator":{"type":"string","enum":["equals","not_equals","contains","not_contains","greater_than","less_than","exists","not_exists"]},"right":{"type":"string","maxLength":500}},"required":["left","operator"]}}},"required":["rules"]}},"required":["id","type","config"]},{"type":"object","properties":{"id":{"type":"string","pattern":"^[A-Za-z0-9_-]{1,64}$"},"name":{"type":"string","maxLength":120},"position":{"type":"object","properties":{"x":{"type":"number"},"y":{"type":"number"}},"required":["x","y"]},"type":{"type":"string","const":"delay"},"config":{"type":"object","properties":{"seconds":{"type":"integer","minimum":1,"maximum":2592000}},"required":["seconds"]}},"required":["id","type","config"]},{"type":"object","properties":{"id":{"type":"string","pattern":"^[A-Za-z0-9_-]{1,64}$"},"name":{"type":"string","maxLength":120},"position":{"type":"object","properties":{"x":{"type":"number"},"y":{"type":"number"}},"required":["x","y"]},"type":{"type":"string","const":"wait_for_event"},"config":{"type":"object","properties":{"event_type":{"type":"string","minLength":1,"maxLength":100},"subject_template":{"default":"{{trigger.subject}}","type":"string","maxLength":200},"timeout_seconds":{"type":"integer","minimum":1,"maximum":2592000}},"required":["event_type","timeout_seconds"]}},"required":["id","type","config"]},{"type":"object","properties":{"id":{"type":"string","pattern":"^[A-Za-z0-9_-]{1,64}$"},"name":{"type":"string","maxLength":120},"position":{"type":"object","properties":{"x":{"type":"number"},"y":{"type":"number"}},"required":["x","y"]},"type":{"type":"string","const":"connector_action"},"config":{"type":"object","properties":{"provider":{"type":"string","minLength":1,"maxLength":50},"action":{"type":"string","minLength":1,"maxLength":80},"integration_id":{"type":"string"},"inputs":{"default":{},"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"string","maxLength":10000}},"retry":{"type":"object","properties":{"max_attempts":{"default":3,"type":"integer","minimum":1,"maximum":10},"backoff":{"default":"exponential","type":"string","enum":["exponential","fixed"]},"initial_delay_ms":{"default":2000,"type":"integer","minimum":100,"maximum":3600000},"max_delay_ms":{"default":300000,"type":"integer","minimum":100,"maximum":86400000},"retry_on":{"default":["network","timeout","http_5xx","http_429"],"type":"array","items":{"type":"string","enum":["network","timeout","http_5xx","http_429"]}}}}},"required":["provider","action"]}},"required":["id","type","config"]},{"type":"object","properties":{"id":{"type":"string","pattern":"^[A-Za-z0-9_-]{1,64}$"},"name":{"type":"string","maxLength":120},"position":{"type":"object","properties":{"x":{"type":"number"},"y":{"type":"number"}},"required":["x","y"]},"type":{"type":"string","const":"emit_outcome_event"},"config":{"type":"object","properties":{"outcome_id":{"type":"string"},"event_type":{"type":"string","minLength":1,"maxLength":100},"subject_template":{"default":"{{trigger.subject}}","type":"string","maxLength":200},"data":{"default":{},"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"string","maxLength":2000}}},"required":["event_type"]}},"required":["id","type","config"]},{"type":"object","properties":{"id":{"type":"string","pattern":"^[A-Za-z0-9_-]{1,64}$"},"name":{"type":"string","maxLength":120},"position":{"type":"object","properties":{"x":{"type":"number"},"y":{"type":"number"}},"required":["x","y"]},"type":{"type":"string","const":"set_variables"},"config":{"type":"object","properties":{"variables":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"string","maxLength":4000}}},"required":["variables"]}},"required":["id","type","config"]},{"type":"object","properties":{"id":{"type":"string","pattern":"^[A-Za-z0-9_-]{1,64}$"},"name":{"type":"string","maxLength":120},"position":{"type":"object","properties":{"x":{"type":"number"},"y":{"type":"number"}},"required":["x","y"]},"type":{"type":"string","const":"notify"},"config":{"type":"object","properties":{"channel":{"default":"internal","type":"string","enum":["internal"]},"message":{"type":"string","minLength":1,"maxLength":2000}},"required":["message"]}},"required":["id","type","config"]},{"type":"object","properties":{"id":{"type":"string","pattern":"^[A-Za-z0-9_-]{1,64}$"},"name":{"type":"string","maxLength":120},"position":{"type":"object","properties":{"x":{"type":"number"},"y":{"type":"number"}},"required":["x","y"]},"type":{"type":"string","const":"end"},"config":{"default":{},"type":"object","properties":{}}},"required":["id","type"]}]}},"edges":{"default":[],"maxItems":300,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":130},"source":{"type":"string","pattern":"^[A-Za-z0-9_-]{1,64}$"},"target":{"type":"string","pattern":"^[A-Za-z0-9_-]{1,64}$"},"handle":{"default":"default","type":"string","enum":["default","true","false","event","timeout","error"]}},"required":["id","source","target"]}},"settings":{"default":{"execution_timeout_seconds":604800},"type":"object","properties":{"execution_timeout_seconds":{"default":604800,"type":"integer","minimum":60,"maximum":2592000}}}},"required":["nodes"]},"template_id":{"type":"string"}},"required":["name"]} Example: {"name":"Lead webhook to CRM","template_id":"webhook_to_http"} Errors: unauthorized, forbidden, validation, not_found ### update_workflow PATCH https://outcomeos.cloud/api/v1/workflows/:id Permission: workflows:write Save the draft (name, description, linked outcome, definition). Returns validation issues; publishing requires none. Input schema: {"type":"object","properties":{"name":{"type":"string","minLength":2,"maxLength":120},"description":{"type":"string","maxLength":2000},"outcome_id":{"type":["string","null"]},"definition":{},"id":{"type":"string"}},"required":["id"]} Errors: unauthorized, forbidden, validation, not_found ### publish_workflow POST https://outcomeos.cloud/api/v1/workflows/:id/publish Permission: workflows:publish Publish the draft as a new immutable version. Running executions keep the version they started with. Input schema: {"type":"object","properties":{"id":{"type":"string","minLength":1}},"required":["id"]} Errors: unauthorized, forbidden, validation, not_found, plan_limit, conflict ### set_workflow_status POST https://outcomeos.cloud/api/v1/workflows/:id/status Permission: workflows:publish Activate or deactivate a published workflow. Inactive workflows reject webhook triggers. Input schema: {"type":"object","properties":{"status":{"type":"string","enum":["active","inactive"]},"id":{"type":"string"}},"required":["status","id"]} Errors: unauthorized, forbidden, not_found, plan_limit, conflict ### duplicate_workflow POST https://outcomeos.cloud/api/v1/workflows/:id/duplicate Permission: workflows:write Copy a workflow's draft into a new draft workflow. Input schema: {"type":"object","properties":{"id":{"type":"string","minLength":1}},"required":["id"]} Errors: unauthorized, forbidden, not_found ### delete_workflow DELETE https://outcomeos.cloud/api/v1/workflows/:id Permission: workflows:delete · DESTRUCTIVE: confirm with the user first Delete a workflow, its versions and execution history. Input schema: {"type":"object","properties":{"id":{"type":"string","minLength":1}},"required":["id"]} Errors: unauthorized, forbidden, not_found ### test_workflow POST https://outcomeos.cloud/api/v1/workflows/:id/test Permission: executions:run · DESTRUCTIVE: confirm with the user first Run the current draft once with a sample payload. Test runs never record outcome events. HTTP and connector steps do run for real during a test, because a fake success would hide real failures. Input schema: {"type":"object","properties":{"payload":{"default":{},"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},"id":{"type":"string"}},"required":["id"]} Errors: unauthorized, forbidden, validation, not_found, plan_limit ### run_workflow POST https://outcomeos.cloud/api/v1/workflows/:id/run Permission: executions:run · DESTRUCTIVE: confirm with the user first Start an execution of the published version with a JSON payload (same as the webhook trigger, authenticated by API key). Send idempotency_key to make retries safe: a repeated key returns the original execution instead of starting a new one. Input schema: {"type":"object","properties":{"payload":{"default":{},"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},"idempotency_key":{"type":"string","maxLength":200},"id":{"type":"string"}},"required":["id"]} Example: {"payload":{"lead_id":"lead_123","qualified":true},"idempotency_key":"evt_001"} Errors: unauthorized, forbidden, validation, not_found, plan_limit, conflict ### get_workflow_version GET https://outcomeos.cloud/api/v1/workflows/:id/versions/:version Permission: workflows:read Get the immutable definition of a published version. Input schema: {"type":"object","properties":{"id":{"type":"string","minLength":1},"version":{"type":"integer","minimum":1,"maximum":9007199254740991}},"required":["id","version"]} Errors: unauthorized, forbidden, not_found ### reveal_webhook_secret POST https://outcomeos.cloud/api/v1/workflows/:id/webhook-secret Permission: workflows:publish · not an MCP tool Reveal (or rotate) the workflow's webhook signing secret. Input schema: {"type":"object","properties":{"id":{"type":"string","minLength":1},"rotate":{"default":false,"type":"boolean"}},"required":["id"]} Errors: unauthorized, forbidden, not_found ### list_executions GET https://outcomeos.cloud/api/v1/executions Permission: executions:read List executions, newest first. Filter by status (use `attention` for failed + requires_attention), workflow or outcome. Input schema: {"type":"object","properties":{"status":{"type":"string","enum":["pending","running","waiting","completed","failed","cancelled","requires_attention","attention"]},"workflow_id":{"type":"string"},"outcome_id":{"type":"string"},"limit":{"default":50,"type":"integer","minimum":1,"maximum":200},"cursor":{"type":"string"}}} Errors: unauthorized, forbidden, validation ### get_execution GET https://outcomeos.cloud/api/v1/executions/:id Permission: executions:read Get an execution's full step timeline: inputs, outputs, errors, retries, logs (secrets masked) and related outcome events. Input schema: {"type":"object","properties":{"id":{"type":"string","minLength":1}},"required":["id"]} Errors: unauthorized, forbidden, not_found ### replay_execution POST https://outcomeos.cloud/api/v1/executions/:id/replay Permission: executions:replay · DESTRUCTIVE: confirm with the user first Replay a failed, cancelled or attention-required execution. Default mode reuses steps that already succeeded and re-runs from the failure. mode=from_failure (default) copies successful step outputs from the original and re-runs only what failed or never ran, using the same step idempotency keys. mode=full re-runs every step and requires confirm_full=true because non-idempotent actions (messages, payments) may repeat. Ask the user before calling this tool. Input schema: {"type":"object","properties":{"mode":{"default":"from_failure","type":"string","enum":["from_failure","full"]},"confirm_full":{"type":"boolean"},"id":{"type":"string"}},"required":["id"]} Errors: unauthorized, forbidden, not_found, conflict, plan_limit, validation ### cancel_execution POST https://outcomeos.cloud/api/v1/executions/:id/cancel Permission: executions:cancel · DESTRUCTIVE: confirm with the user first Cancel a pending, running or waiting execution. Steps already in flight finish; nothing new starts. Input schema: {"type":"object","properties":{"id":{"type":"string","minLength":1}},"required":["id"]} Errors: unauthorized, forbidden, not_found, conflict ### list_integration_catalog GET https://outcomeos.cloud/api/v1/integrations/catalog Permission: integrations:read List every integration with its real availability: available, beta, needs operator setup, or coming soon. Input schema: {"type":"object","properties":{}} Errors: unauthorized, forbidden ### list_connections GET https://outcomeos.cloud/api/v1/integrations Permission: integrations:read List connections. Credentials are never returned; only which secret fields are set. Input schema: {"type":"object","properties":{"provider":{"type":"string"}}} Errors: unauthorized, forbidden ### create_connection POST https://outcomeos.cloud/api/v1/integrations Permission: integrations:manage Save a connection (status pending). It only becomes connected after test_connection succeeds against the real provider. Input schema: {"type":"object","properties":{"provider":{"type":"string","minLength":1,"maxLength":50},"connection_name":{"type":"string","minLength":1,"maxLength":80},"credentials":{"default":{},"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"string","maxLength":10000}}},"required":["provider","connection_name"]} Example: {"provider":"http","connection_name":"CRM API","credentials":{"base_url":"https://api.example.com","auth_type":"bearer","token":"…","test_path":"/health"}} Errors: unauthorized, forbidden, validation, conflict ### update_connection PATCH https://outcomeos.cloud/api/v1/integrations/:id Permission: integrations:manage Update a connection's name or credentials. Changing credentials resets it to pending until tested again. Blank secret fields keep the stored value. Input schema: {"type":"object","properties":{"connection_name":{"type":"string","minLength":1,"maxLength":80},"credentials":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"string","maxLength":10000}},"id":{"type":"string"}},"required":["id"]} Errors: unauthorized, forbidden, not_found, validation, conflict ### test_connection POST https://outcomeos.cloud/api/v1/integrations/:id/test Permission: integrations:manage Verify a connection against the real provider. Marks it connected only on success; otherwise records the provider's error. Input schema: {"type":"object","properties":{"id":{"type":"string","minLength":1}},"required":["id"]} Errors: unauthorized, forbidden, not_found, plan_limit ### delete_connection DELETE https://outcomeos.cloud/api/v1/integrations/:id Permission: integrations:manage · DESTRUCTIVE: confirm with the user first Delete a connection and its encrypted credentials. Workflow steps using it will fail with needs_credentials. Input schema: {"type":"object","properties":{"id":{"type":"string","minLength":1}},"required":["id"]} Errors: unauthorized, forbidden, not_found ### submit_community_connector POST https://outcomeos.cloud/api/v1/marketplace/connectors Permission: integrations:manage Submit (or resubmit) a declarative community connector for review. Once approved it is listed in the marketplace and anyone can connect it. A resubmission goes back to review while the approved version stays live. Input schema: {"type":"object","properties":{"manifest":{"type":"object","properties":{"slug":{"type":"string","pattern":"^[a-z][a-z0-9_]{2,39}$"},"name":{"type":"string","minLength":2,"maxLength":60},"category":{"type":"string","enum":["CRM","Communication","Payments","Productivity","Marketing","Developer tools"]},"description":{"type":"string","minLength":10,"maxLength":400},"docs_url":{"type":"string","maxLength":500,"format":"uri"},"logo_url":{"type":"string","maxLength":500,"format":"uri"},"base_url":{"type":"string","maxLength":500,"format":"uri"},"auth":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","const":"bearer"}},"required":["type"]},{"type":"object","properties":{"type":{"type":"string","const":"basic"}},"required":["type"]},{"type":"object","properties":{"type":{"type":"string","const":"header"},"header_name":{"type":"string","pattern":"^[A-Za-z0-9-]{1,60}$"}},"required":["type","header_name"]}]},"test":{"type":"object","properties":{"method":{"default":"GET","type":"string","enum":["GET","POST"]},"path":{"type":"string","minLength":1,"maxLength":500,"pattern":"^\\/"}},"required":["path"]},"actions":{"minItems":1,"maxItems":20,"type":"array","items":{"type":"object","properties":{"key":{"type":"string","pattern":"^[a-z][a-z0-9_]{0,39}$"},"name":{"type":"string","minLength":2,"maxLength":80},"description":{"default":"","type":"string","maxLength":300},"method":{"type":"string","enum":["GET","POST","PUT","PATCH","DELETE"]},"path":{"type":"string","minLength":1,"maxLength":500,"pattern":"^\\/"},"body":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},"inputs":{"default":[],"maxItems":20,"type":"array","items":{"type":"object","properties":{"key":{"type":"string","pattern":"^[a-z][a-z0-9_]{0,39}$"},"label":{"type":"string","minLength":1,"maxLength":80},"required":{"default":false,"type":"boolean"},"help":{"type":"string","maxLength":200}},"required":["key","label"]}},"idempotent":{"default":false,"type":"boolean"}},"required":["key","name","method","path"]}}},"required":["slug","name","category","description","base_url","auth","test","actions"]}},"required":["manifest"]} Errors: unauthorized, forbidden, validation, conflict ### list_my_community_connectors GET https://outcomeos.cloud/api/v1/marketplace/connectors Permission: integrations:read List community connectors your organization has submitted, with review status and reviewer notes. Input schema: {"type":"object","properties":{}} Errors: unauthorized, forbidden ### list_connector_review_queue GET https://outcomeos.cloud/api/v1/marketplace/review Permission: integrations:read · not an MCP tool Platform admins only: community connector submissions, pending first. Input schema: {"type":"object","properties":{"status":{"default":"pending","type":"string","enum":["pending","approved","rejected","all"]}}} Errors: unauthorized, forbidden ### review_community_connector POST https://outcomeos.cloud/api/v1/marketplace/review/:id Permission: integrations:read · not an MCP tool Platform admins only: approve (publish the submitted version), reject, or unpublish a community connector. The submitter is emailed. Input schema: {"type":"object","properties":{"id":{"type":"string","minLength":1},"decision":{"type":"string","enum":["approve","reject","unpublish"]},"updated_at":{"type":"string","minLength":1},"note":{"type":"string","maxLength":1000}},"required":["id","decision","updated_at"]} Errors: unauthorized, forbidden, not_found, conflict, validation ### get_organization GET https://outcomeos.cloud/api/v1/org Permission: org:read Get the active organization: plan, limits, usage, workspaces and your role. Input schema: {"type":"object","properties":{}} Errors: unauthorized, forbidden ### update_organization PATCH https://outcomeos.cloud/api/v1/org Permission: org:update Rename the organization. Input schema: {"type":"object","properties":{"name":{"type":"string","minLength":2,"maxLength":80}},"required":["name"]} Errors: unauthorized, forbidden, validation ### create_workspace POST https://outcomeos.cloud/api/v1/org/workspaces Permission: org:update Create a workspace inside the organization. Input schema: {"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":80}},"required":["name"]} Errors: unauthorized, forbidden, validation, conflict, plan_limit ### list_members GET https://outcomeos.cloud/api/v1/org/members Permission: team:read List organization members and their roles. Input schema: {"type":"object","properties":{}} Errors: unauthorized, forbidden ### update_member_role PATCH https://outcomeos.cloud/api/v1/org/members/:id Permission: team:manage Change a member's role (admin, editor, viewer). Input schema: {"type":"object","properties":{"role":{"type":"string","enum":["admin","editor","viewer"]},"id":{"type":"string"}},"required":["role","id"]} Errors: unauthorized, forbidden, not_found ### remove_member DELETE https://outcomeos.cloud/api/v1/org/members/:id Permission: team:manage · DESTRUCTIVE: confirm with the user first Remove a member from the organization. Their API keys for this org are revoked. Input schema: {"type":"object","properties":{"id":{"type":"string","minLength":1}},"required":["id"]} Errors: unauthorized, forbidden, not_found ### list_invitations GET https://outcomeos.cloud/api/v1/org/invitations Permission: team:read List pending invitations. Input schema: {"type":"object","properties":{}} Errors: unauthorized, forbidden ### invite_member POST https://outcomeos.cloud/api/v1/org/invitations Permission: team:manage · not an MCP tool Invite someone by email. Returns a one-time invite link (also emailed when email sending is configured). Input schema: {"type":"object","properties":{"email":{"type":"string","maxLength":254,"format":"email","pattern":"^(?:[A-Za-z0-9_'+\\-]+\\.)*[A-Za-z0-9_'+\\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"},"role":{"type":"string","enum":["admin","editor","viewer"]}},"required":["email","role"]} Errors: unauthorized, forbidden, validation, conflict ### revoke_invitation DELETE https://outcomeos.cloud/api/v1/org/invitations/:id Permission: team:manage · DESTRUCTIVE: confirm with the user first Revoke a pending invitation. Input schema: {"type":"object","properties":{"id":{"type":"string","minLength":1}},"required":["id"]} Errors: unauthorized, forbidden, not_found ### list_api_keys GET https://outcomeos.cloud/api/v1/api-keys Permission: apikeys:manage · not an MCP tool List API keys (prefix only; keys are stored hashed and cannot be shown again). Input schema: {"type":"object","properties":{}} Errors: unauthorized, forbidden ### create_api_key POST https://outcomeos.cloud/api/v1/api-keys Permission: apikeys:manage · not an MCP tool Create an API key bound to this organization. The full key is returned once. Input schema: {"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":80}},"required":["name"]} Errors: unauthorized, forbidden, validation ### revoke_api_key DELETE https://outcomeos.cloud/api/v1/api-keys/:id Permission: apikeys:manage · DESTRUCTIVE: confirm with the user first · not an MCP tool Revoke an API key immediately. Input schema: {"type":"object","properties":{"id":{"type":"string","minLength":1}},"required":["id"]} Errors: unauthorized, forbidden, not_found ### list_audit_logs GET https://outcomeos.cloud/api/v1/audit-logs Permission: audit:read List audit log entries for the organization, newest first. Input schema: {"type":"object","properties":{"limit":{"default":100,"type":"integer","minimum":1,"maximum":500},"before":{"type":"string"},"resource_type":{"type":"string"}}} Errors: unauthorized, forbidden ### list_templates GET https://outcomeos.cloud/api/v1/templates Permission: outcomes:read List outcome and workflow templates. Input schema: {"type":"object","properties":{}} Errors: unauthorized, forbidden ### get_overview GET https://outcomeos.cloud/api/v1/analytics/overview Permission: outcomes:read Dashboard overview: active outcomes, verified results, success rate, running and failed executions, recent activity. scope=real (default) or scope=demo; demo and real data are never combined. Input schema: {"type":"object","properties":{"days":{"default":30,"type":"integer","minimum":1,"maximum":365},"scope":{"default":"real","type":"string","enum":["real","demo"]}}} Errors: unauthorized, forbidden ### get_analytics GET https://outcomeos.cloud/api/v1/analytics Permission: outcomes:read Outcome and workflow analytics computed from recorded executions and verified outcome events. scope=real (default) or scope=demo; demo and real data are never combined. Input schema: {"type":"object","properties":{"days":{"default":30,"type":"integer","minimum":1,"maximum":365},"scope":{"default":"real","type":"string","enum":["real","demo"]}}} Errors: unauthorized, forbidden ### list_assistant_proposals GET https://outcomeos.cloud/api/v1/assistant/proposals Permission: assistant:use List recent assistant proposals. Input schema: {"type":"object","properties":{}} Errors: unauthorized, forbidden ### propose_automation POST https://outcomeos.cloud/api/v1/assistant/proposals Permission: assistant:use Turn a plain-language goal into a proposed outcome and draft workflow. Nothing is created until the proposal is approved. Input schema: {"type":"object","properties":{"prompt":{"type":"string","minLength":10,"maxLength":4000}},"required":["prompt"]} Example: {"prompt":"Every qualified lead should get a WhatsApp within 5 minutes and a reply within 24 hours"} Errors: unauthorized, forbidden, validation ### approve_assistant_proposal POST https://outcomeos.cloud/api/v1/assistant/proposals/:id/approve Permission: workflows:write Approve a proposal: creates the outcome and a draft (unpublished) workflow linked to it. Input schema: {"type":"object","properties":{"id":{"type":"string","minLength":1}},"required":["id"]} Errors: unauthorized, forbidden, not_found, conflict ### reject_assistant_proposal POST https://outcomeos.cloud/api/v1/assistant/proposals/:id/reject Permission: assistant:use Reject a proposal. Nothing is created. Input schema: {"type":"object","properties":{"id":{"type":"string","minLength":1}},"required":["id"]} Errors: unauthorized, forbidden, not_found, conflict ### get_billing GET https://outcomeos.cloud/api/v1/billing Permission: billing:read · not an MCP tool Current plan, limits, usage this month and available plans. Input schema: {"type":"object","properties":{}} Errors: unauthorized, forbidden ### start_checkout POST https://outcomeos.cloud/api/v1/billing/checkout Permission: billing:manage · not an MCP tool Create a Stripe Checkout session for a paid plan. The plan changes only after Stripe's signed webhook confirms payment. Input schema: {"type":"object","properties":{"plan":{"type":"string","enum":["growth","business"]}},"required":["plan"]} Errors: unauthorized, forbidden, not_configured ### open_billing_portal POST https://outcomeos.cloud/api/v1/billing/portal Permission: billing:manage · not an MCP tool Open the Stripe customer portal to manage or cancel the subscription. Input schema: {"type":"object","properties":{}} Errors: unauthorized, forbidden, not_configured, conflict ### load_demo_data POST https://outcomeos.cloud/api/v1/demo/seed Permission: demo:manage · not an MCP tool Load the clearly labelled "never lose a qualified lead" demo: one outcome, one workflow and 100 sample leads. Nothing is sent anywhere. Input schema: {"type":"object","properties":{}} Errors: unauthorized, forbidden, conflict, not_configured ### clear_demo_data DELETE https://outcomeos.cloud/api/v1/demo Permission: demo:manage · DESTRUCTIVE: confirm with the user first · not an MCP tool Remove all demo outcomes, workflows, executions and events from this organization. Input schema: {"type":"object","properties":{}} Errors: unauthorized, forbidden ## Error codes - unauthorized (401): No valid session or API key was sent, or it was revoked. - forbidden (403): Authenticated, but your role, key scope or plan does not allow this action. - not_found (404): The resource does not exist in your organization. - validation (400): The request body or parameters failed validation. `details` lists the fields. - conflict (409): The request conflicts with current state (duplicate, already published, not replayable). - plan_limit (402): Your plan's limit for this dimension is reached. Reads keep working; upgrade to continue writes. - rate_limited (429): Too many requests. Wait for `Retry-After` seconds. - signature_invalid (401): A webhook signature or timestamp failed verification. - payload_too_large (413): The request body exceeds the size limit. - not_configured (503): A required server-side setting (OAuth app, Stripe key) is not configured on this install. - internal (500): Unexpected server error. The response includes a request id for support.