{"openapi":"3.1.0","info":{"title":"FinkMesh Public API","version":"2026-07-01","description":"Token-authenticated public REST API, beta outbound webhooks, and API-token MCP endpoint for FinkMesh workspaces."},"servers":[{"url":"https://www.finkmesh.com"}],"tags":[{"name":"Account"},{"name":"Workspaces"},{"name":"Workflows"},{"name":"Runs"},{"name":"Templates"},{"name":"Connections"},{"name":"Outbound Webhooks"},{"name":"Support"},{"name":"MCP"}],"security":[{"bearerAuth":[]}],"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer","bearerFormat":"FinkMesh API token","description":"Use Authorization: Bearer fmsh_live_..."}},"parameters":{"IdempotencyKey":{"name":"Idempotency-Key","in":"header","required":true,"schema":{"type":"string","maxLength":160,"pattern":"^[A-Za-z0-9_.:-]+$"},"description":"Required for public writes. Scoped by API token, method, path, and key for 7 days."}},"headers":{"FinkMeshRequestId":{"schema":{"type":"string"},"description":"Request id for support and audit correlation."},"FinkMeshAPIVersion":{"schema":{"type":"string"},"description":"Public API contract version."},"FinkMeshRateLimitLimit":{"schema":{"type":"integer"}},"FinkMeshRateLimitRemaining":{"schema":{"type":"integer"}},"FinkMeshRateLimitReset":{"schema":{"type":"integer"},"description":"Unix timestamp when the current window resets."}},"schemas":{"ErrorEnvelope":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","requestId","apiVersion"],"properties":{"code":{"type":"string","example":"INSUFFICIENT_SCOPE"},"message":{"type":"string","example":"Token lacks required scope: workflows:read."},"requestId":{"type":"string","example":"req_0123456789abcdef"},"apiVersion":{"type":"string","example":"2026-07-01"},"details":{"type":"object","additionalProperties":true}}}}},"SuccessEnvelope":{"type":"object","required":["data","requestId","apiVersion"],"properties":{"data":{"type":"object","additionalProperties":true},"pagination":{"$ref":"#/components/schemas/Pagination"},"requestId":{"type":"string","example":"req_0123456789abcdef"},"apiVersion":{"type":"string","example":"2026-07-01"}}},"Pagination":{"type":"object","required":["limit","hasMore","nextCursor"],"properties":{"limit":{"type":"integer","description":"Requested page size.","example":50},"hasMore":{"type":"boolean","description":"Whether another page is available.","example":false},"nextCursor":{"type":["string","null"],"description":"Cursor for the next page, or null when no more results exist.","example":null}}},"TokenContext":{"type":"object","required":["token","user","workspace","organization"],"properties":{"token":{"type":"object","required":["id","name","scopes"],"properties":{"id":{"type":"string","description":"API token id.","example":"tok_123"},"name":{"type":"string","description":"API token label.","example":"Production token"},"scopes":{"type":"array","items":{"type":"string"},"example":["workspace:read","workflows:read"]}}},"user":{"type":"object","additionalProperties":true},"workspace":{"$ref":"#/components/schemas/WorkspaceSummary"},"organization":{"type":"object","additionalProperties":true}}},"OrganizationContext":{"type":"object","required":["organization","workspace","subscription"],"properties":{"organization":{"type":"object","additionalProperties":true},"workspace":{"$ref":"#/components/schemas/WorkspaceSummary"},"subscription":{"type":"object","additionalProperties":true}}},"UsageSummary":{"type":"object","required":["period","runs","limits","plan"],"properties":{"period":{"type":"object","additionalProperties":true},"runs":{"type":"object","additionalProperties":true},"limits":{"type":"object","additionalProperties":true},"plan":{"type":"string","description":"Current plan key.","example":"pro"}}},"LimitSummary":{"type":"object","required":["plan","features","usage"],"properties":{"plan":{"type":"string","description":"Current plan key.","example":"pro"},"features":{"type":"object","additionalProperties":true},"usage":{"type":"object","additionalProperties":true}}},"WorkspaceSummary":{"type":"object","required":["id","name","slug","role"],"properties":{"id":{"type":"string","description":"Workspace id.","example":"wsp_123"},"name":{"type":"string","description":"Workspace display name.","example":"Launch Smoke"},"slug":{"type":"string","description":"Workspace URL slug.","example":"launch-smoke"},"role":{"type":"string","enum":["owner","admin","member","viewer"],"description":"Token user's workspace role.","example":"owner"}}},"WorkflowSummary":{"type":"object","required":["id","name","active","createdAt","updatedAt","links"],"properties":{"id":{"type":"string","description":"Workflow id.","example":"wf_123"},"name":{"type":"string","description":"Workflow name.","example":"Lead routing"},"description":{"type":"string","description":"Workflow description.","example":"Routes qualified leads."},"active":{"type":"boolean","description":"Whether the workflow is published and active.","example":true},"folderId":{"type":["string","null"],"description":"Folder id, or null when uncategorized.","example":null},"nodeCount":{"type":"integer","description":"Number of graph nodes.","example":4},"errorGuardrail":{"type":"object","additionalProperties":true},"createdAt":{"type":"string","format":"date-time","description":"Workflow creation timestamp.","example":"2026-07-01T12:00:00.000Z"},"updatedAt":{"type":"string","format":"date-time","description":"Workflow last update timestamp.","example":"2026-07-01T12:00:00.000Z"},"links":{"type":"object","additionalProperties":{"type":"string"},"example":{"dashboard":"https://www.finkmesh.com/dashboard/workflows/wf_123"}}}},"WorkflowReadinessIssue":{"type":"object","required":["code","severity","message"],"properties":{"code":{"type":"string","description":"Stable readiness issue code.","example":"MISSING_REQUIRED_FIELD"},"severity":{"type":"string","enum":["blocking","warning"],"description":"Whether the issue blocks the requested action.","example":"blocking"},"message":{"type":"string","description":"Human-readable remediation message.","example":"HTTP Request requires a URL."},"nodeId":{"type":["string","null"],"description":"Related node id, when applicable.","example":"node_123"},"fieldId":{"type":["string","null"],"description":"Related field id, when applicable.","example":"url"}}},"WorkflowReadinessResult":{"type":"object","required":["ok","action","blockingIssueCount","warningCount","issues"],"properties":{"ok":{"type":"boolean","description":"Whether the workflow is ready for the requested action.","example":true},"action":{"type":"string","enum":["save_draft","publish","test_draft","manual_run","api_run","webhook_run","schedule_run","resume","setup_webhook","setup_schedule"],"description":"Readiness action evaluated.","example":"api_run"},"blockingIssueCount":{"type":"integer","description":"Number of blocking issues.","example":0},"warningCount":{"type":"integer","description":"Number of warnings.","example":0},"issues":{"type":"array","items":{"$ref":"#/components/schemas/WorkflowReadinessIssue"}}}},"WorkflowReadinessRequest":{"type":"object","required":["action"],"properties":{"action":{"type":"string","enum":["save_draft","publish","test_draft","manual_run","api_run","webhook_run","schedule_run","resume","setup_webhook","setup_schedule"],"description":"Readiness action to evaluate.","example":"api_run"},"nodes":{"type":"array","items":{"type":"object","additionalProperties":true},"description":"Optional draft graph nodes."},"edges":{"type":"array","items":{"type":"object","additionalProperties":true},"description":"Optional draft graph edges."}}},"WorkflowLifecycleResult":{"type":"object","required":["workflow","readiness"],"properties":{"workflow":{"$ref":"#/components/schemas/WorkflowSummary"},"readiness":{"$ref":"#/components/schemas/WorkflowReadinessResult"}}},"RunWorkflowRequest":{"type":"object","properties":{"triggerData":{"type":"object","additionalProperties":true,"description":"Optional JSON payload available to the run."}}},"RunQueued":{"type":"object","required":["runId","status","links"],"properties":{"runId":{"type":"string","description":"Queued run id.","example":"run_123"},"status":{"type":"string","enum":["queued"],"description":"Run queue status.","example":"queued"},"links":{"type":"object","properties":{"run":{"type":"string","description":"Run detail API path.","example":"/api/v1/runs/run_123"}}}}},"RunSummary":{"type":"object","required":["id","workflowId","status","trigger","startedAt"],"properties":{"id":{"type":"string","description":"Run id.","example":"run_123"},"workflowId":{"type":"string","description":"Workflow id.","example":"wf_123"},"workflowName":{"type":"string","description":"Workflow name.","example":"Lead routing"},"status":{"type":"string","enum":["queued","running","success","error","paused","cancelled"],"description":"Run status.","example":"success"},"trigger":{"type":"string","description":"Trigger source.","example":"manual"},"startedAt":{"type":"string","format":"date-time","description":"Run start timestamp.","example":"2026-07-01T12:00:00.000Z"},"finishedAt":{"type":["string","null"],"format":"date-time","description":"Run finish timestamp, or null while unfinished.","example":null},"durationMs":{"type":["integer","null"],"description":"Run duration in milliseconds.","example":482},"error":{"type":["string","null"],"description":"Redacted run error, when present.","example":null},"failedNodeName":{"type":["string","null"],"description":"Failed node name, when present.","example":null},"failedNodeError":{"type":["string","null"],"description":"Redacted failed node error, when present.","example":null},"stepCount":{"type":"integer","description":"Recorded step count.","example":3},"webhookEndpointId":{"type":["string","null"],"description":"Webhook endpoint id, when triggered by webhook.","example":null},"links":{"type":"object","additionalProperties":{"type":"string"},"example":{"dashboard":"https://www.finkmesh.com/dashboard/workflows/wf_123"}}}},"RunDetail":{"type":"object","required":["id","workflow","status","trigger","nodeResults","error"],"properties":{"id":{"type":"string","description":"Run id.","example":"run_123"},"workflow":{"type":"object","properties":{"id":{"type":"string","description":"Workflow id.","example":"wf_123"},"name":{"type":"string","description":"Workflow name.","example":"Lead routing"}}},"status":{"type":"string","enum":["queued","running","success","error","paused","cancelled"],"description":"Run status.","example":"success"},"trigger":{"type":"string","description":"Trigger source.","example":"api"},"nodeResults":{"type":"array","items":{"type":"object","additionalProperties":true},"description":"Redacted step result summaries."},"error":{"type":["string","null"],"description":"Redacted run error, when present.","example":null}}},"TemplateSummary":{"type":"object","required":["id","name","description","category"],"properties":{"id":{"type":"string","description":"Template id.","example":"tpl_123"},"name":{"type":"string","description":"Template name.","example":"Manual HTTP smoke test"},"description":{"type":"string","description":"Template description.","example":"Call an API and inspect the response."},"category":{"type":"string","description":"Template category.","example":"ops"}}},"ConnectionSummary":{"type":"object","required":["id","provider","name","status"],"properties":{"id":{"type":"string","description":"Connection id.","example":"conn_123"},"provider":{"type":"string","description":"Connection provider.","example":"slack"},"name":{"type":"string","description":"Connection display name.","example":"Sales Slack"},"status":{"type":"string","enum":["connected","needs_reauth","disconnected","error"],"description":"Connection health status.","example":"connected"},"lastCheckedAt":{"type":["string","null"],"format":"date-time","description":"Last health check timestamp.","example":null}}},"WebhookEndpoint":{"type":"object","required":["id","name","url","events","status","secretPreview","createdAt"],"properties":{"id":{"type":"string","description":"Outbound webhook endpoint id.","example":"wh_123"},"name":{"type":"string","description":"Endpoint label.","example":"Production webhooks"},"url":{"type":"string","description":"Receiver HTTPS URL.","example":"https://example.com/finkmesh/webhooks"},"events":{"type":"array","items":{"type":"string","enum":["workflow.run.completed","workflow.run.failed","workflow.run.blocked","workflow.auto_paused","connection.disconnected","support.ticket.created"],"description":"Subscribed event type."},"example":["workflow.run.completed","workflow.run.failed"]},"status":{"type":"string","enum":["active","disabled","deleted"],"description":"Endpoint status.","example":"active"},"secretPreview":{"type":"string","description":"Masked signing secret preview.","example":"whsec_abc...xyz123"},"failureCount":{"type":"integer","description":"Consecutive delivery failure count.","example":0},"disabledReason":{"type":["string","null"],"description":"Disable reason, when disabled.","example":null},"lastSuccessAt":{"type":["string","null"],"format":"date-time","description":"Last successful delivery timestamp.","example":null},"lastFailureAt":{"type":["string","null"],"format":"date-time","description":"Last failed delivery timestamp.","example":null},"createdAt":{"type":"string","format":"date-time","description":"Endpoint creation timestamp.","example":"2026-07-01T12:00:00.000Z"},"updatedAt":{"type":"string","format":"date-time","description":"Endpoint update timestamp.","example":"2026-07-01T12:00:00.000Z"}}},"WebhookEndpointCreated":{"allOf":[{"$ref":"#/components/schemas/WebhookEndpoint"},{"type":"object","required":["secret"],"properties":{"secret":{"type":"string","description":"Full signing secret. Returned once at creation or rotation.","example":"whsec_..."}}}]},"CreateWebhookEndpointRequest":{"type":"object","required":["url","events"],"properties":{"name":{"type":"string","description":"Endpoint label.","example":"Production webhooks"},"url":{"type":"string","description":"Receiver HTTPS URL.","example":"https://example.com/finkmesh/webhooks"},"events":{"type":"array","minItems":1,"items":{"type":"string"},"example":["workflow.run.completed"]}}},"UpdateWebhookEndpointRequest":{"type":"object","properties":{"name":{"type":"string","description":"Endpoint label.","example":"Production webhooks"},"url":{"type":"string","description":"Receiver HTTPS URL.","example":"https://example.com/finkmesh/webhooks"},"events":{"type":"array","minItems":1,"items":{"type":"string"}},"status":{"type":"string","enum":["active","disabled"],"description":"Endpoint status.","example":"active"}}},"WebhookDeliveryQueued":{"type":"object","required":["eventId","deliveryId","status"],"properties":{"eventId":{"type":"string","description":"Platform event id.","example":"evt_123"},"deliveryId":{"type":"string","description":"Delivery id.","example":"del_123"},"status":{"type":"string","enum":["pending","delivering","succeeded","failed","dead","skipped"],"description":"Delivery status.","example":"pending"}}},"WebhookDelivery":{"type":"object","required":["id","eventId","endpointId","eventType","status","attempts","responseStatus"],"properties":{"id":{"type":"string","description":"Delivery id.","example":"del_123"},"eventId":{"type":"string","description":"Platform event id.","example":"evt_123"},"endpointId":{"type":"string","description":"Outbound webhook endpoint id.","example":"wh_123"},"eventType":{"type":"string","description":"Event type.","example":"workflow.run.completed"},"status":{"type":"string","enum":["pending","delivering","succeeded","failed","dead","skipped"],"description":"Delivery status.","example":"succeeded"},"attempts":{"type":"integer","description":"Number of delivery attempts.","example":1},"nextAttemptAt":{"type":["string","null"],"format":"date-time","description":"Next retry timestamp.","example":null},"lastAttemptedAt":{"type":["string","null"],"format":"date-time","description":"Last attempt timestamp.","example":null},"deliveredAt":{"type":["string","null"],"format":"date-time","description":"Successful delivery timestamp.","example":null},"deadAt":{"type":["string","null"],"format":"date-time","description":"Dead-letter timestamp.","example":null},"responseStatus":{"type":["integer","null"],"description":"Receiver HTTP status.","example":200},"responseBodyPreview":{"type":["string","null"],"description":"Truncated response body preview.","example":"{ \"ok\": true }"},"lastError":{"type":["string","null"],"description":"Last delivery error.","example":null},"createdAt":{"type":"string","format":"date-time","description":"Delivery creation timestamp.","example":"2026-07-01T12:00:00.000Z"},"updatedAt":{"type":"string","format":"date-time","description":"Delivery update timestamp.","example":"2026-07-01T12:00:00.000Z"}}},"DeleteResult":{"type":"object","required":["deleted","id"],"properties":{"deleted":{"type":"boolean","description":"Whether the resource was deleted.","example":true},"id":{"type":"string","description":"Deleted resource id.","example":"wh_123"}}},"SupportTicket":{"type":"object","required":["id","title","status","priority"],"properties":{"id":{"type":"string","description":"Support ticket id.","example":"tkt_123"},"title":{"type":"string","description":"Ticket title.","example":"API question"},"status":{"type":"string","enum":["open","waiting_on_support","waiting_on_customer","resolved","closed"],"description":"Ticket status.","example":"open"},"priority":{"type":"string","enum":["low","normal","high","urgent"],"description":"Ticket priority.","example":"normal"},"messages":{"type":"array","items":{"$ref":"#/components/schemas/SupportMessage"}},"attachments":{"type":"array","items":{"type":"object","additionalProperties":true}}}},"SupportMessage":{"type":"object","required":["id","ticketId","body","authorRole","createdAt"],"properties":{"id":{"type":"string","description":"Support message id.","example":"msg_123"},"ticketId":{"type":"string","description":"Support ticket id.","example":"tkt_123"},"body":{"type":"string","description":"Message body.","example":"Need help with readiness."},"authorRole":{"type":"string","enum":["user","support","system"],"description":"Message author role.","example":"user"},"createdAt":{"type":"string","format":"date-time","description":"Message creation timestamp.","example":"2026-07-01T12:00:00.000Z"}}},"CreateSupportTicketRequest":{"type":"object","required":["title","description"],"properties":{"title":{"type":"string","description":"Ticket title.","example":"API question"},"description":{"type":"string","description":"Initial ticket description.","example":"Need help with readiness."},"category":{"type":"string","description":"Support category.","example":"general"},"priority":{"type":"string","enum":["low","normal","high","urgent"],"description":"Ticket priority.","example":"normal"},"contactEmail":{"type":"string","description":"Optional support contact email.","example":"dev@example.com"}}},"CreateSupportTicketMultipartRequest":{"type":"object","required":["title","description"],"properties":{"title":{"type":"string","description":"Ticket title.","example":"API question"},"description":{"type":"string","description":"Initial ticket description.","example":"Screenshot attached."},"category":{"type":"string","description":"Support category.","example":"general"},"priority":{"type":"string","enum":["low","normal","high","urgent"],"description":"Ticket priority.","example":"normal"},"contactEmail":{"type":"string","description":"Optional support contact email.","example":"dev@example.com"},"attachments":{"type":"array","items":{"type":"string","format":"binary"},"description":"Optional screenshot files. Use field name attachments."}}},"CreateSupportMessageRequest":{"type":"object","required":["body"],"properties":{"body":{"type":"string","description":"Reply body.","example":"Thanks, here is more detail."}}},"CreateSupportMessageMultipartRequest":{"type":"object","required":["body"],"properties":{"body":{"type":"string","description":"Reply body.","example":"Here is the screenshot."},"attachments":{"type":"array","items":{"type":"string","format":"binary"},"description":"Optional screenshot files. Use field name attachments."}}},"McpManifest":{"type":"object","required":["protocolVersion","serverInfo","endpoint","capabilities"],"properties":{"protocolVersion":{"type":"string","description":"MCP protocol version.","example":"2025-11-25"},"serverInfo":{"type":"object","properties":{"name":{"type":"string","description":"Server name.","example":"finkmesh"},"version":{"type":"string","description":"Server version.","example":"2026-07-01"}}},"endpoint":{"type":"string","description":"MCP endpoint path.","example":"/api/mcp"},"capabilities":{"type":"object","additionalProperties":true}}},"McpJsonRpcRequest":{"type":"object","required":["jsonrpc","id","method"],"properties":{"jsonrpc":{"type":"string","enum":["2.0"],"description":"JSON-RPC version.","example":"2.0"},"id":{"oneOf":[{"type":"string"},{"type":"integer"}]},"method":{"type":"string","description":"JSON-RPC method.","example":"tools/list"},"params":{"type":"object","additionalProperties":true}}},"McpJsonRpcResponse":{"type":"object","required":["jsonrpc","id"],"properties":{"jsonrpc":{"type":"string","enum":["2.0"],"description":"JSON-RPC version.","example":"2.0"},"id":{"oneOf":[{"type":"string"},{"type":"integer"},{"type":"null"}]},"result":{"type":"object","additionalProperties":true},"error":{"type":"object","additionalProperties":true}}}}},"paths":{"/api/v1/me":{"get":{"operationId":"getMe","tags":["Account"],"summary":"Get token context","description":"Get token context. Required scope: workspace:read.","parameters":[],"responses":{"200":{"description":"OK","headers":{"FinkMesh-Request-Id":{"$ref":"#/components/headers/FinkMeshRequestId"},"FinkMesh-API-Version":{"$ref":"#/components/headers/FinkMeshAPIVersion"},"FinkMesh-RateLimit-Limit":{"$ref":"#/components/headers/FinkMeshRateLimitLimit"},"FinkMesh-RateLimit-Remaining":{"$ref":"#/components/headers/FinkMeshRateLimitRemaining"},"FinkMesh-RateLimit-Reset":{"$ref":"#/components/headers/FinkMeshRateLimitReset"}},"content":{"application/json":{"schema":{"type":"object","required":["data","requestId","apiVersion"],"properties":{"data":{"$ref":"#/components/schemas/TokenContext"},"pagination":{"$ref":"#/components/schemas/Pagination"},"requestId":{"type":"string","example":"req_0123456789abcdef"},"apiVersion":{"type":"string","example":"2026-07-01"}}},"examples":{"default":{"summary":"OK","value":{"data":{"token":{"id":"tok_123","name":"Production token","scopes":["workspace:read","workflows:read"]},"user":{"id":"usr_123","email":"dev@example.com"},"workspace":{"id":"wsp_123","name":"Launch Smoke","slug":"launch-smoke","role":"owner"},"organization":{"id":"org_123","name":"Example Co"}},"requestId":"req_0123456789abcdef","apiVersion":"2026-07-01"}}}}}},"400":{"description":"Bad request","headers":{"FinkMesh-Request-Id":{"$ref":"#/components/headers/FinkMeshRequestId"},"FinkMesh-API-Version":{"$ref":"#/components/headers/FinkMeshAPIVersion"},"FinkMesh-RateLimit-Limit":{"$ref":"#/components/headers/FinkMeshRateLimitLimit"},"FinkMesh-RateLimit-Remaining":{"$ref":"#/components/headers/FinkMeshRateLimitRemaining"},"FinkMesh-RateLimit-Reset":{"$ref":"#/components/headers/FinkMeshRateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"Bad request","value":{"error":{"code":"VALIDATION_ERROR","message":"Request validation failed.","details":{"field":"limit"},"requestId":"req_0123456789abcdef","apiVersion":"2026-07-01"}}}}}}},"401":{"description":"Unauthorized","headers":{"FinkMesh-Request-Id":{"$ref":"#/components/headers/FinkMeshRequestId"},"FinkMesh-API-Version":{"$ref":"#/components/headers/FinkMeshAPIVersion"},"FinkMesh-RateLimit-Limit":{"$ref":"#/components/headers/FinkMeshRateLimitLimit"},"FinkMesh-RateLimit-Remaining":{"$ref":"#/components/headers/FinkMeshRateLimitRemaining"},"FinkMesh-RateLimit-Reset":{"$ref":"#/components/headers/FinkMeshRateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"Unauthorized","value":{"error":{"code":"UNAUTHORIZED","message":"Missing or invalid API token. Provide Authorization: Bearer <token>.","requestId":"req_0123456789abcdef","apiVersion":"2026-07-01"}}}}}}},"403":{"description":"Insufficient scope","headers":{"FinkMesh-Request-Id":{"$ref":"#/components/headers/FinkMeshRequestId"},"FinkMesh-API-Version":{"$ref":"#/components/headers/FinkMeshAPIVersion"},"FinkMesh-RateLimit-Limit":{"$ref":"#/components/headers/FinkMeshRateLimitLimit"},"FinkMesh-RateLimit-Remaining":{"$ref":"#/components/headers/FinkMeshRateLimitRemaining"},"FinkMesh-RateLimit-Reset":{"$ref":"#/components/headers/FinkMeshRateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"Insufficient scope","value":{"error":{"code":"INSUFFICIENT_SCOPE","message":"Token lacks required scope.","details":{"requiredScope":"workflows:read"},"requestId":"req_0123456789abcdef","apiVersion":"2026-07-01"}}}}}}},"404":{"description":"Not found","headers":{"FinkMesh-Request-Id":{"$ref":"#/components/headers/FinkMeshRequestId"},"FinkMesh-API-Version":{"$ref":"#/components/headers/FinkMeshAPIVersion"},"FinkMesh-RateLimit-Limit":{"$ref":"#/components/headers/FinkMeshRateLimitLimit"},"FinkMesh-RateLimit-Remaining":{"$ref":"#/components/headers/FinkMeshRateLimitRemaining"},"FinkMesh-RateLimit-Reset":{"$ref":"#/components/headers/FinkMeshRateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"Not found","value":{"error":{"code":"NOT_FOUND","message":"Resource not found.","requestId":"req_0123456789abcdef","apiVersion":"2026-07-01"}}}}}}},"429":{"description":"Rate limited","headers":{"FinkMesh-Request-Id":{"$ref":"#/components/headers/FinkMeshRequestId"},"FinkMesh-API-Version":{"$ref":"#/components/headers/FinkMeshAPIVersion"},"FinkMesh-RateLimit-Limit":{"$ref":"#/components/headers/FinkMeshRateLimitLimit"},"FinkMesh-RateLimit-Remaining":{"$ref":"#/components/headers/FinkMeshRateLimitRemaining"},"FinkMesh-RateLimit-Reset":{"$ref":"#/components/headers/FinkMeshRateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"Rate limited","value":{"error":{"code":"RATE_LIMITED","message":"Rate limit exceeded.","details":{"retryAfter":30},"requestId":"req_0123456789abcdef","apiVersion":"2026-07-01"}}}}}}},"500":{"description":"Internal error","headers":{"FinkMesh-Request-Id":{"$ref":"#/components/headers/FinkMeshRequestId"},"FinkMesh-API-Version":{"$ref":"#/components/headers/FinkMeshAPIVersion"},"FinkMesh-RateLimit-Limit":{"$ref":"#/components/headers/FinkMeshRateLimitLimit"},"FinkMesh-RateLimit-Remaining":{"$ref":"#/components/headers/FinkMeshRateLimitRemaining"},"FinkMesh-RateLimit-Reset":{"$ref":"#/components/headers/FinkMeshRateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"Internal error","value":{"error":{"code":"INTERNAL_ERROR","message":"Internal server error.","requestId":"req_0123456789abcdef","apiVersion":"2026-07-01"}}}}}}}},"security":[{"bearerAuth":[]}],"x-required-scope":"workspace:read"}},"/api/v1/org":{"get":{"operationId":"getOrganizationContext","tags":["Account"],"summary":"Get organization context","description":"Get organization context. Required scope: workspace:read.","parameters":[],"responses":{"200":{"description":"OK","headers":{"FinkMesh-Request-Id":{"$ref":"#/components/headers/FinkMeshRequestId"},"FinkMesh-API-Version":{"$ref":"#/components/headers/FinkMeshAPIVersion"},"FinkMesh-RateLimit-Limit":{"$ref":"#/components/headers/FinkMeshRateLimitLimit"},"FinkMesh-RateLimit-Remaining":{"$ref":"#/components/headers/FinkMeshRateLimitRemaining"},"FinkMesh-RateLimit-Reset":{"$ref":"#/components/headers/FinkMeshRateLimitReset"}},"content":{"application/json":{"schema":{"type":"object","required":["data","requestId","apiVersion"],"properties":{"data":{"$ref":"#/components/schemas/OrganizationContext"},"pagination":{"$ref":"#/components/schemas/Pagination"},"requestId":{"type":"string","example":"req_0123456789abcdef"},"apiVersion":{"type":"string","example":"2026-07-01"}}},"examples":{"default":{"summary":"OK","value":{"data":{"organization":{"id":"org_123","name":"Example Co"},"workspace":{"id":"wsp_123","name":"Launch Smoke","slug":"launch-smoke","role":"owner"},"subscription":{"planKey":"pro","status":"active"}},"requestId":"req_0123456789abcdef","apiVersion":"2026-07-01"}}}}}},"400":{"description":"Bad request","headers":{"FinkMesh-Request-Id":{"$ref":"#/components/headers/FinkMeshRequestId"},"FinkMesh-API-Version":{"$ref":"#/components/headers/FinkMeshAPIVersion"},"FinkMesh-RateLimit-Limit":{"$ref":"#/components/headers/FinkMeshRateLimitLimit"},"FinkMesh-RateLimit-Remaining":{"$ref":"#/components/headers/FinkMeshRateLimitRemaining"},"FinkMesh-RateLimit-Reset":{"$ref":"#/components/headers/FinkMeshRateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"Bad request","value":{"error":{"code":"VALIDATION_ERROR","message":"Request validation failed.","details":{"field":"limit"},"requestId":"req_0123456789abcdef","apiVersion":"2026-07-01"}}}}}}},"401":{"description":"Unauthorized","headers":{"FinkMesh-Request-Id":{"$ref":"#/components/headers/FinkMeshRequestId"},"FinkMesh-API-Version":{"$ref":"#/components/headers/FinkMeshAPIVersion"},"FinkMesh-RateLimit-Limit":{"$ref":"#/components/headers/FinkMeshRateLimitLimit"},"FinkMesh-RateLimit-Remaining":{"$ref":"#/components/headers/FinkMeshRateLimitRemaining"},"FinkMesh-RateLimit-Reset":{"$ref":"#/components/headers/FinkMeshRateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"Unauthorized","value":{"error":{"code":"UNAUTHORIZED","message":"Missing or invalid API token. Provide Authorization: Bearer <token>.","requestId":"req_0123456789abcdef","apiVersion":"2026-07-01"}}}}}}},"403":{"description":"Insufficient scope","headers":{"FinkMesh-Request-Id":{"$ref":"#/components/headers/FinkMeshRequestId"},"FinkMesh-API-Version":{"$ref":"#/components/headers/FinkMeshAPIVersion"},"FinkMesh-RateLimit-Limit":{"$ref":"#/components/headers/FinkMeshRateLimitLimit"},"FinkMesh-RateLimit-Remaining":{"$ref":"#/components/headers/FinkMeshRateLimitRemaining"},"FinkMesh-RateLimit-Reset":{"$ref":"#/components/headers/FinkMeshRateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"Insufficient scope","value":{"error":{"code":"INSUFFICIENT_SCOPE","message":"Token lacks required scope.","details":{"requiredScope":"workflows:read"},"requestId":"req_0123456789abcdef","apiVersion":"2026-07-01"}}}}}}},"404":{"description":"Not found","headers":{"FinkMesh-Request-Id":{"$ref":"#/components/headers/FinkMeshRequestId"},"FinkMesh-API-Version":{"$ref":"#/components/headers/FinkMeshAPIVersion"},"FinkMesh-RateLimit-Limit":{"$ref":"#/components/headers/FinkMeshRateLimitLimit"},"FinkMesh-RateLimit-Remaining":{"$ref":"#/components/headers/FinkMeshRateLimitRemaining"},"FinkMesh-RateLimit-Reset":{"$ref":"#/components/headers/FinkMeshRateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"Not found","value":{"error":{"code":"NOT_FOUND","message":"Resource not found.","requestId":"req_0123456789abcdef","apiVersion":"2026-07-01"}}}}}}},"429":{"description":"Rate limited","headers":{"FinkMesh-Request-Id":{"$ref":"#/components/headers/FinkMeshRequestId"},"FinkMesh-API-Version":{"$ref":"#/components/headers/FinkMeshAPIVersion"},"FinkMesh-RateLimit-Limit":{"$ref":"#/components/headers/FinkMeshRateLimitLimit"},"FinkMesh-RateLimit-Remaining":{"$ref":"#/components/headers/FinkMeshRateLimitRemaining"},"FinkMesh-RateLimit-Reset":{"$ref":"#/components/headers/FinkMeshRateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"Rate limited","value":{"error":{"code":"RATE_LIMITED","message":"Rate limit exceeded.","details":{"retryAfter":30},"requestId":"req_0123456789abcdef","apiVersion":"2026-07-01"}}}}}}},"500":{"description":"Internal error","headers":{"FinkMesh-Request-Id":{"$ref":"#/components/headers/FinkMeshRequestId"},"FinkMesh-API-Version":{"$ref":"#/components/headers/FinkMeshAPIVersion"},"FinkMesh-RateLimit-Limit":{"$ref":"#/components/headers/FinkMeshRateLimitLimit"},"FinkMesh-RateLimit-Remaining":{"$ref":"#/components/headers/FinkMeshRateLimitRemaining"},"FinkMesh-RateLimit-Reset":{"$ref":"#/components/headers/FinkMeshRateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"Internal error","value":{"error":{"code":"INTERNAL_ERROR","message":"Internal server error.","requestId":"req_0123456789abcdef","apiVersion":"2026-07-01"}}}}}}}},"security":[{"bearerAuth":[]}],"x-required-scope":"workspace:read"}},"/api/v1/usage":{"get":{"operationId":"getUsage","tags":["Account"],"summary":"Get monthly usage","description":"Get monthly usage. Required scope: runs:read.","parameters":[],"responses":{"200":{"description":"OK","headers":{"FinkMesh-Request-Id":{"$ref":"#/components/headers/FinkMeshRequestId"},"FinkMesh-API-Version":{"$ref":"#/components/headers/FinkMeshAPIVersion"},"FinkMesh-RateLimit-Limit":{"$ref":"#/components/headers/FinkMeshRateLimitLimit"},"FinkMesh-RateLimit-Remaining":{"$ref":"#/components/headers/FinkMeshRateLimitRemaining"},"FinkMesh-RateLimit-Reset":{"$ref":"#/components/headers/FinkMeshRateLimitReset"}},"content":{"application/json":{"schema":{"type":"object","required":["data","requestId","apiVersion"],"properties":{"data":{"$ref":"#/components/schemas/UsageSummary"},"pagination":{"$ref":"#/components/schemas/Pagination"},"requestId":{"type":"string","example":"req_0123456789abcdef"},"apiVersion":{"type":"string","example":"2026-07-01"}}},"examples":{"default":{"summary":"OK","value":{"data":{"period":{"startsAt":"2026-07-01T00:00:00.000Z","endsAt":"2026-08-01T00:00:00.000Z"},"runs":{"used":42,"limit":10000},"limits":{"workflows":100,"members":10},"plan":"pro"},"requestId":"req_0123456789abcdef","apiVersion":"2026-07-01"}}}}}},"400":{"description":"Bad request","headers":{"FinkMesh-Request-Id":{"$ref":"#/components/headers/FinkMeshRequestId"},"FinkMesh-API-Version":{"$ref":"#/components/headers/FinkMeshAPIVersion"},"FinkMesh-RateLimit-Limit":{"$ref":"#/components/headers/FinkMeshRateLimitLimit"},"FinkMesh-RateLimit-Remaining":{"$ref":"#/components/headers/FinkMeshRateLimitRemaining"},"FinkMesh-RateLimit-Reset":{"$ref":"#/components/headers/FinkMeshRateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"Bad request","value":{"error":{"code":"VALIDATION_ERROR","message":"Request validation failed.","details":{"field":"limit"},"requestId":"req_0123456789abcdef","apiVersion":"2026-07-01"}}}}}}},"401":{"description":"Unauthorized","headers":{"FinkMesh-Request-Id":{"$ref":"#/components/headers/FinkMeshRequestId"},"FinkMesh-API-Version":{"$ref":"#/components/headers/FinkMeshAPIVersion"},"FinkMesh-RateLimit-Limit":{"$ref":"#/components/headers/FinkMeshRateLimitLimit"},"FinkMesh-RateLimit-Remaining":{"$ref":"#/components/headers/FinkMeshRateLimitRemaining"},"FinkMesh-RateLimit-Reset":{"$ref":"#/components/headers/FinkMeshRateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"Unauthorized","value":{"error":{"code":"UNAUTHORIZED","message":"Missing or invalid API token. Provide Authorization: Bearer <token>.","requestId":"req_0123456789abcdef","apiVersion":"2026-07-01"}}}}}}},"403":{"description":"Insufficient scope","headers":{"FinkMesh-Request-Id":{"$ref":"#/components/headers/FinkMeshRequestId"},"FinkMesh-API-Version":{"$ref":"#/components/headers/FinkMeshAPIVersion"},"FinkMesh-RateLimit-Limit":{"$ref":"#/components/headers/FinkMeshRateLimitLimit"},"FinkMesh-RateLimit-Remaining":{"$ref":"#/components/headers/FinkMeshRateLimitRemaining"},"FinkMesh-RateLimit-Reset":{"$ref":"#/components/headers/FinkMeshRateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"Insufficient scope","value":{"error":{"code":"INSUFFICIENT_SCOPE","message":"Token lacks required scope.","details":{"requiredScope":"workflows:read"},"requestId":"req_0123456789abcdef","apiVersion":"2026-07-01"}}}}}}},"404":{"description":"Not found","headers":{"FinkMesh-Request-Id":{"$ref":"#/components/headers/FinkMeshRequestId"},"FinkMesh-API-Version":{"$ref":"#/components/headers/FinkMeshAPIVersion"},"FinkMesh-RateLimit-Limit":{"$ref":"#/components/headers/FinkMeshRateLimitLimit"},"FinkMesh-RateLimit-Remaining":{"$ref":"#/components/headers/FinkMeshRateLimitRemaining"},"FinkMesh-RateLimit-Reset":{"$ref":"#/components/headers/FinkMeshRateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"Not found","value":{"error":{"code":"NOT_FOUND","message":"Resource not found.","requestId":"req_0123456789abcdef","apiVersion":"2026-07-01"}}}}}}},"429":{"description":"Rate limited","headers":{"FinkMesh-Request-Id":{"$ref":"#/components/headers/FinkMeshRequestId"},"FinkMesh-API-Version":{"$ref":"#/components/headers/FinkMeshAPIVersion"},"FinkMesh-RateLimit-Limit":{"$ref":"#/components/headers/FinkMeshRateLimitLimit"},"FinkMesh-RateLimit-Remaining":{"$ref":"#/components/headers/FinkMeshRateLimitRemaining"},"FinkMesh-RateLimit-Reset":{"$ref":"#/components/headers/FinkMeshRateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"Rate limited","value":{"error":{"code":"RATE_LIMITED","message":"Rate limit exceeded.","details":{"retryAfter":30},"requestId":"req_0123456789abcdef","apiVersion":"2026-07-01"}}}}}}},"500":{"description":"Internal error","headers":{"FinkMesh-Request-Id":{"$ref":"#/components/headers/FinkMeshRequestId"},"FinkMesh-API-Version":{"$ref":"#/components/headers/FinkMeshAPIVersion"},"FinkMesh-RateLimit-Limit":{"$ref":"#/components/headers/FinkMeshRateLimitLimit"},"FinkMesh-RateLimit-Remaining":{"$ref":"#/components/headers/FinkMeshRateLimitRemaining"},"FinkMesh-RateLimit-Reset":{"$ref":"#/components/headers/FinkMeshRateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"Internal error","value":{"error":{"code":"INTERNAL_ERROR","message":"Internal server error.","requestId":"req_0123456789abcdef","apiVersion":"2026-07-01"}}}}}}}},"security":[{"bearerAuth":[]}],"x-required-scope":"runs:read"}},"/api/v1/limits":{"get":{"operationId":"getLimits","tags":["Account"],"summary":"Get limits and entitlements","description":"Get limits and entitlements. Required scope: runs:read.","parameters":[],"responses":{"200":{"description":"OK","headers":{"FinkMesh-Request-Id":{"$ref":"#/components/headers/FinkMeshRequestId"},"FinkMesh-API-Version":{"$ref":"#/components/headers/FinkMeshAPIVersion"},"FinkMesh-RateLimit-Limit":{"$ref":"#/components/headers/FinkMeshRateLimitLimit"},"FinkMesh-RateLimit-Remaining":{"$ref":"#/components/headers/FinkMeshRateLimitRemaining"},"FinkMesh-RateLimit-Reset":{"$ref":"#/components/headers/FinkMeshRateLimitReset"}},"content":{"application/json":{"schema":{"type":"object","required":["data","requestId","apiVersion"],"properties":{"data":{"$ref":"#/components/schemas/LimitSummary"},"pagination":{"$ref":"#/components/schemas/Pagination"},"requestId":{"type":"string","example":"req_0123456789abcdef"},"apiVersion":{"type":"string","example":"2026-07-01"}}},"examples":{"default":{"summary":"OK","value":{"data":{"plan":"pro","features":{"nativeIntegrations":true,"schedules":true,"webhooks":true},"usage":{"runs":42,"workflows":8}},"requestId":"req_0123456789abcdef","apiVersion":"2026-07-01"}}}}}},"400":{"description":"Bad request","headers":{"FinkMesh-Request-Id":{"$ref":"#/components/headers/FinkMeshRequestId"},"FinkMesh-API-Version":{"$ref":"#/components/headers/FinkMeshAPIVersion"},"FinkMesh-RateLimit-Limit":{"$ref":"#/components/headers/FinkMeshRateLimitLimit"},"FinkMesh-RateLimit-Remaining":{"$ref":"#/components/headers/FinkMeshRateLimitRemaining"},"FinkMesh-RateLimit-Reset":{"$ref":"#/components/headers/FinkMeshRateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"Bad request","value":{"error":{"code":"VALIDATION_ERROR","message":"Request validation failed.","details":{"field":"limit"},"requestId":"req_0123456789abcdef","apiVersion":"2026-07-01"}}}}}}},"401":{"description":"Unauthorized","headers":{"FinkMesh-Request-Id":{"$ref":"#/components/headers/FinkMeshRequestId"},"FinkMesh-API-Version":{"$ref":"#/components/headers/FinkMeshAPIVersion"},"FinkMesh-RateLimit-Limit":{"$ref":"#/components/headers/FinkMeshRateLimitLimit"},"FinkMesh-RateLimit-Remaining":{"$ref":"#/components/headers/FinkMeshRateLimitRemaining"},"FinkMesh-RateLimit-Reset":{"$ref":"#/components/headers/FinkMeshRateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"Unauthorized","value":{"error":{"code":"UNAUTHORIZED","message":"Missing or invalid API token. Provide Authorization: Bearer <token>.","requestId":"req_0123456789abcdef","apiVersion":"2026-07-01"}}}}}}},"403":{"description":"Insufficient scope","headers":{"FinkMesh-Request-Id":{"$ref":"#/components/headers/FinkMeshRequestId"},"FinkMesh-API-Version":{"$ref":"#/components/headers/FinkMeshAPIVersion"},"FinkMesh-RateLimit-Limit":{"$ref":"#/components/headers/FinkMeshRateLimitLimit"},"FinkMesh-RateLimit-Remaining":{"$ref":"#/components/headers/FinkMeshRateLimitRemaining"},"FinkMesh-RateLimit-Reset":{"$ref":"#/components/headers/FinkMeshRateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"Insufficient scope","value":{"error":{"code":"INSUFFICIENT_SCOPE","message":"Token lacks required scope.","details":{"requiredScope":"workflows:read"},"requestId":"req_0123456789abcdef","apiVersion":"2026-07-01"}}}}}}},"404":{"description":"Not found","headers":{"FinkMesh-Request-Id":{"$ref":"#/components/headers/FinkMeshRequestId"},"FinkMesh-API-Version":{"$ref":"#/components/headers/FinkMeshAPIVersion"},"FinkMesh-RateLimit-Limit":{"$ref":"#/components/headers/FinkMeshRateLimitLimit"},"FinkMesh-RateLimit-Remaining":{"$ref":"#/components/headers/FinkMeshRateLimitRemaining"},"FinkMesh-RateLimit-Reset":{"$ref":"#/components/headers/FinkMeshRateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"Not found","value":{"error":{"code":"NOT_FOUND","message":"Resource not found.","requestId":"req_0123456789abcdef","apiVersion":"2026-07-01"}}}}}}},"429":{"description":"Rate limited","headers":{"FinkMesh-Request-Id":{"$ref":"#/components/headers/FinkMeshRequestId"},"FinkMesh-API-Version":{"$ref":"#/components/headers/FinkMeshAPIVersion"},"FinkMesh-RateLimit-Limit":{"$ref":"#/components/headers/FinkMeshRateLimitLimit"},"FinkMesh-RateLimit-Remaining":{"$ref":"#/components/headers/FinkMeshRateLimitRemaining"},"FinkMesh-RateLimit-Reset":{"$ref":"#/components/headers/FinkMeshRateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"Rate limited","value":{"error":{"code":"RATE_LIMITED","message":"Rate limit exceeded.","details":{"retryAfter":30},"requestId":"req_0123456789abcdef","apiVersion":"2026-07-01"}}}}}}},"500":{"description":"Internal error","headers":{"FinkMesh-Request-Id":{"$ref":"#/components/headers/FinkMeshRequestId"},"FinkMesh-API-Version":{"$ref":"#/components/headers/FinkMeshAPIVersion"},"FinkMesh-RateLimit-Limit":{"$ref":"#/components/headers/FinkMeshRateLimitLimit"},"FinkMesh-RateLimit-Remaining":{"$ref":"#/components/headers/FinkMeshRateLimitRemaining"},"FinkMesh-RateLimit-Reset":{"$ref":"#/components/headers/FinkMeshRateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"Internal error","value":{"error":{"code":"INTERNAL_ERROR","message":"Internal server error.","requestId":"req_0123456789abcdef","apiVersion":"2026-07-01"}}}}}}}},"security":[{"bearerAuth":[]}],"x-required-scope":"runs:read"}},"/api/v1/workspaces":{"get":{"operationId":"listWorkspaces","tags":["Workspaces"],"summary":"List workspaces","description":"List workspaces. Required scope: workspace:read.","parameters":[{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":100},"description":"Page size."},{"name":"cursor","in":"query","schema":{"type":"string"},"description":"Cursor returned by pagination.nextCursor."}],"responses":{"200":{"description":"OK","headers":{"FinkMesh-Request-Id":{"$ref":"#/components/headers/FinkMeshRequestId"},"FinkMesh-API-Version":{"$ref":"#/components/headers/FinkMeshAPIVersion"},"FinkMesh-RateLimit-Limit":{"$ref":"#/components/headers/FinkMeshRateLimitLimit"},"FinkMesh-RateLimit-Remaining":{"$ref":"#/components/headers/FinkMeshRateLimitRemaining"},"FinkMesh-RateLimit-Reset":{"$ref":"#/components/headers/FinkMeshRateLimitReset"}},"content":{"application/json":{"schema":{"type":"object","required":["data","requestId","apiVersion"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/WorkspaceSummary"}},"pagination":{"$ref":"#/components/schemas/Pagination"},"requestId":{"type":"string","example":"req_0123456789abcdef"},"apiVersion":{"type":"string","example":"2026-07-01"}}},"examples":{"default":{"summary":"OK","value":{"data":[{"id":"wsp_123","name":"Launch Smoke","slug":"launch-smoke","role":"owner"}],"pagination":{"limit":10,"hasMore":false,"nextCursor":null},"requestId":"req_0123456789abcdef","apiVersion":"2026-07-01"}}}}}},"400":{"description":"Bad request","headers":{"FinkMesh-Request-Id":{"$ref":"#/components/headers/FinkMeshRequestId"},"FinkMesh-API-Version":{"$ref":"#/components/headers/FinkMeshAPIVersion"},"FinkMesh-RateLimit-Limit":{"$ref":"#/components/headers/FinkMeshRateLimitLimit"},"FinkMesh-RateLimit-Remaining":{"$ref":"#/components/headers/FinkMeshRateLimitRemaining"},"FinkMesh-RateLimit-Reset":{"$ref":"#/components/headers/FinkMeshRateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"Bad request","value":{"error":{"code":"VALIDATION_ERROR","message":"Request validation failed.","details":{"field":"limit"},"requestId":"req_0123456789abcdef","apiVersion":"2026-07-01"}}}}}}},"401":{"description":"Unauthorized","headers":{"FinkMesh-Request-Id":{"$ref":"#/components/headers/FinkMeshRequestId"},"FinkMesh-API-Version":{"$ref":"#/components/headers/FinkMeshAPIVersion"},"FinkMesh-RateLimit-Limit":{"$ref":"#/components/headers/FinkMeshRateLimitLimit"},"FinkMesh-RateLimit-Remaining":{"$ref":"#/components/headers/FinkMeshRateLimitRemaining"},"FinkMesh-RateLimit-Reset":{"$ref":"#/components/headers/FinkMeshRateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"Unauthorized","value":{"error":{"code":"UNAUTHORIZED","message":"Missing or invalid API token. Provide Authorization: Bearer <token>.","requestId":"req_0123456789abcdef","apiVersion":"2026-07-01"}}}}}}},"403":{"description":"Insufficient scope","headers":{"FinkMesh-Request-Id":{"$ref":"#/components/headers/FinkMeshRequestId"},"FinkMesh-API-Version":{"$ref":"#/components/headers/FinkMeshAPIVersion"},"FinkMesh-RateLimit-Limit":{"$ref":"#/components/headers/FinkMeshRateLimitLimit"},"FinkMesh-RateLimit-Remaining":{"$ref":"#/components/headers/FinkMeshRateLimitRemaining"},"FinkMesh-RateLimit-Reset":{"$ref":"#/components/headers/FinkMeshRateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"Insufficient scope","value":{"error":{"code":"INSUFFICIENT_SCOPE","message":"Token lacks required scope.","details":{"requiredScope":"workflows:read"},"requestId":"req_0123456789abcdef","apiVersion":"2026-07-01"}}}}}}},"404":{"description":"Not found","headers":{"FinkMesh-Request-Id":{"$ref":"#/components/headers/FinkMeshRequestId"},"FinkMesh-API-Version":{"$ref":"#/components/headers/FinkMeshAPIVersion"},"FinkMesh-RateLimit-Limit":{"$ref":"#/components/headers/FinkMeshRateLimitLimit"},"FinkMesh-RateLimit-Remaining":{"$ref":"#/components/headers/FinkMeshRateLimitRemaining"},"FinkMesh-RateLimit-Reset":{"$ref":"#/components/headers/FinkMeshRateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"Not found","value":{"error":{"code":"NOT_FOUND","message":"Resource not found.","requestId":"req_0123456789abcdef","apiVersion":"2026-07-01"}}}}}}},"429":{"description":"Rate limited","headers":{"FinkMesh-Request-Id":{"$ref":"#/components/headers/FinkMeshRequestId"},"FinkMesh-API-Version":{"$ref":"#/components/headers/FinkMeshAPIVersion"},"FinkMesh-RateLimit-Limit":{"$ref":"#/components/headers/FinkMeshRateLimitLimit"},"FinkMesh-RateLimit-Remaining":{"$ref":"#/components/headers/FinkMeshRateLimitRemaining"},"FinkMesh-RateLimit-Reset":{"$ref":"#/components/headers/FinkMeshRateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"Rate limited","value":{"error":{"code":"RATE_LIMITED","message":"Rate limit exceeded.","details":{"retryAfter":30},"requestId":"req_0123456789abcdef","apiVersion":"2026-07-01"}}}}}}},"500":{"description":"Internal error","headers":{"FinkMesh-Request-Id":{"$ref":"#/components/headers/FinkMeshRequestId"},"FinkMesh-API-Version":{"$ref":"#/components/headers/FinkMeshAPIVersion"},"FinkMesh-RateLimit-Limit":{"$ref":"#/components/headers/FinkMeshRateLimitLimit"},"FinkMesh-RateLimit-Remaining":{"$ref":"#/components/headers/FinkMeshRateLimitRemaining"},"FinkMesh-RateLimit-Reset":{"$ref":"#/components/headers/FinkMeshRateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"Internal error","value":{"error":{"code":"INTERNAL_ERROR","message":"Internal server error.","requestId":"req_0123456789abcdef","apiVersion":"2026-07-01"}}}}}}}},"security":[{"bearerAuth":[]}],"x-required-scope":"workspace:read"}},"/api/v1/workspaces/{workspaceId}":{"get":{"operationId":"getWorkspace","tags":["Workspaces"],"summary":"Get workspace","description":"Get workspace. Required scope: workspace:read.","parameters":[{"name":"workspaceId","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","headers":{"FinkMesh-Request-Id":{"$ref":"#/components/headers/FinkMeshRequestId"},"FinkMesh-API-Version":{"$ref":"#/components/headers/FinkMeshAPIVersion"},"FinkMesh-RateLimit-Limit":{"$ref":"#/components/headers/FinkMeshRateLimitLimit"},"FinkMesh-RateLimit-Remaining":{"$ref":"#/components/headers/FinkMeshRateLimitRemaining"},"FinkMesh-RateLimit-Reset":{"$ref":"#/components/headers/FinkMeshRateLimitReset"}},"content":{"application/json":{"schema":{"type":"object","required":["data","requestId","apiVersion"],"properties":{"data":{"$ref":"#/components/schemas/WorkspaceSummary"},"pagination":{"$ref":"#/components/schemas/Pagination"},"requestId":{"type":"string","example":"req_0123456789abcdef"},"apiVersion":{"type":"string","example":"2026-07-01"}}},"examples":{"default":{"summary":"OK","value":{"data":{"id":"wsp_123","name":"Launch Smoke","slug":"launch-smoke","role":"owner"},"requestId":"req_0123456789abcdef","apiVersion":"2026-07-01"}}}}}},"400":{"description":"Bad request","headers":{"FinkMesh-Request-Id":{"$ref":"#/components/headers/FinkMeshRequestId"},"FinkMesh-API-Version":{"$ref":"#/components/headers/FinkMeshAPIVersion"},"FinkMesh-RateLimit-Limit":{"$ref":"#/components/headers/FinkMeshRateLimitLimit"},"FinkMesh-RateLimit-Remaining":{"$ref":"#/components/headers/FinkMeshRateLimitRemaining"},"FinkMesh-RateLimit-Reset":{"$ref":"#/components/headers/FinkMeshRateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"Bad request","value":{"error":{"code":"VALIDATION_ERROR","message":"Request validation failed.","details":{"field":"limit"},"requestId":"req_0123456789abcdef","apiVersion":"2026-07-01"}}}}}}},"401":{"description":"Unauthorized","headers":{"FinkMesh-Request-Id":{"$ref":"#/components/headers/FinkMeshRequestId"},"FinkMesh-API-Version":{"$ref":"#/components/headers/FinkMeshAPIVersion"},"FinkMesh-RateLimit-Limit":{"$ref":"#/components/headers/FinkMeshRateLimitLimit"},"FinkMesh-RateLimit-Remaining":{"$ref":"#/components/headers/FinkMeshRateLimitRemaining"},"FinkMesh-RateLimit-Reset":{"$ref":"#/components/headers/FinkMeshRateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"Unauthorized","value":{"error":{"code":"UNAUTHORIZED","message":"Missing or invalid API token. Provide Authorization: Bearer <token>.","requestId":"req_0123456789abcdef","apiVersion":"2026-07-01"}}}}}}},"403":{"description":"Insufficient scope","headers":{"FinkMesh-Request-Id":{"$ref":"#/components/headers/FinkMeshRequestId"},"FinkMesh-API-Version":{"$ref":"#/components/headers/FinkMeshAPIVersion"},"FinkMesh-RateLimit-Limit":{"$ref":"#/components/headers/FinkMeshRateLimitLimit"},"FinkMesh-RateLimit-Remaining":{"$ref":"#/components/headers/FinkMeshRateLimitRemaining"},"FinkMesh-RateLimit-Reset":{"$ref":"#/components/headers/FinkMeshRateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"Insufficient scope","value":{"error":{"code":"INSUFFICIENT_SCOPE","message":"Token lacks required scope.","details":{"requiredScope":"workflows:read"},"requestId":"req_0123456789abcdef","apiVersion":"2026-07-01"}}}}}}},"404":{"description":"Not found","headers":{"FinkMesh-Request-Id":{"$ref":"#/components/headers/FinkMeshRequestId"},"FinkMesh-API-Version":{"$ref":"#/components/headers/FinkMeshAPIVersion"},"FinkMesh-RateLimit-Limit":{"$ref":"#/components/headers/FinkMeshRateLimitLimit"},"FinkMesh-RateLimit-Remaining":{"$ref":"#/components/headers/FinkMeshRateLimitRemaining"},"FinkMesh-RateLimit-Reset":{"$ref":"#/components/headers/FinkMeshRateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"Not found","value":{"error":{"code":"NOT_FOUND","message":"Resource not found.","requestId":"req_0123456789abcdef","apiVersion":"2026-07-01"}}}}}}},"429":{"description":"Rate limited","headers":{"FinkMesh-Request-Id":{"$ref":"#/components/headers/FinkMeshRequestId"},"FinkMesh-API-Version":{"$ref":"#/components/headers/FinkMeshAPIVersion"},"FinkMesh-RateLimit-Limit":{"$ref":"#/components/headers/FinkMeshRateLimitLimit"},"FinkMesh-RateLimit-Remaining":{"$ref":"#/components/headers/FinkMeshRateLimitRemaining"},"FinkMesh-RateLimit-Reset":{"$ref":"#/components/headers/FinkMeshRateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"Rate limited","value":{"error":{"code":"RATE_LIMITED","message":"Rate limit exceeded.","details":{"retryAfter":30},"requestId":"req_0123456789abcdef","apiVersion":"2026-07-01"}}}}}}},"500":{"description":"Internal error","headers":{"FinkMesh-Request-Id":{"$ref":"#/components/headers/FinkMeshRequestId"},"FinkMesh-API-Version":{"$ref":"#/components/headers/FinkMeshAPIVersion"},"FinkMesh-RateLimit-Limit":{"$ref":"#/components/headers/FinkMeshRateLimitLimit"},"FinkMesh-RateLimit-Remaining":{"$ref":"#/components/headers/FinkMeshRateLimitRemaining"},"FinkMesh-RateLimit-Reset":{"$ref":"#/components/headers/FinkMeshRateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"Internal error","value":{"error":{"code":"INTERNAL_ERROR","message":"Internal server error.","requestId":"req_0123456789abcdef","apiVersion":"2026-07-01"}}}}}}}},"security":[{"bearerAuth":[]}],"x-required-scope":"workspace:read"}},"/api/v1/workflows":{"get":{"operationId":"listWorkflows","tags":["Workflows"],"summary":"List workflows","description":"List workflows. Required scope: workflows:read.","parameters":[{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":100},"description":"Page size."},{"name":"cursor","in":"query","schema":{"type":"string"},"description":"Cursor returned by pagination.nextCursor."}],"responses":{"200":{"description":"OK","headers":{"FinkMesh-Request-Id":{"$ref":"#/components/headers/FinkMeshRequestId"},"FinkMesh-API-Version":{"$ref":"#/components/headers/FinkMeshAPIVersion"},"FinkMesh-RateLimit-Limit":{"$ref":"#/components/headers/FinkMeshRateLimitLimit"},"FinkMesh-RateLimit-Remaining":{"$ref":"#/components/headers/FinkMeshRateLimitRemaining"},"FinkMesh-RateLimit-Reset":{"$ref":"#/components/headers/FinkMeshRateLimitReset"}},"content":{"application/json":{"schema":{"type":"object","required":["data","requestId","apiVersion"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/WorkflowSummary"}},"pagination":{"$ref":"#/components/schemas/Pagination"},"requestId":{"type":"string","example":"req_0123456789abcdef"},"apiVersion":{"type":"string","example":"2026-07-01"}}},"examples":{"default":{"summary":"OK","value":{"data":[{"id":"wf_123","name":"Lead routing","description":"Routes qualified leads.","active":true,"folderId":null,"nodeCount":4,"errorGuardrail":{"threshold":5,"consecutiveErrorCount":0},"createdAt":"2026-07-01T12:00:00.000Z","updatedAt":"2026-07-01T12:05:00.000Z","links":{"dashboard":"https://www.finkmesh.com/dashboard/workflows/wf_123"}}],"pagination":{"limit":10,"hasMore":false,"nextCursor":null},"requestId":"req_0123456789abcdef","apiVersion":"2026-07-01"}}}}}},"400":{"description":"Bad request","headers":{"FinkMesh-Request-Id":{"$ref":"#/components/headers/FinkMeshRequestId"},"FinkMesh-API-Version":{"$ref":"#/components/headers/FinkMeshAPIVersion"},"FinkMesh-RateLimit-Limit":{"$ref":"#/components/headers/FinkMeshRateLimitLimit"},"FinkMesh-RateLimit-Remaining":{"$ref":"#/components/headers/FinkMeshRateLimitRemaining"},"FinkMesh-RateLimit-Reset":{"$ref":"#/components/headers/FinkMeshRateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"Bad request","value":{"error":{"code":"VALIDATION_ERROR","message":"Request validation failed.","details":{"field":"limit"},"requestId":"req_0123456789abcdef","apiVersion":"2026-07-01"}}}}}}},"401":{"description":"Unauthorized","headers":{"FinkMesh-Request-Id":{"$ref":"#/components/headers/FinkMeshRequestId"},"FinkMesh-API-Version":{"$ref":"#/components/headers/FinkMeshAPIVersion"},"FinkMesh-RateLimit-Limit":{"$ref":"#/components/headers/FinkMeshRateLimitLimit"},"FinkMesh-RateLimit-Remaining":{"$ref":"#/components/headers/FinkMeshRateLimitRemaining"},"FinkMesh-RateLimit-Reset":{"$ref":"#/components/headers/FinkMeshRateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"Unauthorized","value":{"error":{"code":"UNAUTHORIZED","message":"Missing or invalid API token. Provide Authorization: Bearer <token>.","requestId":"req_0123456789abcdef","apiVersion":"2026-07-01"}}}}}}},"403":{"description":"Insufficient scope","headers":{"FinkMesh-Request-Id":{"$ref":"#/components/headers/FinkMeshRequestId"},"FinkMesh-API-Version":{"$ref":"#/components/headers/FinkMeshAPIVersion"},"FinkMesh-RateLimit-Limit":{"$ref":"#/components/headers/FinkMeshRateLimitLimit"},"FinkMesh-RateLimit-Remaining":{"$ref":"#/components/headers/FinkMeshRateLimitRemaining"},"FinkMesh-RateLimit-Reset":{"$ref":"#/components/headers/FinkMeshRateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"Insufficient scope","value":{"error":{"code":"INSUFFICIENT_SCOPE","message":"Token lacks required scope.","details":{"requiredScope":"workflows:read"},"requestId":"req_0123456789abcdef","apiVersion":"2026-07-01"}}}}}}},"404":{"description":"Not found","headers":{"FinkMesh-Request-Id":{"$ref":"#/components/headers/FinkMeshRequestId"},"FinkMesh-API-Version":{"$ref":"#/components/headers/FinkMeshAPIVersion"},"FinkMesh-RateLimit-Limit":{"$ref":"#/components/headers/FinkMeshRateLimitLimit"},"FinkMesh-RateLimit-Remaining":{"$ref":"#/components/headers/FinkMeshRateLimitRemaining"},"FinkMesh-RateLimit-Reset":{"$ref":"#/components/headers/FinkMeshRateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"Not found","value":{"error":{"code":"NOT_FOUND","message":"Resource not found.","requestId":"req_0123456789abcdef","apiVersion":"2026-07-01"}}}}}}},"429":{"description":"Rate limited","headers":{"FinkMesh-Request-Id":{"$ref":"#/components/headers/FinkMeshRequestId"},"FinkMesh-API-Version":{"$ref":"#/components/headers/FinkMeshAPIVersion"},"FinkMesh-RateLimit-Limit":{"$ref":"#/components/headers/FinkMeshRateLimitLimit"},"FinkMesh-RateLimit-Remaining":{"$ref":"#/components/headers/FinkMeshRateLimitRemaining"},"FinkMesh-RateLimit-Reset":{"$ref":"#/components/headers/FinkMeshRateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"Rate limited","value":{"error":{"code":"RATE_LIMITED","message":"Rate limit exceeded.","details":{"retryAfter":30},"requestId":"req_0123456789abcdef","apiVersion":"2026-07-01"}}}}}}},"500":{"description":"Internal error","headers":{"FinkMesh-Request-Id":{"$ref":"#/components/headers/FinkMeshRequestId"},"FinkMesh-API-Version":{"$ref":"#/components/headers/FinkMeshAPIVersion"},"FinkMesh-RateLimit-Limit":{"$ref":"#/components/headers/FinkMeshRateLimitLimit"},"FinkMesh-RateLimit-Remaining":{"$ref":"#/components/headers/FinkMeshRateLimitRemaining"},"FinkMesh-RateLimit-Reset":{"$ref":"#/components/headers/FinkMeshRateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"Internal error","value":{"error":{"code":"INTERNAL_ERROR","message":"Internal server error.","requestId":"req_0123456789abcdef","apiVersion":"2026-07-01"}}}}}}}},"security":[{"bearerAuth":[]}],"x-required-scope":"workflows:read"}},"/api/v1/workflows/{workflowId}":{"get":{"operationId":"getWorkflow","tags":["Workflows"],"summary":"Get workflow","description":"Get workflow. Required scope: workflows:read.","parameters":[{"name":"workflowId","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","headers":{"FinkMesh-Request-Id":{"$ref":"#/components/headers/FinkMeshRequestId"},"FinkMesh-API-Version":{"$ref":"#/components/headers/FinkMeshAPIVersion"},"FinkMesh-RateLimit-Limit":{"$ref":"#/components/headers/FinkMeshRateLimitLimit"},"FinkMesh-RateLimit-Remaining":{"$ref":"#/components/headers/FinkMeshRateLimitRemaining"},"FinkMesh-RateLimit-Reset":{"$ref":"#/components/headers/FinkMeshRateLimitReset"}},"content":{"application/json":{"schema":{"type":"object","required":["data","requestId","apiVersion"],"properties":{"data":{"$ref":"#/components/schemas/WorkflowSummary"},"pagination":{"$ref":"#/components/schemas/Pagination"},"requestId":{"type":"string","example":"req_0123456789abcdef"},"apiVersion":{"type":"string","example":"2026-07-01"}}},"examples":{"default":{"summary":"OK","value":{"data":{"id":"wf_123","name":"Lead routing","description":"Routes qualified leads.","active":true,"folderId":null,"nodeCount":4,"errorGuardrail":{"threshold":5,"consecutiveErrorCount":0},"createdAt":"2026-07-01T12:00:00.000Z","updatedAt":"2026-07-01T12:05:00.000Z","links":{"dashboard":"https://www.finkmesh.com/dashboard/workflows/wf_123"}},"requestId":"req_0123456789abcdef","apiVersion":"2026-07-01"}}}}}},"401":{"description":"Unauthorized","headers":{"FinkMesh-Request-Id":{"$ref":"#/components/headers/FinkMeshRequestId"},"FinkMesh-API-Version":{"$ref":"#/components/headers/FinkMeshAPIVersion"},"FinkMesh-RateLimit-Limit":{"$ref":"#/components/headers/FinkMeshRateLimitLimit"},"FinkMesh-RateLimit-Remaining":{"$ref":"#/components/headers/FinkMeshRateLimitRemaining"},"FinkMesh-RateLimit-Reset":{"$ref":"#/components/headers/FinkMeshRateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"Unauthorized","value":{"error":{"code":"UNAUTHORIZED","message":"Missing or invalid API token. Provide Authorization: Bearer <token>.","requestId":"req_0123456789abcdef","apiVersion":"2026-07-01"}}}}}}},"403":{"description":"Insufficient scope","headers":{"FinkMesh-Request-Id":{"$ref":"#/components/headers/FinkMeshRequestId"},"FinkMesh-API-Version":{"$ref":"#/components/headers/FinkMeshAPIVersion"},"FinkMesh-RateLimit-Limit":{"$ref":"#/components/headers/FinkMeshRateLimitLimit"},"FinkMesh-RateLimit-Remaining":{"$ref":"#/components/headers/FinkMeshRateLimitRemaining"},"FinkMesh-RateLimit-Reset":{"$ref":"#/components/headers/FinkMeshRateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"Insufficient scope","value":{"error":{"code":"INSUFFICIENT_SCOPE","message":"Token lacks required scope.","details":{"requiredScope":"workflows:read"},"requestId":"req_0123456789abcdef","apiVersion":"2026-07-01"}}}}}}},"404":{"description":"Not found","headers":{"FinkMesh-Request-Id":{"$ref":"#/components/headers/FinkMeshRequestId"},"FinkMesh-API-Version":{"$ref":"#/components/headers/FinkMeshAPIVersion"},"FinkMesh-RateLimit-Limit":{"$ref":"#/components/headers/FinkMeshRateLimitLimit"},"FinkMesh-RateLimit-Remaining":{"$ref":"#/components/headers/FinkMeshRateLimitRemaining"},"FinkMesh-RateLimit-Reset":{"$ref":"#/components/headers/FinkMeshRateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"Not found","value":{"error":{"code":"NOT_FOUND","message":"Resource not found.","requestId":"req_0123456789abcdef","apiVersion":"2026-07-01"}}}}}}},"429":{"description":"Rate limited","headers":{"FinkMesh-Request-Id":{"$ref":"#/components/headers/FinkMeshRequestId"},"FinkMesh-API-Version":{"$ref":"#/components/headers/FinkMeshAPIVersion"},"FinkMesh-RateLimit-Limit":{"$ref":"#/components/headers/FinkMeshRateLimitLimit"},"FinkMesh-RateLimit-Remaining":{"$ref":"#/components/headers/FinkMeshRateLimitRemaining"},"FinkMesh-RateLimit-Reset":{"$ref":"#/components/headers/FinkMeshRateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"Rate limited","value":{"error":{"code":"RATE_LIMITED","message":"Rate limit exceeded.","details":{"retryAfter":30},"requestId":"req_0123456789abcdef","apiVersion":"2026-07-01"}}}}}}},"500":{"description":"Internal error","headers":{"FinkMesh-Request-Id":{"$ref":"#/components/headers/FinkMeshRequestId"},"FinkMesh-API-Version":{"$ref":"#/components/headers/FinkMeshAPIVersion"},"FinkMesh-RateLimit-Limit":{"$ref":"#/components/headers/FinkMeshRateLimitLimit"},"FinkMesh-RateLimit-Remaining":{"$ref":"#/components/headers/FinkMeshRateLimitRemaining"},"FinkMesh-RateLimit-Reset":{"$ref":"#/components/headers/FinkMeshRateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"Internal error","value":{"error":{"code":"INTERNAL_ERROR","message":"Internal server error.","requestId":"req_0123456789abcdef","apiVersion":"2026-07-01"}}}}}}}},"security":[{"bearerAuth":[]}],"x-required-scope":"workflows:read"}},"/api/v1/workflows/{workflowId}/readiness":{"get":{"operationId":"getWorkflowReadiness","tags":["Workflows"],"summary":"Check persisted workflow readiness","description":"Check persisted workflow readiness. Required scope: workflows:read.","parameters":[{"name":"workflowId","in":"path","required":true,"schema":{"type":"string"}},{"name":"action","schema":{"type":"string"},"description":"Readiness action to evaluate."}],"responses":{"200":{"description":"OK","headers":{"FinkMesh-Request-Id":{"$ref":"#/components/headers/FinkMeshRequestId"},"FinkMesh-API-Version":{"$ref":"#/components/headers/FinkMeshAPIVersion"},"FinkMesh-RateLimit-Limit":{"$ref":"#/components/headers/FinkMeshRateLimitLimit"},"FinkMesh-RateLimit-Remaining":{"$ref":"#/components/headers/FinkMeshRateLimitRemaining"},"FinkMesh-RateLimit-Reset":{"$ref":"#/components/headers/FinkMeshRateLimitReset"}},"content":{"application/json":{"schema":{"type":"object","required":["data","requestId","apiVersion"],"properties":{"data":{"$ref":"#/components/schemas/WorkflowReadinessResult"},"pagination":{"$ref":"#/components/schemas/Pagination"},"requestId":{"type":"string","example":"req_0123456789abcdef"},"apiVersion":{"type":"string","example":"2026-07-01"}}},"examples":{"default":{"summary":"OK","value":{"data":{"ok":true,"action":"api_run","blockingIssueCount":0,"warningCount":0,"issues":[]},"requestId":"req_0123456789abcdef","apiVersion":"2026-07-01"}}}}}},"400":{"description":"Bad request","headers":{"FinkMesh-Request-Id":{"$ref":"#/components/headers/FinkMeshRequestId"},"FinkMesh-API-Version":{"$ref":"#/components/headers/FinkMeshAPIVersion"},"FinkMesh-RateLimit-Limit":{"$ref":"#/components/headers/FinkMeshRateLimitLimit"},"FinkMesh-RateLimit-Remaining":{"$ref":"#/components/headers/FinkMeshRateLimitRemaining"},"FinkMesh-RateLimit-Reset":{"$ref":"#/components/headers/FinkMeshRateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"Bad request","value":{"error":{"code":"VALIDATION_ERROR","message":"Request validation failed.","details":{"field":"limit"},"requestId":"req_0123456789abcdef","apiVersion":"2026-07-01"}}}}}}},"401":{"description":"Unauthorized","headers":{"FinkMesh-Request-Id":{"$ref":"#/components/headers/FinkMeshRequestId"},"FinkMesh-API-Version":{"$ref":"#/components/headers/FinkMeshAPIVersion"},"FinkMesh-RateLimit-Limit":{"$ref":"#/components/headers/FinkMeshRateLimitLimit"},"FinkMesh-RateLimit-Remaining":{"$ref":"#/components/headers/FinkMeshRateLimitRemaining"},"FinkMesh-RateLimit-Reset":{"$ref":"#/components/headers/FinkMeshRateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"Unauthorized","value":{"error":{"code":"UNAUTHORIZED","message":"Missing or invalid API token. Provide Authorization: Bearer <token>.","requestId":"req_0123456789abcdef","apiVersion":"2026-07-01"}}}}}}},"403":{"description":"Insufficient scope","headers":{"FinkMesh-Request-Id":{"$ref":"#/components/headers/FinkMeshRequestId"},"FinkMesh-API-Version":{"$ref":"#/components/headers/FinkMeshAPIVersion"},"FinkMesh-RateLimit-Limit":{"$ref":"#/components/headers/FinkMeshRateLimitLimit"},"FinkMesh-RateLimit-Remaining":{"$ref":"#/components/headers/FinkMeshRateLimitRemaining"},"FinkMesh-RateLimit-Reset":{"$ref":"#/components/headers/FinkMeshRateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"Insufficient scope","value":{"error":{"code":"INSUFFICIENT_SCOPE","message":"Token lacks required scope.","details":{"requiredScope":"workflows:read"},"requestId":"req_0123456789abcdef","apiVersion":"2026-07-01"}}}}}}},"404":{"description":"Not found","headers":{"FinkMesh-Request-Id":{"$ref":"#/components/headers/FinkMeshRequestId"},"FinkMesh-API-Version":{"$ref":"#/components/headers/FinkMeshAPIVersion"},"FinkMesh-RateLimit-Limit":{"$ref":"#/components/headers/FinkMeshRateLimitLimit"},"FinkMesh-RateLimit-Remaining":{"$ref":"#/components/headers/FinkMeshRateLimitRemaining"},"FinkMesh-RateLimit-Reset":{"$ref":"#/components/headers/FinkMeshRateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"Not found","value":{"error":{"code":"NOT_FOUND","message":"Resource not found.","requestId":"req_0123456789abcdef","apiVersion":"2026-07-01"}}}}}}},"422":{"description":"Unprocessable entity","headers":{"FinkMesh-Request-Id":{"$ref":"#/components/headers/FinkMeshRequestId"},"FinkMesh-API-Version":{"$ref":"#/components/headers/FinkMeshAPIVersion"},"FinkMesh-RateLimit-Limit":{"$ref":"#/components/headers/FinkMeshRateLimitLimit"},"FinkMesh-RateLimit-Remaining":{"$ref":"#/components/headers/FinkMeshRateLimitRemaining"},"FinkMesh-RateLimit-Reset":{"$ref":"#/components/headers/FinkMeshRateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"Unprocessable entity","value":{"error":{"code":"VALIDATION_ERROR","message":"Request body contains invalid fields.","details":{"field":"url"},"requestId":"req_0123456789abcdef","apiVersion":"2026-07-01"}}}}}}},"429":{"description":"Rate limited","headers":{"FinkMesh-Request-Id":{"$ref":"#/components/headers/FinkMeshRequestId"},"FinkMesh-API-Version":{"$ref":"#/components/headers/FinkMeshAPIVersion"},"FinkMesh-RateLimit-Limit":{"$ref":"#/components/headers/FinkMeshRateLimitLimit"},"FinkMesh-RateLimit-Remaining":{"$ref":"#/components/headers/FinkMeshRateLimitRemaining"},"FinkMesh-RateLimit-Reset":{"$ref":"#/components/headers/FinkMeshRateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"Rate limited","value":{"error":{"code":"RATE_LIMITED","message":"Rate limit exceeded.","details":{"retryAfter":30},"requestId":"req_0123456789abcdef","apiVersion":"2026-07-01"}}}}}}},"500":{"description":"Internal error","headers":{"FinkMesh-Request-Id":{"$ref":"#/components/headers/FinkMeshRequestId"},"FinkMesh-API-Version":{"$ref":"#/components/headers/FinkMeshAPIVersion"},"FinkMesh-RateLimit-Limit":{"$ref":"#/components/headers/FinkMeshRateLimitLimit"},"FinkMesh-RateLimit-Remaining":{"$ref":"#/components/headers/FinkMeshRateLimitRemaining"},"FinkMesh-RateLimit-Reset":{"$ref":"#/components/headers/FinkMeshRateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"Internal error","value":{"error":{"code":"INTERNAL_ERROR","message":"Internal server error.","requestId":"req_0123456789abcdef","apiVersion":"2026-07-01"}}}}}}}},"security":[{"bearerAuth":[]}],"x-required-scope":"workflows:read"},"post":{"operationId":"checkDraftWorkflowReadiness","tags":["Workflows"],"summary":"Check draft workflow readiness","description":"Check draft workflow readiness. Required scope: workflows:read. Requires Idempotency-Key.","parameters":[{"name":"workflowId","in":"path","required":true,"schema":{"type":"string"}},{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkflowReadinessRequest"},"examples":{"default":{"summary":"Check draft workflow readiness request","value":{"action":"api_run"}}}}}},"responses":{"200":{"description":"OK","headers":{"FinkMesh-Request-Id":{"$ref":"#/components/headers/FinkMeshRequestId"},"FinkMesh-API-Version":{"$ref":"#/components/headers/FinkMeshAPIVersion"},"FinkMesh-RateLimit-Limit":{"$ref":"#/components/headers/FinkMeshRateLimitLimit"},"FinkMesh-RateLimit-Remaining":{"$ref":"#/components/headers/FinkMeshRateLimitRemaining"},"FinkMesh-RateLimit-Reset":{"$ref":"#/components/headers/FinkMeshRateLimitReset"}},"content":{"application/json":{"schema":{"type":"object","required":["data","requestId","apiVersion"],"properties":{"data":{"$ref":"#/components/schemas/WorkflowReadinessResult"},"pagination":{"$ref":"#/components/schemas/Pagination"},"requestId":{"type":"string","example":"req_0123456789abcdef"},"apiVersion":{"type":"string","example":"2026-07-01"}}},"examples":{"default":{"summary":"OK","value":{"data":{"ok":true,"action":"api_run","blockingIssueCount":0,"warningCount":0,"issues":[]},"requestId":"req_0123456789abcdef","apiVersion":"2026-07-01"}}}}}},"400":{"description":"Bad request","headers":{"FinkMesh-Request-Id":{"$ref":"#/components/headers/FinkMeshRequestId"},"FinkMesh-API-Version":{"$ref":"#/components/headers/FinkMeshAPIVersion"},"FinkMesh-RateLimit-Limit":{"$ref":"#/components/headers/FinkMeshRateLimitLimit"},"FinkMesh-RateLimit-Remaining":{"$ref":"#/components/headers/FinkMeshRateLimitRemaining"},"FinkMesh-RateLimit-Reset":{"$ref":"#/components/headers/FinkMeshRateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"Bad request","value":{"error":{"code":"VALIDATION_ERROR","message":"Request validation failed.","details":{"field":"limit"},"requestId":"req_0123456789abcdef","apiVersion":"2026-07-01"}}}}}}},"401":{"description":"Unauthorized","headers":{"FinkMesh-Request-Id":{"$ref":"#/components/headers/FinkMeshRequestId"},"FinkMesh-API-Version":{"$ref":"#/components/headers/FinkMeshAPIVersion"},"FinkMesh-RateLimit-Limit":{"$ref":"#/components/headers/FinkMeshRateLimitLimit"},"FinkMesh-RateLimit-Remaining":{"$ref":"#/components/headers/FinkMeshRateLimitRemaining"},"FinkMesh-RateLimit-Reset":{"$ref":"#/components/headers/FinkMeshRateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"Unauthorized","value":{"error":{"code":"UNAUTHORIZED","message":"Missing or invalid API token. Provide Authorization: Bearer <token>.","requestId":"req_0123456789abcdef","apiVersion":"2026-07-01"}}}}}}},"403":{"description":"Insufficient scope","headers":{"FinkMesh-Request-Id":{"$ref":"#/components/headers/FinkMeshRequestId"},"FinkMesh-API-Version":{"$ref":"#/components/headers/FinkMeshAPIVersion"},"FinkMesh-RateLimit-Limit":{"$ref":"#/components/headers/FinkMeshRateLimitLimit"},"FinkMesh-RateLimit-Remaining":{"$ref":"#/components/headers/FinkMeshRateLimitRemaining"},"FinkMesh-RateLimit-Reset":{"$ref":"#/components/headers/FinkMeshRateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"Insufficient scope","value":{"error":{"code":"INSUFFICIENT_SCOPE","message":"Token lacks required scope.","details":{"requiredScope":"workflows:read"},"requestId":"req_0123456789abcdef","apiVersion":"2026-07-01"}}}}}}},"404":{"description":"Not found","headers":{"FinkMesh-Request-Id":{"$ref":"#/components/headers/FinkMeshRequestId"},"FinkMesh-API-Version":{"$ref":"#/components/headers/FinkMeshAPIVersion"},"FinkMesh-RateLimit-Limit":{"$ref":"#/components/headers/FinkMeshRateLimitLimit"},"FinkMesh-RateLimit-Remaining":{"$ref":"#/components/headers/FinkMeshRateLimitRemaining"},"FinkMesh-RateLimit-Reset":{"$ref":"#/components/headers/FinkMeshRateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"Not found","value":{"error":{"code":"NOT_FOUND","message":"Resource not found.","requestId":"req_0123456789abcdef","apiVersion":"2026-07-01"}}}}}}},"422":{"description":"Unprocessable entity","headers":{"FinkMesh-Request-Id":{"$ref":"#/components/headers/FinkMeshRequestId"},"FinkMesh-API-Version":{"$ref":"#/components/headers/FinkMeshAPIVersion"},"FinkMesh-RateLimit-Limit":{"$ref":"#/components/headers/FinkMeshRateLimitLimit"},"FinkMesh-RateLimit-Remaining":{"$ref":"#/components/headers/FinkMeshRateLimitRemaining"},"FinkMesh-RateLimit-Reset":{"$ref":"#/components/headers/FinkMeshRateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"Unprocessable entity","value":{"error":{"code":"VALIDATION_ERROR","message":"Request body contains invalid fields.","details":{"field":"url"},"requestId":"req_0123456789abcdef","apiVersion":"2026-07-01"}}}}}}},"429":{"description":"Rate limited","headers":{"FinkMesh-Request-Id":{"$ref":"#/components/headers/FinkMeshRequestId"},"FinkMesh-API-Version":{"$ref":"#/components/headers/FinkMeshAPIVersion"},"FinkMesh-RateLimit-Limit":{"$ref":"#/components/headers/FinkMeshRateLimitLimit"},"FinkMesh-RateLimit-Remaining":{"$ref":"#/components/headers/FinkMeshRateLimitRemaining"},"FinkMesh-RateLimit-Reset":{"$ref":"#/components/headers/FinkMeshRateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"Rate limited","value":{"error":{"code":"RATE_LIMITED","message":"Rate limit exceeded.","details":{"retryAfter":30},"requestId":"req_0123456789abcdef","apiVersion":"2026-07-01"}}}}}}},"500":{"description":"Internal error","headers":{"FinkMesh-Request-Id":{"$ref":"#/components/headers/FinkMeshRequestId"},"FinkMesh-API-Version":{"$ref":"#/components/headers/FinkMeshAPIVersion"},"FinkMesh-RateLimit-Limit":{"$ref":"#/components/headers/FinkMeshRateLimitLimit"},"FinkMesh-RateLimit-Remaining":{"$ref":"#/components/headers/FinkMeshRateLimitRemaining"},"FinkMesh-RateLimit-Reset":{"$ref":"#/components/headers/FinkMeshRateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"Internal error","value":{"error":{"code":"INTERNAL_ERROR","message":"Internal server error.","requestId":"req_0123456789abcdef","apiVersion":"2026-07-01"}}}}}}}},"security":[{"bearerAuth":[]}],"x-required-scope":"workflows:read","x-idempotency-key":"required"}},"/api/v1/workflows/{workflowId}/run":{"post":{"operationId":"runWorkflow","tags":["Workflows"],"summary":"Queue workflow run","description":"Queue workflow run. Required scope: workflows:run. Requires Idempotency-Key.","parameters":[{"name":"workflowId","in":"path","required":true,"schema":{"type":"string"}},{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RunWorkflowRequest"},"examples":{"default":{"summary":"Queue workflow run request","value":{"triggerData":{"source":"api","customerId":"cus_123"}}}}}}},"responses":{"202":{"description":"Accepted","headers":{"FinkMesh-Request-Id":{"$ref":"#/components/headers/FinkMeshRequestId"},"FinkMesh-API-Version":{"$ref":"#/components/headers/FinkMeshAPIVersion"},"FinkMesh-RateLimit-Limit":{"$ref":"#/components/headers/FinkMeshRateLimitLimit"},"FinkMesh-RateLimit-Remaining":{"$ref":"#/components/headers/FinkMeshRateLimitRemaining"},"FinkMesh-RateLimit-Reset":{"$ref":"#/components/headers/FinkMeshRateLimitReset"}},"content":{"application/json":{"schema":{"type":"object","required":["data","requestId","apiVersion"],"properties":{"data":{"$ref":"#/components/schemas/RunQueued"},"pagination":{"$ref":"#/components/schemas/Pagination"},"requestId":{"type":"string","example":"req_0123456789abcdef"},"apiVersion":{"type":"string","example":"2026-07-01"}}},"examples":{"default":{"summary":"Accepted","value":{"data":{"runId":"run_123","status":"queued","links":{"run":"/api/v1/runs/run_123"}},"requestId":"req_0123456789abcdef","apiVersion":"2026-07-01"}}}}}},"400":{"description":"Bad request","headers":{"FinkMesh-Request-Id":{"$ref":"#/components/headers/FinkMeshRequestId"},"FinkMesh-API-Version":{"$ref":"#/components/headers/FinkMeshAPIVersion"},"FinkMesh-RateLimit-Limit":{"$ref":"#/components/headers/FinkMeshRateLimitLimit"},"FinkMesh-RateLimit-Remaining":{"$ref":"#/components/headers/FinkMeshRateLimitRemaining"},"FinkMesh-RateLimit-Reset":{"$ref":"#/components/headers/FinkMeshRateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"Bad request","value":{"error":{"code":"VALIDATION_ERROR","message":"Request validation failed.","details":{"field":"limit"},"requestId":"req_0123456789abcdef","apiVersion":"2026-07-01"}}}}}}},"401":{"description":"Unauthorized","headers":{"FinkMesh-Request-Id":{"$ref":"#/components/headers/FinkMeshRequestId"},"FinkMesh-API-Version":{"$ref":"#/components/headers/FinkMeshAPIVersion"},"FinkMesh-RateLimit-Limit":{"$ref":"#/components/headers/FinkMeshRateLimitLimit"},"FinkMesh-RateLimit-Remaining":{"$ref":"#/components/headers/FinkMeshRateLimitRemaining"},"FinkMesh-RateLimit-Reset":{"$ref":"#/components/headers/FinkMeshRateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"Unauthorized","value":{"error":{"code":"UNAUTHORIZED","message":"Missing or invalid API token. Provide Authorization: Bearer <token>.","requestId":"req_0123456789abcdef","apiVersion":"2026-07-01"}}}}}}},"402":{"description":"Plan or entitlement required","headers":{"FinkMesh-Request-Id":{"$ref":"#/components/headers/FinkMeshRequestId"},"FinkMesh-API-Version":{"$ref":"#/components/headers/FinkMeshAPIVersion"},"FinkMesh-RateLimit-Limit":{"$ref":"#/components/headers/FinkMeshRateLimitLimit"},"FinkMesh-RateLimit-Remaining":{"$ref":"#/components/headers/FinkMeshRateLimitRemaining"},"FinkMesh-RateLimit-Reset":{"$ref":"#/components/headers/FinkMeshRateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"Plan or entitlement required","value":{"error":{"code":"PLAN_ENTITLEMENT_REQUIRED","message":"This action requires a paid plan.","requestId":"req_0123456789abcdef","apiVersion":"2026-07-01"}}}}}}},"403":{"description":"Insufficient scope","headers":{"FinkMesh-Request-Id":{"$ref":"#/components/headers/FinkMeshRequestId"},"FinkMesh-API-Version":{"$ref":"#/components/headers/FinkMeshAPIVersion"},"FinkMesh-RateLimit-Limit":{"$ref":"#/components/headers/FinkMeshRateLimitLimit"},"FinkMesh-RateLimit-Remaining":{"$ref":"#/components/headers/FinkMeshRateLimitRemaining"},"FinkMesh-RateLimit-Reset":{"$ref":"#/components/headers/FinkMeshRateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"Insufficient scope","value":{"error":{"code":"INSUFFICIENT_SCOPE","message":"Token lacks required scope.","details":{"requiredScope":"workflows:run"},"requestId":"req_0123456789abcdef","apiVersion":"2026-07-01"}}}}}}},"404":{"description":"Not found","headers":{"FinkMesh-Request-Id":{"$ref":"#/components/headers/FinkMeshRequestId"},"FinkMesh-API-Version":{"$ref":"#/components/headers/FinkMeshAPIVersion"},"FinkMesh-RateLimit-Limit":{"$ref":"#/components/headers/FinkMeshRateLimitLimit"},"FinkMesh-RateLimit-Remaining":{"$ref":"#/components/headers/FinkMeshRateLimitRemaining"},"FinkMesh-RateLimit-Reset":{"$ref":"#/components/headers/FinkMeshRateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"Not found","value":{"error":{"code":"NOT_FOUND","message":"Resource not found.","requestId":"req_0123456789abcdef","apiVersion":"2026-07-01"}}}}}}},"409":{"description":"Conflict","headers":{"FinkMesh-Request-Id":{"$ref":"#/components/headers/FinkMeshRequestId"},"FinkMesh-API-Version":{"$ref":"#/components/headers/FinkMeshAPIVersion"},"FinkMesh-RateLimit-Limit":{"$ref":"#/components/headers/FinkMeshRateLimitLimit"},"FinkMesh-RateLimit-Remaining":{"$ref":"#/components/headers/FinkMeshRateLimitRemaining"},"FinkMesh-RateLimit-Reset":{"$ref":"#/components/headers/FinkMeshRateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"Conflict","value":{"error":{"code":"READINESS_BLOCKED","message":"Workflow is not ready to run.","details":{"readiness":{"ok":false,"action":"api_run","blockingIssueCount":1,"warningCount":0,"issues":[]}},"requestId":"req_0123456789abcdef","apiVersion":"2026-07-01"}}}}}}},"422":{"description":"Unprocessable entity","headers":{"FinkMesh-Request-Id":{"$ref":"#/components/headers/FinkMeshRequestId"},"FinkMesh-API-Version":{"$ref":"#/components/headers/FinkMeshAPIVersion"},"FinkMesh-RateLimit-Limit":{"$ref":"#/components/headers/FinkMeshRateLimitLimit"},"FinkMesh-RateLimit-Remaining":{"$ref":"#/components/headers/FinkMeshRateLimitRemaining"},"FinkMesh-RateLimit-Reset":{"$ref":"#/components/headers/FinkMeshRateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"Unprocessable entity","value":{"error":{"code":"VALIDATION_ERROR","message":"Request body contains invalid fields.","details":{"field":"url"},"requestId":"req_0123456789abcdef","apiVersion":"2026-07-01"}}}}}}},"429":{"description":"Rate limited","headers":{"FinkMesh-Request-Id":{"$ref":"#/components/headers/FinkMeshRequestId"},"FinkMesh-API-Version":{"$ref":"#/components/headers/FinkMeshAPIVersion"},"FinkMesh-RateLimit-Limit":{"$ref":"#/components/headers/FinkMeshRateLimitLimit"},"FinkMesh-RateLimit-Remaining":{"$ref":"#/components/headers/FinkMeshRateLimitRemaining"},"FinkMesh-RateLimit-Reset":{"$ref":"#/components/headers/FinkMeshRateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"Rate limited","value":{"error":{"code":"RATE_LIMITED","message":"Rate limit exceeded.","details":{"retryAfter":30},"requestId":"req_0123456789abcdef","apiVersion":"2026-07-01"}}}}}}},"500":{"description":"Internal error","headers":{"FinkMesh-Request-Id":{"$ref":"#/components/headers/FinkMeshRequestId"},"FinkMesh-API-Version":{"$ref":"#/components/headers/FinkMeshAPIVersion"},"FinkMesh-RateLimit-Limit":{"$ref":"#/components/headers/FinkMeshRateLimitLimit"},"FinkMesh-RateLimit-Remaining":{"$ref":"#/components/headers/FinkMeshRateLimitRemaining"},"FinkMesh-RateLimit-Reset":{"$ref":"#/components/headers/FinkMeshRateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"Internal error","value":{"error":{"code":"INTERNAL_ERROR","message":"Internal server error.","requestId":"req_0123456789abcdef","apiVersion":"2026-07-01"}}}}}}},"503":{"description":"Service unavailable","headers":{"FinkMesh-Request-Id":{"$ref":"#/components/headers/FinkMeshRequestId"},"FinkMesh-API-Version":{"$ref":"#/components/headers/FinkMeshAPIVersion"},"FinkMesh-RateLimit-Limit":{"$ref":"#/components/headers/FinkMeshRateLimitLimit"},"FinkMesh-RateLimit-Remaining":{"$ref":"#/components/headers/FinkMeshRateLimitRemaining"},"FinkMesh-RateLimit-Reset":{"$ref":"#/components/headers/FinkMeshRateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"Service unavailable","value":{"error":{"code":"ENQUEUE_FAILED","message":"Run was created but could not be queued.","details":{"runId":"run_123"},"requestId":"req_0123456789abcdef","apiVersion":"2026-07-01"}}}}}}}},"security":[{"bearerAuth":[]}],"x-required-scope":"workflows:run","x-idempotency-key":"required"}},"/api/v1/workflows/{workflowId}/publish":{"post":{"operationId":"publishWorkflow","tags":["Workflows"],"summary":"Publish workflow","description":"Publish workflow. Required scope: workflows:publish. Requires Idempotency-Key.","parameters":[{"name":"workflowId","in":"path","required":true,"schema":{"type":"string"}},{"$ref":"#/components/parameters/IdempotencyKey"}],"responses":{"200":{"description":"OK","headers":{"FinkMesh-Request-Id":{"$ref":"#/components/headers/FinkMeshRequestId"},"FinkMesh-API-Version":{"$ref":"#/components/headers/FinkMeshAPIVersion"},"FinkMesh-RateLimit-Limit":{"$ref":"#/components/headers/FinkMeshRateLimitLimit"},"FinkMesh-RateLimit-Remaining":{"$ref":"#/components/headers/FinkMeshRateLimitRemaining"},"FinkMesh-RateLimit-Reset":{"$ref":"#/components/headers/FinkMeshRateLimitReset"}},"content":{"application/json":{"schema":{"type":"object","required":["data","requestId","apiVersion"],"properties":{"data":{"$ref":"#/components/schemas/WorkflowLifecycleResult"},"pagination":{"$ref":"#/components/schemas/Pagination"},"requestId":{"type":"string","example":"req_0123456789abcdef"},"apiVersion":{"type":"string","example":"2026-07-01"}}},"examples":{"default":{"summary":"OK","value":{"data":{"workflow":{"id":"wf_123","name":"Lead routing","description":"Routes qualified leads.","active":true,"folderId":null,"nodeCount":4,"errorGuardrail":{"threshold":5,"consecutiveErrorCount":0},"createdAt":"2026-07-01T12:00:00.000Z","updatedAt":"2026-07-01T12:05:00.000Z","links":{"dashboard":"https://www.finkmesh.com/dashboard/workflows/wf_123"}},"readiness":{"ok":true,"action":"api_run","blockingIssueCount":0,"warningCount":0,"issues":[]}},"requestId":"req_0123456789abcdef","apiVersion":"2026-07-01"}}}}}},"400":{"description":"Bad request","headers":{"FinkMesh-Request-Id":{"$ref":"#/components/headers/FinkMeshRequestId"},"FinkMesh-API-Version":{"$ref":"#/components/headers/FinkMeshAPIVersion"},"FinkMesh-RateLimit-Limit":{"$ref":"#/components/headers/FinkMeshRateLimitLimit"},"FinkMesh-RateLimit-Remaining":{"$ref":"#/components/headers/FinkMeshRateLimitRemaining"},"FinkMesh-RateLimit-Reset":{"$ref":"#/components/headers/FinkMeshRateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"Bad request","value":{"error":{"code":"VALIDATION_ERROR","message":"Request validation failed.","details":{"field":"limit"},"requestId":"req_0123456789abcdef","apiVersion":"2026-07-01"}}}}}}},"401":{"description":"Unauthorized","headers":{"FinkMesh-Request-Id":{"$ref":"#/components/headers/FinkMeshRequestId"},"FinkMesh-API-Version":{"$ref":"#/components/headers/FinkMeshAPIVersion"},"FinkMesh-RateLimit-Limit":{"$ref":"#/components/headers/FinkMeshRateLimitLimit"},"FinkMesh-RateLimit-Remaining":{"$ref":"#/components/headers/FinkMeshRateLimitRemaining"},"FinkMesh-RateLimit-Reset":{"$ref":"#/components/headers/FinkMeshRateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"Unauthorized","value":{"error":{"code":"UNAUTHORIZED","message":"Missing or invalid API token. Provide Authorization: Bearer <token>.","requestId":"req_0123456789abcdef","apiVersion":"2026-07-01"}}}}}}},"402":{"description":"Plan or entitlement required","headers":{"FinkMesh-Request-Id":{"$ref":"#/components/headers/FinkMeshRequestId"},"FinkMesh-API-Version":{"$ref":"#/components/headers/FinkMeshAPIVersion"},"FinkMesh-RateLimit-Limit":{"$ref":"#/components/headers/FinkMeshRateLimitLimit"},"FinkMesh-RateLimit-Remaining":{"$ref":"#/components/headers/FinkMeshRateLimitRemaining"},"FinkMesh-RateLimit-Reset":{"$ref":"#/components/headers/FinkMeshRateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"Plan or entitlement required","value":{"error":{"code":"PLAN_ENTITLEMENT_REQUIRED","message":"This action requires a paid plan.","requestId":"req_0123456789abcdef","apiVersion":"2026-07-01"}}}}}}},"403":{"description":"Insufficient scope","headers":{"FinkMesh-Request-Id":{"$ref":"#/components/headers/FinkMeshRequestId"},"FinkMesh-API-Version":{"$ref":"#/components/headers/FinkMeshAPIVersion"},"FinkMesh-RateLimit-Limit":{"$ref":"#/components/headers/FinkMeshRateLimitLimit"},"FinkMesh-RateLimit-Remaining":{"$ref":"#/components/headers/FinkMeshRateLimitRemaining"},"FinkMesh-RateLimit-Reset":{"$ref":"#/components/headers/FinkMeshRateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"Insufficient scope","value":{"error":{"code":"INSUFFICIENT_SCOPE","message":"Token lacks required scope.","details":{"requiredScope":"workflows:publish"},"requestId":"req_0123456789abcdef","apiVersion":"2026-07-01"}}}}}}},"404":{"description":"Not found","headers":{"FinkMesh-Request-Id":{"$ref":"#/components/headers/FinkMeshRequestId"},"FinkMesh-API-Version":{"$ref":"#/components/headers/FinkMeshAPIVersion"},"FinkMesh-RateLimit-Limit":{"$ref":"#/components/headers/FinkMeshRateLimitLimit"},"FinkMesh-RateLimit-Remaining":{"$ref":"#/components/headers/FinkMeshRateLimitRemaining"},"FinkMesh-RateLimit-Reset":{"$ref":"#/components/headers/FinkMeshRateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"Not found","value":{"error":{"code":"NOT_FOUND","message":"Resource not found.","requestId":"req_0123456789abcdef","apiVersion":"2026-07-01"}}}}}}},"409":{"description":"Conflict","headers":{"FinkMesh-Request-Id":{"$ref":"#/components/headers/FinkMeshRequestId"},"FinkMesh-API-Version":{"$ref":"#/components/headers/FinkMeshAPIVersion"},"FinkMesh-RateLimit-Limit":{"$ref":"#/components/headers/FinkMeshRateLimitLimit"},"FinkMesh-RateLimit-Remaining":{"$ref":"#/components/headers/FinkMeshRateLimitRemaining"},"FinkMesh-RateLimit-Reset":{"$ref":"#/components/headers/FinkMeshRateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"Conflict","value":{"error":{"code":"IDEMPOTENCY_KEY_CONFLICT","message":"Idempotency-Key was already used with a different request.","requestId":"req_0123456789abcdef","apiVersion":"2026-07-01"}}}}}}},"429":{"description":"Rate limited","headers":{"FinkMesh-Request-Id":{"$ref":"#/components/headers/FinkMeshRequestId"},"FinkMesh-API-Version":{"$ref":"#/components/headers/FinkMeshAPIVersion"},"FinkMesh-RateLimit-Limit":{"$ref":"#/components/headers/FinkMeshRateLimitLimit"},"FinkMesh-RateLimit-Remaining":{"$ref":"#/components/headers/FinkMeshRateLimitRemaining"},"FinkMesh-RateLimit-Reset":{"$ref":"#/components/headers/FinkMeshRateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"Rate limited","value":{"error":{"code":"RATE_LIMITED","message":"Rate limit exceeded.","details":{"retryAfter":30},"requestId":"req_0123456789abcdef","apiVersion":"2026-07-01"}}}}}}},"500":{"description":"Internal error","headers":{"FinkMesh-Request-Id":{"$ref":"#/components/headers/FinkMeshRequestId"},"FinkMesh-API-Version":{"$ref":"#/components/headers/FinkMeshAPIVersion"},"FinkMesh-RateLimit-Limit":{"$ref":"#/components/headers/FinkMeshRateLimitLimit"},"FinkMesh-RateLimit-Remaining":{"$ref":"#/components/headers/FinkMeshRateLimitRemaining"},"FinkMesh-RateLimit-Reset":{"$ref":"#/components/headers/FinkMeshRateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"Internal error","value":{"error":{"code":"INTERNAL_ERROR","message":"Internal server error.","requestId":"req_0123456789abcdef","apiVersion":"2026-07-01"}}}}}}}},"security":[{"bearerAuth":[]}],"x-required-scope":"workflows:publish","x-idempotency-key":"required"}},"/api/v1/workflows/{workflowId}/pause":{"post":{"operationId":"pauseWorkflow","tags":["Workflows"],"summary":"Pause workflow","description":"Pause workflow. Required scope: workflows:pause. Requires Idempotency-Key.","parameters":[{"name":"workflowId","in":"path","required":true,"schema":{"type":"string"}},{"$ref":"#/components/parameters/IdempotencyKey"}],"responses":{"200":{"description":"OK","headers":{"FinkMesh-Request-Id":{"$ref":"#/components/headers/FinkMeshRequestId"},"FinkMesh-API-Version":{"$ref":"#/components/headers/FinkMeshAPIVersion"},"FinkMesh-RateLimit-Limit":{"$ref":"#/components/headers/FinkMeshRateLimitLimit"},"FinkMesh-RateLimit-Remaining":{"$ref":"#/components/headers/FinkMeshRateLimitRemaining"},"FinkMesh-RateLimit-Reset":{"$ref":"#/components/headers/FinkMeshRateLimitReset"}},"content":{"application/json":{"schema":{"type":"object","required":["data","requestId","apiVersion"],"properties":{"data":{"$ref":"#/components/schemas/WorkflowLifecycleResult"},"pagination":{"$ref":"#/components/schemas/Pagination"},"requestId":{"type":"string","example":"req_0123456789abcdef"},"apiVersion":{"type":"string","example":"2026-07-01"}}},"examples":{"default":{"summary":"OK","value":{"data":{"workflow":{"id":"wf_123","name":"Lead routing","description":"Routes qualified leads.","active":false,"folderId":null,"nodeCount":4,"errorGuardrail":{"threshold":5,"consecutiveErrorCount":0},"createdAt":"2026-07-01T12:00:00.000Z","updatedAt":"2026-07-01T12:05:00.000Z","links":{"dashboard":"https://www.finkmesh.com/dashboard/workflows/wf_123"}},"readiness":{"ok":true,"action":"api_run","blockingIssueCount":0,"warningCount":0,"issues":[]}},"requestId":"req_0123456789abcdef","apiVersion":"2026-07-01"}}}}}},"400":{"description":"Bad request","headers":{"FinkMesh-Request-Id":{"$ref":"#/components/headers/FinkMeshRequestId"},"FinkMesh-API-Version":{"$ref":"#/components/headers/FinkMeshAPIVersion"},"FinkMesh-RateLimit-Limit":{"$ref":"#/components/headers/FinkMeshRateLimitLimit"},"FinkMesh-RateLimit-Remaining":{"$ref":"#/components/headers/FinkMeshRateLimitRemaining"},"FinkMesh-RateLimit-Reset":{"$ref":"#/components/headers/FinkMeshRateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"Bad request","value":{"error":{"code":"VALIDATION_ERROR","message":"Request validation failed.","details":{"field":"limit"},"requestId":"req_0123456789abcdef","apiVersion":"2026-07-01"}}}}}}},"401":{"description":"Unauthorized","headers":{"FinkMesh-Request-Id":{"$ref":"#/components/headers/FinkMeshRequestId"},"FinkMesh-API-Version":{"$ref":"#/components/headers/FinkMeshAPIVersion"},"FinkMesh-RateLimit-Limit":{"$ref":"#/components/headers/FinkMeshRateLimitLimit"},"FinkMesh-RateLimit-Remaining":{"$ref":"#/components/headers/FinkMeshRateLimitRemaining"},"FinkMesh-RateLimit-Reset":{"$ref":"#/components/headers/FinkMeshRateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"Unauthorized","value":{"error":{"code":"UNAUTHORIZED","message":"Missing or invalid API token. Provide Authorization: Bearer <token>.","requestId":"req_0123456789abcdef","apiVersion":"2026-07-01"}}}}}}},"403":{"description":"Insufficient scope","headers":{"FinkMesh-Request-Id":{"$ref":"#/components/headers/FinkMeshRequestId"},"FinkMesh-API-Version":{"$ref":"#/components/headers/FinkMeshAPIVersion"},"FinkMesh-RateLimit-Limit":{"$ref":"#/components/headers/FinkMeshRateLimitLimit"},"FinkMesh-RateLimit-Remaining":{"$ref":"#/components/headers/FinkMeshRateLimitRemaining"},"FinkMesh-RateLimit-Reset":{"$ref":"#/components/headers/FinkMeshRateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"Insufficient scope","value":{"error":{"code":"INSUFFICIENT_SCOPE","message":"Token lacks required scope.","details":{"requiredScope":"workflows:pause"},"requestId":"req_0123456789abcdef","apiVersion":"2026-07-01"}}}}}}},"404":{"description":"Not found","headers":{"FinkMesh-Request-Id":{"$ref":"#/components/headers/FinkMeshRequestId"},"FinkMesh-API-Version":{"$ref":"#/components/headers/FinkMeshAPIVersion"},"FinkMesh-RateLimit-Limit":{"$ref":"#/components/headers/FinkMeshRateLimitLimit"},"FinkMesh-RateLimit-Remaining":{"$ref":"#/components/headers/FinkMeshRateLimitRemaining"},"FinkMesh-RateLimit-Reset":{"$ref":"#/components/headers/FinkMeshRateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"Not found","value":{"error":{"code":"NOT_FOUND","message":"Resource not found.","requestId":"req_0123456789abcdef","apiVersion":"2026-07-01"}}}}}}},"429":{"description":"Rate limited","headers":{"FinkMesh-Request-Id":{"$ref":"#/components/headers/FinkMeshRequestId"},"FinkMesh-API-Version":{"$ref":"#/components/headers/FinkMeshAPIVersion"},"FinkMesh-RateLimit-Limit":{"$ref":"#/components/headers/FinkMeshRateLimitLimit"},"FinkMesh-RateLimit-Remaining":{"$ref":"#/components/headers/FinkMeshRateLimitRemaining"},"FinkMesh-RateLimit-Reset":{"$ref":"#/components/headers/FinkMeshRateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"Rate limited","value":{"error":{"code":"RATE_LIMITED","message":"Rate limit exceeded.","details":{"retryAfter":30},"requestId":"req_0123456789abcdef","apiVersion":"2026-07-01"}}}}}}},"500":{"description":"Internal error","headers":{"FinkMesh-Request-Id":{"$ref":"#/components/headers/FinkMeshRequestId"},"FinkMesh-API-Version":{"$ref":"#/components/headers/FinkMeshAPIVersion"},"FinkMesh-RateLimit-Limit":{"$ref":"#/components/headers/FinkMeshRateLimitLimit"},"FinkMesh-RateLimit-Remaining":{"$ref":"#/components/headers/FinkMeshRateLimitRemaining"},"FinkMesh-RateLimit-Reset":{"$ref":"#/components/headers/FinkMeshRateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"Internal error","value":{"error":{"code":"INTERNAL_ERROR","message":"Internal server error.","requestId":"req_0123456789abcdef","apiVersion":"2026-07-01"}}}}}}}},"security":[{"bearerAuth":[]}],"x-required-scope":"workflows:pause","x-idempotency-key":"required"}},"/api/v1/workflows/{workflowId}/resume":{"post":{"operationId":"resumeWorkflow","tags":["Workflows"],"summary":"Resume workflow","description":"Resume workflow. Required scope: workflows:resume. Requires Idempotency-Key.","parameters":[{"name":"workflowId","in":"path","required":true,"schema":{"type":"string"}},{"$ref":"#/components/parameters/IdempotencyKey"}],"responses":{"200":{"description":"OK","headers":{"FinkMesh-Request-Id":{"$ref":"#/components/headers/FinkMeshRequestId"},"FinkMesh-API-Version":{"$ref":"#/components/headers/FinkMeshAPIVersion"},"FinkMesh-RateLimit-Limit":{"$ref":"#/components/headers/FinkMeshRateLimitLimit"},"FinkMesh-RateLimit-Remaining":{"$ref":"#/components/headers/FinkMeshRateLimitRemaining"},"FinkMesh-RateLimit-Reset":{"$ref":"#/components/headers/FinkMeshRateLimitReset"}},"content":{"application/json":{"schema":{"type":"object","required":["data","requestId","apiVersion"],"properties":{"data":{"$ref":"#/components/schemas/WorkflowLifecycleResult"},"pagination":{"$ref":"#/components/schemas/Pagination"},"requestId":{"type":"string","example":"req_0123456789abcdef"},"apiVersion":{"type":"string","example":"2026-07-01"}}},"examples":{"default":{"summary":"OK","value":{"data":{"workflow":{"id":"wf_123","name":"Lead routing","description":"Routes qualified leads.","active":true,"folderId":null,"nodeCount":4,"errorGuardrail":{"threshold":5,"consecutiveErrorCount":0},"createdAt":"2026-07-01T12:00:00.000Z","updatedAt":"2026-07-01T12:05:00.000Z","links":{"dashboard":"https://www.finkmesh.com/dashboard/workflows/wf_123"}},"readiness":{"ok":true,"action":"api_run","blockingIssueCount":0,"warningCount":0,"issues":[]}},"requestId":"req_0123456789abcdef","apiVersion":"2026-07-01"}}}}}},"400":{"description":"Bad request","headers":{"FinkMesh-Request-Id":{"$ref":"#/components/headers/FinkMeshRequestId"},"FinkMesh-API-Version":{"$ref":"#/components/headers/FinkMeshAPIVersion"},"FinkMesh-RateLimit-Limit":{"$ref":"#/components/headers/FinkMeshRateLimitLimit"},"FinkMesh-RateLimit-Remaining":{"$ref":"#/components/headers/FinkMeshRateLimitRemaining"},"FinkMesh-RateLimit-Reset":{"$ref":"#/components/headers/FinkMeshRateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"Bad request","value":{"error":{"code":"VALIDATION_ERROR","message":"Request validation failed.","details":{"field":"limit"},"requestId":"req_0123456789abcdef","apiVersion":"2026-07-01"}}}}}}},"401":{"description":"Unauthorized","headers":{"FinkMesh-Request-Id":{"$ref":"#/components/headers/FinkMeshRequestId"},"FinkMesh-API-Version":{"$ref":"#/components/headers/FinkMeshAPIVersion"},"FinkMesh-RateLimit-Limit":{"$ref":"#/components/headers/FinkMeshRateLimitLimit"},"FinkMesh-RateLimit-Remaining":{"$ref":"#/components/headers/FinkMeshRateLimitRemaining"},"FinkMesh-RateLimit-Reset":{"$ref":"#/components/headers/FinkMeshRateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"Unauthorized","value":{"error":{"code":"UNAUTHORIZED","message":"Missing or invalid API token. Provide Authorization: Bearer <token>.","requestId":"req_0123456789abcdef","apiVersion":"2026-07-01"}}}}}}},"402":{"description":"Plan or entitlement required","headers":{"FinkMesh-Request-Id":{"$ref":"#/components/headers/FinkMeshRequestId"},"FinkMesh-API-Version":{"$ref":"#/components/headers/FinkMeshAPIVersion"},"FinkMesh-RateLimit-Limit":{"$ref":"#/components/headers/FinkMeshRateLimitLimit"},"FinkMesh-RateLimit-Remaining":{"$ref":"#/components/headers/FinkMeshRateLimitRemaining"},"FinkMesh-RateLimit-Reset":{"$ref":"#/components/headers/FinkMeshRateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"Plan or entitlement required","value":{"error":{"code":"PLAN_ENTITLEMENT_REQUIRED","message":"This action requires a paid plan.","requestId":"req_0123456789abcdef","apiVersion":"2026-07-01"}}}}}}},"403":{"description":"Insufficient scope","headers":{"FinkMesh-Request-Id":{"$ref":"#/components/headers/FinkMeshRequestId"},"FinkMesh-API-Version":{"$ref":"#/components/headers/FinkMeshAPIVersion"},"FinkMesh-RateLimit-Limit":{"$ref":"#/components/headers/FinkMeshRateLimitLimit"},"FinkMesh-RateLimit-Remaining":{"$ref":"#/components/headers/FinkMeshRateLimitRemaining"},"FinkMesh-RateLimit-Reset":{"$ref":"#/components/headers/FinkMeshRateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"Insufficient scope","value":{"error":{"code":"INSUFFICIENT_SCOPE","message":"Token lacks required scope.","details":{"requiredScope":"workflows:resume"},"requestId":"req_0123456789abcdef","apiVersion":"2026-07-01"}}}}}}},"404":{"description":"Not found","headers":{"FinkMesh-Request-Id":{"$ref":"#/components/headers/FinkMeshRequestId"},"FinkMesh-API-Version":{"$ref":"#/components/headers/FinkMeshAPIVersion"},"FinkMesh-RateLimit-Limit":{"$ref":"#/components/headers/FinkMeshRateLimitLimit"},"FinkMesh-RateLimit-Remaining":{"$ref":"#/components/headers/FinkMeshRateLimitRemaining"},"FinkMesh-RateLimit-Reset":{"$ref":"#/components/headers/FinkMeshRateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"Not found","value":{"error":{"code":"NOT_FOUND","message":"Resource not found.","requestId":"req_0123456789abcdef","apiVersion":"2026-07-01"}}}}}}},"409":{"description":"Conflict","headers":{"FinkMesh-Request-Id":{"$ref":"#/components/headers/FinkMeshRequestId"},"FinkMesh-API-Version":{"$ref":"#/components/headers/FinkMeshAPIVersion"},"FinkMesh-RateLimit-Limit":{"$ref":"#/components/headers/FinkMeshRateLimitLimit"},"FinkMesh-RateLimit-Remaining":{"$ref":"#/components/headers/FinkMeshRateLimitRemaining"},"FinkMesh-RateLimit-Reset":{"$ref":"#/components/headers/FinkMeshRateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"Conflict","value":{"error":{"code":"IDEMPOTENCY_KEY_CONFLICT","message":"Idempotency-Key was already used with a different request.","requestId":"req_0123456789abcdef","apiVersion":"2026-07-01"}}}}}}},"429":{"description":"Rate limited","headers":{"FinkMesh-Request-Id":{"$ref":"#/components/headers/FinkMeshRequestId"},"FinkMesh-API-Version":{"$ref":"#/components/headers/FinkMeshAPIVersion"},"FinkMesh-RateLimit-Limit":{"$ref":"#/components/headers/FinkMeshRateLimitLimit"},"FinkMesh-RateLimit-Remaining":{"$ref":"#/components/headers/FinkMeshRateLimitRemaining"},"FinkMesh-RateLimit-Reset":{"$ref":"#/components/headers/FinkMeshRateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"Rate limited","value":{"error":{"code":"RATE_LIMITED","message":"Rate limit exceeded.","details":{"retryAfter":30},"requestId":"req_0123456789abcdef","apiVersion":"2026-07-01"}}}}}}},"500":{"description":"Internal error","headers":{"FinkMesh-Request-Id":{"$ref":"#/components/headers/FinkMeshRequestId"},"FinkMesh-API-Version":{"$ref":"#/components/headers/FinkMeshAPIVersion"},"FinkMesh-RateLimit-Limit":{"$ref":"#/components/headers/FinkMeshRateLimitLimit"},"FinkMesh-RateLimit-Remaining":{"$ref":"#/components/headers/FinkMeshRateLimitRemaining"},"FinkMesh-RateLimit-Reset":{"$ref":"#/components/headers/FinkMeshRateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"Internal error","value":{"error":{"code":"INTERNAL_ERROR","message":"Internal server error.","requestId":"req_0123456789abcdef","apiVersion":"2026-07-01"}}}}}}}},"security":[{"bearerAuth":[]}],"x-required-scope":"workflows:resume","x-idempotency-key":"required"}},"/api/v1/runs":{"get":{"operationId":"listRuns","tags":["Runs"],"summary":"List workflow runs","description":"List workflow runs. Required scope: runs:read.","parameters":[{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":100},"description":"Page size."},{"name":"cursor","in":"query","schema":{"type":"string"},"description":"Cursor returned by pagination.nextCursor."},{"name":"workflowId","schema":{"type":"string"},"description":"Filter by workflow id."},{"name":"status","schema":{"type":"string"},"description":"Filter by run status."}],"responses":{"200":{"description":"OK","headers":{"FinkMesh-Request-Id":{"$ref":"#/components/headers/FinkMeshRequestId"},"FinkMesh-API-Version":{"$ref":"#/components/headers/FinkMeshAPIVersion"},"FinkMesh-RateLimit-Limit":{"$ref":"#/components/headers/FinkMeshRateLimitLimit"},"FinkMesh-RateLimit-Remaining":{"$ref":"#/components/headers/FinkMeshRateLimitRemaining"},"FinkMesh-RateLimit-Reset":{"$ref":"#/components/headers/FinkMeshRateLimitReset"}},"content":{"application/json":{"schema":{"type":"object","required":["data","requestId","apiVersion"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/RunSummary"}},"pagination":{"$ref":"#/components/schemas/Pagination"},"requestId":{"type":"string","example":"req_0123456789abcdef"},"apiVersion":{"type":"string","example":"2026-07-01"}}},"examples":{"default":{"summary":"OK","value":{"data":[{"id":"run_123","workflowId":"wf_123","workflowName":"Lead routing","status":"success","trigger":"api","startedAt":"2026-07-01T12:00:00.000Z","finishedAt":"2026-07-01T12:00:01.000Z","durationMs":1000,"error":null,"failedNodeName":null,"failedNodeError":null,"stepCount":3,"webhookEndpointId":null,"links":{"dashboard":"https://www.finkmesh.com/dashboard/runs/run_123"}}],"pagination":{"limit":10,"hasMore":false,"nextCursor":null},"requestId":"req_0123456789abcdef","apiVersion":"2026-07-01"}}}}}},"400":{"description":"Bad request","headers":{"FinkMesh-Request-Id":{"$ref":"#/components/headers/FinkMeshRequestId"},"FinkMesh-API-Version":{"$ref":"#/components/headers/FinkMeshAPIVersion"},"FinkMesh-RateLimit-Limit":{"$ref":"#/components/headers/FinkMeshRateLimitLimit"},"FinkMesh-RateLimit-Remaining":{"$ref":"#/components/headers/FinkMeshRateLimitRemaining"},"FinkMesh-RateLimit-Reset":{"$ref":"#/components/headers/FinkMeshRateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"Bad request","value":{"error":{"code":"VALIDATION_ERROR","message":"Request validation failed.","details":{"field":"limit"},"requestId":"req_0123456789abcdef","apiVersion":"2026-07-01"}}}}}}},"401":{"description":"Unauthorized","headers":{"FinkMesh-Request-Id":{"$ref":"#/components/headers/FinkMeshRequestId"},"FinkMesh-API-Version":{"$ref":"#/components/headers/FinkMeshAPIVersion"},"FinkMesh-RateLimit-Limit":{"$ref":"#/components/headers/FinkMeshRateLimitLimit"},"FinkMesh-RateLimit-Remaining":{"$ref":"#/components/headers/FinkMeshRateLimitRemaining"},"FinkMesh-RateLimit-Reset":{"$ref":"#/components/headers/FinkMeshRateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"Unauthorized","value":{"error":{"code":"UNAUTHORIZED","message":"Missing or invalid API token. Provide Authorization: Bearer <token>.","requestId":"req_0123456789abcdef","apiVersion":"2026-07-01"}}}}}}},"403":{"description":"Insufficient scope","headers":{"FinkMesh-Request-Id":{"$ref":"#/components/headers/FinkMeshRequestId"},"FinkMesh-API-Version":{"$ref":"#/components/headers/FinkMeshAPIVersion"},"FinkMesh-RateLimit-Limit":{"$ref":"#/components/headers/FinkMeshRateLimitLimit"},"FinkMesh-RateLimit-Remaining":{"$ref":"#/components/headers/FinkMeshRateLimitRemaining"},"FinkMesh-RateLimit-Reset":{"$ref":"#/components/headers/FinkMeshRateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"Insufficient scope","value":{"error":{"code":"INSUFFICIENT_SCOPE","message":"Token lacks required scope.","details":{"requiredScope":"workflows:read"},"requestId":"req_0123456789abcdef","apiVersion":"2026-07-01"}}}}}}},"404":{"description":"Not found","headers":{"FinkMesh-Request-Id":{"$ref":"#/components/headers/FinkMeshRequestId"},"FinkMesh-API-Version":{"$ref":"#/components/headers/FinkMeshAPIVersion"},"FinkMesh-RateLimit-Limit":{"$ref":"#/components/headers/FinkMeshRateLimitLimit"},"FinkMesh-RateLimit-Remaining":{"$ref":"#/components/headers/FinkMeshRateLimitRemaining"},"FinkMesh-RateLimit-Reset":{"$ref":"#/components/headers/FinkMeshRateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"Not found","value":{"error":{"code":"NOT_FOUND","message":"Resource not found.","requestId":"req_0123456789abcdef","apiVersion":"2026-07-01"}}}}}}},"429":{"description":"Rate limited","headers":{"FinkMesh-Request-Id":{"$ref":"#/components/headers/FinkMeshRequestId"},"FinkMesh-API-Version":{"$ref":"#/components/headers/FinkMeshAPIVersion"},"FinkMesh-RateLimit-Limit":{"$ref":"#/components/headers/FinkMeshRateLimitLimit"},"FinkMesh-RateLimit-Remaining":{"$ref":"#/components/headers/FinkMeshRateLimitRemaining"},"FinkMesh-RateLimit-Reset":{"$ref":"#/components/headers/FinkMeshRateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"Rate limited","value":{"error":{"code":"RATE_LIMITED","message":"Rate limit exceeded.","details":{"retryAfter":30},"requestId":"req_0123456789abcdef","apiVersion":"2026-07-01"}}}}}}},"500":{"description":"Internal error","headers":{"FinkMesh-Request-Id":{"$ref":"#/components/headers/FinkMeshRequestId"},"FinkMesh-API-Version":{"$ref":"#/components/headers/FinkMeshAPIVersion"},"FinkMesh-RateLimit-Limit":{"$ref":"#/components/headers/FinkMeshRateLimitLimit"},"FinkMesh-RateLimit-Remaining":{"$ref":"#/components/headers/FinkMeshRateLimitRemaining"},"FinkMesh-RateLimit-Reset":{"$ref":"#/components/headers/FinkMeshRateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"Internal error","value":{"error":{"code":"INTERNAL_ERROR","message":"Internal server error.","requestId":"req_0123456789abcdef","apiVersion":"2026-07-01"}}}}}}}},"security":[{"bearerAuth":[]}],"x-required-scope":"runs:read"}},"/api/v1/runs/{runId}":{"get":{"operationId":"getRun","tags":["Runs"],"summary":"Get run detail","description":"Get run detail. Required scope: runs:read.","parameters":[{"name":"runId","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","headers":{"FinkMesh-Request-Id":{"$ref":"#/components/headers/FinkMeshRequestId"},"FinkMesh-API-Version":{"$ref":"#/components/headers/FinkMeshAPIVersion"},"FinkMesh-RateLimit-Limit":{"$ref":"#/components/headers/FinkMeshRateLimitLimit"},"FinkMesh-RateLimit-Remaining":{"$ref":"#/components/headers/FinkMeshRateLimitRemaining"},"FinkMesh-RateLimit-Reset":{"$ref":"#/components/headers/FinkMeshRateLimitReset"}},"content":{"application/json":{"schema":{"type":"object","required":["data","requestId","apiVersion"],"properties":{"data":{"$ref":"#/components/schemas/RunDetail"},"pagination":{"$ref":"#/components/schemas/Pagination"},"requestId":{"type":"string","example":"req_0123456789abcdef"},"apiVersion":{"type":"string","example":"2026-07-01"}}},"examples":{"default":{"summary":"OK","value":{"data":{"id":"run_123","workflowId":"wf_123","workflowName":"Lead routing","status":"success","trigger":"api","startedAt":"2026-07-01T12:00:00.000Z","finishedAt":"2026-07-01T12:00:01.000Z","durationMs":1000,"error":null,"failedNodeName":null,"failedNodeError":null,"stepCount":3,"webhookEndpointId":null,"links":{"dashboard":"https://www.finkmesh.com/dashboard/runs/run_123"},"workflow":{"id":"wf_123","name":"Lead routing"},"nodeResults":[]},"requestId":"req_0123456789abcdef","apiVersion":"2026-07-01"}}}}}},"401":{"description":"Unauthorized","headers":{"FinkMesh-Request-Id":{"$ref":"#/components/headers/FinkMeshRequestId"},"FinkMesh-API-Version":{"$ref":"#/components/headers/FinkMeshAPIVersion"},"FinkMesh-RateLimit-Limit":{"$ref":"#/components/headers/FinkMeshRateLimitLimit"},"FinkMesh-RateLimit-Remaining":{"$ref":"#/components/headers/FinkMeshRateLimitRemaining"},"FinkMesh-RateLimit-Reset":{"$ref":"#/components/headers/FinkMeshRateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"Unauthorized","value":{"error":{"code":"UNAUTHORIZED","message":"Missing or invalid API token. Provide Authorization: Bearer <token>.","requestId":"req_0123456789abcdef","apiVersion":"2026-07-01"}}}}}}},"403":{"description":"Insufficient scope","headers":{"FinkMesh-Request-Id":{"$ref":"#/components/headers/FinkMeshRequestId"},"FinkMesh-API-Version":{"$ref":"#/components/headers/FinkMeshAPIVersion"},"FinkMesh-RateLimit-Limit":{"$ref":"#/components/headers/FinkMeshRateLimitLimit"},"FinkMesh-RateLimit-Remaining":{"$ref":"#/components/headers/FinkMeshRateLimitRemaining"},"FinkMesh-RateLimit-Reset":{"$ref":"#/components/headers/FinkMeshRateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"Insufficient scope","value":{"error":{"code":"INSUFFICIENT_SCOPE","message":"Token lacks required scope.","details":{"requiredScope":"workflows:read"},"requestId":"req_0123456789abcdef","apiVersion":"2026-07-01"}}}}}}},"404":{"description":"Not found","headers":{"FinkMesh-Request-Id":{"$ref":"#/components/headers/FinkMeshRequestId"},"FinkMesh-API-Version":{"$ref":"#/components/headers/FinkMeshAPIVersion"},"FinkMesh-RateLimit-Limit":{"$ref":"#/components/headers/FinkMeshRateLimitLimit"},"FinkMesh-RateLimit-Remaining":{"$ref":"#/components/headers/FinkMeshRateLimitRemaining"},"FinkMesh-RateLimit-Reset":{"$ref":"#/components/headers/FinkMeshRateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"Not found","value":{"error":{"code":"NOT_FOUND","message":"Resource not found.","requestId":"req_0123456789abcdef","apiVersion":"2026-07-01"}}}}}}},"429":{"description":"Rate limited","headers":{"FinkMesh-Request-Id":{"$ref":"#/components/headers/FinkMeshRequestId"},"FinkMesh-API-Version":{"$ref":"#/components/headers/FinkMeshAPIVersion"},"FinkMesh-RateLimit-Limit":{"$ref":"#/components/headers/FinkMeshRateLimitLimit"},"FinkMesh-RateLimit-Remaining":{"$ref":"#/components/headers/FinkMeshRateLimitRemaining"},"FinkMesh-RateLimit-Reset":{"$ref":"#/components/headers/FinkMeshRateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"Rate limited","value":{"error":{"code":"RATE_LIMITED","message":"Rate limit exceeded.","details":{"retryAfter":30},"requestId":"req_0123456789abcdef","apiVersion":"2026-07-01"}}}}}}},"500":{"description":"Internal error","headers":{"FinkMesh-Request-Id":{"$ref":"#/components/headers/FinkMeshRequestId"},"FinkMesh-API-Version":{"$ref":"#/components/headers/FinkMeshAPIVersion"},"FinkMesh-RateLimit-Limit":{"$ref":"#/components/headers/FinkMeshRateLimitLimit"},"FinkMesh-RateLimit-Remaining":{"$ref":"#/components/headers/FinkMeshRateLimitRemaining"},"FinkMesh-RateLimit-Reset":{"$ref":"#/components/headers/FinkMeshRateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"Internal error","value":{"error":{"code":"INTERNAL_ERROR","message":"Internal server error.","requestId":"req_0123456789abcdef","apiVersion":"2026-07-01"}}}}}}}},"security":[{"bearerAuth":[]}],"x-required-scope":"runs:read"}},"/api/v1/templates":{"get":{"operationId":"listTemplates","tags":["Templates"],"summary":"List templates","description":"List templates. Required scope: templates:read.","parameters":[{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":100},"description":"Page size."},{"name":"cursor","in":"query","schema":{"type":"string"},"description":"Cursor returned by pagination.nextCursor."},{"name":"q","schema":{"type":"string"},"description":"Search query."},{"name":"category","schema":{"type":"string"},"description":"Template category."}],"responses":{"200":{"description":"OK","headers":{"FinkMesh-Request-Id":{"$ref":"#/components/headers/FinkMeshRequestId"},"FinkMesh-API-Version":{"$ref":"#/components/headers/FinkMeshAPIVersion"},"FinkMesh-RateLimit-Limit":{"$ref":"#/components/headers/FinkMeshRateLimitLimit"},"FinkMesh-RateLimit-Remaining":{"$ref":"#/components/headers/FinkMeshRateLimitRemaining"},"FinkMesh-RateLimit-Reset":{"$ref":"#/components/headers/FinkMeshRateLimitReset"}},"content":{"application/json":{"schema":{"type":"object","required":["data","requestId","apiVersion"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/TemplateSummary"}},"pagination":{"$ref":"#/components/schemas/Pagination"},"requestId":{"type":"string","example":"req_0123456789abcdef"},"apiVersion":{"type":"string","example":"2026-07-01"}}},"examples":{"default":{"summary":"OK","value":{"data":[{"id":"tpl_123","name":"Manual HTTP smoke test","description":"Call an API.","category":"ops"}],"pagination":{"limit":10,"hasMore":false,"nextCursor":null},"requestId":"req_0123456789abcdef","apiVersion":"2026-07-01"}}}}}},"400":{"description":"Bad request","headers":{"FinkMesh-Request-Id":{"$ref":"#/components/headers/FinkMeshRequestId"},"FinkMesh-API-Version":{"$ref":"#/components/headers/FinkMeshAPIVersion"},"FinkMesh-RateLimit-Limit":{"$ref":"#/components/headers/FinkMeshRateLimitLimit"},"FinkMesh-RateLimit-Remaining":{"$ref":"#/components/headers/FinkMeshRateLimitRemaining"},"FinkMesh-RateLimit-Reset":{"$ref":"#/components/headers/FinkMeshRateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"Bad request","value":{"error":{"code":"VALIDATION_ERROR","message":"Request validation failed.","details":{"field":"limit"},"requestId":"req_0123456789abcdef","apiVersion":"2026-07-01"}}}}}}},"401":{"description":"Unauthorized","headers":{"FinkMesh-Request-Id":{"$ref":"#/components/headers/FinkMeshRequestId"},"FinkMesh-API-Version":{"$ref":"#/components/headers/FinkMeshAPIVersion"},"FinkMesh-RateLimit-Limit":{"$ref":"#/components/headers/FinkMeshRateLimitLimit"},"FinkMesh-RateLimit-Remaining":{"$ref":"#/components/headers/FinkMeshRateLimitRemaining"},"FinkMesh-RateLimit-Reset":{"$ref":"#/components/headers/FinkMeshRateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"Unauthorized","value":{"error":{"code":"UNAUTHORIZED","message":"Missing or invalid API token. Provide Authorization: Bearer <token>.","requestId":"req_0123456789abcdef","apiVersion":"2026-07-01"}}}}}}},"403":{"description":"Insufficient scope","headers":{"FinkMesh-Request-Id":{"$ref":"#/components/headers/FinkMeshRequestId"},"FinkMesh-API-Version":{"$ref":"#/components/headers/FinkMeshAPIVersion"},"FinkMesh-RateLimit-Limit":{"$ref":"#/components/headers/FinkMeshRateLimitLimit"},"FinkMesh-RateLimit-Remaining":{"$ref":"#/components/headers/FinkMeshRateLimitRemaining"},"FinkMesh-RateLimit-Reset":{"$ref":"#/components/headers/FinkMeshRateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"Insufficient scope","value":{"error":{"code":"INSUFFICIENT_SCOPE","message":"Token lacks required scope.","details":{"requiredScope":"workflows:read"},"requestId":"req_0123456789abcdef","apiVersion":"2026-07-01"}}}}}}},"404":{"description":"Not found","headers":{"FinkMesh-Request-Id":{"$ref":"#/components/headers/FinkMeshRequestId"},"FinkMesh-API-Version":{"$ref":"#/components/headers/FinkMeshAPIVersion"},"FinkMesh-RateLimit-Limit":{"$ref":"#/components/headers/FinkMeshRateLimitLimit"},"FinkMesh-RateLimit-Remaining":{"$ref":"#/components/headers/FinkMeshRateLimitRemaining"},"FinkMesh-RateLimit-Reset":{"$ref":"#/components/headers/FinkMeshRateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"Not found","value":{"error":{"code":"NOT_FOUND","message":"Resource not found.","requestId":"req_0123456789abcdef","apiVersion":"2026-07-01"}}}}}}},"429":{"description":"Rate limited","headers":{"FinkMesh-Request-Id":{"$ref":"#/components/headers/FinkMeshRequestId"},"FinkMesh-API-Version":{"$ref":"#/components/headers/FinkMeshAPIVersion"},"FinkMesh-RateLimit-Limit":{"$ref":"#/components/headers/FinkMeshRateLimitLimit"},"FinkMesh-RateLimit-Remaining":{"$ref":"#/components/headers/FinkMeshRateLimitRemaining"},"FinkMesh-RateLimit-Reset":{"$ref":"#/components/headers/FinkMeshRateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"Rate limited","value":{"error":{"code":"RATE_LIMITED","message":"Rate limit exceeded.","details":{"retryAfter":30},"requestId":"req_0123456789abcdef","apiVersion":"2026-07-01"}}}}}}},"500":{"description":"Internal error","headers":{"FinkMesh-Request-Id":{"$ref":"#/components/headers/FinkMeshRequestId"},"FinkMesh-API-Version":{"$ref":"#/components/headers/FinkMeshAPIVersion"},"FinkMesh-RateLimit-Limit":{"$ref":"#/components/headers/FinkMeshRateLimitLimit"},"FinkMesh-RateLimit-Remaining":{"$ref":"#/components/headers/FinkMeshRateLimitRemaining"},"FinkMesh-RateLimit-Reset":{"$ref":"#/components/headers/FinkMeshRateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"Internal error","value":{"error":{"code":"INTERNAL_ERROR","message":"Internal server error.","requestId":"req_0123456789abcdef","apiVersion":"2026-07-01"}}}}}}}},"security":[{"bearerAuth":[]}],"x-required-scope":"templates:read"}},"/api/v1/connections":{"get":{"operationId":"listConnections","tags":["Connections"],"summary":"List connections","description":"List connections. Required scope: connections:read.","parameters":[{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":100},"description":"Page size."},{"name":"cursor","in":"query","schema":{"type":"string"},"description":"Cursor returned by pagination.nextCursor."}],"responses":{"200":{"description":"OK","headers":{"FinkMesh-Request-Id":{"$ref":"#/components/headers/FinkMeshRequestId"},"FinkMesh-API-Version":{"$ref":"#/components/headers/FinkMeshAPIVersion"},"FinkMesh-RateLimit-Limit":{"$ref":"#/components/headers/FinkMeshRateLimitLimit"},"FinkMesh-RateLimit-Remaining":{"$ref":"#/components/headers/FinkMeshRateLimitRemaining"},"FinkMesh-RateLimit-Reset":{"$ref":"#/components/headers/FinkMeshRateLimitReset"}},"content":{"application/json":{"schema":{"type":"object","required":["data","requestId","apiVersion"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/ConnectionSummary"}},"pagination":{"$ref":"#/components/schemas/Pagination"},"requestId":{"type":"string","example":"req_0123456789abcdef"},"apiVersion":{"type":"string","example":"2026-07-01"}}},"examples":{"default":{"summary":"OK","value":{"data":[{"id":"conn_123","provider":"slack","name":"Sales Slack","status":"connected","lastCheckedAt":"2026-07-01T12:00:00.000Z"}],"pagination":{"limit":10,"hasMore":false,"nextCursor":null},"requestId":"req_0123456789abcdef","apiVersion":"2026-07-01"}}}}}},"400":{"description":"Bad request","headers":{"FinkMesh-Request-Id":{"$ref":"#/components/headers/FinkMeshRequestId"},"FinkMesh-API-Version":{"$ref":"#/components/headers/FinkMeshAPIVersion"},"FinkMesh-RateLimit-Limit":{"$ref":"#/components/headers/FinkMeshRateLimitLimit"},"FinkMesh-RateLimit-Remaining":{"$ref":"#/components/headers/FinkMeshRateLimitRemaining"},"FinkMesh-RateLimit-Reset":{"$ref":"#/components/headers/FinkMeshRateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"Bad request","value":{"error":{"code":"VALIDATION_ERROR","message":"Request validation failed.","details":{"field":"limit"},"requestId":"req_0123456789abcdef","apiVersion":"2026-07-01"}}}}}}},"401":{"description":"Unauthorized","headers":{"FinkMesh-Request-Id":{"$ref":"#/components/headers/FinkMeshRequestId"},"FinkMesh-API-Version":{"$ref":"#/components/headers/FinkMeshAPIVersion"},"FinkMesh-RateLimit-Limit":{"$ref":"#/components/headers/FinkMeshRateLimitLimit"},"FinkMesh-RateLimit-Remaining":{"$ref":"#/components/headers/FinkMeshRateLimitRemaining"},"FinkMesh-RateLimit-Reset":{"$ref":"#/components/headers/FinkMeshRateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"Unauthorized","value":{"error":{"code":"UNAUTHORIZED","message":"Missing or invalid API token. Provide Authorization: Bearer <token>.","requestId":"req_0123456789abcdef","apiVersion":"2026-07-01"}}}}}}},"403":{"description":"Insufficient scope","headers":{"FinkMesh-Request-Id":{"$ref":"#/components/headers/FinkMeshRequestId"},"FinkMesh-API-Version":{"$ref":"#/components/headers/FinkMeshAPIVersion"},"FinkMesh-RateLimit-Limit":{"$ref":"#/components/headers/FinkMeshRateLimitLimit"},"FinkMesh-RateLimit-Remaining":{"$ref":"#/components/headers/FinkMeshRateLimitRemaining"},"FinkMesh-RateLimit-Reset":{"$ref":"#/components/headers/FinkMeshRateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"Insufficient scope","value":{"error":{"code":"INSUFFICIENT_SCOPE","message":"Token lacks required scope.","details":{"requiredScope":"workflows:read"},"requestId":"req_0123456789abcdef","apiVersion":"2026-07-01"}}}}}}},"404":{"description":"Not found","headers":{"FinkMesh-Request-Id":{"$ref":"#/components/headers/FinkMeshRequestId"},"FinkMesh-API-Version":{"$ref":"#/components/headers/FinkMeshAPIVersion"},"FinkMesh-RateLimit-Limit":{"$ref":"#/components/headers/FinkMeshRateLimitLimit"},"FinkMesh-RateLimit-Remaining":{"$ref":"#/components/headers/FinkMeshRateLimitRemaining"},"FinkMesh-RateLimit-Reset":{"$ref":"#/components/headers/FinkMeshRateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"Not found","value":{"error":{"code":"NOT_FOUND","message":"Resource not found.","requestId":"req_0123456789abcdef","apiVersion":"2026-07-01"}}}}}}},"429":{"description":"Rate limited","headers":{"FinkMesh-Request-Id":{"$ref":"#/components/headers/FinkMeshRequestId"},"FinkMesh-API-Version":{"$ref":"#/components/headers/FinkMeshAPIVersion"},"FinkMesh-RateLimit-Limit":{"$ref":"#/components/headers/FinkMeshRateLimitLimit"},"FinkMesh-RateLimit-Remaining":{"$ref":"#/components/headers/FinkMeshRateLimitRemaining"},"FinkMesh-RateLimit-Reset":{"$ref":"#/components/headers/FinkMeshRateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"Rate limited","value":{"error":{"code":"RATE_LIMITED","message":"Rate limit exceeded.","details":{"retryAfter":30},"requestId":"req_0123456789abcdef","apiVersion":"2026-07-01"}}}}}}},"500":{"description":"Internal error","headers":{"FinkMesh-Request-Id":{"$ref":"#/components/headers/FinkMeshRequestId"},"FinkMesh-API-Version":{"$ref":"#/components/headers/FinkMeshAPIVersion"},"FinkMesh-RateLimit-Limit":{"$ref":"#/components/headers/FinkMeshRateLimitLimit"},"FinkMesh-RateLimit-Remaining":{"$ref":"#/components/headers/FinkMeshRateLimitRemaining"},"FinkMesh-RateLimit-Reset":{"$ref":"#/components/headers/FinkMeshRateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"Internal error","value":{"error":{"code":"INTERNAL_ERROR","message":"Internal server error.","requestId":"req_0123456789abcdef","apiVersion":"2026-07-01"}}}}}}}},"security":[{"bearerAuth":[]}],"x-required-scope":"connections:read"}},"/api/v1/connections/{connectionId}":{"get":{"operationId":"getConnection","tags":["Connections"],"summary":"Get connection","description":"Get connection. Required scope: connections:read.","parameters":[{"name":"connectionId","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","headers":{"FinkMesh-Request-Id":{"$ref":"#/components/headers/FinkMeshRequestId"},"FinkMesh-API-Version":{"$ref":"#/components/headers/FinkMeshAPIVersion"},"FinkMesh-RateLimit-Limit":{"$ref":"#/components/headers/FinkMeshRateLimitLimit"},"FinkMesh-RateLimit-Remaining":{"$ref":"#/components/headers/FinkMeshRateLimitRemaining"},"FinkMesh-RateLimit-Reset":{"$ref":"#/components/headers/FinkMeshRateLimitReset"}},"content":{"application/json":{"schema":{"type":"object","required":["data","requestId","apiVersion"],"properties":{"data":{"$ref":"#/components/schemas/ConnectionSummary"},"pagination":{"$ref":"#/components/schemas/Pagination"},"requestId":{"type":"string","example":"req_0123456789abcdef"},"apiVersion":{"type":"string","example":"2026-07-01"}}},"examples":{"default":{"summary":"OK","value":{"data":{"id":"conn_123","provider":"slack","name":"Sales Slack","status":"connected","lastCheckedAt":"2026-07-01T12:00:00.000Z"},"requestId":"req_0123456789abcdef","apiVersion":"2026-07-01"}}}}}},"401":{"description":"Unauthorized","headers":{"FinkMesh-Request-Id":{"$ref":"#/components/headers/FinkMeshRequestId"},"FinkMesh-API-Version":{"$ref":"#/components/headers/FinkMeshAPIVersion"},"FinkMesh-RateLimit-Limit":{"$ref":"#/components/headers/FinkMeshRateLimitLimit"},"FinkMesh-RateLimit-Remaining":{"$ref":"#/components/headers/FinkMeshRateLimitRemaining"},"FinkMesh-RateLimit-Reset":{"$ref":"#/components/headers/FinkMeshRateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"Unauthorized","value":{"error":{"code":"UNAUTHORIZED","message":"Missing or invalid API token. Provide Authorization: Bearer <token>.","requestId":"req_0123456789abcdef","apiVersion":"2026-07-01"}}}}}}},"403":{"description":"Insufficient scope","headers":{"FinkMesh-Request-Id":{"$ref":"#/components/headers/FinkMeshRequestId"},"FinkMesh-API-Version":{"$ref":"#/components/headers/FinkMeshAPIVersion"},"FinkMesh-RateLimit-Limit":{"$ref":"#/components/headers/FinkMeshRateLimitLimit"},"FinkMesh-RateLimit-Remaining":{"$ref":"#/components/headers/FinkMeshRateLimitRemaining"},"FinkMesh-RateLimit-Reset":{"$ref":"#/components/headers/FinkMeshRateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"Insufficient scope","value":{"error":{"code":"INSUFFICIENT_SCOPE","message":"Token lacks required scope.","details":{"requiredScope":"workflows:read"},"requestId":"req_0123456789abcdef","apiVersion":"2026-07-01"}}}}}}},"404":{"description":"Not found","headers":{"FinkMesh-Request-Id":{"$ref":"#/components/headers/FinkMeshRequestId"},"FinkMesh-API-Version":{"$ref":"#/components/headers/FinkMeshAPIVersion"},"FinkMesh-RateLimit-Limit":{"$ref":"#/components/headers/FinkMeshRateLimitLimit"},"FinkMesh-RateLimit-Remaining":{"$ref":"#/components/headers/FinkMeshRateLimitRemaining"},"FinkMesh-RateLimit-Reset":{"$ref":"#/components/headers/FinkMeshRateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"Not found","value":{"error":{"code":"NOT_FOUND","message":"Resource not found.","requestId":"req_0123456789abcdef","apiVersion":"2026-07-01"}}}}}}},"429":{"description":"Rate limited","headers":{"FinkMesh-Request-Id":{"$ref":"#/components/headers/FinkMeshRequestId"},"FinkMesh-API-Version":{"$ref":"#/components/headers/FinkMeshAPIVersion"},"FinkMesh-RateLimit-Limit":{"$ref":"#/components/headers/FinkMeshRateLimitLimit"},"FinkMesh-RateLimit-Remaining":{"$ref":"#/components/headers/FinkMeshRateLimitRemaining"},"FinkMesh-RateLimit-Reset":{"$ref":"#/components/headers/FinkMeshRateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"Rate limited","value":{"error":{"code":"RATE_LIMITED","message":"Rate limit exceeded.","details":{"retryAfter":30},"requestId":"req_0123456789abcdef","apiVersion":"2026-07-01"}}}}}}},"500":{"description":"Internal error","headers":{"FinkMesh-Request-Id":{"$ref":"#/components/headers/FinkMeshRequestId"},"FinkMesh-API-Version":{"$ref":"#/components/headers/FinkMeshAPIVersion"},"FinkMesh-RateLimit-Limit":{"$ref":"#/components/headers/FinkMeshRateLimitLimit"},"FinkMesh-RateLimit-Remaining":{"$ref":"#/components/headers/FinkMeshRateLimitRemaining"},"FinkMesh-RateLimit-Reset":{"$ref":"#/components/headers/FinkMeshRateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"Internal error","value":{"error":{"code":"INTERNAL_ERROR","message":"Internal server error.","requestId":"req_0123456789abcdef","apiVersion":"2026-07-01"}}}}}}}},"security":[{"bearerAuth":[]}],"x-required-scope":"connections:read"}},"/api/v1/webhook-endpoints":{"get":{"operationId":"listWebhookEndpoints","tags":["Outbound Webhooks"],"summary":"List outbound webhook endpoints","description":"List outbound webhook endpoints. Required scope: webhooks:read.","parameters":[{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":100},"description":"Page size."},{"name":"cursor","in":"query","schema":{"type":"string"},"description":"Cursor returned by pagination.nextCursor."}],"responses":{"200":{"description":"OK","headers":{"FinkMesh-Request-Id":{"$ref":"#/components/headers/FinkMeshRequestId"},"FinkMesh-API-Version":{"$ref":"#/components/headers/FinkMeshAPIVersion"},"FinkMesh-RateLimit-Limit":{"$ref":"#/components/headers/FinkMeshRateLimitLimit"},"FinkMesh-RateLimit-Remaining":{"$ref":"#/components/headers/FinkMeshRateLimitRemaining"},"FinkMesh-RateLimit-Reset":{"$ref":"#/components/headers/FinkMeshRateLimitReset"}},"content":{"application/json":{"schema":{"type":"object","required":["data","requestId","apiVersion"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/WebhookEndpoint"}},"pagination":{"$ref":"#/components/schemas/Pagination"},"requestId":{"type":"string","example":"req_0123456789abcdef"},"apiVersion":{"type":"string","example":"2026-07-01"}}},"examples":{"default":{"summary":"OK","value":{"data":[{"id":"wh_123","name":"Production webhooks","url":"https://example.com/finkmesh/webhooks","events":["workflow.run.completed"],"status":"active","secretPreview":"whsec_abc...xyz123","failureCount":0,"disabledReason":null,"lastSuccessAt":null,"lastFailureAt":null,"createdAt":"2026-07-01T12:00:00.000Z","updatedAt":"2026-07-01T12:00:00.000Z"}],"pagination":{"limit":10,"hasMore":false,"nextCursor":null},"requestId":"req_0123456789abcdef","apiVersion":"2026-07-01"}}}}}},"400":{"description":"Bad request","headers":{"FinkMesh-Request-Id":{"$ref":"#/components/headers/FinkMeshRequestId"},"FinkMesh-API-Version":{"$ref":"#/components/headers/FinkMeshAPIVersion"},"FinkMesh-RateLimit-Limit":{"$ref":"#/components/headers/FinkMeshRateLimitLimit"},"FinkMesh-RateLimit-Remaining":{"$ref":"#/components/headers/FinkMeshRateLimitRemaining"},"FinkMesh-RateLimit-Reset":{"$ref":"#/components/headers/FinkMeshRateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"Bad request","value":{"error":{"code":"VALIDATION_ERROR","message":"Request validation failed.","details":{"field":"limit"},"requestId":"req_0123456789abcdef","apiVersion":"2026-07-01"}}}}}}},"401":{"description":"Unauthorized","headers":{"FinkMesh-Request-Id":{"$ref":"#/components/headers/FinkMeshRequestId"},"FinkMesh-API-Version":{"$ref":"#/components/headers/FinkMeshAPIVersion"},"FinkMesh-RateLimit-Limit":{"$ref":"#/components/headers/FinkMeshRateLimitLimit"},"FinkMesh-RateLimit-Remaining":{"$ref":"#/components/headers/FinkMeshRateLimitRemaining"},"FinkMesh-RateLimit-Reset":{"$ref":"#/components/headers/FinkMeshRateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"Unauthorized","value":{"error":{"code":"UNAUTHORIZED","message":"Missing or invalid API token. Provide Authorization: Bearer <token>.","requestId":"req_0123456789abcdef","apiVersion":"2026-07-01"}}}}}}},"403":{"description":"Insufficient scope","headers":{"FinkMesh-Request-Id":{"$ref":"#/components/headers/FinkMeshRequestId"},"FinkMesh-API-Version":{"$ref":"#/components/headers/FinkMeshAPIVersion"},"FinkMesh-RateLimit-Limit":{"$ref":"#/components/headers/FinkMeshRateLimitLimit"},"FinkMesh-RateLimit-Remaining":{"$ref":"#/components/headers/FinkMeshRateLimitRemaining"},"FinkMesh-RateLimit-Reset":{"$ref":"#/components/headers/FinkMeshRateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"Insufficient scope","value":{"error":{"code":"INSUFFICIENT_SCOPE","message":"Token lacks required scope.","details":{"requiredScope":"workflows:read"},"requestId":"req_0123456789abcdef","apiVersion":"2026-07-01"}}}}}}},"404":{"description":"Not found","headers":{"FinkMesh-Request-Id":{"$ref":"#/components/headers/FinkMeshRequestId"},"FinkMesh-API-Version":{"$ref":"#/components/headers/FinkMeshAPIVersion"},"FinkMesh-RateLimit-Limit":{"$ref":"#/components/headers/FinkMeshRateLimitLimit"},"FinkMesh-RateLimit-Remaining":{"$ref":"#/components/headers/FinkMeshRateLimitRemaining"},"FinkMesh-RateLimit-Reset":{"$ref":"#/components/headers/FinkMeshRateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"Not found","value":{"error":{"code":"NOT_FOUND","message":"Resource not found.","requestId":"req_0123456789abcdef","apiVersion":"2026-07-01"}}}}}}},"429":{"description":"Rate limited","headers":{"FinkMesh-Request-Id":{"$ref":"#/components/headers/FinkMeshRequestId"},"FinkMesh-API-Version":{"$ref":"#/components/headers/FinkMeshAPIVersion"},"FinkMesh-RateLimit-Limit":{"$ref":"#/components/headers/FinkMeshRateLimitLimit"},"FinkMesh-RateLimit-Remaining":{"$ref":"#/components/headers/FinkMeshRateLimitRemaining"},"FinkMesh-RateLimit-Reset":{"$ref":"#/components/headers/FinkMeshRateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"Rate limited","value":{"error":{"code":"RATE_LIMITED","message":"Rate limit exceeded.","details":{"retryAfter":30},"requestId":"req_0123456789abcdef","apiVersion":"2026-07-01"}}}}}}},"500":{"description":"Internal error","headers":{"FinkMesh-Request-Id":{"$ref":"#/components/headers/FinkMeshRequestId"},"FinkMesh-API-Version":{"$ref":"#/components/headers/FinkMeshAPIVersion"},"FinkMesh-RateLimit-Limit":{"$ref":"#/components/headers/FinkMeshRateLimitLimit"},"FinkMesh-RateLimit-Remaining":{"$ref":"#/components/headers/FinkMeshRateLimitRemaining"},"FinkMesh-RateLimit-Reset":{"$ref":"#/components/headers/FinkMeshRateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"Internal error","value":{"error":{"code":"INTERNAL_ERROR","message":"Internal server error.","requestId":"req_0123456789abcdef","apiVersion":"2026-07-01"}}}}}}}},"security":[{"bearerAuth":[]}],"x-required-scope":"webhooks:read"},"post":{"operationId":"createWebhookEndpoint","tags":["Outbound Webhooks"],"summary":"Create outbound webhook endpoint","description":"Create outbound webhook endpoint. Required scope: webhooks:write. Requires Idempotency-Key.","parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateWebhookEndpointRequest"},"examples":{"default":{"summary":"Create outbound webhook endpoint request","value":{"name":"Production webhooks","url":"https://example.com/finkmesh/webhooks","events":["workflow.run.completed","workflow.run.failed"]}}}}}},"responses":{"201":{"description":"Created","headers":{"FinkMesh-Request-Id":{"$ref":"#/components/headers/FinkMeshRequestId"},"FinkMesh-API-Version":{"$ref":"#/components/headers/FinkMeshAPIVersion"},"FinkMesh-RateLimit-Limit":{"$ref":"#/components/headers/FinkMeshRateLimitLimit"},"FinkMesh-RateLimit-Remaining":{"$ref":"#/components/headers/FinkMeshRateLimitRemaining"},"FinkMesh-RateLimit-Reset":{"$ref":"#/components/headers/FinkMeshRateLimitReset"}},"content":{"application/json":{"schema":{"type":"object","required":["data","requestId","apiVersion"],"properties":{"data":{"$ref":"#/components/schemas/WebhookEndpointCreated"},"pagination":{"$ref":"#/components/schemas/Pagination"},"requestId":{"type":"string","example":"req_0123456789abcdef"},"apiVersion":{"type":"string","example":"2026-07-01"}}},"examples":{"default":{"summary":"Created","value":{"data":{"id":"wh_123","name":"Production webhooks","url":"https://example.com/finkmesh/webhooks","events":["workflow.run.completed"],"status":"active","secretPreview":"whsec_abc...xyz123","failureCount":0,"disabledReason":null,"lastSuccessAt":null,"lastFailureAt":null,"createdAt":"2026-07-01T12:00:00.000Z","updatedAt":"2026-07-01T12:00:00.000Z","secret":"whsec_..."},"requestId":"req_0123456789abcdef","apiVersion":"2026-07-01"}}}}}},"400":{"description":"Bad request","headers":{"FinkMesh-Request-Id":{"$ref":"#/components/headers/FinkMeshRequestId"},"FinkMesh-API-Version":{"$ref":"#/components/headers/FinkMeshAPIVersion"},"FinkMesh-RateLimit-Limit":{"$ref":"#/components/headers/FinkMeshRateLimitLimit"},"FinkMesh-RateLimit-Remaining":{"$ref":"#/components/headers/FinkMeshRateLimitRemaining"},"FinkMesh-RateLimit-Reset":{"$ref":"#/components/headers/FinkMeshRateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"Bad request","value":{"error":{"code":"VALIDATION_ERROR","message":"Request validation failed.","details":{"field":"limit"},"requestId":"req_0123456789abcdef","apiVersion":"2026-07-01"}}}}}}},"401":{"description":"Unauthorized","headers":{"FinkMesh-Request-Id":{"$ref":"#/components/headers/FinkMeshRequestId"},"FinkMesh-API-Version":{"$ref":"#/components/headers/FinkMeshAPIVersion"},"FinkMesh-RateLimit-Limit":{"$ref":"#/components/headers/FinkMeshRateLimitLimit"},"FinkMesh-RateLimit-Remaining":{"$ref":"#/components/headers/FinkMeshRateLimitRemaining"},"FinkMesh-RateLimit-Reset":{"$ref":"#/components/headers/FinkMeshRateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"Unauthorized","value":{"error":{"code":"UNAUTHORIZED","message":"Missing or invalid API token. Provide Authorization: Bearer <token>.","requestId":"req_0123456789abcdef","apiVersion":"2026-07-01"}}}}}}},"403":{"description":"Insufficient scope","headers":{"FinkMesh-Request-Id":{"$ref":"#/components/headers/FinkMeshRequestId"},"FinkMesh-API-Version":{"$ref":"#/components/headers/FinkMeshAPIVersion"},"FinkMesh-RateLimit-Limit":{"$ref":"#/components/headers/FinkMeshRateLimitLimit"},"FinkMesh-RateLimit-Remaining":{"$ref":"#/components/headers/FinkMeshRateLimitRemaining"},"FinkMesh-RateLimit-Reset":{"$ref":"#/components/headers/FinkMeshRateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"Insufficient scope","value":{"error":{"code":"INSUFFICIENT_SCOPE","message":"Token lacks required scope.","details":{"requiredScope":"webhooks:write"},"requestId":"req_0123456789abcdef","apiVersion":"2026-07-01"}}}}}}},"422":{"description":"Unprocessable entity","headers":{"FinkMesh-Request-Id":{"$ref":"#/components/headers/FinkMeshRequestId"},"FinkMesh-API-Version":{"$ref":"#/components/headers/FinkMeshAPIVersion"},"FinkMesh-RateLimit-Limit":{"$ref":"#/components/headers/FinkMeshRateLimitLimit"},"FinkMesh-RateLimit-Remaining":{"$ref":"#/components/headers/FinkMeshRateLimitRemaining"},"FinkMesh-RateLimit-Reset":{"$ref":"#/components/headers/FinkMeshRateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"Unprocessable entity","value":{"error":{"code":"VALIDATION_ERROR","message":"Request body contains invalid fields.","details":{"field":"url"},"requestId":"req_0123456789abcdef","apiVersion":"2026-07-01"}}}}}}},"429":{"description":"Rate limited","headers":{"FinkMesh-Request-Id":{"$ref":"#/components/headers/FinkMeshRequestId"},"FinkMesh-API-Version":{"$ref":"#/components/headers/FinkMeshAPIVersion"},"FinkMesh-RateLimit-Limit":{"$ref":"#/components/headers/FinkMeshRateLimitLimit"},"FinkMesh-RateLimit-Remaining":{"$ref":"#/components/headers/FinkMeshRateLimitRemaining"},"FinkMesh-RateLimit-Reset":{"$ref":"#/components/headers/FinkMeshRateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"Rate limited","value":{"error":{"code":"RATE_LIMITED","message":"Rate limit exceeded.","details":{"retryAfter":30},"requestId":"req_0123456789abcdef","apiVersion":"2026-07-01"}}}}}}},"500":{"description":"Internal error","headers":{"FinkMesh-Request-Id":{"$ref":"#/components/headers/FinkMeshRequestId"},"FinkMesh-API-Version":{"$ref":"#/components/headers/FinkMeshAPIVersion"},"FinkMesh-RateLimit-Limit":{"$ref":"#/components/headers/FinkMeshRateLimitLimit"},"FinkMesh-RateLimit-Remaining":{"$ref":"#/components/headers/FinkMeshRateLimitRemaining"},"FinkMesh-RateLimit-Reset":{"$ref":"#/components/headers/FinkMeshRateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"Internal error","value":{"error":{"code":"INTERNAL_ERROR","message":"Internal server error.","requestId":"req_0123456789abcdef","apiVersion":"2026-07-01"}}}}}}}},"security":[{"bearerAuth":[]}],"x-required-scope":"webhooks:write","x-idempotency-key":"required"}},"/api/v1/webhook-endpoints/{endpointId}":{"get":{"operationId":"getWebhookEndpoint","tags":["Outbound Webhooks"],"summary":"Get outbound webhook endpoint","description":"Get outbound webhook endpoint. Required scope: webhooks:read.","parameters":[{"name":"endpointId","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","headers":{"FinkMesh-Request-Id":{"$ref":"#/components/headers/FinkMeshRequestId"},"FinkMesh-API-Version":{"$ref":"#/components/headers/FinkMeshAPIVersion"},"FinkMesh-RateLimit-Limit":{"$ref":"#/components/headers/FinkMeshRateLimitLimit"},"FinkMesh-RateLimit-Remaining":{"$ref":"#/components/headers/FinkMeshRateLimitRemaining"},"FinkMesh-RateLimit-Reset":{"$ref":"#/components/headers/FinkMeshRateLimitReset"}},"content":{"application/json":{"schema":{"type":"object","required":["data","requestId","apiVersion"],"properties":{"data":{"$ref":"#/components/schemas/WebhookEndpoint"},"pagination":{"$ref":"#/components/schemas/Pagination"},"requestId":{"type":"string","example":"req_0123456789abcdef"},"apiVersion":{"type":"string","example":"2026-07-01"}}},"examples":{"default":{"summary":"OK","value":{"data":{"id":"wh_123","name":"Production webhooks","url":"https://example.com/finkmesh/webhooks","events":["workflow.run.completed"],"status":"active","secretPreview":"whsec_abc...xyz123","failureCount":0,"disabledReason":null,"lastSuccessAt":null,"lastFailureAt":null,"createdAt":"2026-07-01T12:00:00.000Z","updatedAt":"2026-07-01T12:00:00.000Z"},"requestId":"req_0123456789abcdef","apiVersion":"2026-07-01"}}}}}},"401":{"description":"Unauthorized","headers":{"FinkMesh-Request-Id":{"$ref":"#/components/headers/FinkMeshRequestId"},"FinkMesh-API-Version":{"$ref":"#/components/headers/FinkMeshAPIVersion"},"FinkMesh-RateLimit-Limit":{"$ref":"#/components/headers/FinkMeshRateLimitLimit"},"FinkMesh-RateLimit-Remaining":{"$ref":"#/components/headers/FinkMeshRateLimitRemaining"},"FinkMesh-RateLimit-Reset":{"$ref":"#/components/headers/FinkMeshRateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"Unauthorized","value":{"error":{"code":"UNAUTHORIZED","message":"Missing or invalid API token. Provide Authorization: Bearer <token>.","requestId":"req_0123456789abcdef","apiVersion":"2026-07-01"}}}}}}},"403":{"description":"Insufficient scope","headers":{"FinkMesh-Request-Id":{"$ref":"#/components/headers/FinkMeshRequestId"},"FinkMesh-API-Version":{"$ref":"#/components/headers/FinkMeshAPIVersion"},"FinkMesh-RateLimit-Limit":{"$ref":"#/components/headers/FinkMeshRateLimitLimit"},"FinkMesh-RateLimit-Remaining":{"$ref":"#/components/headers/FinkMeshRateLimitRemaining"},"FinkMesh-RateLimit-Reset":{"$ref":"#/components/headers/FinkMeshRateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"Insufficient scope","value":{"error":{"code":"INSUFFICIENT_SCOPE","message":"Token lacks required scope.","details":{"requiredScope":"workflows:read"},"requestId":"req_0123456789abcdef","apiVersion":"2026-07-01"}}}}}}},"404":{"description":"Not found","headers":{"FinkMesh-Request-Id":{"$ref":"#/components/headers/FinkMeshRequestId"},"FinkMesh-API-Version":{"$ref":"#/components/headers/FinkMeshAPIVersion"},"FinkMesh-RateLimit-Limit":{"$ref":"#/components/headers/FinkMeshRateLimitLimit"},"FinkMesh-RateLimit-Remaining":{"$ref":"#/components/headers/FinkMeshRateLimitRemaining"},"FinkMesh-RateLimit-Reset":{"$ref":"#/components/headers/FinkMeshRateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"Not found","value":{"error":{"code":"NOT_FOUND","message":"Resource not found.","requestId":"req_0123456789abcdef","apiVersion":"2026-07-01"}}}}}}},"429":{"description":"Rate limited","headers":{"FinkMesh-Request-Id":{"$ref":"#/components/headers/FinkMeshRequestId"},"FinkMesh-API-Version":{"$ref":"#/components/headers/FinkMeshAPIVersion"},"FinkMesh-RateLimit-Limit":{"$ref":"#/components/headers/FinkMeshRateLimitLimit"},"FinkMesh-RateLimit-Remaining":{"$ref":"#/components/headers/FinkMeshRateLimitRemaining"},"FinkMesh-RateLimit-Reset":{"$ref":"#/components/headers/FinkMeshRateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"Rate limited","value":{"error":{"code":"RATE_LIMITED","message":"Rate limit exceeded.","details":{"retryAfter":30},"requestId":"req_0123456789abcdef","apiVersion":"2026-07-01"}}}}}}},"500":{"description":"Internal error","headers":{"FinkMesh-Request-Id":{"$ref":"#/components/headers/FinkMeshRequestId"},"FinkMesh-API-Version":{"$ref":"#/components/headers/FinkMeshAPIVersion"},"FinkMesh-RateLimit-Limit":{"$ref":"#/components/headers/FinkMeshRateLimitLimit"},"FinkMesh-RateLimit-Remaining":{"$ref":"#/components/headers/FinkMeshRateLimitRemaining"},"FinkMesh-RateLimit-Reset":{"$ref":"#/components/headers/FinkMeshRateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"Internal error","value":{"error":{"code":"INTERNAL_ERROR","message":"Internal server error.","requestId":"req_0123456789abcdef","apiVersion":"2026-07-01"}}}}}}}},"security":[{"bearerAuth":[]}],"x-required-scope":"webhooks:read"},"patch":{"operationId":"updateWebhookEndpoint","tags":["Outbound Webhooks"],"summary":"Update outbound webhook endpoint","description":"Update outbound webhook endpoint. Required scope: webhooks:write. Requires Idempotency-Key.","parameters":[{"name":"endpointId","in":"path","required":true,"schema":{"type":"string"}},{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateWebhookEndpointRequest"},"examples":{"default":{"summary":"Update outbound webhook endpoint request","value":{"name":"Production webhooks","url":"https://example.com/finkmesh/webhooks","events":["workflow.run.completed"],"status":"active"}}}}}},"responses":{"200":{"description":"OK","headers":{"FinkMesh-Request-Id":{"$ref":"#/components/headers/FinkMeshRequestId"},"FinkMesh-API-Version":{"$ref":"#/components/headers/FinkMeshAPIVersion"},"FinkMesh-RateLimit-Limit":{"$ref":"#/components/headers/FinkMeshRateLimitLimit"},"FinkMesh-RateLimit-Remaining":{"$ref":"#/components/headers/FinkMeshRateLimitRemaining"},"FinkMesh-RateLimit-Reset":{"$ref":"#/components/headers/FinkMeshRateLimitReset"}},"content":{"application/json":{"schema":{"type":"object","required":["data","requestId","apiVersion"],"properties":{"data":{"$ref":"#/components/schemas/WebhookEndpoint"},"pagination":{"$ref":"#/components/schemas/Pagination"},"requestId":{"type":"string","example":"req_0123456789abcdef"},"apiVersion":{"type":"string","example":"2026-07-01"}}},"examples":{"default":{"summary":"OK","value":{"data":{"id":"wh_123","name":"Production webhooks","url":"https://example.com/finkmesh/webhooks","events":["workflow.run.completed"],"status":"active","secretPreview":"whsec_abc...xyz123","failureCount":0,"disabledReason":null,"lastSuccessAt":null,"lastFailureAt":null,"createdAt":"2026-07-01T12:00:00.000Z","updatedAt":"2026-07-01T12:00:00.000Z"},"requestId":"req_0123456789abcdef","apiVersion":"2026-07-01"}}}}}},"400":{"description":"Bad request","headers":{"FinkMesh-Request-Id":{"$ref":"#/components/headers/FinkMeshRequestId"},"FinkMesh-API-Version":{"$ref":"#/components/headers/FinkMeshAPIVersion"},"FinkMesh-RateLimit-Limit":{"$ref":"#/components/headers/FinkMeshRateLimitLimit"},"FinkMesh-RateLimit-Remaining":{"$ref":"#/components/headers/FinkMeshRateLimitRemaining"},"FinkMesh-RateLimit-Reset":{"$ref":"#/components/headers/FinkMeshRateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"Bad request","value":{"error":{"code":"VALIDATION_ERROR","message":"Request validation failed.","details":{"field":"limit"},"requestId":"req_0123456789abcdef","apiVersion":"2026-07-01"}}}}}}},"401":{"description":"Unauthorized","headers":{"FinkMesh-Request-Id":{"$ref":"#/components/headers/FinkMeshRequestId"},"FinkMesh-API-Version":{"$ref":"#/components/headers/FinkMeshAPIVersion"},"FinkMesh-RateLimit-Limit":{"$ref":"#/components/headers/FinkMeshRateLimitLimit"},"FinkMesh-RateLimit-Remaining":{"$ref":"#/components/headers/FinkMeshRateLimitRemaining"},"FinkMesh-RateLimit-Reset":{"$ref":"#/components/headers/FinkMeshRateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"Unauthorized","value":{"error":{"code":"UNAUTHORIZED","message":"Missing or invalid API token. Provide Authorization: Bearer <token>.","requestId":"req_0123456789abcdef","apiVersion":"2026-07-01"}}}}}}},"403":{"description":"Insufficient scope","headers":{"FinkMesh-Request-Id":{"$ref":"#/components/headers/FinkMeshRequestId"},"FinkMesh-API-Version":{"$ref":"#/components/headers/FinkMeshAPIVersion"},"FinkMesh-RateLimit-Limit":{"$ref":"#/components/headers/FinkMeshRateLimitLimit"},"FinkMesh-RateLimit-Remaining":{"$ref":"#/components/headers/FinkMeshRateLimitRemaining"},"FinkMesh-RateLimit-Reset":{"$ref":"#/components/headers/FinkMeshRateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"Insufficient scope","value":{"error":{"code":"INSUFFICIENT_SCOPE","message":"Token lacks required scope.","details":{"requiredScope":"webhooks:write"},"requestId":"req_0123456789abcdef","apiVersion":"2026-07-01"}}}}}}},"404":{"description":"Not found","headers":{"FinkMesh-Request-Id":{"$ref":"#/components/headers/FinkMeshRequestId"},"FinkMesh-API-Version":{"$ref":"#/components/headers/FinkMeshAPIVersion"},"FinkMesh-RateLimit-Limit":{"$ref":"#/components/headers/FinkMeshRateLimitLimit"},"FinkMesh-RateLimit-Remaining":{"$ref":"#/components/headers/FinkMeshRateLimitRemaining"},"FinkMesh-RateLimit-Reset":{"$ref":"#/components/headers/FinkMeshRateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"Not found","value":{"error":{"code":"NOT_FOUND","message":"Resource not found.","requestId":"req_0123456789abcdef","apiVersion":"2026-07-01"}}}}}}},"422":{"description":"Unprocessable entity","headers":{"FinkMesh-Request-Id":{"$ref":"#/components/headers/FinkMeshRequestId"},"FinkMesh-API-Version":{"$ref":"#/components/headers/FinkMeshAPIVersion"},"FinkMesh-RateLimit-Limit":{"$ref":"#/components/headers/FinkMeshRateLimitLimit"},"FinkMesh-RateLimit-Remaining":{"$ref":"#/components/headers/FinkMeshRateLimitRemaining"},"FinkMesh-RateLimit-Reset":{"$ref":"#/components/headers/FinkMeshRateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"Unprocessable entity","value":{"error":{"code":"VALIDATION_ERROR","message":"Request body contains invalid fields.","details":{"field":"url"},"requestId":"req_0123456789abcdef","apiVersion":"2026-07-01"}}}}}}},"429":{"description":"Rate limited","headers":{"FinkMesh-Request-Id":{"$ref":"#/components/headers/FinkMeshRequestId"},"FinkMesh-API-Version":{"$ref":"#/components/headers/FinkMeshAPIVersion"},"FinkMesh-RateLimit-Limit":{"$ref":"#/components/headers/FinkMeshRateLimitLimit"},"FinkMesh-RateLimit-Remaining":{"$ref":"#/components/headers/FinkMeshRateLimitRemaining"},"FinkMesh-RateLimit-Reset":{"$ref":"#/components/headers/FinkMeshRateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"Rate limited","value":{"error":{"code":"RATE_LIMITED","message":"Rate limit exceeded.","details":{"retryAfter":30},"requestId":"req_0123456789abcdef","apiVersion":"2026-07-01"}}}}}}},"500":{"description":"Internal error","headers":{"FinkMesh-Request-Id":{"$ref":"#/components/headers/FinkMeshRequestId"},"FinkMesh-API-Version":{"$ref":"#/components/headers/FinkMeshAPIVersion"},"FinkMesh-RateLimit-Limit":{"$ref":"#/components/headers/FinkMeshRateLimitLimit"},"FinkMesh-RateLimit-Remaining":{"$ref":"#/components/headers/FinkMeshRateLimitRemaining"},"FinkMesh-RateLimit-Reset":{"$ref":"#/components/headers/FinkMeshRateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"Internal error","value":{"error":{"code":"INTERNAL_ERROR","message":"Internal server error.","requestId":"req_0123456789abcdef","apiVersion":"2026-07-01"}}}}}}}},"security":[{"bearerAuth":[]}],"x-required-scope":"webhooks:write","x-idempotency-key":"required"},"delete":{"operationId":"deleteWebhookEndpoint","tags":["Outbound Webhooks"],"summary":"Delete outbound webhook endpoint","description":"Delete outbound webhook endpoint. Required scope: webhooks:write. Requires Idempotency-Key.","parameters":[{"name":"endpointId","in":"path","required":true,"schema":{"type":"string"}},{"$ref":"#/components/parameters/IdempotencyKey"}],"responses":{"200":{"description":"OK","headers":{"FinkMesh-Request-Id":{"$ref":"#/components/headers/FinkMeshRequestId"},"FinkMesh-API-Version":{"$ref":"#/components/headers/FinkMeshAPIVersion"},"FinkMesh-RateLimit-Limit":{"$ref":"#/components/headers/FinkMeshRateLimitLimit"},"FinkMesh-RateLimit-Remaining":{"$ref":"#/components/headers/FinkMeshRateLimitRemaining"},"FinkMesh-RateLimit-Reset":{"$ref":"#/components/headers/FinkMeshRateLimitReset"}},"content":{"application/json":{"schema":{"type":"object","required":["data","requestId","apiVersion"],"properties":{"data":{"$ref":"#/components/schemas/DeleteResult"},"pagination":{"$ref":"#/components/schemas/Pagination"},"requestId":{"type":"string","example":"req_0123456789abcdef"},"apiVersion":{"type":"string","example":"2026-07-01"}}},"examples":{"default":{"summary":"OK","value":{"data":{"deleted":true,"id":"wh_123"},"requestId":"req_0123456789abcdef","apiVersion":"2026-07-01"}}}}}},"400":{"description":"Bad request","headers":{"FinkMesh-Request-Id":{"$ref":"#/components/headers/FinkMeshRequestId"},"FinkMesh-API-Version":{"$ref":"#/components/headers/FinkMeshAPIVersion"},"FinkMesh-RateLimit-Limit":{"$ref":"#/components/headers/FinkMeshRateLimitLimit"},"FinkMesh-RateLimit-Remaining":{"$ref":"#/components/headers/FinkMeshRateLimitRemaining"},"FinkMesh-RateLimit-Reset":{"$ref":"#/components/headers/FinkMeshRateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"Bad request","value":{"error":{"code":"VALIDATION_ERROR","message":"Request validation failed.","details":{"field":"limit"},"requestId":"req_0123456789abcdef","apiVersion":"2026-07-01"}}}}}}},"401":{"description":"Unauthorized","headers":{"FinkMesh-Request-Id":{"$ref":"#/components/headers/FinkMeshRequestId"},"FinkMesh-API-Version":{"$ref":"#/components/headers/FinkMeshAPIVersion"},"FinkMesh-RateLimit-Limit":{"$ref":"#/components/headers/FinkMeshRateLimitLimit"},"FinkMesh-RateLimit-Remaining":{"$ref":"#/components/headers/FinkMeshRateLimitRemaining"},"FinkMesh-RateLimit-Reset":{"$ref":"#/components/headers/FinkMeshRateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"Unauthorized","value":{"error":{"code":"UNAUTHORIZED","message":"Missing or invalid API token. Provide Authorization: Bearer <token>.","requestId":"req_0123456789abcdef","apiVersion":"2026-07-01"}}}}}}},"403":{"description":"Insufficient scope","headers":{"FinkMesh-Request-Id":{"$ref":"#/components/headers/FinkMeshRequestId"},"FinkMesh-API-Version":{"$ref":"#/components/headers/FinkMeshAPIVersion"},"FinkMesh-RateLimit-Limit":{"$ref":"#/components/headers/FinkMeshRateLimitLimit"},"FinkMesh-RateLimit-Remaining":{"$ref":"#/components/headers/FinkMeshRateLimitRemaining"},"FinkMesh-RateLimit-Reset":{"$ref":"#/components/headers/FinkMeshRateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"Insufficient scope","value":{"error":{"code":"INSUFFICIENT_SCOPE","message":"Token lacks required scope.","details":{"requiredScope":"webhooks:write"},"requestId":"req_0123456789abcdef","apiVersion":"2026-07-01"}}}}}}},"404":{"description":"Not found","headers":{"FinkMesh-Request-Id":{"$ref":"#/components/headers/FinkMeshRequestId"},"FinkMesh-API-Version":{"$ref":"#/components/headers/FinkMeshAPIVersion"},"FinkMesh-RateLimit-Limit":{"$ref":"#/components/headers/FinkMeshRateLimitLimit"},"FinkMesh-RateLimit-Remaining":{"$ref":"#/components/headers/FinkMeshRateLimitRemaining"},"FinkMesh-RateLimit-Reset":{"$ref":"#/components/headers/FinkMeshRateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"Not found","value":{"error":{"code":"NOT_FOUND","message":"Resource not found.","requestId":"req_0123456789abcdef","apiVersion":"2026-07-01"}}}}}}},"429":{"description":"Rate limited","headers":{"FinkMesh-Request-Id":{"$ref":"#/components/headers/FinkMeshRequestId"},"FinkMesh-API-Version":{"$ref":"#/components/headers/FinkMeshAPIVersion"},"FinkMesh-RateLimit-Limit":{"$ref":"#/components/headers/FinkMeshRateLimitLimit"},"FinkMesh-RateLimit-Remaining":{"$ref":"#/components/headers/FinkMeshRateLimitRemaining"},"FinkMesh-RateLimit-Reset":{"$ref":"#/components/headers/FinkMeshRateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"Rate limited","value":{"error":{"code":"RATE_LIMITED","message":"Rate limit exceeded.","details":{"retryAfter":30},"requestId":"req_0123456789abcdef","apiVersion":"2026-07-01"}}}}}}},"500":{"description":"Internal error","headers":{"FinkMesh-Request-Id":{"$ref":"#/components/headers/FinkMeshRequestId"},"FinkMesh-API-Version":{"$ref":"#/components/headers/FinkMeshAPIVersion"},"FinkMesh-RateLimit-Limit":{"$ref":"#/components/headers/FinkMeshRateLimitLimit"},"FinkMesh-RateLimit-Remaining":{"$ref":"#/components/headers/FinkMeshRateLimitRemaining"},"FinkMesh-RateLimit-Reset":{"$ref":"#/components/headers/FinkMeshRateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"Internal error","value":{"error":{"code":"INTERNAL_ERROR","message":"Internal server error.","requestId":"req_0123456789abcdef","apiVersion":"2026-07-01"}}}}}}}},"security":[{"bearerAuth":[]}],"x-required-scope":"webhooks:write","x-idempotency-key":"required"}},"/api/v1/webhook-endpoints/{endpointId}/rotate-secret":{"post":{"operationId":"rotateWebhookEndpointSecret","tags":["Outbound Webhooks"],"summary":"Rotate outbound webhook endpoint secret","description":"Rotate outbound webhook endpoint secret. Required scope: webhooks:write. Requires Idempotency-Key.","parameters":[{"name":"endpointId","in":"path","required":true,"schema":{"type":"string"}},{"$ref":"#/components/parameters/IdempotencyKey"}],"responses":{"200":{"description":"OK","headers":{"FinkMesh-Request-Id":{"$ref":"#/components/headers/FinkMeshRequestId"},"FinkMesh-API-Version":{"$ref":"#/components/headers/FinkMeshAPIVersion"},"FinkMesh-RateLimit-Limit":{"$ref":"#/components/headers/FinkMeshRateLimitLimit"},"FinkMesh-RateLimit-Remaining":{"$ref":"#/components/headers/FinkMeshRateLimitRemaining"},"FinkMesh-RateLimit-Reset":{"$ref":"#/components/headers/FinkMeshRateLimitReset"}},"content":{"application/json":{"schema":{"type":"object","required":["data","requestId","apiVersion"],"properties":{"data":{"$ref":"#/components/schemas/WebhookEndpointCreated"},"pagination":{"$ref":"#/components/schemas/Pagination"},"requestId":{"type":"string","example":"req_0123456789abcdef"},"apiVersion":{"type":"string","example":"2026-07-01"}}},"examples":{"default":{"summary":"OK","value":{"data":{"id":"wh_123","name":"Production webhooks","url":"https://example.com/finkmesh/webhooks","events":["workflow.run.completed"],"status":"active","secretPreview":"whsec_abc...xyz123","failureCount":0,"disabledReason":null,"lastSuccessAt":null,"lastFailureAt":null,"createdAt":"2026-07-01T12:00:00.000Z","updatedAt":"2026-07-01T12:00:00.000Z","secret":"whsec_..."},"requestId":"req_0123456789abcdef","apiVersion":"2026-07-01"}}}}}},"400":{"description":"Bad request","headers":{"FinkMesh-Request-Id":{"$ref":"#/components/headers/FinkMeshRequestId"},"FinkMesh-API-Version":{"$ref":"#/components/headers/FinkMeshAPIVersion"},"FinkMesh-RateLimit-Limit":{"$ref":"#/components/headers/FinkMeshRateLimitLimit"},"FinkMesh-RateLimit-Remaining":{"$ref":"#/components/headers/FinkMeshRateLimitRemaining"},"FinkMesh-RateLimit-Reset":{"$ref":"#/components/headers/FinkMeshRateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"Bad request","value":{"error":{"code":"VALIDATION_ERROR","message":"Request validation failed.","details":{"field":"limit"},"requestId":"req_0123456789abcdef","apiVersion":"2026-07-01"}}}}}}},"401":{"description":"Unauthorized","headers":{"FinkMesh-Request-Id":{"$ref":"#/components/headers/FinkMeshRequestId"},"FinkMesh-API-Version":{"$ref":"#/components/headers/FinkMeshAPIVersion"},"FinkMesh-RateLimit-Limit":{"$ref":"#/components/headers/FinkMeshRateLimitLimit"},"FinkMesh-RateLimit-Remaining":{"$ref":"#/components/headers/FinkMeshRateLimitRemaining"},"FinkMesh-RateLimit-Reset":{"$ref":"#/components/headers/FinkMeshRateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"Unauthorized","value":{"error":{"code":"UNAUTHORIZED","message":"Missing or invalid API token. Provide Authorization: Bearer <token>.","requestId":"req_0123456789abcdef","apiVersion":"2026-07-01"}}}}}}},"403":{"description":"Insufficient scope","headers":{"FinkMesh-Request-Id":{"$ref":"#/components/headers/FinkMeshRequestId"},"FinkMesh-API-Version":{"$ref":"#/components/headers/FinkMeshAPIVersion"},"FinkMesh-RateLimit-Limit":{"$ref":"#/components/headers/FinkMeshRateLimitLimit"},"FinkMesh-RateLimit-Remaining":{"$ref":"#/components/headers/FinkMeshRateLimitRemaining"},"FinkMesh-RateLimit-Reset":{"$ref":"#/components/headers/FinkMeshRateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"Insufficient scope","value":{"error":{"code":"INSUFFICIENT_SCOPE","message":"Token lacks required scope.","details":{"requiredScope":"workflows:read"},"requestId":"req_0123456789abcdef","apiVersion":"2026-07-01"}}}}}}},"404":{"description":"Not found","headers":{"FinkMesh-Request-Id":{"$ref":"#/components/headers/FinkMeshRequestId"},"FinkMesh-API-Version":{"$ref":"#/components/headers/FinkMeshAPIVersion"},"FinkMesh-RateLimit-Limit":{"$ref":"#/components/headers/FinkMeshRateLimitLimit"},"FinkMesh-RateLimit-Remaining":{"$ref":"#/components/headers/FinkMeshRateLimitRemaining"},"FinkMesh-RateLimit-Reset":{"$ref":"#/components/headers/FinkMeshRateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"Not found","value":{"error":{"code":"NOT_FOUND","message":"Resource not found.","requestId":"req_0123456789abcdef","apiVersion":"2026-07-01"}}}}}}},"429":{"description":"Rate limited","headers":{"FinkMesh-Request-Id":{"$ref":"#/components/headers/FinkMeshRequestId"},"FinkMesh-API-Version":{"$ref":"#/components/headers/FinkMeshAPIVersion"},"FinkMesh-RateLimit-Limit":{"$ref":"#/components/headers/FinkMeshRateLimitLimit"},"FinkMesh-RateLimit-Remaining":{"$ref":"#/components/headers/FinkMeshRateLimitRemaining"},"FinkMesh-RateLimit-Reset":{"$ref":"#/components/headers/FinkMeshRateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"Rate limited","value":{"error":{"code":"RATE_LIMITED","message":"Rate limit exceeded.","details":{"retryAfter":30},"requestId":"req_0123456789abcdef","apiVersion":"2026-07-01"}}}}}}},"500":{"description":"Internal error","headers":{"FinkMesh-Request-Id":{"$ref":"#/components/headers/FinkMeshRequestId"},"FinkMesh-API-Version":{"$ref":"#/components/headers/FinkMeshAPIVersion"},"FinkMesh-RateLimit-Limit":{"$ref":"#/components/headers/FinkMeshRateLimitLimit"},"FinkMesh-RateLimit-Remaining":{"$ref":"#/components/headers/FinkMeshRateLimitRemaining"},"FinkMesh-RateLimit-Reset":{"$ref":"#/components/headers/FinkMeshRateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"Internal error","value":{"error":{"code":"INTERNAL_ERROR","message":"Internal server error.","requestId":"req_0123456789abcdef","apiVersion":"2026-07-01"}}}}}}}},"security":[{"bearerAuth":[]}],"x-required-scope":"webhooks:write","x-idempotency-key":"required"}},"/api/v1/webhook-endpoints/{endpointId}/test":{"post":{"operationId":"testWebhookEndpoint","tags":["Outbound Webhooks"],"summary":"Queue outbound webhook test delivery","description":"Queue outbound webhook test delivery. Required scope: webhooks:write. Requires Idempotency-Key.","parameters":[{"name":"endpointId","in":"path","required":true,"schema":{"type":"string"}},{"$ref":"#/components/parameters/IdempotencyKey"}],"responses":{"202":{"description":"Accepted","headers":{"FinkMesh-Request-Id":{"$ref":"#/components/headers/FinkMeshRequestId"},"FinkMesh-API-Version":{"$ref":"#/components/headers/FinkMeshAPIVersion"},"FinkMesh-RateLimit-Limit":{"$ref":"#/components/headers/FinkMeshRateLimitLimit"},"FinkMesh-RateLimit-Remaining":{"$ref":"#/components/headers/FinkMeshRateLimitRemaining"},"FinkMesh-RateLimit-Reset":{"$ref":"#/components/headers/FinkMeshRateLimitReset"}},"content":{"application/json":{"schema":{"type":"object","required":["data","requestId","apiVersion"],"properties":{"data":{"$ref":"#/components/schemas/WebhookDeliveryQueued"},"pagination":{"$ref":"#/components/schemas/Pagination"},"requestId":{"type":"string","example":"req_0123456789abcdef"},"apiVersion":{"type":"string","example":"2026-07-01"}}},"examples":{"default":{"summary":"Accepted","value":{"data":{"eventId":"evt_123","deliveryId":"del_123","status":"pending"},"requestId":"req_0123456789abcdef","apiVersion":"2026-07-01"}}}}}},"400":{"description":"Bad request","headers":{"FinkMesh-Request-Id":{"$ref":"#/components/headers/FinkMeshRequestId"},"FinkMesh-API-Version":{"$ref":"#/components/headers/FinkMeshAPIVersion"},"FinkMesh-RateLimit-Limit":{"$ref":"#/components/headers/FinkMeshRateLimitLimit"},"FinkMesh-RateLimit-Remaining":{"$ref":"#/components/headers/FinkMeshRateLimitRemaining"},"FinkMesh-RateLimit-Reset":{"$ref":"#/components/headers/FinkMeshRateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"Bad request","value":{"error":{"code":"VALIDATION_ERROR","message":"Request validation failed.","details":{"field":"limit"},"requestId":"req_0123456789abcdef","apiVersion":"2026-07-01"}}}}}}},"401":{"description":"Unauthorized","headers":{"FinkMesh-Request-Id":{"$ref":"#/components/headers/FinkMeshRequestId"},"FinkMesh-API-Version":{"$ref":"#/components/headers/FinkMeshAPIVersion"},"FinkMesh-RateLimit-Limit":{"$ref":"#/components/headers/FinkMeshRateLimitLimit"},"FinkMesh-RateLimit-Remaining":{"$ref":"#/components/headers/FinkMeshRateLimitRemaining"},"FinkMesh-RateLimit-Reset":{"$ref":"#/components/headers/FinkMeshRateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"Unauthorized","value":{"error":{"code":"UNAUTHORIZED","message":"Missing or invalid API token. Provide Authorization: Bearer <token>.","requestId":"req_0123456789abcdef","apiVersion":"2026-07-01"}}}}}}},"403":{"description":"Insufficient scope","headers":{"FinkMesh-Request-Id":{"$ref":"#/components/headers/FinkMeshRequestId"},"FinkMesh-API-Version":{"$ref":"#/components/headers/FinkMeshAPIVersion"},"FinkMesh-RateLimit-Limit":{"$ref":"#/components/headers/FinkMeshRateLimitLimit"},"FinkMesh-RateLimit-Remaining":{"$ref":"#/components/headers/FinkMeshRateLimitRemaining"},"FinkMesh-RateLimit-Reset":{"$ref":"#/components/headers/FinkMeshRateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"Insufficient scope","value":{"error":{"code":"INSUFFICIENT_SCOPE","message":"Token lacks required scope.","details":{"requiredScope":"webhooks:write"},"requestId":"req_0123456789abcdef","apiVersion":"2026-07-01"}}}}}}},"404":{"description":"Not found","headers":{"FinkMesh-Request-Id":{"$ref":"#/components/headers/FinkMeshRequestId"},"FinkMesh-API-Version":{"$ref":"#/components/headers/FinkMeshAPIVersion"},"FinkMesh-RateLimit-Limit":{"$ref":"#/components/headers/FinkMeshRateLimitLimit"},"FinkMesh-RateLimit-Remaining":{"$ref":"#/components/headers/FinkMeshRateLimitRemaining"},"FinkMesh-RateLimit-Reset":{"$ref":"#/components/headers/FinkMeshRateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"Not found","value":{"error":{"code":"NOT_FOUND","message":"Resource not found.","requestId":"req_0123456789abcdef","apiVersion":"2026-07-01"}}}}}}},"429":{"description":"Rate limited","headers":{"FinkMesh-Request-Id":{"$ref":"#/components/headers/FinkMeshRequestId"},"FinkMesh-API-Version":{"$ref":"#/components/headers/FinkMeshAPIVersion"},"FinkMesh-RateLimit-Limit":{"$ref":"#/components/headers/FinkMeshRateLimitLimit"},"FinkMesh-RateLimit-Remaining":{"$ref":"#/components/headers/FinkMeshRateLimitRemaining"},"FinkMesh-RateLimit-Reset":{"$ref":"#/components/headers/FinkMeshRateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"Rate limited","value":{"error":{"code":"RATE_LIMITED","message":"Rate limit exceeded.","details":{"retryAfter":30},"requestId":"req_0123456789abcdef","apiVersion":"2026-07-01"}}}}}}},"500":{"description":"Internal error","headers":{"FinkMesh-Request-Id":{"$ref":"#/components/headers/FinkMeshRequestId"},"FinkMesh-API-Version":{"$ref":"#/components/headers/FinkMeshAPIVersion"},"FinkMesh-RateLimit-Limit":{"$ref":"#/components/headers/FinkMeshRateLimitLimit"},"FinkMesh-RateLimit-Remaining":{"$ref":"#/components/headers/FinkMeshRateLimitRemaining"},"FinkMesh-RateLimit-Reset":{"$ref":"#/components/headers/FinkMeshRateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"Internal error","value":{"error":{"code":"INTERNAL_ERROR","message":"Internal server error.","requestId":"req_0123456789abcdef","apiVersion":"2026-07-01"}}}}}}}},"security":[{"bearerAuth":[]}],"x-required-scope":"webhooks:write","x-idempotency-key":"required"}},"/api/v1/webhook-endpoints/{endpointId}/deliveries":{"get":{"operationId":"listWebhookDeliveries","tags":["Outbound Webhooks"],"summary":"List outbound webhook deliveries","description":"List outbound webhook deliveries. Required scope: webhooks:read.","parameters":[{"name":"endpointId","in":"path","required":true,"schema":{"type":"string"}},{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":100},"description":"Page size."},{"name":"cursor","in":"query","schema":{"type":"string"},"description":"Cursor returned by pagination.nextCursor."}],"responses":{"200":{"description":"OK","headers":{"FinkMesh-Request-Id":{"$ref":"#/components/headers/FinkMeshRequestId"},"FinkMesh-API-Version":{"$ref":"#/components/headers/FinkMeshAPIVersion"},"FinkMesh-RateLimit-Limit":{"$ref":"#/components/headers/FinkMeshRateLimitLimit"},"FinkMesh-RateLimit-Remaining":{"$ref":"#/components/headers/FinkMeshRateLimitRemaining"},"FinkMesh-RateLimit-Reset":{"$ref":"#/components/headers/FinkMeshRateLimitReset"}},"content":{"application/json":{"schema":{"type":"object","required":["data","requestId","apiVersion"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/WebhookDelivery"}},"pagination":{"$ref":"#/components/schemas/Pagination"},"requestId":{"type":"string","example":"req_0123456789abcdef"},"apiVersion":{"type":"string","example":"2026-07-01"}}},"examples":{"default":{"summary":"OK","value":{"data":[{"id":"del_123","eventId":"evt_123","endpointId":"wh_123","eventType":"workflow.run.completed","status":"succeeded","attempts":1,"nextAttemptAt":null,"lastAttemptedAt":"2026-07-01T12:00:00.000Z","deliveredAt":"2026-07-01T12:00:01.000Z","deadAt":null,"responseStatus":200,"responseBodyPreview":"{ \"ok\": true }","lastError":null,"createdAt":"2026-07-01T12:00:00.000Z","updatedAt":"2026-07-01T12:00:01.000Z"}],"pagination":{"limit":10,"hasMore":false,"nextCursor":null},"requestId":"req_0123456789abcdef","apiVersion":"2026-07-01"}}}}}},"400":{"description":"Bad request","headers":{"FinkMesh-Request-Id":{"$ref":"#/components/headers/FinkMeshRequestId"},"FinkMesh-API-Version":{"$ref":"#/components/headers/FinkMeshAPIVersion"},"FinkMesh-RateLimit-Limit":{"$ref":"#/components/headers/FinkMeshRateLimitLimit"},"FinkMesh-RateLimit-Remaining":{"$ref":"#/components/headers/FinkMeshRateLimitRemaining"},"FinkMesh-RateLimit-Reset":{"$ref":"#/components/headers/FinkMeshRateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"Bad request","value":{"error":{"code":"VALIDATION_ERROR","message":"Request validation failed.","details":{"field":"limit"},"requestId":"req_0123456789abcdef","apiVersion":"2026-07-01"}}}}}}},"401":{"description":"Unauthorized","headers":{"FinkMesh-Request-Id":{"$ref":"#/components/headers/FinkMeshRequestId"},"FinkMesh-API-Version":{"$ref":"#/components/headers/FinkMeshAPIVersion"},"FinkMesh-RateLimit-Limit":{"$ref":"#/components/headers/FinkMeshRateLimitLimit"},"FinkMesh-RateLimit-Remaining":{"$ref":"#/components/headers/FinkMeshRateLimitRemaining"},"FinkMesh-RateLimit-Reset":{"$ref":"#/components/headers/FinkMeshRateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"Unauthorized","value":{"error":{"code":"UNAUTHORIZED","message":"Missing or invalid API token. Provide Authorization: Bearer <token>.","requestId":"req_0123456789abcdef","apiVersion":"2026-07-01"}}}}}}},"403":{"description":"Insufficient scope","headers":{"FinkMesh-Request-Id":{"$ref":"#/components/headers/FinkMeshRequestId"},"FinkMesh-API-Version":{"$ref":"#/components/headers/FinkMeshAPIVersion"},"FinkMesh-RateLimit-Limit":{"$ref":"#/components/headers/FinkMeshRateLimitLimit"},"FinkMesh-RateLimit-Remaining":{"$ref":"#/components/headers/FinkMeshRateLimitRemaining"},"FinkMesh-RateLimit-Reset":{"$ref":"#/components/headers/FinkMeshRateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"Insufficient scope","value":{"error":{"code":"INSUFFICIENT_SCOPE","message":"Token lacks required scope.","details":{"requiredScope":"workflows:read"},"requestId":"req_0123456789abcdef","apiVersion":"2026-07-01"}}}}}}},"404":{"description":"Not found","headers":{"FinkMesh-Request-Id":{"$ref":"#/components/headers/FinkMeshRequestId"},"FinkMesh-API-Version":{"$ref":"#/components/headers/FinkMeshAPIVersion"},"FinkMesh-RateLimit-Limit":{"$ref":"#/components/headers/FinkMeshRateLimitLimit"},"FinkMesh-RateLimit-Remaining":{"$ref":"#/components/headers/FinkMeshRateLimitRemaining"},"FinkMesh-RateLimit-Reset":{"$ref":"#/components/headers/FinkMeshRateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"Not found","value":{"error":{"code":"NOT_FOUND","message":"Resource not found.","requestId":"req_0123456789abcdef","apiVersion":"2026-07-01"}}}}}}},"429":{"description":"Rate limited","headers":{"FinkMesh-Request-Id":{"$ref":"#/components/headers/FinkMeshRequestId"},"FinkMesh-API-Version":{"$ref":"#/components/headers/FinkMeshAPIVersion"},"FinkMesh-RateLimit-Limit":{"$ref":"#/components/headers/FinkMeshRateLimitLimit"},"FinkMesh-RateLimit-Remaining":{"$ref":"#/components/headers/FinkMeshRateLimitRemaining"},"FinkMesh-RateLimit-Reset":{"$ref":"#/components/headers/FinkMeshRateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"Rate limited","value":{"error":{"code":"RATE_LIMITED","message":"Rate limit exceeded.","details":{"retryAfter":30},"requestId":"req_0123456789abcdef","apiVersion":"2026-07-01"}}}}}}},"500":{"description":"Internal error","headers":{"FinkMesh-Request-Id":{"$ref":"#/components/headers/FinkMeshRequestId"},"FinkMesh-API-Version":{"$ref":"#/components/headers/FinkMeshAPIVersion"},"FinkMesh-RateLimit-Limit":{"$ref":"#/components/headers/FinkMeshRateLimitLimit"},"FinkMesh-RateLimit-Remaining":{"$ref":"#/components/headers/FinkMeshRateLimitRemaining"},"FinkMesh-RateLimit-Reset":{"$ref":"#/components/headers/FinkMeshRateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"Internal error","value":{"error":{"code":"INTERNAL_ERROR","message":"Internal server error.","requestId":"req_0123456789abcdef","apiVersion":"2026-07-01"}}}}}}}},"security":[{"bearerAuth":[]}],"x-required-scope":"webhooks:read"}},"/api/v1/webhook-deliveries/{deliveryId}":{"get":{"operationId":"getWebhookDelivery","tags":["Outbound Webhooks"],"summary":"Get outbound webhook delivery","description":"Get outbound webhook delivery. Required scope: webhooks:read.","parameters":[{"name":"deliveryId","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","headers":{"FinkMesh-Request-Id":{"$ref":"#/components/headers/FinkMeshRequestId"},"FinkMesh-API-Version":{"$ref":"#/components/headers/FinkMeshAPIVersion"},"FinkMesh-RateLimit-Limit":{"$ref":"#/components/headers/FinkMeshRateLimitLimit"},"FinkMesh-RateLimit-Remaining":{"$ref":"#/components/headers/FinkMeshRateLimitRemaining"},"FinkMesh-RateLimit-Reset":{"$ref":"#/components/headers/FinkMeshRateLimitReset"}},"content":{"application/json":{"schema":{"type":"object","required":["data","requestId","apiVersion"],"properties":{"data":{"$ref":"#/components/schemas/WebhookDelivery"},"pagination":{"$ref":"#/components/schemas/Pagination"},"requestId":{"type":"string","example":"req_0123456789abcdef"},"apiVersion":{"type":"string","example":"2026-07-01"}}},"examples":{"default":{"summary":"OK","value":{"data":{"id":"del_123","eventId":"evt_123","endpointId":"wh_123","eventType":"workflow.run.completed","status":"succeeded","attempts":1,"nextAttemptAt":null,"lastAttemptedAt":"2026-07-01T12:00:00.000Z","deliveredAt":"2026-07-01T12:00:01.000Z","deadAt":null,"responseStatus":200,"responseBodyPreview":"{ \"ok\": true }","lastError":null,"createdAt":"2026-07-01T12:00:00.000Z","updatedAt":"2026-07-01T12:00:01.000Z"},"requestId":"req_0123456789abcdef","apiVersion":"2026-07-01"}}}}}},"401":{"description":"Unauthorized","headers":{"FinkMesh-Request-Id":{"$ref":"#/components/headers/FinkMeshRequestId"},"FinkMesh-API-Version":{"$ref":"#/components/headers/FinkMeshAPIVersion"},"FinkMesh-RateLimit-Limit":{"$ref":"#/components/headers/FinkMeshRateLimitLimit"},"FinkMesh-RateLimit-Remaining":{"$ref":"#/components/headers/FinkMeshRateLimitRemaining"},"FinkMesh-RateLimit-Reset":{"$ref":"#/components/headers/FinkMeshRateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"Unauthorized","value":{"error":{"code":"UNAUTHORIZED","message":"Missing or invalid API token. Provide Authorization: Bearer <token>.","requestId":"req_0123456789abcdef","apiVersion":"2026-07-01"}}}}}}},"403":{"description":"Insufficient scope","headers":{"FinkMesh-Request-Id":{"$ref":"#/components/headers/FinkMeshRequestId"},"FinkMesh-API-Version":{"$ref":"#/components/headers/FinkMeshAPIVersion"},"FinkMesh-RateLimit-Limit":{"$ref":"#/components/headers/FinkMeshRateLimitLimit"},"FinkMesh-RateLimit-Remaining":{"$ref":"#/components/headers/FinkMeshRateLimitRemaining"},"FinkMesh-RateLimit-Reset":{"$ref":"#/components/headers/FinkMeshRateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"Insufficient scope","value":{"error":{"code":"INSUFFICIENT_SCOPE","message":"Token lacks required scope.","details":{"requiredScope":"workflows:read"},"requestId":"req_0123456789abcdef","apiVersion":"2026-07-01"}}}}}}},"404":{"description":"Not found","headers":{"FinkMesh-Request-Id":{"$ref":"#/components/headers/FinkMeshRequestId"},"FinkMesh-API-Version":{"$ref":"#/components/headers/FinkMeshAPIVersion"},"FinkMesh-RateLimit-Limit":{"$ref":"#/components/headers/FinkMeshRateLimitLimit"},"FinkMesh-RateLimit-Remaining":{"$ref":"#/components/headers/FinkMeshRateLimitRemaining"},"FinkMesh-RateLimit-Reset":{"$ref":"#/components/headers/FinkMeshRateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"Not found","value":{"error":{"code":"NOT_FOUND","message":"Resource not found.","requestId":"req_0123456789abcdef","apiVersion":"2026-07-01"}}}}}}},"429":{"description":"Rate limited","headers":{"FinkMesh-Request-Id":{"$ref":"#/components/headers/FinkMeshRequestId"},"FinkMesh-API-Version":{"$ref":"#/components/headers/FinkMeshAPIVersion"},"FinkMesh-RateLimit-Limit":{"$ref":"#/components/headers/FinkMeshRateLimitLimit"},"FinkMesh-RateLimit-Remaining":{"$ref":"#/components/headers/FinkMeshRateLimitRemaining"},"FinkMesh-RateLimit-Reset":{"$ref":"#/components/headers/FinkMeshRateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"Rate limited","value":{"error":{"code":"RATE_LIMITED","message":"Rate limit exceeded.","details":{"retryAfter":30},"requestId":"req_0123456789abcdef","apiVersion":"2026-07-01"}}}}}}},"500":{"description":"Internal error","headers":{"FinkMesh-Request-Id":{"$ref":"#/components/headers/FinkMeshRequestId"},"FinkMesh-API-Version":{"$ref":"#/components/headers/FinkMeshAPIVersion"},"FinkMesh-RateLimit-Limit":{"$ref":"#/components/headers/FinkMeshRateLimitLimit"},"FinkMesh-RateLimit-Remaining":{"$ref":"#/components/headers/FinkMeshRateLimitRemaining"},"FinkMesh-RateLimit-Reset":{"$ref":"#/components/headers/FinkMeshRateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"Internal error","value":{"error":{"code":"INTERNAL_ERROR","message":"Internal server error.","requestId":"req_0123456789abcdef","apiVersion":"2026-07-01"}}}}}}}},"security":[{"bearerAuth":[]}],"x-required-scope":"webhooks:read"}},"/api/v1/webhook-deliveries/{deliveryId}/retry":{"post":{"operationId":"retryWebhookDelivery","tags":["Outbound Webhooks"],"summary":"Retry outbound webhook delivery","description":"Retry outbound webhook delivery. Required scope: webhooks:write. Requires Idempotency-Key.","parameters":[{"name":"deliveryId","in":"path","required":true,"schema":{"type":"string"}},{"$ref":"#/components/parameters/IdempotencyKey"}],"responses":{"202":{"description":"Accepted","headers":{"FinkMesh-Request-Id":{"$ref":"#/components/headers/FinkMeshRequestId"},"FinkMesh-API-Version":{"$ref":"#/components/headers/FinkMeshAPIVersion"},"FinkMesh-RateLimit-Limit":{"$ref":"#/components/headers/FinkMeshRateLimitLimit"},"FinkMesh-RateLimit-Remaining":{"$ref":"#/components/headers/FinkMeshRateLimitRemaining"},"FinkMesh-RateLimit-Reset":{"$ref":"#/components/headers/FinkMeshRateLimitReset"}},"content":{"application/json":{"schema":{"type":"object","required":["data","requestId","apiVersion"],"properties":{"data":{"$ref":"#/components/schemas/WebhookDelivery"},"pagination":{"$ref":"#/components/schemas/Pagination"},"requestId":{"type":"string","example":"req_0123456789abcdef"},"apiVersion":{"type":"string","example":"2026-07-01"}}},"examples":{"default":{"summary":"Accepted","value":{"data":{"id":"del_123","eventId":"evt_123","endpointId":"wh_123","eventType":"workflow.run.completed","status":"pending","attempts":2,"nextAttemptAt":null,"lastAttemptedAt":"2026-07-01T12:00:00.000Z","deliveredAt":"2026-07-01T12:00:01.000Z","deadAt":null,"responseStatus":200,"responseBodyPreview":"{ \"ok\": true }","lastError":null,"createdAt":"2026-07-01T12:00:00.000Z","updatedAt":"2026-07-01T12:00:01.000Z"},"requestId":"req_0123456789abcdef","apiVersion":"2026-07-01"}}}}}},"400":{"description":"Bad request","headers":{"FinkMesh-Request-Id":{"$ref":"#/components/headers/FinkMeshRequestId"},"FinkMesh-API-Version":{"$ref":"#/components/headers/FinkMeshAPIVersion"},"FinkMesh-RateLimit-Limit":{"$ref":"#/components/headers/FinkMeshRateLimitLimit"},"FinkMesh-RateLimit-Remaining":{"$ref":"#/components/headers/FinkMeshRateLimitRemaining"},"FinkMesh-RateLimit-Reset":{"$ref":"#/components/headers/FinkMeshRateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"Bad request","value":{"error":{"code":"VALIDATION_ERROR","message":"Request validation failed.","details":{"field":"limit"},"requestId":"req_0123456789abcdef","apiVersion":"2026-07-01"}}}}}}},"401":{"description":"Unauthorized","headers":{"FinkMesh-Request-Id":{"$ref":"#/components/headers/FinkMeshRequestId"},"FinkMesh-API-Version":{"$ref":"#/components/headers/FinkMeshAPIVersion"},"FinkMesh-RateLimit-Limit":{"$ref":"#/components/headers/FinkMeshRateLimitLimit"},"FinkMesh-RateLimit-Remaining":{"$ref":"#/components/headers/FinkMeshRateLimitRemaining"},"FinkMesh-RateLimit-Reset":{"$ref":"#/components/headers/FinkMeshRateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"Unauthorized","value":{"error":{"code":"UNAUTHORIZED","message":"Missing or invalid API token. Provide Authorization: Bearer <token>.","requestId":"req_0123456789abcdef","apiVersion":"2026-07-01"}}}}}}},"403":{"description":"Insufficient scope","headers":{"FinkMesh-Request-Id":{"$ref":"#/components/headers/FinkMeshRequestId"},"FinkMesh-API-Version":{"$ref":"#/components/headers/FinkMeshAPIVersion"},"FinkMesh-RateLimit-Limit":{"$ref":"#/components/headers/FinkMeshRateLimitLimit"},"FinkMesh-RateLimit-Remaining":{"$ref":"#/components/headers/FinkMeshRateLimitRemaining"},"FinkMesh-RateLimit-Reset":{"$ref":"#/components/headers/FinkMeshRateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"Insufficient scope","value":{"error":{"code":"INSUFFICIENT_SCOPE","message":"Token lacks required scope.","details":{"requiredScope":"webhooks:write"},"requestId":"req_0123456789abcdef","apiVersion":"2026-07-01"}}}}}}},"404":{"description":"Not found","headers":{"FinkMesh-Request-Id":{"$ref":"#/components/headers/FinkMeshRequestId"},"FinkMesh-API-Version":{"$ref":"#/components/headers/FinkMeshAPIVersion"},"FinkMesh-RateLimit-Limit":{"$ref":"#/components/headers/FinkMeshRateLimitLimit"},"FinkMesh-RateLimit-Remaining":{"$ref":"#/components/headers/FinkMeshRateLimitRemaining"},"FinkMesh-RateLimit-Reset":{"$ref":"#/components/headers/FinkMeshRateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"Not found","value":{"error":{"code":"NOT_FOUND","message":"Resource not found.","requestId":"req_0123456789abcdef","apiVersion":"2026-07-01"}}}}}}},"429":{"description":"Rate limited","headers":{"FinkMesh-Request-Id":{"$ref":"#/components/headers/FinkMeshRequestId"},"FinkMesh-API-Version":{"$ref":"#/components/headers/FinkMeshAPIVersion"},"FinkMesh-RateLimit-Limit":{"$ref":"#/components/headers/FinkMeshRateLimitLimit"},"FinkMesh-RateLimit-Remaining":{"$ref":"#/components/headers/FinkMeshRateLimitRemaining"},"FinkMesh-RateLimit-Reset":{"$ref":"#/components/headers/FinkMeshRateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"Rate limited","value":{"error":{"code":"RATE_LIMITED","message":"Rate limit exceeded.","details":{"retryAfter":30},"requestId":"req_0123456789abcdef","apiVersion":"2026-07-01"}}}}}}},"500":{"description":"Internal error","headers":{"FinkMesh-Request-Id":{"$ref":"#/components/headers/FinkMeshRequestId"},"FinkMesh-API-Version":{"$ref":"#/components/headers/FinkMeshAPIVersion"},"FinkMesh-RateLimit-Limit":{"$ref":"#/components/headers/FinkMeshRateLimitLimit"},"FinkMesh-RateLimit-Remaining":{"$ref":"#/components/headers/FinkMeshRateLimitRemaining"},"FinkMesh-RateLimit-Reset":{"$ref":"#/components/headers/FinkMeshRateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"Internal error","value":{"error":{"code":"INTERNAL_ERROR","message":"Internal server error.","requestId":"req_0123456789abcdef","apiVersion":"2026-07-01"}}}}}}}},"security":[{"bearerAuth":[]}],"x-required-scope":"webhooks:write","x-idempotency-key":"required"}},"/api/v1/support/tickets":{"get":{"operationId":"listSupportTickets","tags":["Support"],"summary":"List support tickets","description":"List support tickets. Required scope: support:read.","parameters":[{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":100},"description":"Page size."},{"name":"cursor","in":"query","schema":{"type":"string"},"description":"Cursor returned by pagination.nextCursor."}],"responses":{"200":{"description":"OK","headers":{"FinkMesh-Request-Id":{"$ref":"#/components/headers/FinkMeshRequestId"},"FinkMesh-API-Version":{"$ref":"#/components/headers/FinkMeshAPIVersion"},"FinkMesh-RateLimit-Limit":{"$ref":"#/components/headers/FinkMeshRateLimitLimit"},"FinkMesh-RateLimit-Remaining":{"$ref":"#/components/headers/FinkMeshRateLimitRemaining"},"FinkMesh-RateLimit-Reset":{"$ref":"#/components/headers/FinkMeshRateLimitReset"}},"content":{"application/json":{"schema":{"type":"object","required":["data","requestId","apiVersion"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/SupportTicket"}},"pagination":{"$ref":"#/components/schemas/Pagination"},"requestId":{"type":"string","example":"req_0123456789abcdef"},"apiVersion":{"type":"string","example":"2026-07-01"}}},"examples":{"default":{"summary":"OK","value":{"data":[{"id":"tkt_123","title":"API question","status":"open","priority":"normal","messages":[],"attachments":[]}],"pagination":{"limit":10,"hasMore":false,"nextCursor":null},"requestId":"req_0123456789abcdef","apiVersion":"2026-07-01"}}}}}},"400":{"description":"Bad request","headers":{"FinkMesh-Request-Id":{"$ref":"#/components/headers/FinkMeshRequestId"},"FinkMesh-API-Version":{"$ref":"#/components/headers/FinkMeshAPIVersion"},"FinkMesh-RateLimit-Limit":{"$ref":"#/components/headers/FinkMeshRateLimitLimit"},"FinkMesh-RateLimit-Remaining":{"$ref":"#/components/headers/FinkMeshRateLimitRemaining"},"FinkMesh-RateLimit-Reset":{"$ref":"#/components/headers/FinkMeshRateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"Bad request","value":{"error":{"code":"VALIDATION_ERROR","message":"Request validation failed.","details":{"field":"limit"},"requestId":"req_0123456789abcdef","apiVersion":"2026-07-01"}}}}}}},"401":{"description":"Unauthorized","headers":{"FinkMesh-Request-Id":{"$ref":"#/components/headers/FinkMeshRequestId"},"FinkMesh-API-Version":{"$ref":"#/components/headers/FinkMeshAPIVersion"},"FinkMesh-RateLimit-Limit":{"$ref":"#/components/headers/FinkMeshRateLimitLimit"},"FinkMesh-RateLimit-Remaining":{"$ref":"#/components/headers/FinkMeshRateLimitRemaining"},"FinkMesh-RateLimit-Reset":{"$ref":"#/components/headers/FinkMeshRateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"Unauthorized","value":{"error":{"code":"UNAUTHORIZED","message":"Missing or invalid API token. Provide Authorization: Bearer <token>.","requestId":"req_0123456789abcdef","apiVersion":"2026-07-01"}}}}}}},"403":{"description":"Insufficient scope","headers":{"FinkMesh-Request-Id":{"$ref":"#/components/headers/FinkMeshRequestId"},"FinkMesh-API-Version":{"$ref":"#/components/headers/FinkMeshAPIVersion"},"FinkMesh-RateLimit-Limit":{"$ref":"#/components/headers/FinkMeshRateLimitLimit"},"FinkMesh-RateLimit-Remaining":{"$ref":"#/components/headers/FinkMeshRateLimitRemaining"},"FinkMesh-RateLimit-Reset":{"$ref":"#/components/headers/FinkMeshRateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"Insufficient scope","value":{"error":{"code":"INSUFFICIENT_SCOPE","message":"Token lacks required scope.","details":{"requiredScope":"workflows:read"},"requestId":"req_0123456789abcdef","apiVersion":"2026-07-01"}}}}}}},"404":{"description":"Not found","headers":{"FinkMesh-Request-Id":{"$ref":"#/components/headers/FinkMeshRequestId"},"FinkMesh-API-Version":{"$ref":"#/components/headers/FinkMeshAPIVersion"},"FinkMesh-RateLimit-Limit":{"$ref":"#/components/headers/FinkMeshRateLimitLimit"},"FinkMesh-RateLimit-Remaining":{"$ref":"#/components/headers/FinkMeshRateLimitRemaining"},"FinkMesh-RateLimit-Reset":{"$ref":"#/components/headers/FinkMeshRateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"Not found","value":{"error":{"code":"NOT_FOUND","message":"Resource not found.","requestId":"req_0123456789abcdef","apiVersion":"2026-07-01"}}}}}}},"429":{"description":"Rate limited","headers":{"FinkMesh-Request-Id":{"$ref":"#/components/headers/FinkMeshRequestId"},"FinkMesh-API-Version":{"$ref":"#/components/headers/FinkMeshAPIVersion"},"FinkMesh-RateLimit-Limit":{"$ref":"#/components/headers/FinkMeshRateLimitLimit"},"FinkMesh-RateLimit-Remaining":{"$ref":"#/components/headers/FinkMeshRateLimitRemaining"},"FinkMesh-RateLimit-Reset":{"$ref":"#/components/headers/FinkMeshRateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"Rate limited","value":{"error":{"code":"RATE_LIMITED","message":"Rate limit exceeded.","details":{"retryAfter":30},"requestId":"req_0123456789abcdef","apiVersion":"2026-07-01"}}}}}}},"500":{"description":"Internal error","headers":{"FinkMesh-Request-Id":{"$ref":"#/components/headers/FinkMeshRequestId"},"FinkMesh-API-Version":{"$ref":"#/components/headers/FinkMeshAPIVersion"},"FinkMesh-RateLimit-Limit":{"$ref":"#/components/headers/FinkMeshRateLimitLimit"},"FinkMesh-RateLimit-Remaining":{"$ref":"#/components/headers/FinkMeshRateLimitRemaining"},"FinkMesh-RateLimit-Reset":{"$ref":"#/components/headers/FinkMeshRateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"Internal error","value":{"error":{"code":"INTERNAL_ERROR","message":"Internal server error.","requestId":"req_0123456789abcdef","apiVersion":"2026-07-01"}}}}}}}},"security":[{"bearerAuth":[]}],"x-required-scope":"support:read"},"post":{"operationId":"createSupportTicket","tags":["Support"],"summary":"Create support ticket","description":"Create support ticket. Required scope: support:write. Requires Idempotency-Key.","parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateSupportTicketRequest"},"examples":{"default":{"summary":"Create support ticket request","value":{"title":"API question","description":"Need help with workflow readiness.","category":"general","priority":"normal"}}}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/CreateSupportTicketMultipartRequest"},"examples":{"screenshot":{"summary":"Create support ticket with screenshot","value":{"title":"API question","description":"Screenshot attached.","priority":"normal","attachments":["screenshot.jpg"]}}}}}},"responses":{"201":{"description":"Created","headers":{"FinkMesh-Request-Id":{"$ref":"#/components/headers/FinkMeshRequestId"},"FinkMesh-API-Version":{"$ref":"#/components/headers/FinkMeshAPIVersion"},"FinkMesh-RateLimit-Limit":{"$ref":"#/components/headers/FinkMeshRateLimitLimit"},"FinkMesh-RateLimit-Remaining":{"$ref":"#/components/headers/FinkMeshRateLimitRemaining"},"FinkMesh-RateLimit-Reset":{"$ref":"#/components/headers/FinkMeshRateLimitReset"}},"content":{"application/json":{"schema":{"type":"object","required":["data","requestId","apiVersion"],"properties":{"data":{"$ref":"#/components/schemas/SupportTicket"},"pagination":{"$ref":"#/components/schemas/Pagination"},"requestId":{"type":"string","example":"req_0123456789abcdef"},"apiVersion":{"type":"string","example":"2026-07-01"}}},"examples":{"default":{"summary":"Created","value":{"data":{"id":"tkt_123","title":"API question","status":"open","priority":"normal","messages":[],"attachments":[]},"requestId":"req_0123456789abcdef","apiVersion":"2026-07-01"}}}}}},"400":{"description":"Bad request","headers":{"FinkMesh-Request-Id":{"$ref":"#/components/headers/FinkMeshRequestId"},"FinkMesh-API-Version":{"$ref":"#/components/headers/FinkMeshAPIVersion"},"FinkMesh-RateLimit-Limit":{"$ref":"#/components/headers/FinkMeshRateLimitLimit"},"FinkMesh-RateLimit-Remaining":{"$ref":"#/components/headers/FinkMeshRateLimitRemaining"},"FinkMesh-RateLimit-Reset":{"$ref":"#/components/headers/FinkMeshRateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"Bad request","value":{"error":{"code":"VALIDATION_ERROR","message":"Request validation failed.","details":{"field":"limit"},"requestId":"req_0123456789abcdef","apiVersion":"2026-07-01"}}}}}}},"401":{"description":"Unauthorized","headers":{"FinkMesh-Request-Id":{"$ref":"#/components/headers/FinkMeshRequestId"},"FinkMesh-API-Version":{"$ref":"#/components/headers/FinkMeshAPIVersion"},"FinkMesh-RateLimit-Limit":{"$ref":"#/components/headers/FinkMeshRateLimitLimit"},"FinkMesh-RateLimit-Remaining":{"$ref":"#/components/headers/FinkMeshRateLimitRemaining"},"FinkMesh-RateLimit-Reset":{"$ref":"#/components/headers/FinkMeshRateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"Unauthorized","value":{"error":{"code":"UNAUTHORIZED","message":"Missing or invalid API token. Provide Authorization: Bearer <token>.","requestId":"req_0123456789abcdef","apiVersion":"2026-07-01"}}}}}}},"403":{"description":"Insufficient scope","headers":{"FinkMesh-Request-Id":{"$ref":"#/components/headers/FinkMeshRequestId"},"FinkMesh-API-Version":{"$ref":"#/components/headers/FinkMeshAPIVersion"},"FinkMesh-RateLimit-Limit":{"$ref":"#/components/headers/FinkMeshRateLimitLimit"},"FinkMesh-RateLimit-Remaining":{"$ref":"#/components/headers/FinkMeshRateLimitRemaining"},"FinkMesh-RateLimit-Reset":{"$ref":"#/components/headers/FinkMeshRateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"Insufficient scope","value":{"error":{"code":"INSUFFICIENT_SCOPE","message":"Token lacks required scope.","details":{"requiredScope":"support:write"},"requestId":"req_0123456789abcdef","apiVersion":"2026-07-01"}}}}}}},"429":{"description":"Rate limited","headers":{"FinkMesh-Request-Id":{"$ref":"#/components/headers/FinkMeshRequestId"},"FinkMesh-API-Version":{"$ref":"#/components/headers/FinkMeshAPIVersion"},"FinkMesh-RateLimit-Limit":{"$ref":"#/components/headers/FinkMeshRateLimitLimit"},"FinkMesh-RateLimit-Remaining":{"$ref":"#/components/headers/FinkMeshRateLimitRemaining"},"FinkMesh-RateLimit-Reset":{"$ref":"#/components/headers/FinkMeshRateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"Rate limited","value":{"error":{"code":"RATE_LIMITED","message":"Rate limit exceeded.","details":{"retryAfter":30},"requestId":"req_0123456789abcdef","apiVersion":"2026-07-01"}}}}}}},"500":{"description":"Internal error","headers":{"FinkMesh-Request-Id":{"$ref":"#/components/headers/FinkMeshRequestId"},"FinkMesh-API-Version":{"$ref":"#/components/headers/FinkMeshAPIVersion"},"FinkMesh-RateLimit-Limit":{"$ref":"#/components/headers/FinkMeshRateLimitLimit"},"FinkMesh-RateLimit-Remaining":{"$ref":"#/components/headers/FinkMeshRateLimitRemaining"},"FinkMesh-RateLimit-Reset":{"$ref":"#/components/headers/FinkMeshRateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"Internal error","value":{"error":{"code":"INTERNAL_ERROR","message":"Internal server error.","requestId":"req_0123456789abcdef","apiVersion":"2026-07-01"}}}}}}}},"security":[{"bearerAuth":[]}],"x-required-scope":"support:write","x-idempotency-key":"required"}},"/api/v1/support/tickets/{ticketId}":{"get":{"operationId":"getSupportTicket","tags":["Support"],"summary":"Get support ticket","description":"Get support ticket. Required scope: support:read.","parameters":[{"name":"ticketId","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","headers":{"FinkMesh-Request-Id":{"$ref":"#/components/headers/FinkMeshRequestId"},"FinkMesh-API-Version":{"$ref":"#/components/headers/FinkMeshAPIVersion"},"FinkMesh-RateLimit-Limit":{"$ref":"#/components/headers/FinkMeshRateLimitLimit"},"FinkMesh-RateLimit-Remaining":{"$ref":"#/components/headers/FinkMeshRateLimitRemaining"},"FinkMesh-RateLimit-Reset":{"$ref":"#/components/headers/FinkMeshRateLimitReset"}},"content":{"application/json":{"schema":{"type":"object","required":["data","requestId","apiVersion"],"properties":{"data":{"$ref":"#/components/schemas/SupportTicket"},"pagination":{"$ref":"#/components/schemas/Pagination"},"requestId":{"type":"string","example":"req_0123456789abcdef"},"apiVersion":{"type":"string","example":"2026-07-01"}}},"examples":{"default":{"summary":"OK","value":{"data":{"id":"tkt_123","title":"API question","status":"open","priority":"normal","messages":[{"id":"msg_123","ticketId":"tkt_123","body":"Here is the run id: run_123.","authorRole":"user","createdAt":"2026-07-01T12:00:00.000Z"}],"attachments":[]},"requestId":"req_0123456789abcdef","apiVersion":"2026-07-01"}}}}}},"401":{"description":"Unauthorized","headers":{"FinkMesh-Request-Id":{"$ref":"#/components/headers/FinkMeshRequestId"},"FinkMesh-API-Version":{"$ref":"#/components/headers/FinkMeshAPIVersion"},"FinkMesh-RateLimit-Limit":{"$ref":"#/components/headers/FinkMeshRateLimitLimit"},"FinkMesh-RateLimit-Remaining":{"$ref":"#/components/headers/FinkMeshRateLimitRemaining"},"FinkMesh-RateLimit-Reset":{"$ref":"#/components/headers/FinkMeshRateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"Unauthorized","value":{"error":{"code":"UNAUTHORIZED","message":"Missing or invalid API token. Provide Authorization: Bearer <token>.","requestId":"req_0123456789abcdef","apiVersion":"2026-07-01"}}}}}}},"403":{"description":"Insufficient scope","headers":{"FinkMesh-Request-Id":{"$ref":"#/components/headers/FinkMeshRequestId"},"FinkMesh-API-Version":{"$ref":"#/components/headers/FinkMeshAPIVersion"},"FinkMesh-RateLimit-Limit":{"$ref":"#/components/headers/FinkMeshRateLimitLimit"},"FinkMesh-RateLimit-Remaining":{"$ref":"#/components/headers/FinkMeshRateLimitRemaining"},"FinkMesh-RateLimit-Reset":{"$ref":"#/components/headers/FinkMeshRateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"Insufficient scope","value":{"error":{"code":"INSUFFICIENT_SCOPE","message":"Token lacks required scope.","details":{"requiredScope":"workflows:read"},"requestId":"req_0123456789abcdef","apiVersion":"2026-07-01"}}}}}}},"404":{"description":"Not found","headers":{"FinkMesh-Request-Id":{"$ref":"#/components/headers/FinkMeshRequestId"},"FinkMesh-API-Version":{"$ref":"#/components/headers/FinkMeshAPIVersion"},"FinkMesh-RateLimit-Limit":{"$ref":"#/components/headers/FinkMeshRateLimitLimit"},"FinkMesh-RateLimit-Remaining":{"$ref":"#/components/headers/FinkMeshRateLimitRemaining"},"FinkMesh-RateLimit-Reset":{"$ref":"#/components/headers/FinkMeshRateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"Not found","value":{"error":{"code":"NOT_FOUND","message":"Resource not found.","requestId":"req_0123456789abcdef","apiVersion":"2026-07-01"}}}}}}},"429":{"description":"Rate limited","headers":{"FinkMesh-Request-Id":{"$ref":"#/components/headers/FinkMeshRequestId"},"FinkMesh-API-Version":{"$ref":"#/components/headers/FinkMeshAPIVersion"},"FinkMesh-RateLimit-Limit":{"$ref":"#/components/headers/FinkMeshRateLimitLimit"},"FinkMesh-RateLimit-Remaining":{"$ref":"#/components/headers/FinkMeshRateLimitRemaining"},"FinkMesh-RateLimit-Reset":{"$ref":"#/components/headers/FinkMeshRateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"Rate limited","value":{"error":{"code":"RATE_LIMITED","message":"Rate limit exceeded.","details":{"retryAfter":30},"requestId":"req_0123456789abcdef","apiVersion":"2026-07-01"}}}}}}},"500":{"description":"Internal error","headers":{"FinkMesh-Request-Id":{"$ref":"#/components/headers/FinkMeshRequestId"},"FinkMesh-API-Version":{"$ref":"#/components/headers/FinkMeshAPIVersion"},"FinkMesh-RateLimit-Limit":{"$ref":"#/components/headers/FinkMeshRateLimitLimit"},"FinkMesh-RateLimit-Remaining":{"$ref":"#/components/headers/FinkMeshRateLimitRemaining"},"FinkMesh-RateLimit-Reset":{"$ref":"#/components/headers/FinkMeshRateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"Internal error","value":{"error":{"code":"INTERNAL_ERROR","message":"Internal server error.","requestId":"req_0123456789abcdef","apiVersion":"2026-07-01"}}}}}}}},"security":[{"bearerAuth":[]}],"x-required-scope":"support:read"}},"/api/v1/support/tickets/{ticketId}/messages":{"post":{"operationId":"createSupportTicketMessage","tags":["Support"],"summary":"Create support ticket message","description":"Create support ticket message. Required scope: support:write. Requires Idempotency-Key.","parameters":[{"name":"ticketId","in":"path","required":true,"schema":{"type":"string"}},{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateSupportMessageRequest"},"examples":{"default":{"summary":"Create support ticket message request","value":{"body":"Here is the run id: run_123."}}}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/CreateSupportMessageMultipartRequest"},"examples":{"screenshot":{"summary":"Create support ticket reply with screenshot","value":{"body":"Here is the screenshot.","attachments":["screenshot.jpg"]}}}}}},"responses":{"201":{"description":"Created","headers":{"FinkMesh-Request-Id":{"$ref":"#/components/headers/FinkMeshRequestId"},"FinkMesh-API-Version":{"$ref":"#/components/headers/FinkMeshAPIVersion"},"FinkMesh-RateLimit-Limit":{"$ref":"#/components/headers/FinkMeshRateLimitLimit"},"FinkMesh-RateLimit-Remaining":{"$ref":"#/components/headers/FinkMeshRateLimitRemaining"},"FinkMesh-RateLimit-Reset":{"$ref":"#/components/headers/FinkMeshRateLimitReset"}},"content":{"application/json":{"schema":{"type":"object","required":["data","requestId","apiVersion"],"properties":{"data":{"$ref":"#/components/schemas/SupportMessage"},"pagination":{"$ref":"#/components/schemas/Pagination"},"requestId":{"type":"string","example":"req_0123456789abcdef"},"apiVersion":{"type":"string","example":"2026-07-01"}}},"examples":{"default":{"summary":"Created","value":{"data":{"id":"msg_123","ticketId":"tkt_123","body":"Here is the run id: run_123.","authorRole":"user","createdAt":"2026-07-01T12:00:00.000Z"},"requestId":"req_0123456789abcdef","apiVersion":"2026-07-01"}}}}}},"400":{"description":"Bad request","headers":{"FinkMesh-Request-Id":{"$ref":"#/components/headers/FinkMeshRequestId"},"FinkMesh-API-Version":{"$ref":"#/components/headers/FinkMeshAPIVersion"},"FinkMesh-RateLimit-Limit":{"$ref":"#/components/headers/FinkMeshRateLimitLimit"},"FinkMesh-RateLimit-Remaining":{"$ref":"#/components/headers/FinkMeshRateLimitRemaining"},"FinkMesh-RateLimit-Reset":{"$ref":"#/components/headers/FinkMeshRateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"Bad request","value":{"error":{"code":"VALIDATION_ERROR","message":"Request validation failed.","details":{"field":"limit"},"requestId":"req_0123456789abcdef","apiVersion":"2026-07-01"}}}}}}},"401":{"description":"Unauthorized","headers":{"FinkMesh-Request-Id":{"$ref":"#/components/headers/FinkMeshRequestId"},"FinkMesh-API-Version":{"$ref":"#/components/headers/FinkMeshAPIVersion"},"FinkMesh-RateLimit-Limit":{"$ref":"#/components/headers/FinkMeshRateLimitLimit"},"FinkMesh-RateLimit-Remaining":{"$ref":"#/components/headers/FinkMeshRateLimitRemaining"},"FinkMesh-RateLimit-Reset":{"$ref":"#/components/headers/FinkMeshRateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"Unauthorized","value":{"error":{"code":"UNAUTHORIZED","message":"Missing or invalid API token. Provide Authorization: Bearer <token>.","requestId":"req_0123456789abcdef","apiVersion":"2026-07-01"}}}}}}},"403":{"description":"Insufficient scope","headers":{"FinkMesh-Request-Id":{"$ref":"#/components/headers/FinkMeshRequestId"},"FinkMesh-API-Version":{"$ref":"#/components/headers/FinkMeshAPIVersion"},"FinkMesh-RateLimit-Limit":{"$ref":"#/components/headers/FinkMeshRateLimitLimit"},"FinkMesh-RateLimit-Remaining":{"$ref":"#/components/headers/FinkMeshRateLimitRemaining"},"FinkMesh-RateLimit-Reset":{"$ref":"#/components/headers/FinkMeshRateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"Insufficient scope","value":{"error":{"code":"INSUFFICIENT_SCOPE","message":"Token lacks required scope.","details":{"requiredScope":"support:write"},"requestId":"req_0123456789abcdef","apiVersion":"2026-07-01"}}}}}}},"404":{"description":"Not found","headers":{"FinkMesh-Request-Id":{"$ref":"#/components/headers/FinkMeshRequestId"},"FinkMesh-API-Version":{"$ref":"#/components/headers/FinkMeshAPIVersion"},"FinkMesh-RateLimit-Limit":{"$ref":"#/components/headers/FinkMeshRateLimitLimit"},"FinkMesh-RateLimit-Remaining":{"$ref":"#/components/headers/FinkMeshRateLimitRemaining"},"FinkMesh-RateLimit-Reset":{"$ref":"#/components/headers/FinkMeshRateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"Not found","value":{"error":{"code":"NOT_FOUND","message":"Resource not found.","requestId":"req_0123456789abcdef","apiVersion":"2026-07-01"}}}}}}},"429":{"description":"Rate limited","headers":{"FinkMesh-Request-Id":{"$ref":"#/components/headers/FinkMeshRequestId"},"FinkMesh-API-Version":{"$ref":"#/components/headers/FinkMeshAPIVersion"},"FinkMesh-RateLimit-Limit":{"$ref":"#/components/headers/FinkMeshRateLimitLimit"},"FinkMesh-RateLimit-Remaining":{"$ref":"#/components/headers/FinkMeshRateLimitRemaining"},"FinkMesh-RateLimit-Reset":{"$ref":"#/components/headers/FinkMeshRateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"Rate limited","value":{"error":{"code":"RATE_LIMITED","message":"Rate limit exceeded.","details":{"retryAfter":30},"requestId":"req_0123456789abcdef","apiVersion":"2026-07-01"}}}}}}},"500":{"description":"Internal error","headers":{"FinkMesh-Request-Id":{"$ref":"#/components/headers/FinkMeshRequestId"},"FinkMesh-API-Version":{"$ref":"#/components/headers/FinkMeshAPIVersion"},"FinkMesh-RateLimit-Limit":{"$ref":"#/components/headers/FinkMeshRateLimitLimit"},"FinkMesh-RateLimit-Remaining":{"$ref":"#/components/headers/FinkMeshRateLimitRemaining"},"FinkMesh-RateLimit-Reset":{"$ref":"#/components/headers/FinkMeshRateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"Internal error","value":{"error":{"code":"INTERNAL_ERROR","message":"Internal server error.","requestId":"req_0123456789abcdef","apiVersion":"2026-07-01"}}}}}}}},"security":[{"bearerAuth":[]}],"x-required-scope":"support:write","x-idempotency-key":"required"}},"/api/mcp":{"get":{"operationId":"getMcpManifest","tags":["MCP"],"summary":"Get MCP manifest","description":"Get MCP manifest. Required scope: public.","parameters":[],"responses":{"200":{"description":"OK","headers":{"FinkMesh-Request-Id":{"$ref":"#/components/headers/FinkMeshRequestId"},"FinkMesh-API-Version":{"$ref":"#/components/headers/FinkMeshAPIVersion"},"FinkMesh-RateLimit-Limit":{"$ref":"#/components/headers/FinkMeshRateLimitLimit"},"FinkMesh-RateLimit-Remaining":{"$ref":"#/components/headers/FinkMeshRateLimitRemaining"},"FinkMesh-RateLimit-Reset":{"$ref":"#/components/headers/FinkMeshRateLimitReset"}},"content":{"application/json":{"schema":{"type":"object","required":["data","requestId","apiVersion"],"properties":{"data":{"$ref":"#/components/schemas/McpManifest"},"pagination":{"$ref":"#/components/schemas/Pagination"},"requestId":{"type":"string","example":"req_0123456789abcdef"},"apiVersion":{"type":"string","example":"2026-07-01"}}},"examples":{"default":{"summary":"OK","value":{"data":{"protocolVersion":"2025-11-25","serverInfo":{"name":"finkmesh","version":"2026-07-01"},"endpoint":"/api/mcp","capabilities":{"tools":{}}},"requestId":"req_0123456789abcdef","apiVersion":"2026-07-01"}}}}}},"500":{"description":"Internal error","headers":{"FinkMesh-Request-Id":{"$ref":"#/components/headers/FinkMeshRequestId"},"FinkMesh-API-Version":{"$ref":"#/components/headers/FinkMeshAPIVersion"},"FinkMesh-RateLimit-Limit":{"$ref":"#/components/headers/FinkMeshRateLimitLimit"},"FinkMesh-RateLimit-Remaining":{"$ref":"#/components/headers/FinkMeshRateLimitRemaining"},"FinkMesh-RateLimit-Reset":{"$ref":"#/components/headers/FinkMeshRateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"Internal error","value":{"error":{"code":"INTERNAL_ERROR","message":"Internal server error.","requestId":"req_0123456789abcdef","apiVersion":"2026-07-01"}}}}}}}},"security":[],"x-required-scope":"public"},"post":{"operationId":"callMcp","tags":["MCP"],"summary":"Call MCP JSON-RPC endpoint","description":"Call MCP JSON-RPC endpoint. Required scope: token-scoped.","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/McpJsonRpcRequest"},"examples":{"default":{"summary":"Call MCP JSON-RPC endpoint request","value":{"jsonrpc":"2.0","id":"tools-1","method":"tools/list"}}}}}},"responses":{"200":{"description":"OK","headers":{"FinkMesh-Request-Id":{"$ref":"#/components/headers/FinkMeshRequestId"},"FinkMesh-API-Version":{"$ref":"#/components/headers/FinkMeshAPIVersion"},"FinkMesh-RateLimit-Limit":{"$ref":"#/components/headers/FinkMeshRateLimitLimit"},"FinkMesh-RateLimit-Remaining":{"$ref":"#/components/headers/FinkMeshRateLimitRemaining"},"FinkMesh-RateLimit-Reset":{"$ref":"#/components/headers/FinkMeshRateLimitReset"}},"content":{"application/json":{"schema":{"type":"object","required":["data","requestId","apiVersion"],"properties":{"data":{"$ref":"#/components/schemas/McpJsonRpcResponse"},"pagination":{"$ref":"#/components/schemas/Pagination"},"requestId":{"type":"string","example":"req_0123456789abcdef"},"apiVersion":{"type":"string","example":"2026-07-01"}}},"examples":{"default":{"summary":"OK","value":{"data":{"jsonrpc":"2.0","id":"tools-1","result":{"tools":[{"name":"finkmesh.context"}]}},"requestId":"req_0123456789abcdef","apiVersion":"2026-07-01"}}}}}},"400":{"description":"Bad request","headers":{"FinkMesh-Request-Id":{"$ref":"#/components/headers/FinkMeshRequestId"},"FinkMesh-API-Version":{"$ref":"#/components/headers/FinkMeshAPIVersion"},"FinkMesh-RateLimit-Limit":{"$ref":"#/components/headers/FinkMeshRateLimitLimit"},"FinkMesh-RateLimit-Remaining":{"$ref":"#/components/headers/FinkMeshRateLimitRemaining"},"FinkMesh-RateLimit-Reset":{"$ref":"#/components/headers/FinkMeshRateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"Bad request","value":{"error":{"code":"VALIDATION_ERROR","message":"Request validation failed.","details":{"field":"limit"},"requestId":"req_0123456789abcdef","apiVersion":"2026-07-01"}}}}}}},"401":{"description":"Unauthorized","headers":{"FinkMesh-Request-Id":{"$ref":"#/components/headers/FinkMeshRequestId"},"FinkMesh-API-Version":{"$ref":"#/components/headers/FinkMeshAPIVersion"},"FinkMesh-RateLimit-Limit":{"$ref":"#/components/headers/FinkMeshRateLimitLimit"},"FinkMesh-RateLimit-Remaining":{"$ref":"#/components/headers/FinkMeshRateLimitRemaining"},"FinkMesh-RateLimit-Reset":{"$ref":"#/components/headers/FinkMeshRateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"Unauthorized","value":{"error":{"code":"UNAUTHORIZED","message":"Missing or invalid API token. Provide Authorization: Bearer <token>.","requestId":"req_0123456789abcdef","apiVersion":"2026-07-01"}}}}}}},"403":{"description":"Insufficient scope","headers":{"FinkMesh-Request-Id":{"$ref":"#/components/headers/FinkMeshRequestId"},"FinkMesh-API-Version":{"$ref":"#/components/headers/FinkMeshAPIVersion"},"FinkMesh-RateLimit-Limit":{"$ref":"#/components/headers/FinkMeshRateLimitLimit"},"FinkMesh-RateLimit-Remaining":{"$ref":"#/components/headers/FinkMeshRateLimitRemaining"},"FinkMesh-RateLimit-Reset":{"$ref":"#/components/headers/FinkMeshRateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"Insufficient scope","value":{"error":{"code":"INSUFFICIENT_SCOPE","message":"Token lacks required scope.","details":{"requiredScope":"workflows:read"},"requestId":"req_0123456789abcdef","apiVersion":"2026-07-01"}}}}}}},"429":{"description":"Rate limited","headers":{"FinkMesh-Request-Id":{"$ref":"#/components/headers/FinkMeshRequestId"},"FinkMesh-API-Version":{"$ref":"#/components/headers/FinkMeshAPIVersion"},"FinkMesh-RateLimit-Limit":{"$ref":"#/components/headers/FinkMeshRateLimitLimit"},"FinkMesh-RateLimit-Remaining":{"$ref":"#/components/headers/FinkMeshRateLimitRemaining"},"FinkMesh-RateLimit-Reset":{"$ref":"#/components/headers/FinkMeshRateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"Rate limited","value":{"error":{"code":"RATE_LIMITED","message":"Rate limit exceeded.","details":{"retryAfter":30},"requestId":"req_0123456789abcdef","apiVersion":"2026-07-01"}}}}}}},"500":{"description":"Internal error","headers":{"FinkMesh-Request-Id":{"$ref":"#/components/headers/FinkMeshRequestId"},"FinkMesh-API-Version":{"$ref":"#/components/headers/FinkMeshAPIVersion"},"FinkMesh-RateLimit-Limit":{"$ref":"#/components/headers/FinkMeshRateLimitLimit"},"FinkMesh-RateLimit-Remaining":{"$ref":"#/components/headers/FinkMeshRateLimitRemaining"},"FinkMesh-RateLimit-Reset":{"$ref":"#/components/headers/FinkMeshRateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"Internal error","value":{"error":{"code":"INTERNAL_ERROR","message":"Internal server error.","requestId":"req_0123456789abcdef","apiVersion":"2026-07-01"}}}}}}}},"security":[{"bearerAuth":[]}],"x-required-scope":"token-scoped"}}},"x-finkmesh":{"apiVersion":"2026-07-01","requestHeaders":["Authorization","Idempotency-Key","X-Request-Id"],"responseHeaders":["FinkMesh-Request-Id","FinkMesh-API-Version","FinkMesh-RateLimit-Limit","FinkMesh-RateLimit-Remaining","FinkMesh-RateLimit-Reset"],"idempotency":{"requiredFor":"Every POST, PATCH, PUT, and DELETE under /api/v1.","ttlDays":7,"scope":"API token + method + path + key","maxLength":160}}}