{ "opencollection": "1.0.0", "info": { "name": "B3OS Workflow API", "version": "1.0" }, "items": [ { "info": { "name": "organizations", "type": "folder" }, "items": [ { "info": { "name": "GET /organizations/{orgId}/webhook-secret", "type": "http" }, "http": { "method": "GET", "url": "{{baseUrl}}/organizations/:orgId/webhook-secret", "params": [ { "name": "orgId", "value": "", "type": "path", "description": "Organization ID" } ], "body": { "type": "json", "data": "{}" } }, "docs": "Get the organization's webhook secret for triggering workflows via integration webhooks" }, { "info": { "name": "GET /v1/organizations/{orgId}/auto-swap-settings", "type": "http" }, "http": { "method": "GET", "url": "{{baseUrl}}/v1/organizations/:orgId/auto-swap-settings", "params": [ { "name": "orgId", "value": "", "type": "path", "description": "Organization ID" } ] }, "docs": "Get automatic token swap settings for an organization. Returns a disabled default if not yet configured." }, { "info": { "name": "PUT /v1/organizations/{orgId}/auto-swap-settings", "type": "http" }, "http": { "method": "PUT", "url": "{{baseUrl}}/v1/organizations/:orgId/auto-swap-settings", "params": [ { "name": "orgId", "value": "", "type": "path", "description": "Organization ID" } ], "body": { "type": "json", "data": "{}" } }, "docs": "Update automatic token swap settings for an organization. Owners only." }, { "info": { "name": "Get public organization metadata", "type": "http" }, "http": { "method": "GET", "url": "{{baseUrl}}/v1/organizations/:orgId/public", "params": [ { "name": "orgId", "value": "", "type": "path", "description": "Organization ID" } ] }, "docs": "Retrieve public metadata for an organization (no authentication required)\nThis endpoint is used for organization detail pages" } ] }, { "info": { "name": "Action", "type": "folder" }, "items": [ { "info": { "name": "POST /v1/action-proxy/{type}/execute", "type": "http" }, "http": { "method": "POST", "url": "{{baseUrl}}/v1/action-proxy/:type/execute", "params": [ { "name": "type", "value": "", "type": "path", "description": "Action type" } ], "body": { "type": "json", "data": "{}" } }, "docs": "Execute an action (write, charges CU)" }, { "info": { "name": "POST /v1/action-proxy/{type}/query", "type": "http" }, "http": { "method": "POST", "url": "{{baseUrl}}/v1/action-proxy/:type/query", "params": [ { "name": "type", "value": "", "type": "path", "description": "Action type" } ], "body": { "type": "json", "data": "{}" } }, "docs": "Query an action (read-only, no CU charge)" }, { "info": { "name": "POST /v1/actions/{type}/run", "type": "http" }, "http": { "method": "POST", "url": "{{baseUrl}}/v1/actions/:type/run", "params": [ { "name": "type", "value": "", "type": "path", "description": "Action type" } ], "body": { "type": "json", "data": "{}" } }, "docs": "Execute a single action immediately (no workflow definition required)" }, { "info": { "name": "POST /v1/actions/{type}/test", "type": "http" }, "http": { "method": "POST", "url": "{{baseUrl}}/v1/actions/:type/test", "params": [ { "name": "type", "value": "", "type": "path", "description": "Action type" } ], "body": { "type": "json", "data": "{}" } }, "docs": "Test an action with custom payload" } ] }, { "info": { "name": "actions", "type": "folder" }, "items": [ { "info": { "name": "GET /v1/actions", "type": "http" }, "http": { "method": "GET", "url": "{{baseUrl}}/v1/actions", "params": [ { "name": "tags", "value": "", "type": "query", "description": "Filter by tags (comma-separated or multiple params). Actions must have ALL specified tags (AND logic)." } ] }, "docs": "List all available actions, optionally filtered by tags" } ] }, { "info": { "name": "Default", "type": "folder" }, "items": [ { "info": { "name": "GET /v1/actions/{type}", "type": "http" }, "http": { "method": "GET", "url": "{{baseUrl}}/v1/actions/:type", "params": [ { "name": "type", "value": "", "type": "path", "description": "Action type" } ] }, "docs": "Get an action definition by type" }, { "info": { "name": "GET /v1/ai/pulse", "type": "http" }, "http": { "method": "GET", "url": "{{baseUrl}}/v1/ai/pulse", "params": [ { "name": "refresh", "value": "", "type": "query", "description": "Pass \\" }, { "name": "demo", "value": "", "type": "query", "description": "Pass \\" } ], "body": { "type": "json", "data": "{}" } }, "docs": "Get the proactive Pulse feed (situation-monitor cards + held-asset signals) for the caller's org." }, { "info": { "name": "GET /v1/ai/workflow/chat/debug", "type": "http" }, "http": { "method": "GET", "url": "{{baseUrl}}/v1/ai/workflow/chat/debug", "params": [ { "name": "conversationId", "value": "", "type": "query", "description": "Conversation ID (preferred, stable identifier)" }, { "name": "workflowId", "value": "", "type": "query", "description": "Workflow ID (for edit page, legacy)" }, { "name": "sessionId", "value": "", "type": "query", "description": "Session ID (for create page, legacy)" }, { "name": "agentVersion", "value": "", "type": "query", "description": "Caddie lane to restrict to (v1, v2, v3). When omitted and grouped=false: non-admin callers default to v2 (backward compat); admin callers get the most recently updated lane, so v3-only conversations stay visible." }, { "name": "grouped", "value": "", "type": "query", "description": "When true, return both v2 and v3 lanes as { versions: { v2, v3 } }" } ], "body": { "type": "json", "data": "{}" } }, "docs": "Get debug data for an AI chat session" }, { "info": { "name": "PUT /v1/ai/workflow/chat/debug", "type": "http" }, "http": { "method": "PUT", "url": "{{baseUrl}}/v1/ai/workflow/chat/debug", "body": { "type": "json", "data": "{}" } }, "docs": "Save or update debug data for an AI chat session" }, { "info": { "name": "GET /v1/ai/workflow/chat/history", "type": "http" }, "http": { "method": "GET", "url": "{{baseUrl}}/v1/ai/workflow/chat/history", "params": [ { "name": "conversationId", "value": "", "type": "query", "description": "Conversation ID (stable; preferred, used by V3 chat)" }, { "name": "workflowId", "value": "", "type": "query", "description": "Workflow ID (for edit page)" }, { "name": "sessionId", "value": "", "type": "query", "description": "Session ID (for create page)" }, { "name": "limit", "value": "", "type": "query", "description": "Maximum number of messages to return (default: 20, max: 100)" }, { "name": "before", "value": "", "type": "query", "description": "RFC3339 keyset cursor; return only messages strictly older than this createdAt (reverse pagination)" }, { "name": "beforeId", "value": "", "type": "query", "description": "Keyset cursor tiebreak; the oldest loaded row's id, paired with before, so a tied createdAt at a page boundary is not skipped" } ], "body": { "type": "json", "data": "{}" } }, "docs": "Get chat history for a conversation, workflow, or session" }, { "info": { "name": "POST /v1/ai/workflow/chat/messages", "type": "http" }, "http": { "method": "POST", "url": "{{baseUrl}}/v1/ai/workflow/chat/messages", "body": { "type": "json", "data": "{}" } }, "docs": "Persist one chat message (caddie records V3 turns in chat history)" }, { "info": { "name": "GET /v1/ai/workflow/chat/preflight", "type": "http" }, "http": { "method": "GET", "url": "{{baseUrl}}/v1/ai/workflow/chat/preflight" }, "docs": "Check whether the org may start a caddie V3 chat turn (AI-Credit gate)" }, { "info": { "name": "GET /v1/ai/workflow/chat/sessions", "type": "http" }, "http": { "method": "GET", "url": "{{baseUrl}}/v1/ai/workflow/chat/sessions", "params": [ { "name": "limit", "value": "", "type": "query", "description": "Maximum number of sessions to return (default: 20, max: 50)" }, { "name": "offset", "value": "", "type": "query", "description": "Offset for pagination (default: 0)" } ], "body": { "type": "json", "data": "{}" } }, "docs": "List chat sessions for the current organization" }, { "info": { "name": "GET /v1/ai/workflow/chat/snapshot", "type": "http" }, "http": { "method": "GET", "url": "{{baseUrl}}/v1/ai/workflow/chat/snapshot", "params": [ { "name": "conversationId", "value": "", "type": "query", "description": "Conversation ID (stable; the V3 chat checkpoint key)" } ], "body": { "type": "json", "data": "{}" } }, "docs": "Get the live/pending state of a conversation (refresh-resume): whether a turn is actively running, the pending interrupt card, and the current mode. Excludes the transcript (use /chat/history) and the canvas (use the workflow record)." }, { "info": { "name": "POST /v1/ai/workflow/chat/stream", "type": "http" }, "http": { "method": "POST", "url": "{{baseUrl}}/v1/ai/workflow/chat/stream", "body": { "type": "json", "data": "{}" } }, "docs": "Issue a caddie-v3 chat session (Socket.IO). Returns sessionToken + socketUrl." }, { "info": { "name": "POST /v1/ai/workflow/chat/usage", "type": "http" }, "http": { "method": "POST", "url": "{{baseUrl}}/v1/ai/workflow/chat/usage", "body": { "type": "json", "data": "{}" } }, "docs": "Report one chat turn's LLM usage (caddie V3) for AI-Credit billing" }, { "info": { "name": "GET /v1/api-keys", "type": "http" }, "http": { "method": "GET", "url": "{{baseUrl}}/v1/api-keys", "params": [ { "name": "limit", "value": "", "type": "query", "description": "Number of items (default 20, max 100)" }, { "name": "offset", "value": "", "type": "query", "description": "Offset for pagination (default 0)" } ] }, "docs": "List all API keys for the current organization" }, { "info": { "name": "POST /v1/api-keys", "type": "http" }, "http": { "method": "POST", "url": "{{baseUrl}}/v1/api-keys", "body": { "type": "json", "data": "{}" } }, "docs": "Create a new API key for the current organization" }, { "info": { "name": "GET /v1/api-keys/requests", "type": "http" }, "http": { "method": "GET", "url": "{{baseUrl}}/v1/api-keys/requests", "params": [ { "name": "limit", "value": "", "type": "query", "description": "Number of items (default 20, max 100)" }, { "name": "offset", "value": "", "type": "query", "description": "Offset for pagination (default 0)" }, { "name": "serviceAccountId", "value": "", "type": "query", "description": "Filter by service account ID" }, { "name": "apiKeyId", "value": "", "type": "query", "description": "Filter by API key ID" } ] }, "docs": "List recent API request audit logs for the current organization" }, { "info": { "name": "GET /v1/api-keys/{id}", "type": "http" }, "http": { "method": "GET", "url": "{{baseUrl}}/v1/api-keys/:id", "params": [ { "name": "id", "value": "", "type": "path", "description": "API key ID" } ] }, "docs": "Get a single API key by ID" }, { "info": { "name": "DELETE /v1/api-keys/{id}", "type": "http" }, "http": { "method": "DELETE", "url": "{{baseUrl}}/v1/api-keys/:id", "params": [ { "name": "id", "value": "", "type": "path", "description": "API key ID" } ] }, "docs": "Revoke an API key by ID" }, { "info": { "name": "GET /v1/app-gateway/{appId}/runs/{runId}", "type": "http" }, "http": { "method": "GET", "url": "{{baseUrl}}/v1/app-gateway/:appId/runs/:runId", "params": [ { "name": "appId", "value": "", "type": "path", "description": "Deep-agent run id (app id)" }, { "name": "runId", "value": "", "type": "path", "description": "Run id" } ] }, "docs": "Get a single run's status and inputs/outputs" }, { "info": { "name": "POST /v1/app-gateway/{appId}/runs/{runId}/resume", "type": "http" }, "http": { "method": "POST", "url": "{{baseUrl}}/v1/app-gateway/:appId/runs/:runId/resume", "params": [ { "name": "appId", "value": "", "type": "path", "description": "Deep-agent run id (app id)" }, { "name": "runId", "value": "", "type": "path", "description": "Run id" } ], "body": { "type": "json", "data": "{}" } }, "docs": "Resume a deep-agent app run's waiting node" }, { "info": { "name": "POST /v1/app-gateway/{appId}/workflows/{workflowId}/run", "type": "http" }, "http": { "method": "POST", "url": "{{baseUrl}}/v1/app-gateway/:appId/workflows/:workflowId/run", "params": [ { "name": "appId", "value": "", "type": "path", "description": "Deep-agent run id (app id)" }, { "name": "workflowId", "value": "", "type": "path", "description": "Workflow id" } ], "body": { "type": "json", "data": "{}" } }, "docs": "Trigger a run for a deep-agent app's workflow" }, { "info": { "name": "GET /v1/app-gateway/{appId}/workflows/{workflowId}/runs", "type": "http" }, "http": { "method": "GET", "url": "{{baseUrl}}/v1/app-gateway/:appId/workflows/:workflowId/runs", "params": [ { "name": "appId", "value": "", "type": "path", "description": "Deep-agent run id (app id)" }, { "name": "workflowId", "value": "", "type": "path", "description": "Workflow id" }, { "name": "limit", "value": "", "type": "query", "description": "Number of items (default 20, max 100)" }, { "name": "offset", "value": "", "type": "query", "description": "Offset for pagination (default 0)" } ] }, "docs": "List runs for a deep-agent app's workflow" }, { "info": { "name": "GET /v1/block-cursors", "type": "http" }, "http": { "method": "GET", "url": "{{baseUrl}}/v1/block-cursors", "params": [ { "name": "chainId", "value": "", "type": "query", "description": "Chain ID" }, { "name": "cursorType", "value": "", "type": "query", "description": "evm-log or native-transfer" } ] }, "docs": "Get latest block cursor for a chain" }, { "info": { "name": "GET /v1/connector-types", "type": "http" }, "http": { "method": "GET", "url": "{{baseUrl}}/v1/connector-types" }, "docs": "List all available connector types" }, { "info": { "name": "GET /v1/connector-types/{type}", "type": "http" }, "http": { "method": "GET", "url": "{{baseUrl}}/v1/connector-types/:type", "params": [ { "name": "type", "value": "", "type": "path", "description": "Connector type" } ] }, "docs": "Get a connector type definition by type" }, { "info": { "name": "GET /v1/connectors", "type": "http" }, "http": { "method": "GET", "url": "{{baseUrl}}/v1/connectors", "params": [ { "name": "limit", "value": "", "type": "query", "description": "Number of items (default 20, max 100)" }, { "name": "offset", "value": "", "type": "query", "description": "Offset for pagination (default 0)" } ] }, "docs": "List all connectors for the current user" }, { "info": { "name": "POST /v1/connectors", "type": "http" }, "http": { "method": "POST", "url": "{{baseUrl}}/v1/connectors", "body": { "type": "json", "data": "{}" } }, "docs": "Create a new connector" }, { "info": { "name": "GET /v1/connectors/{id}", "type": "http" }, "http": { "method": "GET", "url": "{{baseUrl}}/v1/connectors/:id", "params": [ { "name": "id", "value": "", "type": "path", "description": "Connector ID" } ] }, "docs": "Get a connector by ID" }, { "info": { "name": "PUT /v1/connectors/{id}", "type": "http" }, "http": { "method": "PUT", "url": "{{baseUrl}}/v1/connectors/:id", "params": [ { "name": "id", "value": "", "type": "path", "description": "Connector ID" } ], "body": { "type": "json", "data": "{}" } }, "docs": "Update a connector" }, { "info": { "name": "DELETE /v1/connectors/{id}", "type": "http" }, "http": { "method": "DELETE", "url": "{{baseUrl}}/v1/connectors/:id", "params": [ { "name": "id", "value": "", "type": "path", "description": "Connector ID" } ] }, "docs": "Delete a connector" }, { "info": { "name": "POST /v1/contract", "type": "http" }, "http": { "method": "POST", "url": "{{baseUrl}}/v1/contract", "body": { "type": "json", "data": "{}" } }, "docs": "Create a new contract project" }, { "info": { "name": "POST /v1/contract/chat/stream", "type": "http" }, "http": { "method": "POST", "url": "{{baseUrl}}/v1/contract/chat/stream", "body": { "type": "json", "data": "{}" } }, "docs": "Stream AI chat for smart contract development via SSE" }, { "info": { "name": "GET /v1/contract/session/{sessionId}", "type": "http" }, "http": { "method": "GET", "url": "{{baseUrl}}/v1/contract/session/:sessionId", "params": [ { "name": "sessionId", "value": "", "type": "path", "description": "Session ID" } ] }, "docs": "Get a contract project by session ID" }, { "info": { "name": "GET /v1/contract/{id}", "type": "http" }, "http": { "method": "GET", "url": "{{baseUrl}}/v1/contract/:id", "params": [ { "name": "id", "value": "", "type": "path", "description": "Contract project ID" } ] }, "docs": "Get a contract project by ID" }, { "info": { "name": "PUT /v1/contract/{id}", "type": "http" }, "http": { "method": "PUT", "url": "{{baseUrl}}/v1/contract/:id", "params": [ { "name": "id", "value": "", "type": "path", "description": "Contract project ID" } ], "body": { "type": "json", "data": "{}" } }, "docs": "Update a contract project" }, { "info": { "name": "DELETE /v1/contract/{id}", "type": "http" }, "http": { "method": "DELETE", "url": "{{baseUrl}}/v1/contract/:id", "params": [ { "name": "id", "value": "", "type": "path", "description": "Contract project ID" } ] }, "docs": "Delete a contract project by ID" }, { "info": { "name": "POST /v1/contract/{id}/audit", "type": "http" }, "http": { "method": "POST", "url": "{{baseUrl}}/v1/contract/:id/audit", "params": [ { "name": "id", "value": "", "type": "path", "description": "Contract project ID" } ] }, "docs": "Run audit for a contract project" }, { "info": { "name": "POST /v1/contract/{id}/deploy/approve", "type": "http" }, "http": { "method": "POST", "url": "{{baseUrl}}/v1/contract/:id/deploy/approve", "params": [ { "name": "id", "value": "", "type": "path", "description": "Contract project ID" } ], "body": { "type": "json", "data": "{}" } }, "docs": "Approve and initiate contract deployment to testnet or mainnet" }, { "info": { "name": "GET /v1/contract/{id}/download", "type": "http" }, "http": { "method": "GET", "url": "{{baseUrl}}/v1/contract/:id/download", "params": [ { "name": "id", "value": "", "type": "path", "description": "Contract project ID" } ] }, "docs": "Download contract project as Foundry ZIP" }, { "info": { "name": "POST /v1/contract/{id}/fix", "type": "http" }, "http": { "method": "POST", "url": "{{baseUrl}}/v1/contract/:id/fix", "params": [ { "name": "id", "value": "", "type": "path", "description": "Contract project ID" } ] }, "docs": "Trigger AI auto-fix for a contract with failed tests" }, { "info": { "name": "POST /v1/contract/{id}/plan/approve", "type": "http" }, "http": { "method": "POST", "url": "{{baseUrl}}/v1/contract/:id/plan/approve", "params": [ { "name": "id", "value": "", "type": "path", "description": "Contract project ID" } ], "body": { "type": "json", "data": "{}" } }, "docs": "Approve a contract plan to proceed with code generation" }, { "info": { "name": "POST /v1/contract/{id}/test", "type": "http" }, "http": { "method": "POST", "url": "{{baseUrl}}/v1/contract/:id/test", "params": [ { "name": "id", "value": "", "type": "path", "description": "Contract project ID" } ] }, "docs": "Run tests for a contract project" }, { "info": { "name": "GET /v1/contract/{id}/verification-status", "type": "http" }, "http": { "method": "GET", "url": "{{baseUrl}}/v1/contract/:id/verification-status", "params": [ { "name": "id", "value": "", "type": "path", "description": "Contract project ID" } ] }, "docs": "Check verification status for all deployments of a contract project" }, { "info": { "name": "GET /v1/contracts", "type": "http" }, "http": { "method": "GET", "url": "{{baseUrl}}/v1/contracts", "params": [ { "name": "limit", "value": "", "type": "query", "description": "Limit (default 20)" }, { "name": "offset", "value": "", "type": "query", "description": "Offset (default 0)" } ] }, "docs": "List contract projects for the organization" }, { "info": { "name": "POST /v1/contracts/{id}/verify", "type": "http" }, "http": { "method": "POST", "url": "{{baseUrl}}/v1/contracts/:id/verify", "params": [ { "name": "id", "value": "", "type": "path", "description": "Contract project ID" } ], "body": { "type": "json", "data": "{}" } }, "docs": "Verify a deployed contract's source code on block explorer (Etherscan, Basescan, etc.)" }, { "info": { "name": "GET /v1/execution-webhooks", "type": "http" }, "http": { "method": "GET", "url": "{{baseUrl}}/v1/execution-webhooks", "params": [ { "name": "limit", "value": "", "type": "query", "description": "Number of items (default 20, max 100)" }, { "name": "offset", "value": "", "type": "query", "description": "Offset for pagination (default 0)" } ] }, "docs": "List execution webhook endpoints for the current organization" }, { "info": { "name": "POST /v1/execution-webhooks", "type": "http" }, "http": { "method": "POST", "url": "{{baseUrl}}/v1/execution-webhooks", "body": { "type": "json", "data": "{}" } }, "docs": "Create an org-level execution webhook endpoint" }, { "info": { "name": "GET /v1/execution-webhooks/deliveries", "type": "http" }, "http": { "method": "GET", "url": "{{baseUrl}}/v1/execution-webhooks/deliveries", "params": [ { "name": "limit", "value": "", "type": "query", "description": "Number of items (default 20, max 100)" }, { "name": "offset", "value": "", "type": "query", "description": "Offset for pagination (default 0)" }, { "name": "endpointId", "value": "", "type": "query", "description": "Filter by webhook endpoint ID" } ] }, "docs": "List execution webhook deliveries for the current organization" }, { "info": { "name": "GET /v1/execution-webhooks/deliveries/{id}", "type": "http" }, "http": { "method": "GET", "url": "{{baseUrl}}/v1/execution-webhooks/deliveries/:id", "params": [ { "name": "id", "value": "", "type": "path", "description": "Webhook delivery ID" } ] }, "docs": "Get a single execution webhook delivery" }, { "info": { "name": "POST /v1/execution-webhooks/deliveries/{id}/replay", "type": "http" }, "http": { "method": "POST", "url": "{{baseUrl}}/v1/execution-webhooks/deliveries/:id/replay", "params": [ { "name": "id", "value": "", "type": "path", "description": "Webhook delivery ID" } ] }, "docs": "Replay an execution webhook delivery by creating a new delivery record based on the original" }, { "info": { "name": "POST /v1/execution-webhooks/deliveries/{id}/retry", "type": "http" }, "http": { "method": "POST", "url": "{{baseUrl}}/v1/execution-webhooks/deliveries/:id/retry", "params": [ { "name": "id", "value": "", "type": "path", "description": "Webhook delivery ID" } ] }, "docs": "Retry a failed execution webhook delivery by requeueing the same delivery record" }, { "info": { "name": "GET /v1/execution-webhooks/{id}", "type": "http" }, "http": { "method": "GET", "url": "{{baseUrl}}/v1/execution-webhooks/:id", "params": [ { "name": "id", "value": "", "type": "path", "description": "Webhook endpoint ID" } ] }, "docs": "Get a single execution webhook endpoint" }, { "info": { "name": "POST /v1/execution-webhooks/{id}/disable", "type": "http" }, "http": { "method": "POST", "url": "{{baseUrl}}/v1/execution-webhooks/:id/disable", "params": [ { "name": "id", "value": "", "type": "path", "description": "Webhook endpoint ID" } ] }, "docs": "Disable an execution webhook endpoint" }, { "info": { "name": "POST /v1/execution-webhooks/{id}/enable", "type": "http" }, "http": { "method": "POST", "url": "{{baseUrl}}/v1/execution-webhooks/:id/enable", "params": [ { "name": "id", "value": "", "type": "path", "description": "Webhook endpoint ID" } ] }, "docs": "Enable an execution webhook endpoint" }, { "info": { "name": "POST /v1/execution-webhooks/{id}/regenerate-secret", "type": "http" }, "http": { "method": "POST", "url": "{{baseUrl}}/v1/execution-webhooks/:id/regenerate-secret", "params": [ { "name": "id", "value": "", "type": "path", "description": "Webhook endpoint ID" } ] }, "docs": "Regenerate the signing secret for an execution webhook endpoint" }, { "info": { "name": "GET /v1/executions", "type": "http" }, "http": { "method": "GET", "url": "{{baseUrl}}/v1/executions", "params": [ { "name": "limit", "value": "", "type": "query", "description": "Number of items (default 20, max 100)" }, { "name": "offset", "value": "", "type": "query", "description": "Offset for pagination (default 0)" } ] }, "docs": "List executions for the current organization" }, { "info": { "name": "POST /v1/executions", "type": "http" }, "http": { "method": "POST", "url": "{{baseUrl}}/v1/executions", "body": { "type": "json", "data": "{}" } }, "docs": "Create an execution for a workflow" }, { "info": { "name": "GET /v1/executions/stats", "type": "http" }, "http": { "method": "GET", "url": "{{baseUrl}}/v1/executions/stats", "params": [ { "name": "from", "value": "", "type": "query", "description": "Start timestamp (Unix milliseconds)" }, { "name": "to", "value": "", "type": "query", "description": "End timestamp (Unix milliseconds)" }, { "name": "granularity", "value": "", "type": "query", "description": "Granularity (hourly or daily)" } ] }, "docs": "Get external execution stats for an organization" }, { "info": { "name": "GET /v1/executions/{id}", "type": "http" }, "http": { "method": "GET", "url": "{{baseUrl}}/v1/executions/:id", "params": [ { "name": "id", "value": "", "type": "path", "description": "Execution ID" } ] }, "docs": "Get a single execution by ID" }, { "info": { "name": "GET /v1/executions/{id}/events", "type": "http" }, "http": { "method": "GET", "url": "{{baseUrl}}/v1/executions/:id/events", "params": [ { "name": "id", "value": "", "type": "path", "description": "Execution ID" } ] }, "docs": "Get events for an execution" }, { "info": { "name": "POST /v1/integrations/slack/events", "type": "http" }, "http": { "method": "POST", "url": "{{baseUrl}}/v1/integrations/slack/events", "body": { "type": "json", "data": "{}" } }, "docs": "Handle Slack Events API webhook" }, { "info": { "name": "POST /v1/integrations/slack/interactivity", "type": "http" }, "http": { "method": "POST", "url": "{{baseUrl}}/v1/integrations/slack/interactivity", "body": { "type": "form-urlencoded", "data": [] } }, "docs": "Handle Slack interaction webhook" }, { "info": { "name": "POST /v1/integrations/telegram-b3os-bot", "type": "http" }, "http": { "method": "POST", "url": "{{baseUrl}}/v1/integrations/telegram-b3os-bot", "body": { "type": "json", "data": "{}" } }, "docs": "Handle B3OS Telegram bot webhook update" }, { "info": { "name": "POST /v1/internal/anyspend/order-completed", "type": "http" }, "http": { "method": "POST", "url": "{{baseUrl}}/v1/internal/anyspend/order-completed", "headers": [ { "name": "x-api-key", "value": "" } ], "body": { "type": "json", "data": "{}" } }, "docs": "Handle AnySpend order-completed callback" }, { "info": { "name": "POST /v1/internal/credits/deposit", "type": "http" }, "http": { "method": "POST", "url": "{{baseUrl}}/v1/internal/credits/deposit", "headers": [ { "name": "x-api-key", "value": "" } ], "body": { "type": "json", "data": "{}" } }, "docs": "Handle credits deposit after payment" }, { "info": { "name": "POST /v1/internal/subscription/cancel", "type": "http" }, "http": { "method": "POST", "url": "{{baseUrl}}/v1/internal/subscription/cancel", "headers": [ { "name": "x-api-key", "value": "" } ], "body": { "type": "json", "data": "{}" } }, "docs": "Cancel subscription and downgrade org (internal)" }, { "info": { "name": "GET /v1/invites", "type": "http" }, "http": { "method": "GET", "url": "{{baseUrl}}/v1/invites", "params": [ { "name": "limit", "value": "", "type": "query", "description": "Number of items (default 20, max 100)" }, { "name": "offset", "value": "", "type": "query", "description": "Offset for pagination (default 0)" } ] }, "docs": "List pending invites for the current user" }, { "info": { "name": "GET /v1/logic-actions", "type": "http" }, "http": { "method": "GET", "url": "{{baseUrl}}/v1/logic-actions" }, "docs": "List all available logic actions" }, { "info": { "name": "GET /v1/mcp-connectors", "type": "http" }, "http": { "method": "GET", "url": "{{baseUrl}}/v1/mcp-connectors", "params": [ { "name": "limit", "value": "", "type": "query", "description": "Number of items (default 20, max 100)" }, { "name": "offset", "value": "", "type": "query", "description": "Offset for pagination (default 0)" } ] }, "docs": "List all MCP connectors for the caller's org (token-free view)" }, { "info": { "name": "GET /v1/mcp/servers", "type": "http" }, "http": { "method": "GET", "url": "{{baseUrl}}/v1/mcp/servers", "params": [ { "name": "limit", "value": "", "type": "query", "description": "Number of items (default 20, max 100)" }, { "name": "offset", "value": "", "type": "query", "description": "Offset for pagination (default 0)" } ] }, "docs": "List all known MCP servers (excluding the \"custom\" placeholder entry)" }, { "info": { "name": "GET /v1/mcp/{serverId}/oauth-url", "type": "http" }, "http": { "method": "GET", "url": "{{baseUrl}}/v1/mcp/:serverId/oauth-url", "params": [ { "name": "serverId", "value": "", "type": "path", "description": "MCP server ID" }, { "name": "name", "value": "", "type": "query", "description": "Optional connector display name" } ] }, "docs": "Generate an OAuth authorization URL for the given MCP server" }, { "info": { "name": "GET /v1/metrics/failure-rate", "type": "http" }, "http": { "method": "GET", "url": "{{baseUrl}}/v1/metrics/failure-rate", "params": [ { "name": "from", "value": "", "type": "query", "description": "Start timestamp (Unix milliseconds)" }, { "name": "to", "value": "", "type": "query", "description": "End timestamp (Unix milliseconds). Max 365 days from 'from'." } ] }, "docs": "Get overall failure rate statistics for a time period. Maximum time range is 365 days." }, { "info": { "name": "GET /v1/metrics/recent-activity", "type": "http" }, "http": { "method": "GET", "url": "{{baseUrl}}/v1/metrics/recent-activity", "params": [ { "name": "limit", "value": "", "type": "query", "description": "Number of runs to return (default 20, max 100)" }, { "name": "status", "value": "", "type": "query", "description": "Filter by status (success, failure, running)" } ] }, "docs": "Get recent workflow run activity" }, { "info": { "name": "GET /v1/metrics/runs-timeseries", "type": "http" }, "http": { "method": "GET", "url": "{{baseUrl}}/v1/metrics/runs-timeseries", "params": [ { "name": "from", "value": "", "type": "query", "description": "Start timestamp (Unix milliseconds)" }, { "name": "to", "value": "", "type": "query", "description": "End timestamp (Unix milliseconds)" }, { "name": "granularity", "value": "", "type": "query", "description": "Granularity (hourly or daily)" } ] }, "docs": "Get time-series data for workflow runs (total, success, failure)" }, { "info": { "name": "GET /v1/metrics/summary", "type": "http" }, "http": { "method": "GET", "url": "{{baseUrl}}/v1/metrics/summary", "params": [ { "name": "from", "value": "", "type": "query", "description": "Start timestamp (Unix milliseconds)" }, { "name": "to", "value": "", "type": "query", "description": "End timestamp (Unix milliseconds)" }, { "name": "granularity", "value": "", "type": "query", "description": "Granularity (hourly or daily)" }, { "name": "topErrorsLimit", "value": "", "type": "query", "description": "Top errors limit (default 10)" }, { "name": "recentActivityLimit", "value": "", "type": "query", "description": "Recent activity limit (default 50)" }, { "name": "status", "value": "", "type": "query", "description": "Filter recent activity by status (success, failure, running)" } ] }, "docs": "Get aggregated metrics (runs time-series, failure rate, top errors, recent activity) in a single request." }, { "info": { "name": "GET /v1/metrics/top-errors", "type": "http" }, "http": { "method": "GET", "url": "{{baseUrl}}/v1/metrics/top-errors", "params": [ { "name": "from", "value": "", "type": "query", "description": "Start timestamp (Unix milliseconds)" }, { "name": "to", "value": "", "type": "query", "description": "End timestamp (Unix milliseconds). Max 365 days from 'from'." }, { "name": "limit", "value": "", "type": "query", "description": "Number of errors to return (default 20, max 100)" } ] }, "docs": "Get most common errors with counts. Maximum time range is 365 days." }, { "info": { "name": "GET /v1/organizations", "type": "http" }, "http": { "method": "GET", "url": "{{baseUrl}}/v1/organizations", "params": [ { "name": "limit", "value": "", "type": "query", "description": "Number of items (default 20, max 100)" }, { "name": "offset", "value": "", "type": "query", "description": "Offset for pagination (default 0)" } ] }, "docs": "List all organizations for the current user" }, { "info": { "name": "GET /v1/organizations/{orgId}/caddie-memory", "type": "http" }, "http": { "method": "GET", "url": "{{baseUrl}}/v1/organizations/:orgId/caddie-memory", "params": [ { "name": "orgId", "value": "", "type": "path", "description": "Organization ID" }, { "name": "limit", "value": "", "type": "query", "description": "Number of items (default 20, max 100)" }, { "name": "offset", "value": "", "type": "query", "description": "Offset for pagination (default 0)" } ], "body": { "type": "json", "data": "{}" } }, "docs": "List a page of what Caddie remembers about the calling user in this organization (newest first), plus the user's memory enable toggle. Identity is taken from the authenticated session — a user can only see their own memories." }, { "info": { "name": "DELETE /v1/organizations/{orgId}/caddie-memory", "type": "http" }, "http": { "method": "DELETE", "url": "{{baseUrl}}/v1/organizations/:orgId/caddie-memory", "params": [ { "name": "orgId", "value": "", "type": "path", "description": "Organization ID" } ], "body": { "type": "json", "data": "{}" } }, "docs": "Delete ALL memories Caddie holds about the calling user in this organization. The user's enable toggle is preserved." }, { "info": { "name": "PUT /v1/organizations/{orgId}/caddie-memory/org-settings", "type": "http" }, "http": { "method": "PUT", "url": "{{baseUrl}}/v1/organizations/:orgId/caddie-memory/org-settings", "params": [ { "name": "orgId", "value": "", "type": "path", "description": "Organization ID" } ], "body": { "type": "json", "data": "{}" } }, "docs": "Enable or disable Caddie's long-term memory for this organization (admin-only). Memory is disabled by default; while disabled, Caddie does not recall, learn, or store facts for any member of the org." }, { "info": { "name": "PUT /v1/organizations/{orgId}/caddie-memory/settings", "type": "http" }, "http": { "method": "PUT", "url": "{{baseUrl}}/v1/organizations/:orgId/caddie-memory/settings", "params": [ { "name": "orgId", "value": "", "type": "path", "description": "Organization ID" } ], "body": { "type": "json", "data": "{}" } }, "docs": "Enable or disable Caddie's memory of the calling user in this organization. When disabled, Caddie stops recalling, learning, and storing facts about the user." }, { "info": { "name": "PUT /v1/organizations/{orgId}/caddie-memory/{scope}/{key}", "type": "http" }, "http": { "method": "PUT", "url": "{{baseUrl}}/v1/organizations/:orgId/caddie-memory/:scope/:key", "params": [ { "name": "orgId", "value": "", "type": "path", "description": "Organization ID" }, { "name": "scope", "value": "", "type": "path", "description": "Memory scope (profile or notes)" }, { "name": "key", "value": "", "type": "path", "description": "Memory key" } ], "body": { "type": "json", "data": "{}" } }, "docs": "Edit the text of one memory Caddie holds about the calling user in this organization. Update-only — unknown keys return 404." }, { "info": { "name": "DELETE /v1/organizations/{orgId}/caddie-memory/{scope}/{key}", "type": "http" }, "http": { "method": "DELETE", "url": "{{baseUrl}}/v1/organizations/:orgId/caddie-memory/:scope/:key", "params": [ { "name": "orgId", "value": "", "type": "path", "description": "Organization ID" }, { "name": "scope", "value": "", "type": "path", "description": "Memory scope (profile or notes)" }, { "name": "key", "value": "", "type": "path", "description": "Memory key" } ], "body": { "type": "json", "data": "{}" } }, "docs": "Delete one memory Caddie holds about the calling user in this organization." }, { "info": { "name": "POST /v1/organizations/{orgId}/database/query", "type": "http" }, "http": { "method": "POST", "url": "{{baseUrl}}/v1/organizations/:orgId/database/query", "params": [ { "name": "orgId", "value": "", "type": "path", "description": "Organization ID" } ], "body": { "type": "json", "data": "{}" } }, "docs": "Execute SQL query against org's database" }, { "info": { "name": "GET /v1/organizations/{orgId}/database/tables", "type": "http" }, "http": { "method": "GET", "url": "{{baseUrl}}/v1/organizations/:orgId/database/tables", "params": [ { "name": "orgId", "value": "", "type": "path", "description": "Organization ID" } ] }, "docs": "List all tables in the org's database" }, { "info": { "name": "GET /v1/organizations/{orgId}/database/tables/{tableName}", "type": "http" }, "http": { "method": "GET", "url": "{{baseUrl}}/v1/organizations/:orgId/database/tables/:tableName", "params": [ { "name": "orgId", "value": "", "type": "path", "description": "Organization ID" }, { "name": "tableName", "value": "", "type": "path", "description": "Table name" } ] }, "docs": "Get table schema (columns) from the org's database" }, { "info": { "name": "GET /v1/organizations/{orgId}/plan-options", "type": "http" }, "http": { "method": "GET", "url": "{{baseUrl}}/v1/organizations/:orgId/plan-options" }, "docs": "Returns all possible plan transitions with pre-calculated pricing" }, { "info": { "name": "GET /v1/organizations/{orgId}/stripe/billing-details", "type": "http" }, "http": { "method": "GET", "url": "{{baseUrl}}/v1/organizations/:orgId/stripe/billing-details" }, "docs": "Return Stripe payment methods and invoices for an organization" }, { "info": { "name": "POST /v1/organizations/{orgId}/stripe/checkout-sessions", "type": "http" }, "http": { "method": "POST", "url": "{{baseUrl}}/v1/organizations/:orgId/stripe/checkout-sessions", "body": { "type": "json", "data": "{}" } }, "docs": "Create a Stripe Checkout Session" }, { "info": { "name": "DELETE /v1/organizations/{orgId}/stripe/payment-methods/{pmId}", "type": "http" }, "http": { "method": "DELETE", "url": "{{baseUrl}}/v1/organizations/:orgId/stripe/payment-methods/:pmId" }, "docs": "Detach a payment method from the organization's Stripe customer" }, { "info": { "name": "POST /v1/organizations/{orgId}/stripe/setup-intents", "type": "http" }, "http": { "method": "POST", "url": "{{baseUrl}}/v1/organizations/:orgId/stripe/setup-intents" }, "docs": "Create a Stripe SetupIntent for collecting a new payment method" }, { "info": { "name": "POST /v1/organizations/{orgId}/stripe/subscriptions/downgrade", "type": "http" }, "http": { "method": "POST", "url": "{{baseUrl}}/v1/organizations/:orgId/stripe/subscriptions/downgrade", "body": { "type": "json", "data": "{}" } }, "docs": "Downgrade a Stripe subscription (or cancel to free)" }, { "info": { "name": "Preview pro-rated upgrade pricing", "type": "http" }, "http": { "method": "GET", "url": "{{baseUrl}}/v1/organizations/:orgId/stripe/subscriptions/preview-upgrade" }, "docs": "Returns pro-rated amounts for all upgrade-eligible tier+interval combos" }, { "info": { "name": "POST /v1/organizations/{orgId}/stripe/subscriptions/reactivate", "type": "http" }, "http": { "method": "POST", "url": "{{baseUrl}}/v1/organizations/:orgId/stripe/subscriptions/reactivate" }, "docs": "Reactivate a subscription with pending cancellation" }, { "info": { "name": "POST /v1/organizations/{orgId}/stripe/subscriptions/upgrade", "type": "http" }, "http": { "method": "POST", "url": "{{baseUrl}}/v1/organizations/:orgId/stripe/subscriptions/upgrade", "body": { "type": "json", "data": "{}" } }, "docs": "Upgrade a Stripe subscription" }, { "info": { "name": "POST /v1/orgs/{orgId}/integrations/coinbase", "type": "http" }, "http": { "method": "POST", "url": "{{baseUrl}}/v1/orgs/:orgId/integrations/coinbase", "headers": [ { "name": "X-Hook0-Signature", "value": "" } ], "params": [ { "name": "orgId", "value": "", "type": "path", "description": "Organization ID" } ], "body": { "type": "json", "data": "{}" } }, "docs": "Handle Coinbase Business webhook event" }, { "info": { "name": "POST /v1/orgs/{orgId}/integrations/farcaster", "type": "http" }, "http": { "method": "POST", "url": "{{baseUrl}}/v1/orgs/:orgId/integrations/farcaster", "params": [ { "name": "orgId", "value": "", "type": "path", "description": "Organization ID" } ], "body": { "type": "json", "data": "{}" } }, "docs": "Handle Farcaster webhook trigger from Neynar" }, { "info": { "name": "POST /v1/orgs/{orgId}/integrations/pipedream", "type": "http" }, "http": { "method": "POST", "url": "{{baseUrl}}/v1/orgs/:orgId/integrations/pipedream", "params": [ { "name": "orgId", "value": "", "type": "path", "description": "Organization ID" }, { "name": "secret", "value": "", "type": "query", "description": "Webhook secret" } ], "body": { "type": "json", "data": "{}" } }, "docs": "Handle Pipedream trigger source webhook event" }, { "info": { "name": "POST /v1/orgs/{orgId}/integrations/shopify", "type": "http" }, "http": { "method": "POST", "url": "{{baseUrl}}/v1/orgs/:orgId/integrations/shopify", "headers": [ { "name": "X-Shopify-Topic", "value": "" }, { "name": "X-Shopify-Shop-Domain", "value": "" }, { "name": "X-Shopify-Hmac-SHA256", "value": "" } ], "params": [ { "name": "orgId", "value": "", "type": "path", "description": "Organization ID" }, { "name": "secret", "value": "", "type": "query", "description": "Webhook secret" } ], "body": { "type": "json", "data": "{}" } }, "docs": "Handle Shopify webhook event" }, { "info": { "name": "POST /v1/orgs/{orgId}/integrations/stripe", "type": "http" }, "http": { "method": "POST", "url": "{{baseUrl}}/v1/orgs/:orgId/integrations/stripe", "headers": [ { "name": "Stripe-Signature", "value": "" } ], "params": [ { "name": "orgId", "value": "", "type": "path", "description": "Organization ID" }, { "name": "secret", "value": "", "type": "query", "description": "Webhook secret (optional)" } ], "body": { "type": "json", "data": "{}" } }, "docs": "Handle connector-based Stripe webhook event" }, { "info": { "name": "POST /v1/orgs/{orgId}/integrations/telegram", "type": "http" }, "http": { "method": "POST", "url": "{{baseUrl}}/v1/orgs/:orgId/integrations/telegram", "params": [ { "name": "orgId", "value": "", "type": "path", "description": "Organization ID" }, { "name": "secret", "value": "", "type": "query", "description": "Webhook secret" } ], "body": { "type": "json", "data": "{}" } }, "docs": "Handle Telegram webhook update" }, { "info": { "name": "GET /v1/orgs/{orgId}/invites", "type": "http" }, "http": { "method": "GET", "url": "{{baseUrl}}/v1/orgs/:orgId/invites", "params": [ { "name": "orgId", "value": "", "type": "path", "description": "Organization ID" }, { "name": "limit", "value": "", "type": "query", "description": "Number of items (default 20, max 100)" }, { "name": "offset", "value": "", "type": "query", "description": "Offset for pagination (default 0)" } ] }, "docs": "List pending invites for an organization" }, { "info": { "name": "GET /v1/orgs/{orgId}/members", "type": "http" }, "http": { "method": "GET", "url": "{{baseUrl}}/v1/orgs/:orgId/members", "params": [ { "name": "orgId", "value": "", "type": "path", "description": "Organization ID" }, { "name": "limit", "value": "", "type": "query", "description": "Number of items (default 20, max 100)" }, { "name": "offset", "value": "", "type": "query", "description": "Offset for pagination (default 0)" } ] }, "docs": "List all members of an organization" }, { "info": { "name": "GET /v1/pipedream/accounts/{id}", "type": "http" }, "http": { "method": "GET", "url": "{{baseUrl}}/v1/pipedream/accounts/:id", "params": [ { "name": "id", "value": "", "type": "path", "description": "Account ID" } ] }, "docs": "Get a Pipedream account by ID" }, { "info": { "name": "DELETE /v1/pipedream/accounts/{id}", "type": "http" }, "http": { "method": "DELETE", "url": "{{baseUrl}}/v1/pipedream/accounts/:id", "params": [ { "name": "id", "value": "", "type": "path", "description": "Account ID" } ] }, "docs": "Disconnect a Pipedream account" }, { "info": { "name": "GET /v1/pipedream/apps", "type": "http" }, "http": { "method": "GET", "url": "{{baseUrl}}/v1/pipedream/apps", "params": [ { "name": "q", "value": "", "type": "query", "description": "Search query to filter apps" } ] }, "docs": "List available Pipedream apps/integrations" }, { "info": { "name": "GET /v1/pipedream/apps/{app}/actions", "type": "http" }, "http": { "method": "GET", "url": "{{baseUrl}}/v1/pipedream/apps/:app/actions", "params": [ { "name": "app", "value": "", "type": "path", "description": "App slug (e.g., 'twilio', 'google_sheets')" } ] }, "docs": "List available actions for a Pipedream app" }, { "info": { "name": "GET /v1/pipedream/connect-token", "type": "http" }, "http": { "method": "GET", "url": "{{baseUrl}}/v1/pipedream/connect-token" }, "docs": "Get a Pipedream Connect token for the frontend SDK" }, { "info": { "name": "POST /v1/public/contact", "type": "http" }, "http": { "method": "POST", "url": "{{baseUrl}}/v1/public/contact", "body": { "type": "json", "data": "{}" } }, "docs": "Submit the public contact form. Delivers an email to the\nconfigured recipient via the central B3 Notifications API. No\nauth; IP-rate-limited (see configs.contact.rate_limit_per_hour)." }, { "info": { "name": "GET /v1/public/executions/{id}", "type": "http" }, "http": { "method": "GET", "url": "{{baseUrl}}/v1/public/executions/:id", "params": [ { "name": "id", "value": "", "type": "path", "description": "Execution ID" }, { "name": "token", "value": "", "type": "query", "description": "Client token returned when the execution was created" } ] }, "docs": "Get the current status and event timeline for a public execution" }, { "info": { "name": "GET /v1/public/runs/by-tx/{txHash}", "type": "http" }, "http": { "method": "GET", "url": "{{baseUrl}}/v1/public/runs/by-tx/:txHash", "params": [ { "name": "txHash", "value": "", "type": "path", "description": "Transaction Hash" } ] }, "docs": "Find a run by trigger transaction hash (no auth required)" }, { "info": { "name": "GET /v1/public/runs/{id}", "type": "http" }, "http": { "method": "GET", "url": "{{baseUrl}}/v1/public/runs/:id", "params": [ { "name": "id", "value": "", "type": "path", "description": "Run ID" } ] }, "docs": "Get a public run by ID" }, { "info": { "name": "GET /v1/public/workflows/{id}", "type": "http" }, "http": { "method": "GET", "url": "{{baseUrl}}/v1/public/workflows/:id", "params": [ { "name": "id", "value": "", "type": "path", "description": "Workflow ID" }, { "name": "v", "value": "", "type": "query", "description": "Workflow version" } ] }, "docs": "Get a public workflow by visibility" }, { "info": { "name": "POST /v1/public/workflows/{id}/executions", "type": "http" }, "http": { "method": "POST", "url": "{{baseUrl}}/v1/public/workflows/:id/executions", "params": [ { "name": "id", "value": "", "type": "path", "description": "Workflow ID" } ], "body": { "type": "json", "data": "{}" } }, "docs": "Create a client-trackable execution session for a public_execute workflow" }, { "info": { "name": "GET /v1/public/workflows/{id}/meta", "type": "http" }, "http": { "method": "GET", "url": "{{baseUrl}}/v1/public/workflows/:id/meta", "params": [ { "name": "id", "value": "", "type": "path", "description": "Workflow ID" } ] }, "docs": "Get public metadata (name, description) for a workflow.\nNo auth required — intentionally unauthenticated for OG image generation.\nOnly returns title and description; no sensitive data is exposed." }, { "info": { "name": "POST /v1/public/workflows/{id}/run", "type": "http" }, "http": { "method": "POST", "url": "{{baseUrl}}/v1/public/workflows/:id/run", "params": [ { "name": "id", "value": "", "type": "path", "description": "Workflow ID" } ], "body": { "type": "json", "data": "{}" } }, "docs": "Trigger a run for a public_execute workflow" }, { "info": { "name": "GET /v1/public/workflows/{id}/runs", "type": "http" }, "http": { "method": "GET", "url": "{{baseUrl}}/v1/public/workflows/:id/runs", "params": [ { "name": "id", "value": "", "type": "path", "description": "Workflow ID" }, { "name": "limit", "value": "", "type": "query", "description": "Number of items (default 20, max 100)" }, { "name": "offset", "value": "", "type": "query", "description": "Offset for pagination (default 0)" } ] }, "docs": "List runs for a public workflow" }, { "info": { "name": "GET /v1/public/workflows/{id}/widget", "type": "http" }, "http": { "method": "GET", "url": "{{baseUrl}}/v1/public/workflows/:id/widget", "params": [ { "name": "id", "value": "", "type": "path", "description": "Workflow ID" } ] }, "docs": "Get public widget configuration for a workflow (no auth required)" }, { "info": { "name": "GET /v1/runs", "type": "http" }, "http": { "method": "GET", "url": "{{baseUrl}}/v1/runs", "params": [ { "name": "limit", "value": "", "type": "query", "description": "Number of items (default 20, max 100)" }, { "name": "offset", "value": "", "type": "query", "description": "Offset for pagination (default 0)" }, { "name": "status", "value": "", "type": "query", "description": "Filter by run status (running, waiting, success, partial, failure, cancelled)" } ] }, "docs": "List all runs" }, { "info": { "name": "POST /v1/runs", "type": "http" }, "http": { "method": "POST", "url": "{{baseUrl}}/v1/runs", "body": { "type": "json", "data": "{}" } }, "docs": "Execute an inline workflow definition (ephemeral run). The definition must use \"manual\" trigger type. No workflow is saved — the definition is executed once and the run is recorded with workflowId=\"\". Requires WorkflowCreate permission." }, { "info": { "name": "GET /v1/runs/status-counts", "type": "http" }, "http": { "method": "GET", "url": "{{baseUrl}}/v1/runs/status-counts", "params": [ { "name": "since", "value": "", "type": "query", "description": "RFC3339 timestamp; only count runs with startedAt >= since" } ] }, "docs": "Count all runs in the caller's organization, grouped by status. Optional since (RFC3339) restricts to runs started at or after that instant." }, { "info": { "name": "GET /v1/runs/status-counts/by-workflow", "type": "http" }, "http": { "method": "GET", "url": "{{baseUrl}}/v1/runs/status-counts/by-workflow", "params": [ { "name": "since", "value": "", "type": "query", "description": "RFC3339 timestamp; only count runs with startedAt >= since" } ] }, "docs": "Count runs in the caller's organization grouped by workflow and status, sorted by total runs descending. Optional since (RFC3339) restricts to runs started at or after that instant." }, { "info": { "name": "GET /v1/runs/{id}", "type": "http" }, "http": { "method": "GET", "url": "{{baseUrl}}/v1/runs/:id", "params": [ { "name": "id", "value": "", "type": "path", "description": "Run ID" }, { "name": "summary", "value": "", "type": "query", "description": "Set to 'true' to omit ExecutionState and WorkflowDefinition for a lighter payload." }, { "name": "nodeIds", "value": "", "type": "query", "description": "Comma-separated node IDs to include in ExecutionState (returns only those nodes)." } ] }, "docs": "Get a specific run by ID" }, { "info": { "name": "POST /v1/runs/{id}/cancel", "type": "http" }, "http": { "method": "POST", "url": "{{baseUrl}}/v1/runs/:id/cancel", "params": [ { "name": "id", "value": "", "type": "path", "description": "Run ID" } ] }, "docs": "Cancel a running or waiting run" }, { "info": { "name": "POST /v1/runs/{id}/nodes/{nodeId}/resume", "type": "http" }, "http": { "method": "POST", "url": "{{baseUrl}}/v1/runs/:id/nodes/:nodeId/resume", "params": [ { "name": "id", "value": "", "type": "path", "description": "Run ID" }, { "name": "nodeId", "value": "", "type": "path", "description": "Node ID" }, { "name": "secret", "value": "", "type": "query", "description": "Per-workflow webhook secret" } ], "body": { "type": "json", "data": "{}" } }, "docs": "Resume a waiting node in a workflow run" }, { "info": { "name": "POST /v1/runs/{id}/retry", "type": "http" }, "http": { "method": "POST", "url": "{{baseUrl}}/v1/runs/:id/retry", "params": [ { "name": "id", "value": "", "type": "path", "description": "Run ID" } ] }, "docs": "Retry a failed or cancelled run from its failure point" }, { "info": { "name": "GET /v1/service-accounts", "type": "http" }, "http": { "method": "GET", "url": "{{baseUrl}}/v1/service-accounts", "params": [ { "name": "limit", "value": "", "type": "query", "description": "Number of items (default 20, max 100)" }, { "name": "offset", "value": "", "type": "query", "description": "Offset for pagination (default 0)" } ] }, "docs": "List service accounts for the current organization" }, { "info": { "name": "POST /v1/service-accounts", "type": "http" }, "http": { "method": "POST", "url": "{{baseUrl}}/v1/service-accounts", "body": { "type": "json", "data": "{}" } }, "docs": "Create a service account for the current organization" }, { "info": { "name": "GET /v1/service-accounts/{id}", "type": "http" }, "http": { "method": "GET", "url": "{{baseUrl}}/v1/service-accounts/:id", "params": [ { "name": "id", "value": "", "type": "path", "description": "Service account ID" } ] }, "docs": "Get a single service account by ID" }, { "info": { "name": "PATCH /v1/service-accounts/{id}", "type": "http" }, "http": { "method": "PATCH", "url": "{{baseUrl}}/v1/service-accounts/:id", "params": [ { "name": "id", "value": "", "type": "path", "description": "Service account ID" } ], "body": { "type": "json", "data": "{}" } }, "docs": "Update a service account's name, description, and permissions" }, { "info": { "name": "DELETE /v1/service-accounts/{id}", "type": "http" }, "http": { "method": "DELETE", "url": "{{baseUrl}}/v1/service-accounts/:id", "params": [ { "name": "id", "value": "", "type": "path", "description": "Service account ID" } ] }, "docs": "Permanently delete a service account. Any active API keys\nowned by the account are revoked before the account is removed." }, { "info": { "name": "POST /v1/service-accounts/{id}/disable", "type": "http" }, "http": { "method": "POST", "url": "{{baseUrl}}/v1/service-accounts/:id/disable", "params": [ { "name": "id", "value": "", "type": "path", "description": "Service account ID" } ] }, "docs": "Disable a service account" }, { "info": { "name": "POST /v1/service-accounts/{id}/enable", "type": "http" }, "http": { "method": "POST", "url": "{{baseUrl}}/v1/service-accounts/:id/enable", "params": [ { "name": "id", "value": "", "type": "path", "description": "Service account ID" } ] }, "docs": "Enable a service account" }, { "info": { "name": "List / search the situation coverage universe", "type": "http" }, "http": { "method": "GET", "url": "{{baseUrl}}/v1/situation/universe", "params": [ { "name": "q", "value": "", "type": "query", "description": "Search query (ranked). When omitted, returns the rank-ordered listing." }, { "name": "asset_class", "value": "", "type": "query", "description": "Filter listing by asset class (equity | crypto | index)" }, { "name": "limit", "value": "", "type": "query", "description": "Limit (default 20, max 100)" }, { "name": "offset", "value": "", "type": "query", "description": "Offset (default 0, listing only)" } ] }, "docs": "Available tickers (and ticker search) covered by situation-monitor, for the Situation trigger's ticker filter" }, { "info": { "name": "List verified phone numbers", "type": "http" }, "http": { "method": "GET", "url": "{{baseUrl}}/v1/sms/numbers", "params": [ { "name": "q", "value": "", "type": "query", "description": "Search query" }, { "name": "limit", "value": "", "type": "query", "description": "Limit (default 20, max 100)" }, { "name": "offset", "value": "", "type": "query", "description": "Offset (default 0)" } ] }, "docs": "List verified phone numbers for the organization" }, { "info": { "name": "Initiate phone number verification via outbound message", "type": "http" }, "http": { "method": "POST", "url": "{{baseUrl}}/v1/sms/numbers/initiate-verify", "body": { "type": "json", "data": "{}" } }, "docs": "Generates a verification code for the user to text to the B3OS phone number" }, { "info": { "name": "Send a verification code to a phone number", "type": "http" }, "http": { "method": "POST", "url": "{{baseUrl}}/v1/sms/numbers/send-code", "body": { "type": "json", "data": "{}" } }, "docs": "Sends a one-time verification code via iMessage or SMS to the given phone number" }, { "info": { "name": "Verify a phone number for iMessage/SMS messaging", "type": "http" }, "http": { "method": "POST", "url": "{{baseUrl}}/v1/sms/numbers/verify", "body": { "type": "json", "data": "{}" } }, "docs": "Validates the OTP code sent to the phone number and registers it for use" }, { "info": { "name": "Check phone number verification status", "type": "http" }, "http": { "method": "GET", "url": "{{baseUrl}}/v1/sms/numbers/verify-status", "params": [ { "name": "phoneNumber", "value": "", "type": "query", "description": "Phone number in E.164 format" } ] }, "docs": "Polls whether a phone number has been verified via inbound message" }, { "info": { "name": "Delete a verified phone number", "type": "http" }, "http": { "method": "DELETE", "url": "{{baseUrl}}/v1/sms/numbers/:id", "params": [ { "name": "id", "value": "", "type": "path", "description": "Verified number ID" } ] }, "docs": "Removes a verified phone number from the organization" }, { "info": { "name": "GET /v1/statistics", "type": "http" }, "http": { "method": "GET", "url": "{{baseUrl}}/v1/statistics" }, "docs": "Get cumulative statistics for all nodes (actions + triggers)" }, { "info": { "name": "GET /v1/statistics/action/{id}/latency", "type": "http" }, "http": { "method": "GET", "url": "{{baseUrl}}/v1/statistics/action/:id/latency", "params": [ { "name": "id", "value": "", "type": "path", "description": "Action ID" }, { "name": "from", "value": "", "type": "query", "description": "Start timestamp (Unix milliseconds)" }, { "name": "to", "value": "", "type": "query", "description": "End timestamp (Unix milliseconds)" }, { "name": "granularity", "value": "", "type": "query", "description": "Granularity (hourly or daily)" } ] }, "docs": "Get latency time-series data for a specific action" }, { "info": { "name": "GET /v1/statistics/{type}/{id}/usage", "type": "http" }, "http": { "method": "GET", "url": "{{baseUrl}}/v1/statistics/:type/:id/usage", "params": [ { "name": "type", "value": "", "type": "path", "description": "Node type (action or trigger)" }, { "name": "id", "value": "", "type": "path", "description": "Node ID" }, { "name": "from", "value": "", "type": "query", "description": "Start timestamp (Unix milliseconds)" }, { "name": "to", "value": "", "type": "query", "description": "End timestamp (Unix milliseconds)" }, { "name": "granularity", "value": "", "type": "query", "description": "Granularity (hourly or daily)" } ] }, "docs": "Get usage time-series data for a specific node" }, { "info": { "name": "GET /v1/telegram-bot/chats", "type": "http" }, "http": { "method": "GET", "url": "{{baseUrl}}/v1/telegram-bot/chats", "params": [ { "name": "q", "value": "", "type": "query", "description": "Search query" }, { "name": "limit", "value": "", "type": "query", "description": "Limit (default 20, max 100)" }, { "name": "offset", "value": "", "type": "query", "description": "Offset (default 0)" } ] }, "docs": "List verified Telegram chats for organization" }, { "info": { "name": "POST /v1/telegram-bot/pins", "type": "http" }, "http": { "method": "POST", "url": "{{baseUrl}}/v1/telegram-bot/pins" }, "docs": "Generate a PIN for Telegram chat verification" }, { "info": { "name": "GET /v1/telegram-bot/pins/{pin}/status", "type": "http" }, "http": { "method": "GET", "url": "{{baseUrl}}/v1/telegram-bot/pins/:pin/status", "params": [ { "name": "pin", "value": "", "type": "path", "description": "6-digit PIN" } ] }, "docs": "Check Telegram PIN verification status" }, { "info": { "name": "GET /v1/templates", "type": "http" }, "http": { "method": "GET", "url": "{{baseUrl}}/v1/templates", "params": [ { "name": "category", "value": "", "type": "query", "description": "Template category (promoted, public, org, all)" }, { "name": "tags", "value": "", "type": "query", "description": "Tag slugs to filter by (can specify multiple)" }, { "name": "limit", "value": "", "type": "query", "description": "Number of items (default 20, max 100)" }, { "name": "offset", "value": "", "type": "query", "description": "Offset for pagination (default 0)" } ] }, "docs": "List templates by category and tags" }, { "info": { "name": "POST /v1/templates", "type": "http" }, "http": { "method": "POST", "url": "{{baseUrl}}/v1/templates", "body": { "type": "json", "data": "{}" } }, "docs": "Create a new workflow template" }, { "info": { "name": "GET /v1/templates/by-source-workflow/{workflowId}", "type": "http" }, "http": { "method": "GET", "url": "{{baseUrl}}/v1/templates/by-source-workflow/:workflowId", "params": [ { "name": "workflowId", "value": "", "type": "path", "description": "Source workflow ID" } ] }, "docs": "Get template by source workflow ID. Returns 200 with null data when no template exists for the workflow." }, { "info": { "name": "DELETE /v1/templates/{id}", "type": "http" }, "http": { "method": "DELETE", "url": "{{baseUrl}}/v1/templates/:id", "params": [ { "name": "id", "value": "", "type": "path", "description": "Template ID" } ] }, "docs": "Delete a template (admin only)" }, { "info": { "name": "PUT /v1/templates/{id}/promote", "type": "http" }, "http": { "method": "PUT", "url": "{{baseUrl}}/v1/templates/:id/promote", "params": [ { "name": "id", "value": "", "type": "path", "description": "Template ID" } ] }, "docs": "Promote a template (admin only)" }, { "info": { "name": "PUT /v1/templates/{id}/unpromote", "type": "http" }, "http": { "method": "PUT", "url": "{{baseUrl}}/v1/templates/:id/unpromote", "params": [ { "name": "id", "value": "", "type": "path", "description": "Template ID" } ] }, "docs": "Unpromote a template (admin only)" }, { "info": { "name": "PATCH /v1/templates/{templateId}", "type": "http" }, "http": { "method": "PATCH", "url": "{{baseUrl}}/v1/templates/:templateId", "params": [ { "name": "templateId", "value": "", "type": "path", "description": "Template ID" } ], "body": { "type": "json", "data": "{}" } }, "docs": "Update an existing workflow template" }, { "info": { "name": "POST /v1/templates/{templateId}/rollback", "type": "http" }, "http": { "method": "POST", "url": "{{baseUrl}}/v1/templates/:templateId/rollback", "params": [ { "name": "templateId", "value": "", "type": "path", "description": "Template ID" } ], "body": { "type": "json", "data": "{}" } }, "docs": "Rollback template to a previous version" }, { "info": { "name": "GET /v1/templates/{templateId}/versions", "type": "http" }, "http": { "method": "GET", "url": "{{baseUrl}}/v1/templates/:templateId/versions", "params": [ { "name": "templateId", "value": "", "type": "path", "description": "Template ID" }, { "name": "limit", "value": "", "type": "query", "description": "Number of items (default 20, max 100)" }, { "name": "offset", "value": "", "type": "query", "description": "Offset for pagination (default 0)" } ], "body": { "type": "json", "data": "{}" } }, "docs": "List all versions of a template" }, { "info": { "name": "GET /v1/templates/{templateId}/versions/count", "type": "http" }, "http": { "method": "GET", "url": "{{baseUrl}}/v1/templates/:templateId/versions/count", "params": [ { "name": "templateId", "value": "", "type": "path", "description": "Template ID" } ] }, "docs": "Count total versions for a specific template" }, { "info": { "name": "GET /v1/templates/{templateId}/versions/{versionNumber}", "type": "http" }, "http": { "method": "GET", "url": "{{baseUrl}}/v1/templates/:templateId/versions/:versionNumber", "params": [ { "name": "templateId", "value": "", "type": "path", "description": "Template ID" }, { "name": "versionNumber", "value": "", "type": "path", "description": "Version number" } ] }, "docs": "Get a specific version of a template by version number" }, { "info": { "name": "GET /v1/tiers", "type": "http" }, "http": { "method": "GET", "url": "{{baseUrl}}/v1/tiers" }, "docs": "List all subscription tiers" }, { "info": { "name": "GET /v1/token-price-cexes/available-assets", "type": "http" }, "http": { "method": "GET", "url": "{{baseUrl}}/v1/token-price-cexes/available-assets" }, "docs": "Get available assets for token price (CEXes)" }, { "info": { "name": "GET /v1/token-price-cexes/latest", "type": "http" }, "http": { "method": "GET", "url": "{{baseUrl}}/v1/token-price-cexes/latest", "params": [ { "name": "assets", "value": "", "type": "query", "description": "Comma-separated list of assets" } ] }, "docs": "Get latest prices for specified assets" }, { "info": { "name": "GET /v1/triggers/{type}", "type": "http" }, "http": { "method": "GET", "url": "{{baseUrl}}/v1/triggers/:type", "params": [ { "name": "type", "value": "", "type": "path", "description": "Trigger type" } ] }, "docs": "Get a trigger definition by type" }, { "info": { "name": "POST /v1/webhook-events/{eventId}/replay", "type": "http" }, "http": { "method": "POST", "url": "{{baseUrl}}/v1/webhook-events/:eventId/replay", "params": [ { "name": "eventId", "value": "", "type": "path", "description": "Webhook Event ID" } ], "body": { "type": "json", "data": "{}" } }, "docs": "Replay a webhook event by re-processing its stored payload" }, { "info": { "name": "POST /v1/webhook/situation", "type": "http" }, "http": { "method": "POST", "url": "{{baseUrl}}/v1/webhook/situation", "body": { "type": "json", "data": "{}" } }, "docs": "Handle situation-monitor webhook trigger (situation.created)" }, { "info": { "name": "GET /v1/workflows", "type": "http" }, "http": { "method": "GET", "url": "{{baseUrl}}/v1/workflows", "params": [ { "name": "limit", "value": "", "type": "query", "description": "Number of items (default 20, max 100)" }, { "name": "offset", "value": "", "type": "query", "description": "Offset for pagination (default 0)" }, { "name": "q", "value": "", "type": "query", "description": "Search in name + description (ILIKE, max 256 chars)" }, { "name": "status", "value": "", "type": "query", "description": "Filter by status (active|paused|draft|archived)" }, { "name": "type", "value": "", "type": "query", "description": "Filter by trigger type" }, { "name": "actions", "value": "", "type": "query", "description": "Filter by node types (any-match, max 50). Repeat or comma-join." }, { "name": "connectors", "value": "", "type": "query", "description": "Filter by connector types (any-match, max 50). Repeat or comma-join." }, { "name": "sort", "value": "", "type": "query", "description": "Sort: updatedAt:desc (default) | name:asc | createdAt:desc | runs:desc" }, { "name": "owner", "value": "", "type": "query", "description": "Owner scope: yours | org | public" }, { "name": "madeByMe", "value": "", "type": "query", "description": "Restrict to workflows created_by the caller" } ] }, "docs": "Get all workflows" }, { "info": { "name": "POST /v1/workflows", "type": "http" }, "http": { "method": "POST", "url": "{{baseUrl}}/v1/workflows", "body": { "type": "json", "data": "{}" } }, "docs": "Create a new workflow" }, { "info": { "name": "POST /v1/workflows/analyze-funds", "type": "http" }, "http": { "method": "POST", "url": "{{baseUrl}}/v1/workflows/analyze-funds", "body": { "type": "json", "data": "{}" } }, "docs": "Analyze the fund requirements of an inline workflow definition without saving or executing it. Same response shape as the workflow-scoped variant, with `workflowId` empty. Read-only — does not consume CU." }, { "info": { "name": "GET /v1/workflows/counts", "type": "http" }, "http": { "method": "GET", "url": "{{baseUrl}}/v1/workflows/counts", "params": [ { "name": "q", "value": "", "type": "query", "description": "Search in name + description (ILIKE, max 256 chars)" }, { "name": "type", "value": "", "type": "query", "description": "Filter by trigger type" }, { "name": "actions", "value": "", "type": "query", "description": "Filter by node types (any-match, max 50)" }, { "name": "connectors", "value": "", "type": "query", "description": "Filter by connector types (any-match, max 50)" }, { "name": "owner", "value": "", "type": "query", "description": "Owner scope: yours | org | public" }, { "name": "madeByMe", "value": "", "type": "query", "description": "Restrict to workflows created_by the caller" } ] }, "docs": "Get workflow counts grouped by status (filter-aware)." }, { "info": { "name": "GET /v1/workflows/owner-counts", "type": "http" }, "http": { "method": "GET", "url": "{{baseUrl}}/v1/workflows/owner-counts" }, "docs": "Get workflow counts grouped by owner scope (yours/org/public)." }, { "info": { "name": "POST /v1/workflows/validate", "type": "http" }, "http": { "method": "POST", "url": "{{baseUrl}}/v1/workflows/validate", "body": { "type": "json", "data": "{}" } }, "docs": "Validate a workflow definition without saving" }, { "info": { "name": "GET /v1/workflows/{id}", "type": "http" }, "http": { "method": "GET", "url": "{{baseUrl}}/v1/workflows/:id", "params": [ { "name": "id", "value": "", "type": "path", "description": "Workflow ID" } ] }, "docs": "Get a workflow by ID" }, { "info": { "name": "PUT /v1/workflows/{id}", "type": "http" }, "http": { "method": "PUT", "url": "{{baseUrl}}/v1/workflows/:id", "params": [ { "name": "id", "value": "", "type": "path", "description": "Workflow ID" } ], "body": { "type": "json", "data": "{}" } }, "docs": "Update a workflow. A content change creates a new draft version (workflows are immutable); an update whose content matches the current version is a no-op that returns the current version unchanged." }, { "info": { "name": "DELETE /v1/workflows/{id}", "type": "http" }, "http": { "method": "DELETE", "url": "{{baseUrl}}/v1/workflows/:id", "params": [ { "name": "id", "value": "", "type": "path", "description": "Workflow ID" } ], "body": { "type": "json", "data": "{}" } }, "docs": "Archive a workflow (soft delete)" }, { "info": { "name": "GET /v1/workflows/{id}/analyze-funds", "type": "http" }, "http": { "method": "GET", "url": "{{baseUrl}}/v1/workflows/:id/analyze-funds", "params": [ { "name": "id", "value": "", "type": "path", "description": "Workflow ID" }, { "name": "version", "value": "", "type": "query", "description": "Pin analysis to a specific workflow version" } ] }, "docs": "Analyze the fund requirements of a workflow without executing it. Returns resolved (wallet, chain, token, amount) tuples for every action that moves money, plus a `balance` row per requirement when the SimDune client is configured. The endpoint is read-only and does not consume CU." }, { "info": { "name": "GET /v1/workflows/{id}/draft", "type": "http" }, "http": { "method": "GET", "url": "{{baseUrl}}/v1/workflows/:id/draft", "params": [ { "name": "id", "value": "", "type": "path", "description": "Workflow ID" } ] }, "docs": "Get the draft version of a workflow" }, { "info": { "name": "DELETE /v1/workflows/{id}/draft", "type": "http" }, "http": { "method": "DELETE", "url": "{{baseUrl}}/v1/workflows/:id/draft", "params": [ { "name": "id", "value": "", "type": "path", "description": "Workflow ID" } ] }, "docs": "Discard the draft version of a workflow" }, { "info": { "name": "PUT /v1/workflows/{id}/fund-auto-swap", "type": "http" }, "http": { "method": "PUT", "url": "{{baseUrl}}/v1/workflows/:id/fund-auto-swap", "params": [ { "name": "id", "value": "", "type": "path", "description": "Workflow ID" } ], "body": { "type": "json", "data": "{}" } }, "docs": "Update workflow fund auto-swap configuration" }, { "info": { "name": "GET /v1/workflows/{id}/incoming-links", "type": "http" }, "http": { "method": "GET", "url": "{{baseUrl}}/v1/workflows/:id/incoming-links", "params": [ { "name": "id", "value": "", "type": "path", "description": "Workflow ID" } ] }, "docs": "List workflows that target this workflow via a `trigger-workflow` action node." }, { "info": { "name": "GET /v1/workflows/{id}/live", "type": "http" }, "http": { "method": "GET", "url": "{{baseUrl}}/v1/workflows/:id/live", "params": [ { "name": "id", "value": "", "type": "path", "description": "Workflow ID" } ] }, "docs": "Get the live (active/paused) version of a workflow" }, { "info": { "name": "PUT /v1/workflows/{id}/owner", "type": "http" }, "http": { "method": "PUT", "url": "{{baseUrl}}/v1/workflows/:id/owner", "params": [ { "name": "id", "value": "", "type": "path", "description": "Workflow ID" } ], "body": { "type": "json", "data": "{}" } }, "docs": "Transfer workflow ownership to another organization member" }, { "info": { "name": "POST /v1/workflows/{id}/pause", "type": "http" }, "http": { "method": "POST", "url": "{{baseUrl}}/v1/workflows/:id/pause", "params": [ { "name": "id", "value": "", "type": "path", "description": "Workflow ID" } ], "body": { "type": "json", "data": "{}" } }, "docs": "Pause a workflow" }, { "info": { "name": "POST /v1/workflows/{id}/publish", "type": "http" }, "http": { "method": "POST", "url": "{{baseUrl}}/v1/workflows/:id/publish", "params": [ { "name": "id", "value": "", "type": "path", "description": "Workflow ID" } ], "body": { "type": "json", "data": "{}" } }, "docs": "Publish a draft workflow (validates cronjob intervals, activates)" }, { "info": { "name": "POST /v1/workflows/{id}/refill", "type": "http" }, "http": { "method": "POST", "url": "{{baseUrl}}/v1/workflows/:id/refill", "params": [ { "name": "id", "value": "", "type": "path", "description": "Workflow ID" } ], "body": { "type": "json", "data": "{}" } }, "docs": "Refill remaining runs for a workflow" }, { "info": { "name": "POST /v1/workflows/{id}/regenerate-descriptions", "type": "http" }, "http": { "method": "POST", "url": "{{baseUrl}}/v1/workflows/:id/regenerate-descriptions", "params": [ { "name": "id", "value": "", "type": "path", "description": "Workflow ID" } ] }, "docs": "Regenerate AI descriptions for a workflow" }, { "info": { "name": "POST /v1/workflows/{id}/release", "type": "http" }, "http": { "method": "POST", "url": "{{baseUrl}}/v1/workflows/:id/release", "params": [ { "name": "id", "value": "", "type": "path", "description": "Workflow ID" } ], "body": { "type": "json", "data": "{}" } }, "docs": "Publish a workflow and its generated app together as one release" }, { "info": { "name": "GET /v1/workflows/{id}/releases", "type": "http" }, "http": { "method": "GET", "url": "{{baseUrl}}/v1/workflows/:id/releases", "params": [ { "name": "id", "value": "", "type": "path", "description": "Workflow ID" }, { "name": "limit", "value": "", "type": "query", "description": "Page size" }, { "name": "offset", "value": "", "type": "query", "description": "Page offset" } ] }, "docs": "List the release history of a workflow (newest first)" }, { "info": { "name": "POST /v1/workflows/{id}/releases/{releaseVersion}/revert", "type": "http" }, "http": { "method": "POST", "url": "{{baseUrl}}/v1/workflows/:id/releases/:releaseVersion/revert", "params": [ { "name": "id", "value": "", "type": "path", "description": "Workflow ID" }, { "name": "releaseVersion", "value": "", "type": "path", "description": "Release version to revert to" } ] }, "docs": "Revert a workflow to a prior release (workflow + generated app)" }, { "info": { "name": "POST /v1/workflows/{id}/resume", "type": "http" }, "http": { "method": "POST", "url": "{{baseUrl}}/v1/workflows/:id/resume", "params": [ { "name": "id", "value": "", "type": "path", "description": "Workflow ID" } ], "body": { "type": "json", "data": "{}" } }, "docs": "Resume a paused workflow" }, { "info": { "name": "POST /v1/workflows/{id}/revert-to-version", "type": "http" }, "http": { "method": "POST", "url": "{{baseUrl}}/v1/workflows/:id/revert-to-version", "params": [ { "name": "id", "value": "", "type": "path", "description": "Workflow ID" } ], "body": { "type": "json", "data": "{}" } }, "docs": "Revert a workflow to a prior workflow version (records a release with no app)" }, { "info": { "name": "POST /v1/workflows/{id}/rollback", "type": "http" }, "http": { "method": "POST", "url": "{{baseUrl}}/v1/workflows/:id/rollback", "params": [ { "name": "id", "value": "", "type": "path", "description": "Workflow ID" } ], "body": { "type": "json", "data": "{}" } }, "docs": "Rollback workflow to a previous version" }, { "info": { "name": "POST /v1/workflows/{id}/run", "type": "http" }, "http": { "method": "POST", "url": "{{baseUrl}}/v1/workflows/:id/run", "params": [ { "name": "id", "value": "", "type": "path", "description": "Workflow ID" } ], "body": { "type": "json", "data": "{}" } }, "docs": "Run a workflow with optional payload. Works for draft, active, and paused workflows. Does not count against maxRuns or enforce cooldown." }, { "info": { "name": "GET /v1/workflows/{id}/runs", "type": "http" }, "http": { "method": "GET", "url": "{{baseUrl}}/v1/workflows/:id/runs", "params": [ { "name": "id", "value": "", "type": "path", "description": "Workflow ID" }, { "name": "limit", "value": "", "type": "query", "description": "Number of items (default 20, max 100)" }, { "name": "offset", "value": "", "type": "query", "description": "Offset for pagination (default 0)" }, { "name": "status", "value": "", "type": "query", "description": "Filter by run status (running, waiting, success, partial, failure, cancelled)" } ] }, "docs": "List all runs for a specific workflow" }, { "info": { "name": "GET /v1/workflows/{id}/runs/count", "type": "http" }, "http": { "method": "GET", "url": "{{baseUrl}}/v1/workflows/:id/runs/count", "params": [ { "name": "id", "value": "", "type": "path", "description": "Workflow ID" } ] }, "docs": "Count runs for a specific workflow, grouped by status" }, { "info": { "name": "GET /v1/workflows/{id}/schedule", "type": "http" }, "http": { "method": "GET", "url": "{{baseUrl}}/v1/workflows/:id/schedule", "params": [ { "name": "id", "value": "", "type": "path", "description": "Workflow ID" } ] }, "docs": "Get next run time for a scheduled workflow" }, { "info": { "name": "GET /v1/workflows/{id}/trigger-aggregates", "type": "http" }, "http": { "method": "GET", "url": "{{baseUrl}}/v1/workflows/:id/trigger-aggregates", "params": [ { "name": "id", "value": "", "type": "path", "description": "Workflow ID" } ] }, "docs": "Per-trigger run aggregates (last fired, run count, success / failure breakdown, next fire preview) for a workflow" }, { "info": { "name": "GET /v1/workflows/{id}/trigger-info", "type": "http" }, "http": { "method": "GET", "url": "{{baseUrl}}/v1/workflows/:id/trigger-info", "params": [ { "name": "id", "value": "", "type": "path", "description": "Workflow ID" } ] }, "docs": "Get trigger info (e.g. Pipedream email address) for a workflow" }, { "info": { "name": "PATCH /v1/workflows/{id}/ui-metadata", "type": "http" }, "http": { "method": "PATCH", "url": "{{baseUrl}}/v1/workflows/:id/ui-metadata", "params": [ { "name": "id", "value": "", "type": "path", "description": "Workflow ID" } ], "body": { "type": "json", "data": "{}" } }, "docs": "Update workflow UI metadata (node positions) in-place" }, { "info": { "name": "POST /v1/workflows/{id}/unarchive", "type": "http" }, "http": { "method": "POST", "url": "{{baseUrl}}/v1/workflows/:id/unarchive", "params": [ { "name": "id", "value": "", "type": "path", "description": "Workflow ID" } ], "body": { "type": "json", "data": "{}" } }, "docs": "Unarchive a workflow — restores the latest archived version\nto the draft state so it can be edited and re-published." }, { "info": { "name": "GET /v1/workflows/{id}/versions", "type": "http" }, "http": { "method": "GET", "url": "{{baseUrl}}/v1/workflows/:id/versions", "params": [ { "name": "id", "value": "", "type": "path", "description": "Workflow ID (any version)" }, { "name": "limit", "value": "", "type": "query", "description": "Number of items (default 20, max 100)" }, { "name": "offset", "value": "", "type": "query", "description": "Offset for pagination (default 0)" } ], "body": { "type": "json", "data": "{}" } }, "docs": "List all versions of a workflow" }, { "info": { "name": "GET /v1/workflows/{id}/versions/count", "type": "http" }, "http": { "method": "GET", "url": "{{baseUrl}}/v1/workflows/:id/versions/count", "params": [ { "name": "id", "value": "", "type": "path", "description": "Workflow ID" } ] }, "docs": "Count total versions for a specific workflow" }, { "info": { "name": "GET /v1/workflows/{id}/versions/{versionNumber}", "type": "http" }, "http": { "method": "GET", "url": "{{baseUrl}}/v1/workflows/:id/versions/:versionNumber", "params": [ { "name": "id", "value": "", "type": "path", "description": "Workflow ID" }, { "name": "versionNumber", "value": "", "type": "path", "description": "Version number" } ] }, "docs": "Get a specific version of a workflow by version number" }, { "info": { "name": "PUT /v1/workflows/{id}/visibility", "type": "http" }, "http": { "method": "PUT", "url": "{{baseUrl}}/v1/workflows/:id/visibility", "params": [ { "name": "id", "value": "", "type": "path", "description": "Workflow ID" } ], "body": { "type": "json", "data": "{}" } }, "docs": "Update workflow visibility level" }, { "info": { "name": "POST /v1/workflows/{id}/widget", "type": "http" }, "http": { "method": "POST", "url": "{{baseUrl}}/v1/workflows/:id/widget", "params": [ { "name": "id", "value": "", "type": "path", "description": "Workflow ID" } ], "body": { "type": "json", "data": "{}" } }, "docs": "Enable public widget for a workflow" }, { "info": { "name": "DELETE /v1/workflows/{id}/widget", "type": "http" }, "http": { "method": "DELETE", "url": "{{baseUrl}}/v1/workflows/:id/widget", "params": [ { "name": "id", "value": "", "type": "path", "description": "Workflow ID" } ], "body": { "type": "json", "data": "{}" } }, "docs": "Disable public widget for a workflow" }, { "info": { "name": "GET /v1/x402-endpoints", "type": "http" }, "http": { "method": "GET", "url": "{{baseUrl}}/v1/x402-endpoints", "params": [ { "name": "category", "value": "", "type": "query", "description": "Filter by category" }, { "name": "search", "value": "", "type": "query", "description": "Search in name and description" }, { "name": "limit", "value": "", "type": "query", "description": "Limit (default 20, max 100)" }, { "name": "offset", "value": "", "type": "query", "description": "Offset for pagination" } ], "body": { "type": "json", "data": "{}" } }, "docs": "List all public x402 endpoints" }, { "info": { "name": "POST /v1/x402-endpoints", "type": "http" }, "http": { "method": "POST", "url": "{{baseUrl}}/v1/x402-endpoints", "body": { "type": "json", "data": "{}" } }, "docs": "Create (import) a new x402 endpoint after successful test" }, { "info": { "name": "GET /v1/x402-endpoints/by-url", "type": "http" }, "http": { "method": "GET", "url": "{{baseUrl}}/v1/x402-endpoints/by-url", "params": [ { "name": "url", "value": "", "type": "query", "description": "Resource URL to check" } ], "body": { "type": "json", "data": "{}" } }, "docs": "Check if an x402 endpoint exists by URL" }, { "info": { "name": "POST /v1/x402-endpoints/execute", "type": "http" }, "http": { "method": "POST", "url": "{{baseUrl}}/v1/x402-endpoints/execute", "body": { "type": "json", "data": "{}" } }, "docs": "Execute an x402 call with a pre-signed payment header (proxy mode)" }, { "info": { "name": "POST /v1/x402-endpoints/generate-metadata", "type": "http" }, "http": { "method": "POST", "url": "{{baseUrl}}/v1/x402-endpoints/generate-metadata", "body": { "type": "json", "data": "{}" } }, "docs": "Generate AI metadata (name, description, category, tags) for an x402 endpoint" }, { "info": { "name": "POST /v1/x402-endpoints/import", "type": "http" }, "http": { "method": "POST", "url": "{{baseUrl}}/v1/x402-endpoints/import", "body": { "type": "json", "data": "{}" } }, "docs": "Import an x402 endpoint atomically (probe + pay + generate metadata + create)" }, { "info": { "name": "POST /v1/x402-endpoints/probe", "type": "http" }, "http": { "method": "POST", "url": "{{baseUrl}}/v1/x402-endpoints/probe", "body": { "type": "json", "data": "{}" } }, "docs": "Probe an x402 endpoint to get its payment requirements" }, { "info": { "name": "POST /v1/x402-endpoints/test", "type": "http" }, "http": { "method": "POST", "url": "{{baseUrl}}/v1/x402-endpoints/test", "body": { "type": "json", "data": "{}" } }, "docs": "Test an x402 endpoint using the organization's default Turnkey wallet" }, { "info": { "name": "GET /v1/x402-endpoints/{id}", "type": "http" }, "http": { "method": "GET", "url": "{{baseUrl}}/v1/x402-endpoints/:id", "params": [ { "name": "id", "value": "", "type": "path", "description": "Endpoint ID" } ], "body": { "type": "json", "data": "{}" } }, "docs": "Get an x402 endpoint by ID" }, { "info": { "name": "POST /v1/x402-endpoints/{id}/verify", "type": "http" }, "http": { "method": "POST", "url": "{{baseUrl}}/v1/x402-endpoints/:id/verify", "params": [ { "name": "id", "value": "", "type": "path", "description": "Endpoint ID" } ], "body": { "type": "json", "data": "{}" } }, "docs": "Re-verify an x402 endpoint and update its schemas" } ] }, { "info": { "name": "activity", "type": "folder" }, "items": [ { "info": { "name": "Stream org activity events", "type": "http" }, "http": { "method": "GET", "url": "{{baseUrl}}/v1/activity/stream" }, "docs": "SSE endpoint for real-time org-wide action notifications." } ] }, { "info": { "name": "agent-runs", "type": "folder" }, "items": [ { "info": { "name": "Start an agent run", "type": "http" }, "http": { "method": "POST", "url": "{{baseUrl}}/v1/agent-runs", "body": { "type": "json", "data": "{}" } }, "docs": "Spawns a first-party containerized agent (e.g. the workflow-builder\ndeep-agent) on the runtime worker. The org + user are taken from the\nauthenticated request; the server mints the worker session." }, { "info": { "name": "List available agent types", "type": "http" }, "http": { "method": "GET", "url": "{{baseUrl}}/v1/agent-runs/agents" }, "docs": "Returns the enabled first-party agents the deep-agent runtime can\nrun. Each item's `agentType` is the value to pass as\nStartAgentRunParams.agentType. Use this to discover what's\navailable before starting a run." }, { "info": { "name": "List a conversation's app artifacts", "type": "http" }, "http": { "method": "GET", "url": "{{baseUrl}}/v1/agent-runs/artifacts", "params": [ { "name": "conversationId", "value": "", "type": "query", "description": "Conversation ID" }, { "name": "limit", "value": "", "type": "query", "description": "Max items to return (default 20, max 100)" }, { "name": "offset", "value": "", "type": "query", "description": "Items to skip (default 0)" } ] }, "docs": "Returns the durable list of served web-app artifacts built by\ncompleted app-builder runs in the given Caddie conversation. The\norganization is taken from the authenticated request; the\nconversation is scoped to it. Each item carries the run id and the\nabsolute, browser-openable served URL." }, { "info": { "name": "Get an agent run", "type": "http" }, "http": { "method": "GET", "url": "{{baseUrl}}/v1/agent-runs/:id", "params": [ { "name": "id", "value": "", "type": "path", "description": "Run ID" }, { "name": "since", "value": "", "type": "query", "description": "Return events with seq greater than this (default 0)" } ] }, "docs": "Returns the run's status plus the append-only event log rows after\nthe `since` sequence number. Poll this to stream a run's progress." } ] }, { "info": { "name": "app-gateway", "type": "folder" }, "items": [ { "info": { "name": "Mint a per-user app session token for a login-required deep-agent artifact", "type": "http" }, "http": { "method": "POST", "url": "{{baseUrl}}/v1/app-gateway/:appId/session", "params": [ { "name": "appId", "value": "", "type": "path", "description": "Deep-agent run id (app id)" } ], "body": { "type": "json", "data": "{}" } }, "docs": "Mints a per-user app token for the signed-in viewer opening a login-required deep-agent artifact. Authed as the b3 user; the viewer's id + active org come from the auth context, not the body. The server resolves the artifact's org from the :appId (deep-agent run id), verifies the workflow is in it and the viewer is acting within it, then signs a token carrying the viewer's id." } ] }, { "info": { "name": "contracts", "type": "folder" }, "items": [ { "info": { "name": "Stream contract project events", "type": "http" }, "http": { "method": "GET", "url": "{{baseUrl}}/v1/contract/projects/:id/stream", "params": [ { "name": "id", "value": "", "type": "path", "description": "Contract Project ID" } ] }, "docs": "SSE endpoint for real-time contract status updates (test results, audit, etc.)" } ] }, { "info": { "name": "CU", "type": "folder" }, "items": [ { "info": { "name": "Get CU costs", "type": "http" }, "http": { "method": "GET", "url": "{{baseUrl}}/v1/cu/costs" }, "docs": "Get the complete CU cost list for all triggers and actions (public, no auth)" }, { "info": { "name": "Get CU balance and threshold", "type": "http" }, "http": { "method": "GET", "url": "{{baseUrl}}/v1/organizations/:orgId/cu", "params": [ { "name": "orgId", "value": "", "type": "path", "description": "Organization ID" } ], "body": { "type": "json", "data": "{}" } }, "docs": "Get current CU balance and minimum threshold for an organization" }, { "info": { "name": "Get runs with CU costs", "type": "http" }, "http": { "method": "GET", "url": "{{baseUrl}}/v1/organizations/:orgId/cu/runs", "params": [ { "name": "orgId", "value": "", "type": "path", "description": "Organization ID" }, { "name": "limit", "value": "", "type": "query", "description": "Items per page (default: 20, max: 100)" }, { "name": "offset", "value": "", "type": "query", "description": "Pagination offset (default: 0)" } ], "body": { "type": "json", "data": "{}" } }, "docs": "Get recent workflow runs with their aggregated CU consumption" }, { "info": { "name": "Update CU min threshold", "type": "http" }, "http": { "method": "PUT", "url": "{{baseUrl}}/v1/organizations/:orgId/cu/threshold", "params": [ { "name": "orgId", "value": "", "type": "path", "description": "Organization ID" } ], "body": { "type": "json", "data": "{}" } }, "docs": "Update the CU minimum balance threshold for an organization (admin only)" }, { "info": { "name": "Get CU usage", "type": "http" }, "http": { "method": "GET", "url": "{{baseUrl}}/v1/organizations/:orgId/cu/usage", "params": [ { "name": "orgId", "value": "", "type": "path", "description": "Organization ID" }, { "name": "yearMonth", "value": "", "type": "query", "description": "Year-Month in YYYY-MM format" } ], "body": { "type": "json", "data": "{}" } }, "docs": "Get CU usage breakdown for a specific month" }, { "info": { "name": "Get CU usage by workflow", "type": "http" }, "http": { "method": "GET", "url": "{{baseUrl}}/v1/organizations/:orgId/cu/usage-by-workflow", "params": [ { "name": "orgId", "value": "", "type": "path", "description": "Organization ID" }, { "name": "from", "value": "", "type": "query", "description": "Start time (unix milliseconds)" }, { "name": "to", "value": "", "type": "query", "description": "End time (unix milliseconds)" } ], "body": { "type": "json", "data": "{}" } }, "docs": "Get per-workflow CU cost breakdown for a time period" } ] }, { "info": { "name": "executions", "type": "folder" }, "items": [ { "info": { "name": "Stream org execution updates", "type": "http" }, "http": { "method": "GET", "url": "{{baseUrl}}/v1/executions/stream" }, "docs": "SSE endpoint for real-time org-wide external execution updates." }, { "info": { "name": "Stream execution updates", "type": "http" }, "http": { "method": "GET", "url": "{{baseUrl}}/v1/executions/:id/stream", "params": [ { "name": "id", "value": "", "type": "path", "description": "Execution ID" } ] }, "docs": "SSE endpoint for real-time external execution status updates." }, { "info": { "name": "Stream public execution updates", "type": "http" }, "http": { "method": "GET", "url": "{{baseUrl}}/v1/public/executions/:id/stream", "params": [ { "name": "id", "value": "", "type": "path", "description": "Execution ID" }, { "name": "token", "value": "", "type": "query", "description": "Client token returned when the execution was created" } ] }, "docs": "SSE endpoint for real-time public execution status updates using the client token returned at creation time." } ] }, { "info": { "name": "faucet", "type": "folder" }, "items": [ { "info": { "name": "POST /v1/faucet/claim", "type": "http" }, "http": { "method": "POST", "url": "{{baseUrl}}/v1/faucet/claim", "body": { "type": "json", "data": "{}" } }, "docs": "Send testnet tokens from the faucet to the organization's default wallet" } ] }, { "info": { "name": "incentive", "type": "folder" }, "items": [ { "info": { "name": "Get incentive state", "type": "http" }, "http": { "method": "GET", "url": "{{baseUrl}}/v1/incentive/state" }, "docs": "Returns all incentive task statuses + totals for caller's active org" }, { "info": { "name": "Verify and claim an incentive task", "type": "http" }, "http": { "method": "POST", "url": "{{baseUrl}}/v1/incentive/verify", "body": { "type": "json", "data": "{}" } }, "docs": "Verify and claim an incentive task" } ] }, { "info": { "name": "integrations", "type": "folder" }, "items": [ { "info": { "name": "Slack OAuth callback", "type": "http" }, "http": { "method": "GET", "url": "{{baseUrl}}/v1/integrations/slack/oauth-callback", "params": [ { "name": "code", "value": "", "type": "query", "description": "Authorization code" }, { "name": "state", "value": "", "type": "query", "description": "CSRF state token" } ] }, "docs": "Handles Slack OAuth redirect" }, { "info": { "name": "Get Slack OAuth URL", "type": "http" }, "http": { "method": "GET", "url": "{{baseUrl}}/v1/integrations/slack/oauth-url" }, "docs": "Generates a Slack authorization URL" } ] }, { "info": { "name": "onboarding", "type": "folder" }, "items": [ { "info": { "name": "GET /v1/onboarding/questions", "type": "http" }, "http": { "method": "GET", "url": "{{baseUrl}}/v1/onboarding/questions", "params": [ { "name": "scope", "value": "", "type": "query", "description": "Scope: 'user' or 'org'" }, { "name": "limit", "value": "", "type": "query", "description": "Number of items (default 20, max 100)" }, { "name": "offset", "value": "", "type": "query", "description": "Offset for pagination (default 0)" } ] }, "docs": "Get active onboarding questions for the specified scope" }, { "info": { "name": "POST /v1/onboarding/responses", "type": "http" }, "http": { "method": "POST", "url": "{{baseUrl}}/v1/onboarding/responses", "body": { "type": "json", "data": "{}" } }, "docs": "Submit onboarding responses and mark onboarding as complete" }, { "info": { "name": "GET /v1/onboarding/status", "type": "http" }, "http": { "method": "GET", "url": "{{baseUrl}}/v1/onboarding/status" }, "docs": "Get user's onboarding completion status" } ] }, { "info": { "name": "AI", "type": "folder" }, "items": [ { "info": { "name": "Get AI credit usage", "type": "http" }, "http": { "method": "GET", "url": "{{baseUrl}}/v1/organizations/:orgId/ai-credits/usage", "params": [ { "name": "orgId", "value": "", "type": "path", "description": "Organization ID" }, { "name": "yearMonth", "value": "", "type": "query", "description": "Year-Month in YYYY-MM format" } ], "body": { "type": "json", "data": "{}" } }, "docs": "Get AI credit usage breakdown for a specific month" } ] }, { "info": { "name": "sessions", "type": "folder" }, "items": [ { "info": { "name": "GET /v1/organizations/{orgId}/sessions", "type": "http" }, "http": { "method": "GET", "url": "{{baseUrl}}/v1/organizations/:orgId/sessions", "params": [ { "name": "orgId", "value": "", "type": "path", "description": "Organization ID" }, { "name": "limit", "value": "", "type": "query", "description": "Limit (default 20, max 100)" }, { "name": "offset", "value": "", "type": "query", "description": "Offset (default 0)" } ] }, "docs": "List active wallet sessions with pagination" }, { "info": { "name": "POST /v1/organizations/{orgId}/sessions", "type": "http" }, "http": { "method": "POST", "url": "{{baseUrl}}/v1/organizations/:orgId/sessions", "params": [ { "name": "orgId", "value": "", "type": "path", "description": "Organization ID" } ], "body": { "type": "json", "data": "{}" } }, "docs": "Create a new wallet session key" }, { "info": { "name": "DELETE /v1/organizations/{orgId}/sessions/{id}", "type": "http" }, "http": { "method": "DELETE", "url": "{{baseUrl}}/v1/organizations/:orgId/sessions/:id", "params": [ { "name": "orgId", "value": "", "type": "path", "description": "Organization ID" }, { "name": "id", "value": "", "type": "path", "description": "Session ID" } ] }, "docs": "Revoke a wallet session key" } ] }, { "info": { "name": "workflow-templates", "type": "folder" }, "items": [ { "info": { "name": "List public templates by organization", "type": "http" }, "http": { "method": "GET", "url": "{{baseUrl}}/v1/organizations/:orgId/templates/public", "params": [ { "name": "orgId", "value": "", "type": "path", "description": "Organization ID" }, { "name": "limit", "value": "", "type": "query", "description": "Number of items (default 20, max 100)" }, { "name": "offset", "value": "", "type": "query", "description": "Offset for pagination (default 0)" } ] }, "docs": "Retrieve all public templates for a specific organization (no authentication required)\nThis endpoint is used for organization detail pages to showcase public templates" }, { "info": { "name": "Get template by ID", "type": "http" }, "http": { "method": "GET", "url": "{{baseUrl}}/v1/templates/:templateId", "params": [ { "name": "templateId", "value": "", "type": "path", "description": "Template ID" } ] }, "docs": "Retrieve a template by ID with authorization (public templates or user's org templates)\nNo authentication required for public templates. Authenticated users can access their org's templates." }, { "info": { "name": "Get template statistics", "type": "http" }, "http": { "method": "GET", "url": "{{baseUrl}}/v1/templates/:templateId/stats", "params": [ { "name": "templateId", "value": "", "type": "path", "description": "Template ID" } ] }, "docs": "Retrieve aggregate statistics for a template (deploy counts, success rate, etc.)" } ] }, { "info": { "name": "wallets", "type": "folder" }, "items": [ { "info": { "name": "GET /v1/organizations/{orgId}/wallets", "type": "http" }, "http": { "method": "GET", "url": "{{baseUrl}}/v1/organizations/:orgId/wallets", "params": [ { "name": "orgId", "value": "", "type": "path", "description": "Organization ID" }, { "name": "limit", "value": "", "type": "query", "description": "Limit (default 20, max 100)" }, { "name": "offset", "value": "", "type": "query", "description": "Offset (default 0)" } ] }, "docs": "List all wallets for an organization with pagination" }, { "info": { "name": "POST /v1/organizations/{orgId}/wallets", "type": "http" }, "http": { "method": "POST", "url": "{{baseUrl}}/v1/organizations/:orgId/wallets", "params": [ { "name": "orgId", "value": "", "type": "path", "description": "Organization ID" } ], "body": { "type": "json", "data": "{}" } }, "docs": "Create a new Turnkey wallet for an organization" }, { "info": { "name": "POST /v1/organizations/{orgId}/wallets/import", "type": "http" }, "http": { "method": "POST", "url": "{{baseUrl}}/v1/organizations/:orgId/wallets/import", "params": [ { "name": "orgId", "value": "", "type": "path", "description": "Organization ID" } ], "body": { "type": "json", "data": "{}" } }, "docs": "Register an imported Turnkey private key wallet for an organization" }, { "info": { "name": "POST /v1/organizations/{orgId}/wallets/polymarket-deposit", "type": "http" }, "http": { "method": "POST", "url": "{{baseUrl}}/v1/organizations/:orgId/wallets/polymarket-deposit", "params": [ { "name": "orgId", "value": "", "type": "path", "description": "Organization ID" } ], "body": { "type": "json", "data": "{}" } }, "docs": "Create a Polymarket deposit wallet for an organization" }, { "info": { "name": "PATCH /v1/organizations/{orgId}/wallets/{walletId}", "type": "http" }, "http": { "method": "PATCH", "url": "{{baseUrl}}/v1/organizations/:orgId/wallets/:walletId", "params": [ { "name": "orgId", "value": "", "type": "path", "description": "Organization ID" }, { "name": "walletId", "value": "", "type": "path", "description": "Wallet ID" } ], "body": { "type": "json", "data": "{}" } }, "docs": "Rename an organization wallet's user-facing label. The wallet's\non-chain address and Turnkey identifiers are unchanged." }, { "info": { "name": "DELETE /v1/organizations/{orgId}/wallets/{walletId}", "type": "http" }, "http": { "method": "DELETE", "url": "{{baseUrl}}/v1/organizations/:orgId/wallets/:walletId", "params": [ { "name": "orgId", "value": "", "type": "path", "description": "Organization ID" }, { "name": "walletId", "value": "", "type": "path", "description": "Wallet ID" } ] }, "docs": "Archive a wallet (soft delete). Cannot archive default wallet or only wallet." }, { "info": { "name": "PUT /v1/organizations/{orgId}/wallets/{walletId}/default", "type": "http" }, "http": { "method": "PUT", "url": "{{baseUrl}}/v1/organizations/:orgId/wallets/:walletId/default", "params": [ { "name": "orgId", "value": "", "type": "path", "description": "Organization ID" }, { "name": "walletId", "value": "", "type": "path", "description": "Wallet ID" } ] }, "docs": "Set a wallet as the default wallet for an organization." }, { "info": { "name": "POST /v1/organizations/{orgId}/wallets/{walletId}/withdraw", "type": "http" }, "http": { "method": "POST", "url": "{{baseUrl}}/v1/organizations/:orgId/wallets/:walletId/withdraw", "params": [ { "name": "orgId", "value": "", "type": "path", "description": "Organization ID" }, { "name": "walletId", "value": "", "type": "path", "description": "Wallet ID" } ], "body": { "type": "json", "data": "{}" } }, "docs": "Withdraw tokens from an organization wallet via Turnkey signing" } ] }, { "info": { "name": "Outbound Webhook", "type": "folder" }, "items": [ { "info": { "name": "List outbound webhook deliveries", "type": "http" }, "http": { "method": "GET", "url": "{{baseUrl}}/v1/outbound-webhook/deliveries", "params": [ { "name": "workflowId", "value": "", "type": "query", "description": "Filter by workflow ID" }, { "name": "limit", "value": "", "type": "query", "description": "Max results per page (1-100)" }, { "name": "offset", "value": "", "type": "query", "description": "Pagination offset" } ], "body": { "type": "json", "data": "{}" } }, "docs": "List outbound webhook deliveries with optional workflow filter and pagination" }, { "info": { "name": "Get outbound webhook delivery", "type": "http" }, "http": { "method": "GET", "url": "{{baseUrl}}/v1/outbound-webhook/deliveries/:id", "params": [ { "name": "id", "value": "", "type": "path", "description": "Delivery ID" } ], "body": { "type": "json", "data": "{}" } }, "docs": "Get a single outbound webhook delivery by ID" }, { "info": { "name": "Replay outbound webhook delivery", "type": "http" }, "http": { "method": "POST", "url": "{{baseUrl}}/v1/outbound-webhook/deliveries/:id/replay", "params": [ { "name": "id", "value": "", "type": "path", "description": "Original Delivery ID to replay" } ], "body": { "type": "json", "data": "{}" } }, "docs": "Replay a webhook delivery by creating a new delivery based on the original. Unlike retry (which re-attempts a failed delivery), replay creates a NEW delivery record and can be used on any status." }, { "info": { "name": "Retry outbound webhook delivery", "type": "http" }, "http": { "method": "POST", "url": "{{baseUrl}}/v1/outbound-webhook/deliveries/:id/retry", "params": [ { "name": "id", "value": "", "type": "path", "description": "Delivery ID" } ], "body": { "type": "json", "data": "{}" } }, "docs": "Manually retry a failed outbound webhook delivery" } ] }, { "info": { "name": "Run", "type": "folder" }, "items": [ { "info": { "name": "POST /v1/runs/sync", "type": "http" }, "http": { "method": "POST", "url": "{{baseUrl}}/v1/runs/sync", "body": { "type": "json", "data": "{}" } }, "docs": "Execute a workflow definition synchronously. Blocks until all nodes\ncomplete and returns the full execution state. Max 60s timeout, 20 nodes." } ] }, { "info": { "name": "runs", "type": "folder" }, "items": [ { "info": { "name": "Batch run transaction attribution", "type": "http" }, "http": { "method": "POST", "url": "{{baseUrl}}/v1/runs/tx-attribution", "body": { "type": "json", "data": "{}" } }, "docs": "Resolve blockchain transaction hashes to the workflow run that executed them" }, { "info": { "name": "Stream run execution events", "type": "http" }, "http": { "method": "GET", "url": "{{baseUrl}}/v1/runs/:id/stream", "params": [ { "name": "id", "value": "", "type": "path", "description": "Run ID" } ] }, "docs": "SSE endpoint for real-time run status updates. Clients MUST subscribe BEFORE triggering the run to avoid missing the initial run_started event. Use pre-subscription with client-provided runId." }, { "info": { "name": "Batch workflow stats", "type": "http" }, "http": { "method": "POST", "url": "{{baseUrl}}/v1/workflows/batch-stats", "body": { "type": "json", "data": "{}" } }, "docs": "Fetch run counts and recent runs for multiple workflows" } ] }, { "info": { "name": "WorkflowVariables", "type": "folder" }, "items": [ { "info": { "name": "Variable writes for a run", "type": "http" }, "http": { "method": "GET", "url": "{{baseUrl}}/v1/runs/:runId/variable-writes", "params": [ { "name": "runId", "value": "", "type": "path", "description": "Run ID" }, { "name": "limit", "value": "", "type": "query", "description": "Max rows per page" }, { "name": "offset", "value": "", "type": "query", "description": "Offset for pagination (default 0)" } ] }, "docs": "Variable writes for a run" }, { "info": { "name": "List workflow variables", "type": "http" }, "http": { "method": "GET", "url": "{{baseUrl}}/v1/workflows/:workflowId/variables", "params": [ { "name": "workflowId", "value": "", "type": "path", "description": "Workflow ID" } ] }, "docs": "List workflow variables" }, { "info": { "name": "Create or update workflow variable definition", "type": "http" }, "http": { "method": "PUT", "url": "{{baseUrl}}/v1/workflows/:workflowId/variables/:name", "params": [ { "name": "workflowId", "value": "", "type": "path", "description": "Workflow ID" }, { "name": "name", "value": "", "type": "path", "description": "Variable name" } ], "body": { "type": "json", "data": "{}" } }, "docs": "Create or update workflow variable definition" }, { "info": { "name": "Delete workflow variable", "type": "http" }, "http": { "method": "DELETE", "url": "{{baseUrl}}/v1/workflows/:workflowId/variables/:name", "params": [ { "name": "workflowId", "value": "", "type": "path", "description": "Workflow ID" }, { "name": "name", "value": "", "type": "path", "description": "Variable name" } ] }, "docs": "Delete workflow variable" }, { "info": { "name": "Workflow variable write history", "type": "http" }, "http": { "method": "GET", "url": "{{baseUrl}}/v1/workflows/:workflowId/variables/:name/history", "params": [ { "name": "workflowId", "value": "", "type": "path", "description": "Workflow ID" }, { "name": "name", "value": "", "type": "path", "description": "Variable name" }, { "name": "limit", "value": "", "type": "query", "description": "Max rows per page" }, { "name": "offset", "value": "", "type": "query", "description": "Offset for pagination (default 0)" } ] }, "docs": "Workflow variable write history" }, { "info": { "name": "Reset workflow variable to default", "type": "http" }, "http": { "method": "POST", "url": "{{baseUrl}}/v1/workflows/:workflowId/variables/:name/reset", "params": [ { "name": "workflowId", "value": "", "type": "path", "description": "Workflow ID" }, { "name": "name", "value": "", "type": "path", "description": "Variable name" } ] }, "docs": "Reset workflow variable to default" }, { "info": { "name": "Manually set workflow variable value", "type": "http" }, "http": { "method": "POST", "url": "{{baseUrl}}/v1/workflows/:workflowId/variables/:name/value", "params": [ { "name": "workflowId", "value": "", "type": "path", "description": "Workflow ID" }, { "name": "name", "value": "", "type": "path", "description": "Variable name" } ], "body": { "type": "json", "data": "{}" } }, "docs": "Manually set workflow variable value" } ] }, { "info": { "name": "Search", "type": "folder" }, "items": [ { "info": { "name": "Search resources", "type": "http" }, "http": { "method": "GET", "url": "{{baseUrl}}/v1/search", "params": [ { "name": "q", "value": "", "type": "query", "description": "Search query" }, { "name": "types", "value": "", "type": "query", "description": "Resource types to search: template, action, trigger, connector_def, workflow (singular or plural forms accepted)" }, { "name": "limit", "value": "", "type": "query", "description": "Results per type (default: 20, max: 100)" }, { "name": "offset", "value": "", "type": "query", "description": "Pagination offset (default: 0)" } ] }, "docs": "Hybrid search (keyword + semantic) across templates, actions, triggers, connector definitions, and workflows" }, { "info": { "name": "Find similar resources", "type": "http" }, "http": { "method": "GET", "url": "{{baseUrl}}/v1/search/similar/:type/:id", "params": [ { "name": "type", "value": "", "type": "path", "description": "Resource type: action, template, trigger, connector_def (singular or plural forms accepted)" }, { "name": "id", "value": "", "type": "path", "description": "Resource ID" }, { "name": "limit", "value": "", "type": "query", "description": "Max results (default: 5, max: 20)" } ] }, "docs": "Find resources semantically similar to a given resource" } ] }, { "info": { "name": "seo", "type": "folder" }, "items": [ { "info": { "name": "GET /v1/seo/pages", "type": "http" }, "http": { "method": "GET", "url": "{{baseUrl}}/v1/seo/pages", "params": [ { "name": "page_type", "value": "", "type": "query", "description": "Filter by page type: single or combo" }, { "name": "limit", "value": "", "type": "query", "description": "Maximum number of pages (default: 100, max: 1000)" }, { "name": "offset", "value": "", "type": "query", "description": "Offset for pagination (default: 0)" } ] }, "docs": "List all published SEO integration pages with pagination" }, { "info": { "name": "POST /v1/seo/pages/bulk-upsert", "type": "http" }, "http": { "method": "POST", "url": "{{baseUrl}}/v1/seo/pages/bulk-upsert", "body": { "type": "json", "data": "{}" } }, "docs": "Bulk upsert SEO integration pages (used by CI/CD build script)" }, { "info": { "name": "POST /v1/seo/pages/generate", "type": "http" }, "http": { "method": "POST", "url": "{{baseUrl}}/v1/seo/pages/generate", "body": { "type": "json", "data": "{}" } }, "docs": "Trigger SEO page generation (admin only)." }, { "info": { "name": "GET /v1/seo/pages/{slug}", "type": "http" }, "http": { "method": "GET", "url": "{{baseUrl}}/v1/seo/pages/:slug", "params": [ { "name": "slug", "value": "", "type": "path", "description": "Page slug (e.g. airtable or airtable-and-polymarket)" } ] }, "docs": "Get a single SEO integration page by slug" }, { "info": { "name": "PUT /v1/seo/pages/{slug}", "type": "http" }, "http": { "method": "PUT", "url": "{{baseUrl}}/v1/seo/pages/:slug", "params": [ { "name": "slug", "value": "", "type": "path", "description": "Page slug" } ], "body": { "type": "json", "data": "{}" } }, "docs": "Update a SEO integration page by slug (admin only)" } ] }, { "info": { "name": "tags", "type": "folder" }, "items": [ { "info": { "name": "GET /v1/tags", "type": "http" }, "http": { "method": "GET", "url": "{{baseUrl}}/v1/tags", "params": [ { "name": "category", "value": "", "type": "query", "description": "Filter by category (e.g., 'blockchain', 'finance', 'App')" }, { "name": "search", "value": "", "type": "query", "description": "Full-text search query (searches name and description)" }, { "name": "limit", "value": "", "type": "query", "description": "Maximum number of tags to return (default: 20, max: 1000)" }, { "name": "offset", "value": "", "type": "query", "description": "Number of tags to skip for pagination (default: 0)" }, { "name": "sortByCount", "value": "", "type": "query", "description": "Sort by count (popularity) instead of weight (default: false). Count type depends on scope: templates for template scopes, actions for action scope, triggers for trigger scope" }, { "name": "scope", "value": "", "type": "query", "description": "Count scope: 'all' (default), 'templates_public', 'templates_promoted', 'templates_org', 'actions', 'triggers', 'connectors'" }, { "name": "pagination_bypass_key", "value": "", "type": "query", "description": "Pagination bypass key to allow limit > 1000" } ] }, "docs": "List available tags, optionally filtered by category and/or search query with pagination" }, { "info": { "name": "GET /v1/tags/categories", "type": "http" }, "http": { "method": "GET", "url": "{{baseUrl}}/v1/tags/categories" }, "docs": "List all unique categories from tags" } ] }, { "info": { "name": "templates", "type": "folder" }, "items": [ { "info": { "name": "GET /v1/templates/recommended", "type": "http" }, "http": { "method": "GET", "url": "{{baseUrl}}/v1/templates/recommended", "params": [ { "name": "category", "value": "", "type": "query", "description": "Template category: 'promoted', 'public', 'org', 'all'" }, { "name": "limit", "value": "", "type": "query", "description": "Maximum number of templates to return (default: 20, max: 100)" }, { "name": "strategy", "value": "", "type": "query", "description": "Recommendation strategy: 'strong_match', 'interest_based' (default), 'popular_with_interest'" } ] }, "docs": "Get personalized template recommendations based on user's tag interests" } ] }, { "info": { "name": "triggers", "type": "folder" }, "items": [ { "info": { "name": "GET /v1/triggers", "type": "http" }, "http": { "method": "GET", "url": "{{baseUrl}}/v1/triggers", "params": [ { "name": "tags", "value": "", "type": "query", "description": "Filter by tags (comma-separated or multiple params). Triggers must have ALL specified tags (AND logic)." } ] }, "docs": "List all available triggers, optionally filtered by tags" } ] }, { "info": { "name": "user", "type": "folder" }, "items": [ { "info": { "name": "GET /v1/user/interests", "type": "http" }, "http": { "method": "GET", "url": "{{baseUrl}}/v1/user/interests", "params": [ { "name": "limit", "value": "", "type": "query", "description": "Number of items (default 20, max 100)" }, { "name": "offset", "value": "", "type": "query", "description": "Offset for pagination (default 0)" } ] }, "docs": "List the authenticated user's captured interests (strongest first)" }, { "info": { "name": "POST /v1/user/interests", "type": "http" }, "http": { "method": "POST", "url": "{{baseUrl}}/v1/user/interests", "body": { "type": "json", "data": "{}" } }, "docs": "Add an interest for the authenticated user" }, { "info": { "name": "GET /v1/user/interests/settings", "type": "http" }, "http": { "method": "GET", "url": "{{baseUrl}}/v1/user/interests/settings" }, "docs": "Get the authenticated user's interest-tag opt-in (B3-4674)" }, { "info": { "name": "PUT /v1/user/interests/settings", "type": "http" }, "http": { "method": "PUT", "url": "{{baseUrl}}/v1/user/interests/settings", "body": { "type": "json", "data": "{}" } }, "docs": "Enable or disable the authenticated user's interest tags (B3-4674)" }, { "info": { "name": "DELETE /v1/user/interests/{tagId}", "type": "http" }, "http": { "method": "DELETE", "url": "{{baseUrl}}/v1/user/interests/:tagId", "params": [ { "name": "tagId", "value": "", "type": "path", "description": "Interest tag id to remove" } ] }, "docs": "Remove an interest for the authenticated user" } ] }, { "info": { "name": "Webhook Events", "type": "folder" }, "items": [ { "info": { "name": "List webhook events", "type": "http" }, "http": { "method": "GET", "url": "{{baseUrl}}/v1/webhook-events", "params": [ { "name": "limit", "value": "", "type": "query", "description": "Number of events to return (default 20, max 100)" }, { "name": "offset", "value": "", "type": "query", "description": "Offset for pagination (default 0)" } ], "body": { "type": "json", "data": "{}" } }, "docs": "List webhook events for the organization with pagination" } ] }, { "info": { "name": "workflows", "type": "folder" }, "items": [ { "info": { "name": "Stream run events for multiple workflows", "type": "http" }, "http": { "method": "GET", "url": "{{baseUrl}}/v1/workflow-runs/stream", "params": [ { "name": "ids", "value": "", "type": "query", "description": "Comma-separated workflow IDs (max 24)" } ] }, "docs": "SSE endpoint that fans the per-workflow run channels for a set of workflow ids into one stream. Pass ids via the comma-separated `ids` query param (max 24). Inaccessible ids are silently dropped." }, { "info": { "name": "Batch workflow metadata", "type": "http" }, "http": { "method": "POST", "url": "{{baseUrl}}/v1/workflows/batch-meta", "body": { "type": "json", "data": "{}" } }, "docs": "Fetch lightweight metadata for multiple workflows in one request" }, { "info": { "name": "Stream workflow run events", "type": "http" }, "http": { "method": "GET", "url": "{{baseUrl}}/v1/workflows/:id/runs/stream", "params": [ { "name": "id", "value": "", "type": "path", "description": "Workflow ID" } ] }, "docs": "SSE endpoint for real-time notifications when runs start/complete for a workflow." } ] }, { "info": { "name": "workflow", "type": "folder" }, "items": [ { "info": { "name": "Resolve workflow organization", "type": "http" }, "http": { "method": "GET", "url": "{{baseUrl}}/v1/workflows/:id/resolve", "params": [ { "name": "id", "value": "", "type": "path", "description": "Workflow ID" } ] }, "docs": "Returns the organization info for a workflow and whether the authenticated user is a member" } ] } ], "bundled": true }