{"openapi":"3.1.0","info":{"title":"Sim API v2","version":"2.0.0","description":"Complete OpenAPI description for the Sim API v2."},"servers":[{"url":"https://www.sim.ai","description":"Production"}],"security":[{"apiKey":[]},{"oauthBearer":[]}],"tags":[{"name":"Workflows","description":"Manage and execute workflow definitions, folders, deployment versions, and portable imports and exports."},{"name":"Workflow Runs","description":"Inspect, resume, and cancel workflow runs."},{"name":"Logs","description":"Query workflow execution logs and retrieve complete run diagnostics."},{"name":"Files","description":"Create, upload, download, organize, share, and delete workspace files."},{"name":"Audit Logs","description":"Query the organization audit trail with Enterprise authorization."},{"name":"Tables","description":"Manage tables, columns, rows, views, runs, folders, imports, and exports."},{"name":"Knowledge Bases","description":"Create and organize knowledge bases, ingest documents, and search indexed content."},{"name":"Billing","description":"Inspect billing standing, credit allowance, storage quota, and usage history."},{"name":"Meta","description":"Discover what the calling API credential can reach."},{"name":"Workspaces","description":"Read workspace metadata and its effective member roster."},{"name":"MCP Servers","description":"Register and manage Model Context Protocol servers."},{"name":"Skills","description":"Create and manage reusable instruction documents for agents."},{"name":"Custom Tools","description":"Create and manage code-backed tools that agents can call."},{"name":"Sandboxes","description":"Create and manage the reusable dependency sets that Function blocks execute against."},{"name":"Credentials","description":"Discover providers, create service-account credentials, connect or reconnect OAuth accounts, disconnect credentials, and list connections without secret material."},{"name":"Secrets","description":"Set and manage write-only workspace and personal secret values."},{"name":"Catalog","description":"Discover the blocks, tools, and connector types this workspace can build with."}],"paths":{"/api/v2/workflows":{"get":{"operationId":"listWorkflows","summary":"List Workflows","description":"List active workflows in a workspace. Use `scope=archived` to find workflows available for restoration. Supports folder and deployment filters, search, sorting, and cursor pagination. Workspace folder trees exceeding 10,000 folders return `413`.\n\nOAuth scope: `api:read`.","x-sim-operation":"workflows.list","x-oauth-scope":"api:read","tags":["Workflows"],"parameters":[{"name":"workspaceId","in":"query","required":true,"description":"Workspace whose workflows should be listed.","schema":{"type":"string","minLength":1,"maxLength":128,"description":"Workspace whose workflows should be listed."}},{"name":"scope","in":"query","required":false,"description":"Which lifecycle set to list: `active` (default) for live workflows, `archived` for workflows a `DELETE` archived. The folder filter resolves against active folders only, so pairing it with `archived` returns an empty page when the containing folder was archived too.","schema":{"default":"active","description":"Which lifecycle set to list: `active` (default) for live workflows, `archived` for workflows a `DELETE` archived. The folder filter resolves against active folders only, so pairing it with `archived` returns an empty page when the containing folder was archived too.","type":"string","enum":["active","archived"]}},{"name":"folderPath","in":"query","required":false,"description":"Restrict results to workflows in this folder path. Unknown folder paths contribute no matches.","schema":{"description":"Restrict results to workflows in this folder path. Unknown folder paths contribute no matches.","$ref":"#/components/schemas/Workflows_FolderPathInput"}},{"name":"deployedOnly","in":"query","required":false,"description":"Return only workflows with an active deployment when true.","schema":{"description":"Return only workflows with an active deployment when true.","type":"boolean"}},{"name":"limit","in":"query","required":false,"description":"Maximum workflows to return per page. Must be a whole number from 1 to 100. Defaults to 50.","schema":{"default":50,"description":"Maximum workflows to return per page. Must be a whole number from 1 to 100. Defaults to 50.","type":"integer","minimum":1,"maximum":100}},{"name":"cursor","in":"query","required":false,"description":"Opaque cursor from the previous page. Send it back with the same sort and filters; only `limit` may change. Change anything else and pagination must restart without a cursor.","schema":{"description":"Opaque cursor from the previous page. Send it back with the same sort and filters; only `limit` may change. Change anything else and pagination must restart without a cursor.","type":"string","minLength":1}},{"name":"search","in":"query","required":false,"description":"Case-insensitive substring match against the resource name.","schema":{"description":"Case-insensitive substring match against the resource name.","type":"string","minLength":1,"maxLength":200}},{"name":"sortBy","in":"query","required":false,"description":"Field used to sort the result. Sorting by `name` is case-sensitive and follows the storage collation, so do not rely on a case-insensitive order.","schema":{"default":"position","description":"Field used to sort the result. Sorting by `name` is case-sensitive and follows the storage collation, so do not rely on a case-insensitive order.","type":"string","enum":["position","name","createdAt","updatedAt","runCount"]}},{"name":"sortOrder","in":"query","required":false,"description":"Sort direction.","schema":{"default":"asc","description":"Sort direction.","type":"string","enum":["asc","desc"]}}],"responses":{"200":{"description":"A page of workflows.","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/Workflows_X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/Workflows_X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/Workflows_X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Workflows_WorkflowListResponse"}}}},"400":{"$ref":"#/components/responses/Workflows_BadRequest"},"401":{"$ref":"#/components/responses/Workflows_Unauthorized"},"403":{"$ref":"#/components/responses/Workflows_Forbidden"},"404":{"$ref":"#/components/responses/Workflows_NotFound"},"413":{"$ref":"#/components/responses/Workflows_PayloadTooLarge"},"429":{"$ref":"#/components/responses/Workflows_RateLimited"},"500":{"$ref":"#/components/responses/Workflows_InternalError"},"503":{"$ref":"#/components/responses/Workflows_ServiceUnavailable"}}},"post":{"operationId":"createWorkflowV2","summary":"Create Workflow","description":"Create a workflow at the workspace root or in a workflow folder. The response includes seeded blocks and their IDs for attaching edges. Workspace folder trees exceeding 10,000 folders return `413`.\n\nOAuth scope: `api:write`.","x-sim-operation":"workflows.create","x-oauth-scope":"api:write","tags":["Workflows"],"requestBody":{"required":true,"description":"Name, description, workspace, and optional folder for a new workflow.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Workflows_CreateWorkflowRequest"}}}},"responses":{"201":{"description":"The created workflow.","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/Workflows_X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/Workflows_X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/Workflows_X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Workflows_CreateWorkflowResponse"}}}},"400":{"$ref":"#/components/responses/Workflows_BadRequest"},"401":{"$ref":"#/components/responses/Workflows_Unauthorized"},"403":{"$ref":"#/components/responses/Workflows_Forbidden"},"404":{"$ref":"#/components/responses/Workflows_NotFound"},"409":{"$ref":"#/components/responses/Workflows_Conflict"},"413":{"$ref":"#/components/responses/Workflows_PayloadTooLarge"},"415":{"$ref":"#/components/responses/Workflows_UnsupportedMediaType"},"423":{"$ref":"#/components/responses/Workflows_Locked"},"429":{"$ref":"#/components/responses/Workflows_RateLimited"},"500":{"$ref":"#/components/responses/Workflows_InternalError"},"503":{"$ref":"#/components/responses/Workflows_ServiceUnavailable"}}}},"/api/v2/workflows/{workflowId}/state":{"get":{"operationId":"getWorkflowState","summary":"Get Workflow State","description":"Get the editable draft graph, including blocks, edges, loop and parallel containers, and variables. Use this state with Replace Workflow State to preserve workspace bindings; Export Workflow removes those bindings for portability. This read records no audit event, and `HEAD` mirrors `GET`.\n\nOAuth scope: `api:read`.","x-sim-operation":"workflows.read","x-oauth-scope":"api:read","tags":["Workflows"],"parameters":[{"name":"workflowId","in":"path","required":true,"description":"Unique workflow identifier.","schema":{"type":"string","minLength":1,"description":"Unique workflow identifier.","examples":["3b1f7c92-8d4e-4a6b-9c0d-5e2f8a714b36"]}}],"responses":{"200":{"description":"The workflow draft graph.","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/Workflows_X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/Workflows_X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/Workflows_X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Workflows_WorkflowStateResponse"}}}},"400":{"$ref":"#/components/responses/Workflows_BadRequest"},"401":{"$ref":"#/components/responses/Workflows_Unauthorized"},"403":{"$ref":"#/components/responses/Workflows_Forbidden"},"404":{"$ref":"#/components/responses/Workflows_NotFound"},"429":{"$ref":"#/components/responses/Workflows_RateLimited"},"500":{"$ref":"#/components/responses/Workflows_InternalError"},"503":{"$ref":"#/components/responses/Workflows_ServiceUnavailable"}}},"put":{"operationId":"replaceWorkflowState","summary":"Replace Workflow State","description":"Replace the draft graph atomically; concurrent writes are last-write-wins. Recompute containers from blocks and preserve omitted variables. Foreign IDs return `409`; lint is advisory. The live deployment is unchanged. `dryRun=true` validates without saving, auditing, or notifying; `needsRedeployment` describes the pre-write state. Workspace API keys return `403`; use a personal API key or scoped OAuth token.\n\nOAuth scope: `api:write`.","x-sim-operation":"workflows.state.replace","x-oauth-scope":"api:write","tags":["Workflows"],"parameters":[{"name":"workflowId","in":"path","required":true,"description":"Unique workflow identifier.","schema":{"type":"string","minLength":1,"description":"Unique workflow identifier.","examples":["3b1f7c92-8d4e-4a6b-9c0d-5e2f8a714b36"]}},{"name":"dryRun","in":"query","required":false,"description":"Validate and lint without persisting. The response is identical to the committed write of the same body, so a caller can inspect `lint` and then re-send the request for real. Nothing is written, no audit entry is recorded, and collaborators are not notified.","schema":{"description":"Validate and lint without persisting. The response is identical to the committed write of the same body, so a caller can inspect `lint` and then re-send the request for real. Nothing is written, no audit entry is recorded, and collaborators are not notified.","type":"boolean"}}],"requestBody":{"required":true,"description":"A complete replacement draft graph for a workflow.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Workflows_ReplaceWorkflowStateRequest"}}}},"responses":{"200":{"description":"The draft graph was replaced.","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/Workflows_X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/Workflows_X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/Workflows_X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Workflows_ReplaceWorkflowStateResponse"}}}},"400":{"$ref":"#/components/responses/Workflows_BadRequest"},"401":{"$ref":"#/components/responses/Workflows_Unauthorized"},"403":{"$ref":"#/components/responses/Workflows_Forbidden"},"404":{"$ref":"#/components/responses/Workflows_NotFound"},"409":{"$ref":"#/components/responses/Workflows_Conflict"},"413":{"$ref":"#/components/responses/Workflows_PayloadTooLarge"},"415":{"$ref":"#/components/responses/Workflows_UnsupportedMediaType"},"423":{"$ref":"#/components/responses/Workflows_Locked"},"429":{"$ref":"#/components/responses/Workflows_RateLimited"},"500":{"$ref":"#/components/responses/Workflows_InternalError"},"503":{"$ref":"#/components/responses/Workflows_ServiceUnavailable"}}}},"/api/v2/workflows/{workflowId}/operations":{"post":{"operationId":"applyWorkflowOperations","summary":"Apply Workflow Operations","description":"Edit the draft graph and block enablement in one write. Inspect `skipped` for failures; do not retry `deferred` edges. With `atomic=true`, skipped operations or dropped inputs return `409` (`OPERATIONS_NOT_APPLIED`) without saving. `mintedBlockIds` maps labels to generated IDs. Lint is advisory; `dryRun=true` validates without saving, auditing, or notifying. The live deployment is unchanged. Workspace API keys return `403`; use a personal API key or scoped OAuth token.\n\nOAuth scope: `api:write`.","x-sim-operation":"workflows.operations.apply","x-oauth-scope":"api:write","tags":["Workflows"],"parameters":[{"name":"workflowId","in":"path","required":true,"description":"Unique workflow identifier.","schema":{"type":"string","minLength":1,"description":"Unique workflow identifier.","examples":["3b1f7c92-8d4e-4a6b-9c0d-5e2f8a714b36"]}},{"name":"dryRun","in":"query","required":false,"description":"Validate and lint without persisting. The response is identical to the committed write of the same body, so a caller can inspect `lint` and then re-send the request for real. Nothing is written, no audit entry is recorded, and collaborators are not notified.","schema":{"description":"Validate and lint without persisting. The response is identical to the committed write of the same body, so a caller can inspect `lint` and then re-send the request for real. Nothing is written, no audit entry is recorded, and collaborators are not notified.","type":"boolean"}}],"requestBody":{"required":true,"description":"A batch of semantic edits against a workflow graph.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Workflows_ApplyWorkflowOperationsRequest"}}}},"responses":{"200":{"description":"The batch was applied.","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/Workflows_X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/Workflows_X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/Workflows_X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Workflows_ApplyWorkflowOperationsResponse"}}}},"400":{"$ref":"#/components/responses/Workflows_BadRequest"},"401":{"$ref":"#/components/responses/Workflows_Unauthorized"},"403":{"$ref":"#/components/responses/Workflows_Forbidden"},"404":{"$ref":"#/components/responses/Workflows_NotFound"},"409":{"$ref":"#/components/responses/Workflows_Conflict"},"413":{"$ref":"#/components/responses/Workflows_PayloadTooLarge"},"415":{"$ref":"#/components/responses/Workflows_UnsupportedMediaType"},"423":{"$ref":"#/components/responses/Workflows_Locked"},"429":{"$ref":"#/components/responses/Workflows_RateLimited"},"500":{"$ref":"#/components/responses/Workflows_InternalError"},"503":{"$ref":"#/components/responses/Workflows_ServiceUnavailable"}}}},"/api/v2/workflows/{workflowId}/variables":{"patch":{"operationId":"applyWorkflowVariables","summary":"Update Workflow Variables","description":"Add, edit, or delete variables by name, applying operations in order. Values are coerced to their declared type when possible; otherwise they are stored as supplied. A batch with no changes returns `200` with `changed: false`. Read current variables with Get Workflow.\n\nOAuth scope: `api:write`.","x-sim-operation":"workflows.variables.apply_operations","x-oauth-scope":"api:write","tags":["Workflows"],"parameters":[{"name":"workflowId","in":"path","required":true,"description":"Unique workflow identifier.","schema":{"type":"string","minLength":1,"description":"Unique workflow identifier.","examples":["3b1f7c92-8d4e-4a6b-9c0d-5e2f8a714b36"]}}],"requestBody":{"required":true,"description":"Additions, edits, and deletions against a workflow’s variables.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Workflows_ApplyWorkflowVariablesRequest"}}}},"responses":{"200":{"description":"The variable set after the batch.","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/Workflows_X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/Workflows_X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/Workflows_X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Workflows_ApplyWorkflowVariablesResponse"}}}},"400":{"$ref":"#/components/responses/Workflows_BadRequest"},"401":{"$ref":"#/components/responses/Workflows_Unauthorized"},"403":{"$ref":"#/components/responses/Workflows_Forbidden"},"404":{"$ref":"#/components/responses/Workflows_NotFound"},"409":{"$ref":"#/components/responses/Workflows_Conflict"},"413":{"$ref":"#/components/responses/Workflows_PayloadTooLarge"},"415":{"$ref":"#/components/responses/Workflows_UnsupportedMediaType"},"423":{"$ref":"#/components/responses/Workflows_Locked"},"429":{"$ref":"#/components/responses/Workflows_RateLimited"},"500":{"$ref":"#/components/responses/Workflows_InternalError"},"503":{"$ref":"#/components/responses/Workflows_ServiceUnavailable"}}}},"/api/v2/workflows/{workflowId}/duplicate":{"post":{"operationId":"duplicateWorkflow","summary":"Duplicate Workflow","description":"Copy a workflow's graph and variables into the same workspace. Omit `name` to reuse the source name; name collisions in the destination folder are resolved automatically. Workspace folder trees exceeding 10,000 folders return `413`.\n\nOAuth scope: `api:write`.","x-sim-operation":"workflows.duplicate","x-oauth-scope":"api:write","tags":["Workflows"],"parameters":[{"name":"workflowId","in":"path","required":true,"description":"Unique workflow identifier.","schema":{"type":"string","minLength":1,"description":"Unique workflow identifier.","examples":["3b1f7c92-8d4e-4a6b-9c0d-5e2f8a714b36"]}}],"requestBody":{"required":true,"description":"Optional name and destination folder for the copy.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Workflows_DuplicateWorkflowRequest"}}}},"responses":{"201":{"description":"The created copy.","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/Workflows_X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/Workflows_X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/Workflows_X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Workflows_DuplicateWorkflowResponse"}}}},"400":{"$ref":"#/components/responses/Workflows_BadRequest"},"401":{"$ref":"#/components/responses/Workflows_Unauthorized"},"403":{"$ref":"#/components/responses/Workflows_Forbidden"},"404":{"$ref":"#/components/responses/Workflows_NotFound"},"409":{"$ref":"#/components/responses/Workflows_Conflict"},"413":{"$ref":"#/components/responses/Workflows_PayloadTooLarge"},"415":{"$ref":"#/components/responses/Workflows_UnsupportedMediaType"},"423":{"$ref":"#/components/responses/Workflows_Locked"},"429":{"$ref":"#/components/responses/Workflows_RateLimited"},"500":{"$ref":"#/components/responses/Workflows_InternalError"},"503":{"$ref":"#/components/responses/Workflows_ServiceUnavailable"}}}},"/api/v2/workflows/{workflowId}/restore":{"post":{"operationId":"restoreWorkflow","summary":"Restore Workflow","description":"Restore an archived workflow and the schedules, webhooks, MCP tools, and chats archived with it. An active workflow returns `409`. If its folder is archived, the workflow returns to the workspace root. Workspace folder trees exceeding 10,000 folders return `413`.\n\nOAuth scope: `api:write`.","x-sim-operation":"workflows.restore","x-oauth-scope":"api:write","tags":["Workflows"],"parameters":[{"name":"workflowId","in":"path","required":true,"description":"Unique workflow identifier.","schema":{"type":"string","minLength":1,"description":"Unique workflow identifier.","examples":["3b1f7c92-8d4e-4a6b-9c0d-5e2f8a714b36"]}}],"responses":{"200":{"description":"The restored workflow.","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/Workflows_X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/Workflows_X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/Workflows_X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Workflows_RestoreWorkflowResponse"}}}},"400":{"$ref":"#/components/responses/Workflows_BadRequest"},"401":{"$ref":"#/components/responses/Workflows_Unauthorized"},"403":{"$ref":"#/components/responses/Workflows_Forbidden"},"404":{"$ref":"#/components/responses/Workflows_NotFound"},"409":{"$ref":"#/components/responses/Workflows_Conflict"},"413":{"$ref":"#/components/responses/Workflows_PayloadTooLarge"},"423":{"$ref":"#/components/responses/Workflows_Locked"},"429":{"$ref":"#/components/responses/Workflows_RateLimited"},"500":{"$ref":"#/components/responses/Workflows_InternalError"},"503":{"$ref":"#/components/responses/Workflows_ServiceUnavailable"}}}},"/api/v2/workflows/move":{"post":{"operationId":"moveWorkflows","summary":"Move Workflows","description":"Move up to 100 workflows into one folder. Moves succeed or fail independently; missing, archived, or locked workflows appear in `failed`. Duplicate IDs are ignored. Workspace folder trees exceeding 10,000 folders return `413`.\n\nOAuth scope: `api:write`.","x-sim-operation":"workflows.bulk.move","x-oauth-scope":"api:write","tags":["Workflows"],"requestBody":{"required":true,"description":"Workflows to relocate and the folder to relocate them into.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Workflows_MoveWorkflowsRequest"}}}},"responses":{"200":{"description":"Which workflows moved and which did not.","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/Workflows_X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/Workflows_X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/Workflows_X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Workflows_MoveWorkflowsResponse"}}}},"400":{"$ref":"#/components/responses/Workflows_BadRequest"},"401":{"$ref":"#/components/responses/Workflows_Unauthorized"},"403":{"$ref":"#/components/responses/Workflows_Forbidden"},"404":{"$ref":"#/components/responses/Workflows_NotFound"},"413":{"$ref":"#/components/responses/Workflows_PayloadTooLarge"},"415":{"$ref":"#/components/responses/Workflows_UnsupportedMediaType"},"429":{"$ref":"#/components/responses/Workflows_RateLimited"},"500":{"$ref":"#/components/responses/Workflows_InternalError"},"503":{"$ref":"#/components/responses/Workflows_ServiceUnavailable"}}}},"/api/v2/workflows/{workflowId}":{"get":{"operationId":"getWorkflow","summary":"Get Workflow","description":"Get a workflow with its variables and deployed API-trigger inputs. Workspace folder trees exceeding 10,000 folders return `413`.\n\nOAuth scope: `api:read`.","x-sim-operation":"workflows.read","x-oauth-scope":"api:read","tags":["Workflows"],"parameters":[{"name":"workflowId","in":"path","required":true,"description":"Unique workflow identifier.","schema":{"type":"string","minLength":1,"description":"Unique workflow identifier.","examples":["3b1f7c92-8d4e-4a6b-9c0d-5e2f8a714b36"]}}],"responses":{"200":{"description":"The requested workflow.","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/Workflows_X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/Workflows_X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/Workflows_X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Workflows_WorkflowDetailResponse"}}}},"400":{"$ref":"#/components/responses/Workflows_BadRequest"},"401":{"$ref":"#/components/responses/Workflows_Unauthorized"},"403":{"$ref":"#/components/responses/Workflows_Forbidden"},"404":{"$ref":"#/components/responses/Workflows_NotFound"},"413":{"$ref":"#/components/responses/Workflows_PayloadTooLarge"},"429":{"$ref":"#/components/responses/Workflows_RateLimited"},"500":{"$ref":"#/components/responses/Workflows_InternalError"},"503":{"$ref":"#/components/responses/Workflows_ServiceUnavailable"}}},"patch":{"operationId":"updateWorkflowV2","summary":"Update Workflow","description":"Update a workflow's name, description, or folder path. Workspace folder trees exceeding 10,000 folders return `413`.\n\nOAuth scope: `api:write`.","x-sim-operation":"workflows.update","x-oauth-scope":"api:write","tags":["Workflows"],"parameters":[{"name":"workflowId","in":"path","required":true,"description":"Unique workflow identifier.","schema":{"type":"string","minLength":1,"description":"Unique workflow identifier.","examples":["3b1f7c92-8d4e-4a6b-9c0d-5e2f8a714b36"]}}],"requestBody":{"required":true,"description":"Fields to update on an existing workflow.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Workflows_UpdateWorkflowRequest"}}}},"responses":{"200":{"description":"The updated workflow.","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/Workflows_X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/Workflows_X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/Workflows_X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Workflows_UpdateWorkflowResponse"}}}},"400":{"$ref":"#/components/responses/Workflows_BadRequest"},"401":{"$ref":"#/components/responses/Workflows_Unauthorized"},"403":{"$ref":"#/components/responses/Workflows_Forbidden"},"404":{"$ref":"#/components/responses/Workflows_NotFound"},"409":{"$ref":"#/components/responses/Workflows_Conflict"},"413":{"$ref":"#/components/responses/Workflows_PayloadTooLarge"},"415":{"$ref":"#/components/responses/Workflows_UnsupportedMediaType"},"423":{"$ref":"#/components/responses/Workflows_Locked"},"429":{"$ref":"#/components/responses/Workflows_RateLimited"},"500":{"$ref":"#/components/responses/Workflows_InternalError"},"503":{"$ref":"#/components/responses/Workflows_ServiceUnavailable"}}},"delete":{"operationId":"deleteWorkflowV2","summary":"Delete Workflow","description":"Archive a workflow and stop its schedules, webhooks, MCP tools, and chats. Use List Workflows with `scope=archived` to find it and Restore Workflow to recover it and its archived resources. Both `deleted` and `archived` acknowledge archival.\n\nOAuth scope: `api:write`.","x-sim-operation":"workflows.delete","x-oauth-scope":"api:write","tags":["Workflows"],"parameters":[{"name":"workflowId","in":"path","required":true,"description":"Unique workflow identifier.","schema":{"type":"string","minLength":1,"description":"Unique workflow identifier.","examples":["3b1f7c92-8d4e-4a6b-9c0d-5e2f8a714b36"]}}],"responses":{"200":{"description":"The workflow was archived.","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/Workflows_X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/Workflows_X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/Workflows_X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Workflows_DeleteWorkflowResponse"}}}},"400":{"$ref":"#/components/responses/Workflows_BadRequest"},"401":{"$ref":"#/components/responses/Workflows_Unauthorized"},"403":{"$ref":"#/components/responses/Workflows_Forbidden"},"404":{"$ref":"#/components/responses/Workflows_NotFound"},"423":{"$ref":"#/components/responses/Workflows_Locked"},"429":{"$ref":"#/components/responses/Workflows_RateLimited"},"500":{"$ref":"#/components/responses/Workflows_InternalError"},"503":{"$ref":"#/components/responses/Workflows_ServiceUnavailable"}}}},"/api/v2/workflows/{workflowId}/versions":{"get":{"operationId":"listWorkflowVersionsV2","summary":"List Workflow Versions","description":"List immutable deployment versions of a workflow, newest first.\n\nOAuth scope: `api:read`.","x-sim-operation":"workflows.versions.list","x-oauth-scope":"api:read","tags":["Workflows"],"parameters":[{"name":"workflowId","in":"path","required":true,"description":"Unique workflow identifier.","schema":{"type":"string","minLength":1,"description":"Unique workflow identifier.","examples":["3b1f7c92-8d4e-4a6b-9c0d-5e2f8a714b36"]}},{"name":"limit","in":"query","required":false,"description":"Maximum deployment versions to return per page. Must be a whole number from 1 to 100. Defaults to 50.","schema":{"default":50,"description":"Maximum deployment versions to return per page. Must be a whole number from 1 to 100. Defaults to 50.","type":"integer","minimum":1,"maximum":100}},{"name":"cursor","in":"query","required":false,"description":"Opaque cursor from the previous page. Send it back with the same sort and filters; only `limit` may change. Change anything else and pagination must restart without a cursor.","schema":{"description":"Opaque cursor from the previous page. Send it back with the same sort and filters; only `limit` may change. Change anything else and pagination must restart without a cursor.","type":"string","minLength":1}}],"responses":{"200":{"description":"A page of deployment versions.","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/Workflows_X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/Workflows_X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/Workflows_X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Workflows_WorkflowVersionListResponse"}}}},"400":{"$ref":"#/components/responses/Workflows_BadRequest"},"401":{"$ref":"#/components/responses/Workflows_Unauthorized"},"403":{"$ref":"#/components/responses/Workflows_Forbidden"},"404":{"$ref":"#/components/responses/Workflows_NotFound"},"429":{"$ref":"#/components/responses/Workflows_RateLimited"},"500":{"$ref":"#/components/responses/Workflows_InternalError"},"503":{"$ref":"#/components/responses/Workflows_ServiceUnavailable"}}}},"/api/v2/workflows/{workflowId}/versions/{version}":{"get":{"operationId":"getWorkflowVersionV2","summary":"Get Workflow Version","description":"Get an immutable deployment version and its pinned workflow graph snapshot.\n\nOAuth scope: `api:read`.","x-sim-operation":"workflows.versions.read","x-oauth-scope":"api:read","tags":["Workflows"],"parameters":[{"name":"version","in":"path","required":true,"description":"Numeric deployment version.","schema":{"type":"integer","exclusiveMinimum":0,"maximum":2147483647,"description":"Numeric deployment version.","examples":[3]}},{"name":"workflowId","in":"path","required":true,"description":"Unique workflow identifier.","schema":{"type":"string","minLength":1,"description":"Unique workflow identifier."}}],"responses":{"200":{"description":"The requested deployment version.","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/Workflows_X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/Workflows_X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/Workflows_X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Workflows_WorkflowVersionDetailResponse"}}}},"400":{"$ref":"#/components/responses/Workflows_BadRequest"},"401":{"$ref":"#/components/responses/Workflows_Unauthorized"},"403":{"$ref":"#/components/responses/Workflows_Forbidden"},"404":{"$ref":"#/components/responses/Workflows_NotFound"},"429":{"$ref":"#/components/responses/Workflows_RateLimited"},"500":{"$ref":"#/components/responses/Workflows_InternalError"},"503":{"$ref":"#/components/responses/Workflows_ServiceUnavailable"}}},"patch":{"operationId":"updateWorkflowVersionV2","summary":"Update Workflow Version","description":"Update a deployment version's name or release note. Omitted fields remain unchanged; `description: null` clears the note. The graph and live version remain unchanged. Use Activate Workflow Version to make this version live.\n\nOAuth scope: `api:write`.","x-sim-operation":"workflows.versions.update","x-oauth-scope":"api:write","tags":["Workflows"],"parameters":[{"name":"version","in":"path","required":true,"description":"Numeric deployment version.","schema":{"type":"integer","exclusiveMinimum":0,"maximum":2147483647,"description":"Numeric deployment version.","examples":[3]}},{"name":"workflowId","in":"path","required":true,"description":"Unique workflow identifier.","schema":{"type":"string","minLength":1,"description":"Unique workflow identifier."}}],"requestBody":{"required":true,"description":"Merge-patch body for the mutable metadata of a deployment version.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Workflows_UpdateWorkflowVersionRequest"}}}},"responses":{"200":{"description":"The updated version metadata.","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/Workflows_X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/Workflows_X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/Workflows_X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Workflows_UpdateWorkflowVersionResponse"}}}},"400":{"$ref":"#/components/responses/Workflows_BadRequest"},"401":{"$ref":"#/components/responses/Workflows_Unauthorized"},"403":{"$ref":"#/components/responses/Workflows_Forbidden"},"404":{"$ref":"#/components/responses/Workflows_NotFound"},"413":{"$ref":"#/components/responses/Workflows_PayloadTooLarge"},"415":{"$ref":"#/components/responses/Workflows_UnsupportedMediaType"},"429":{"$ref":"#/components/responses/Workflows_RateLimited"},"500":{"$ref":"#/components/responses/Workflows_InternalError"},"503":{"$ref":"#/components/responses/Workflows_ServiceUnavailable"}}}},"/api/v2/workflows/{workflowId}/versions/{version}/activate":{"post":{"operationId":"activateWorkflowVersion","summary":"Activate Workflow Version","description":"Asynchronously activate a specific deployment version, including when the workflow is not currently deployed. The draft remains unchanged. Read Get Workflow Deployment for `isDeployed` and `latestDeploymentAttempt`. Workspace API keys return `403`; use a personal API key or scoped OAuth token.\n\nOAuth scope: `api:write`.","x-sim-operation":"workflows.versions.activate","x-oauth-scope":"api:write","tags":["Workflows"],"parameters":[{"name":"version","in":"path","required":true,"description":"Numeric deployment version.","schema":{"type":"integer","exclusiveMinimum":0,"maximum":2147483647,"description":"Numeric deployment version.","examples":[3]}},{"name":"workflowId","in":"path","required":true,"description":"Unique workflow identifier.","schema":{"type":"string","minLength":1,"description":"Unique workflow identifier."}}],"requestBody":{"required":false,"description":"No body. The version to promote is named by the request path.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Workflows_ActivateWorkflowVersionRequest"}}}},"responses":{"200":{"description":"The accepted activation attempt.","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/Workflows_X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/Workflows_X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/Workflows_X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Workflows_ActivateWorkflowVersionResponse"}}}},"400":{"$ref":"#/components/responses/Workflows_BadRequest"},"401":{"$ref":"#/components/responses/Workflows_Unauthorized"},"403":{"$ref":"#/components/responses/Workflows_Forbidden"},"404":{"$ref":"#/components/responses/Workflows_NotFound"},"409":{"$ref":"#/components/responses/Workflows_Conflict"},"413":{"$ref":"#/components/responses/Workflows_PayloadTooLarge"},"415":{"$ref":"#/components/responses/Workflows_UnsupportedMediaType"},"423":{"$ref":"#/components/responses/Workflows_Locked"},"429":{"$ref":"#/components/responses/Workflows_RateLimited"},"500":{"$ref":"#/components/responses/Workflows_InternalError"},"503":{"$ref":"#/components/responses/Workflows_ServiceUnavailable"}}}},"/api/v2/workflows/{workflowId}/versions/{version}/revert":{"post":{"operationId":"revertWorkflowVersion","summary":"Revert Workflow To Version","description":"Replace the editable draft with a deployment version, discarding current draft edits. Use `active` for the live version. The live deployment remains unchanged; Activate Workflow Version or Rollback Workflow changes it. Workspace API keys return `403`; use a personal API key or scoped OAuth token.\n\nOAuth scope: `api:write`.","x-sim-operation":"workflows.versions.revert","x-oauth-scope":"api:write","tags":["Workflows"],"parameters":[{"name":"version","in":"path","required":true,"description":"Numeric deployment version, or `active` for the currently live version.","schema":{"anyOf":[{"type":"integer","exclusiveMinimum":0,"maximum":2147483647},{"type":"string","const":"active"}],"description":"Numeric deployment version, or `active` for the currently live version.","examples":[3,"active"]}},{"name":"workflowId","in":"path","required":true,"description":"Unique workflow identifier.","schema":{"type":"string","minLength":1,"description":"Unique workflow identifier."}}],"requestBody":{"required":false,"description":"No body. The version to load into the draft is named by the request path.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Workflows_RevertWorkflowVersionRequest"}}}},"responses":{"200":{"description":"The draft after it was overwritten.","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/Workflows_X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/Workflows_X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/Workflows_X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Workflows_RevertWorkflowVersionResponse"}}}},"400":{"$ref":"#/components/responses/Workflows_BadRequest"},"401":{"$ref":"#/components/responses/Workflows_Unauthorized"},"403":{"$ref":"#/components/responses/Workflows_Forbidden"},"404":{"$ref":"#/components/responses/Workflows_NotFound"},"409":{"$ref":"#/components/responses/Workflows_Conflict"},"413":{"$ref":"#/components/responses/Workflows_PayloadTooLarge"},"415":{"$ref":"#/components/responses/Workflows_UnsupportedMediaType"},"423":{"$ref":"#/components/responses/Workflows_Locked"},"429":{"$ref":"#/components/responses/Workflows_RateLimited"},"500":{"$ref":"#/components/responses/Workflows_InternalError"},"503":{"$ref":"#/components/responses/Workflows_ServiceUnavailable"}}}},"/api/v2/workflows/{workflowId}/deployment":{"get":{"operationId":"getWorkflowDeployment","summary":"Get Workflow Deployment","description":"Get the live version, latest deployment attempt, readiness, draft changes (`needsRedeployment`), and public API access. With `isPublicApi: true`, anyone with the execution URL can run the workflow and consume billed usage without an API key. Hosted chat is managed separately.\n\nOAuth scope: `api:read`.","x-sim-operation":"workflows.read","x-oauth-scope":"api:read","tags":["Workflows"],"parameters":[{"name":"workflowId","in":"path","required":true,"description":"Unique workflow identifier.","schema":{"type":"string","minLength":1,"description":"Unique workflow identifier.","examples":["3b1f7c92-8d4e-4a6b-9c0d-5e2f8a714b36"]}}],"responses":{"200":{"description":"The current deployment state.","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/Workflows_X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/Workflows_X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/Workflows_X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Workflows_WorkflowDeploymentResponse"}}}},"400":{"$ref":"#/components/responses/Workflows_BadRequest"},"401":{"$ref":"#/components/responses/Workflows_Unauthorized"},"403":{"$ref":"#/components/responses/Workflows_Forbidden"},"404":{"$ref":"#/components/responses/Workflows_NotFound"},"429":{"$ref":"#/components/responses/Workflows_RateLimited"},"500":{"$ref":"#/components/responses/Workflows_InternalError"},"503":{"$ref":"#/components/responses/Workflows_ServiceUnavailable"}}},"patch":{"operationId":"updateWorkflowPublicApi","summary":"Update Workflow Public API Access","description":"Enable or disable unauthenticated execution of the deployed workflow. Enabling allows anyone with the execution URL to consume billed usage. Organization sharing restrictions return `403` with `PUBLIC_SHARING_NOT_ALLOWED`. Hosted chat is managed separately. Workspace API keys return `403`; use a personal API key or scoped OAuth token.\n\nOAuth scope: `api:write`.","x-sim-operation":"workflows.public_api.update","x-oauth-scope":"api:write","tags":["Workflows"],"parameters":[{"name":"workflowId","in":"path","required":true,"description":"Unique workflow identifier.","schema":{"type":"string","minLength":1,"description":"Unique workflow identifier.","examples":["3b1f7c92-8d4e-4a6b-9c0d-5e2f8a714b36"]}}],"requestBody":{"required":true,"description":"Enable or disable unauthenticated public execution of the deployed workflow.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Workflows_UpdateWorkflowPublicApiRequest"}}}},"responses":{"200":{"description":"The updated public API setting.","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/Workflows_X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/Workflows_X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/Workflows_X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Workflows_UpdateWorkflowPublicApiResponse"}}}},"400":{"$ref":"#/components/responses/Workflows_BadRequest"},"401":{"$ref":"#/components/responses/Workflows_Unauthorized"},"403":{"$ref":"#/components/responses/Workflows_Forbidden"},"404":{"$ref":"#/components/responses/Workflows_NotFound"},"413":{"$ref":"#/components/responses/Workflows_PayloadTooLarge"},"415":{"$ref":"#/components/responses/Workflows_UnsupportedMediaType"},"423":{"$ref":"#/components/responses/Workflows_Locked"},"429":{"$ref":"#/components/responses/Workflows_RateLimited"},"500":{"$ref":"#/components/responses/Workflows_InternalError"},"503":{"$ref":"#/components/responses/Workflows_ServiceUnavailable"}}}},"/api/v2/workflows/{workflowId}/deploy":{"post":{"operationId":"deployWorkflow","summary":"Deploy Workflow","description":"Create and asynchronously activate a deployment version. Every call creates a new version; retrying after a timeout can create a duplicate. Read Get Workflow Deployment to check activation. A conflicting webhook path returns `409`. Workspace API keys return `403`; use a personal API key or scoped OAuth token.\n\nOAuth scope: `api:write`.","x-sim-operation":"workflows.deploy","x-oauth-scope":"api:write","tags":["Workflows"],"parameters":[{"name":"workflowId","in":"path","required":true,"description":"Unique workflow identifier.","schema":{"type":"string","minLength":1,"description":"Unique workflow identifier.","examples":["3b1f7c92-8d4e-4a6b-9c0d-5e2f8a714b36"]}}],"requestBody":{"required":false,"description":"Optional metadata for the new deployment version.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Workflows_DeployWorkflowRequest"}}}},"responses":{"200":{"description":"The accepted deployment attempt.","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/Workflows_X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/Workflows_X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/Workflows_X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Workflows_DeployWorkflowResponse"}}}},"400":{"$ref":"#/components/responses/Workflows_BadRequest"},"401":{"$ref":"#/components/responses/Workflows_Unauthorized"},"403":{"$ref":"#/components/responses/Workflows_Forbidden"},"404":{"$ref":"#/components/responses/Workflows_NotFound"},"409":{"$ref":"#/components/responses/Workflows_Conflict"},"413":{"$ref":"#/components/responses/Workflows_PayloadTooLarge"},"415":{"$ref":"#/components/responses/Workflows_UnsupportedMediaType"},"423":{"$ref":"#/components/responses/Workflows_Locked"},"429":{"$ref":"#/components/responses/Workflows_RateLimited"},"500":{"$ref":"#/components/responses/Workflows_InternalError"},"503":{"$ref":"#/components/responses/Workflows_ServiceUnavailable"}}},"delete":{"operationId":"undeployWorkflow","summary":"Undeploy Workflow","description":"Deactivate the currently serving workflow version. Workspace API keys return `403`; use a personal API key or scoped OAuth token.\n\nOAuth scope: `api:write`.","x-sim-operation":"workflows.undeploy","x-oauth-scope":"api:write","tags":["Workflows"],"parameters":[{"name":"workflowId","in":"path","required":true,"description":"Unique workflow identifier.","schema":{"type":"string","minLength":1,"description":"Unique workflow identifier.","examples":["3b1f7c92-8d4e-4a6b-9c0d-5e2f8a714b36"]}}],"responses":{"200":{"description":"The workflow was undeployed.","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/Workflows_X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/Workflows_X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/Workflows_X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Workflows_UndeployWorkflowResponse"}}}},"400":{"$ref":"#/components/responses/Workflows_BadRequest"},"401":{"$ref":"#/components/responses/Workflows_Unauthorized"},"403":{"$ref":"#/components/responses/Workflows_Forbidden"},"404":{"$ref":"#/components/responses/Workflows_NotFound"},"423":{"$ref":"#/components/responses/Workflows_Locked"},"429":{"$ref":"#/components/responses/Workflows_RateLimited"},"500":{"$ref":"#/components/responses/Workflows_InternalError"},"503":{"$ref":"#/components/responses/Workflows_ServiceUnavailable"}}}},"/api/v2/workflows/{workflowId}/rollback":{"post":{"operationId":"rollbackWorkflow","summary":"Rollback Workflow","description":"Asynchronously activate a previous deployment version, defaulting to the preceding active version. Requires a deployed workflow and leaves the draft unchanged. Use Activate Workflow Version to select a version when the workflow is undeployed. Workspace API keys return `403`; use a personal API key or scoped OAuth token.\n\nOAuth scope: `api:write`.","x-sim-operation":"workflows.versions.activate","x-oauth-scope":"api:write","tags":["Workflows"],"parameters":[{"name":"workflowId","in":"path","required":true,"description":"Unique workflow identifier.","schema":{"type":"string","minLength":1,"description":"Unique workflow identifier.","examples":["3b1f7c92-8d4e-4a6b-9c0d-5e2f8a714b36"]}}],"requestBody":{"required":false,"description":"Optional deployment version to reactivate.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Workflows_RollbackWorkflowRequest"}}}},"responses":{"200":{"description":"The accepted rollback attempt.","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/Workflows_X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/Workflows_X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/Workflows_X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Workflows_RollbackWorkflowResponse"}}}},"400":{"$ref":"#/components/responses/Workflows_BadRequest"},"401":{"$ref":"#/components/responses/Workflows_Unauthorized"},"403":{"$ref":"#/components/responses/Workflows_Forbidden"},"404":{"$ref":"#/components/responses/Workflows_NotFound"},"409":{"$ref":"#/components/responses/Workflows_Conflict"},"413":{"$ref":"#/components/responses/Workflows_PayloadTooLarge"},"415":{"$ref":"#/components/responses/Workflows_UnsupportedMediaType"},"423":{"$ref":"#/components/responses/Workflows_Locked"},"429":{"$ref":"#/components/responses/Workflows_RateLimited"},"500":{"$ref":"#/components/responses/Workflows_InternalError"},"503":{"$ref":"#/components/responses/Workflows_ServiceUnavailable"}}}},"/api/v2/workflows/{workflowId}/export":{"get":{"operationId":"exportWorkflow","summary":"Export Workflow","description":"Export a portable, secret-sanitized workflow; workspace-scoped bindings must be selected again after import. Exporting records an audit event. `HEAD` checks access with the same authorization as `GET` but skips side effects, returning an empty `200` without payload headers on success. Workspace folder trees exceeding 10,000 folders return `413`.\n\nOAuth scope: `api:read`.","x-sim-operation":"workflows.export","x-oauth-scope":"api:read","tags":["Workflows"],"parameters":[{"name":"workflowId","in":"path","required":true,"description":"Unique workflow identifier.","schema":{"type":"string","minLength":1,"description":"Unique workflow identifier.","examples":["3b1f7c92-8d4e-4a6b-9c0d-5e2f8a714b36"]}}],"responses":{"200":{"description":"The workflow export payload.","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/Workflows_X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/Workflows_X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/Workflows_X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Workflows_ExportWorkflowResponse"}}}},"400":{"$ref":"#/components/responses/Workflows_BadRequest"},"401":{"$ref":"#/components/responses/Workflows_Unauthorized"},"403":{"$ref":"#/components/responses/Workflows_Forbidden"},"404":{"$ref":"#/components/responses/Workflows_NotFound"},"413":{"$ref":"#/components/responses/Workflows_PayloadTooLarge"},"429":{"$ref":"#/components/responses/Workflows_RateLimited"},"500":{"$ref":"#/components/responses/Workflows_InternalError"},"503":{"$ref":"#/components/responses/Workflows_ServiceUnavailable"}}}},"/api/v2/workflows/import":{"post":{"operationId":"importWorkflow","summary":"Import Workflow","description":"Create a workflow from a portable export object, bare state, or JSON string. Workspace folder trees exceeding 10,000 folders return `413`.\n\nOAuth scope: `api:write`.","x-sim-operation":"workflows.import","x-oauth-scope":"api:write","tags":["Workflows"],"requestBody":{"required":true,"description":"Portable workflow data and destination metadata for an import.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Workflows_ImportWorkflowRequest"}}}},"responses":{"201":{"description":"The imported workflow.","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/Workflows_X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/Workflows_X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/Workflows_X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Workflows_ImportWorkflowResponse"}}}},"400":{"$ref":"#/components/responses/Workflows_BadRequest"},"401":{"$ref":"#/components/responses/Workflows_Unauthorized"},"403":{"$ref":"#/components/responses/Workflows_Forbidden"},"404":{"$ref":"#/components/responses/Workflows_NotFound"},"409":{"$ref":"#/components/responses/Workflows_Conflict"},"413":{"$ref":"#/components/responses/Workflows_PayloadTooLarge"},"415":{"$ref":"#/components/responses/Workflows_UnsupportedMediaType"},"423":{"$ref":"#/components/responses/Workflows_Locked"},"429":{"$ref":"#/components/responses/Workflows_RateLimited"},"500":{"$ref":"#/components/responses/Workflows_InternalError"},"503":{"$ref":"#/components/responses/Workflows_ServiceUnavailable"}}}},"/api/v2/chat-deployments":{"get":{"operationId":"listChatDeployments","summary":"List Chat Deployments","description":"List hosted chats and their public URLs with cursor pagination. Filter by `workflowId` for one workflow's chat. The list requires workspace read access; Get Workflow Chat Deployment requires admin access and includes visitor access settings and customizations. Passwords are never returned.\n\nOAuth scope: `api:read`.","x-sim-operation":"chat_deployments.list","x-oauth-scope":"api:read","tags":["Workflows"],"parameters":[{"name":"workspaceId","in":"query","required":true,"description":"Workspace whose chat deployments to list.","schema":{"type":"string","minLength":1,"maxLength":128,"description":"Workspace whose chat deployments to list."}},{"name":"workflowId","in":"query","required":false,"description":"Restrict to deployments of one workflow.","schema":{"description":"Restrict to deployments of one workflow.","type":"string","minLength":1}},{"name":"isActive","in":"query","required":false,"description":"Restrict to active or inactive deployments.","schema":{"description":"Restrict to active or inactive deployments.","type":"boolean"}},{"name":"sortBy","in":"query","required":false,"description":"Field used to sort the result.","schema":{"default":"createdAt","description":"Field used to sort the result.","type":"string","enum":["identifier","createdAt","updatedAt"]}},{"name":"sortOrder","in":"query","required":false,"description":"Sort direction.","schema":{"default":"desc","description":"Sort direction.","type":"string","enum":["asc","desc"]}},{"name":"limit","in":"query","required":false,"description":"Maximum chat deployments to return per page. Must be a whole number from 1 to 100. Defaults to 50.","schema":{"default":50,"description":"Maximum chat deployments to return per page. Must be a whole number from 1 to 100. Defaults to 50.","type":"integer","minimum":1,"maximum":100}},{"name":"cursor","in":"query","required":false,"description":"Opaque cursor from the previous page. Send it back with the same sort and filters; only `limit` may change. Change anything else and pagination must restart without a cursor.","schema":{"description":"Opaque cursor from the previous page. Send it back with the same sort and filters; only `limit` may change. Change anything else and pagination must restart without a cursor.","type":"string","minLength":1}}],"responses":{"200":{"description":"A page of chat deployments.","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/Workflows_X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/Workflows_X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/Workflows_X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Workflows_ChatDeploymentListResponse"}}}},"400":{"$ref":"#/components/responses/Workflows_BadRequest"},"401":{"$ref":"#/components/responses/Workflows_Unauthorized"},"403":{"$ref":"#/components/responses/Workflows_Forbidden"},"404":{"$ref":"#/components/responses/Workflows_NotFound"},"429":{"$ref":"#/components/responses/Workflows_RateLimited"},"500":{"$ref":"#/components/responses/Workflows_InternalError"},"503":{"$ref":"#/components/responses/Workflows_ServiceUnavailable"}}}},"/api/v2/workflows/{workflowId}/deployments/chat":{"get":{"operationId":"getWorkflowChatDeployment","summary":"Get Workflow Chat Deployment","description":"Get a workflow's hosted chat and visitor access settings. Requires workspace admin access; a missing chat returns `404`. Passwords are never returned; `hasPassword` indicates whether one is set. Hosted chat and workflow API deployment are managed separately. Workspace API keys return `403`; use a personal API key or scoped OAuth token.\n\nOAuth scope: `api:read`.","x-sim-operation":"chat_deployments.read","x-oauth-scope":"api:read","tags":["Workflows"],"parameters":[{"name":"workflowId","in":"path","required":true,"description":"Unique workflow identifier.","schema":{"type":"string","minLength":1,"description":"Unique workflow identifier.","examples":["3b1f7c92-8d4e-4a6b-9c0d-5e2f8a714b36"]}}],"responses":{"200":{"description":"The workflow's chat deployment.","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/Workflows_X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/Workflows_X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/Workflows_X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Workflows_GetWorkflowChatDeploymentResponse"}}}},"400":{"$ref":"#/components/responses/Workflows_BadRequest"},"401":{"$ref":"#/components/responses/Workflows_Unauthorized"},"403":{"$ref":"#/components/responses/Workflows_Forbidden"},"404":{"$ref":"#/components/responses/Workflows_NotFound"},"429":{"$ref":"#/components/responses/Workflows_RateLimited"},"500":{"$ref":"#/components/responses/Workflows_InternalError"},"503":{"$ref":"#/components/responses/Workflows_ServiceUnavailable"}}},"put":{"operationId":"replaceWorkflowChatDeployment","summary":"Create or Replace Workflow Chat Deployment","description":"Create or replace a workflow's hosted chat and deploy its draft. Omitted fields reset to defaults except per-field customizations. Password authentication requires `password`; email or SSO requires non-empty `allowedEmails`. Public authentication allows anyone with the chat URL to use it. A duplicate identifier or pending deployment returns `409`. Workspace API keys return `403`; use a personal API key or scoped OAuth token.\n\nOAuth scope: `api:write`.","x-sim-operation":"chat_deployments.replace","x-oauth-scope":"api:write","tags":["Workflows"],"parameters":[{"name":"workflowId","in":"path","required":true,"description":"Unique workflow identifier.","schema":{"type":"string","minLength":1,"description":"Unique workflow identifier.","examples":["3b1f7c92-8d4e-4a6b-9c0d-5e2f8a714b36"]}}],"requestBody":{"required":true,"description":"The complete desired state of a workflow's chat.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Workflows_ReplaceChatDeploymentRequest"}}}},"responses":{"200":{"description":"The published chat deployment.","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/Workflows_X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/Workflows_X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/Workflows_X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Workflows_ReplaceWorkflowChatDeploymentResponse"}}}},"400":{"$ref":"#/components/responses/Workflows_BadRequest"},"401":{"$ref":"#/components/responses/Workflows_Unauthorized"},"403":{"$ref":"#/components/responses/Workflows_Forbidden"},"404":{"$ref":"#/components/responses/Workflows_NotFound"},"409":{"$ref":"#/components/responses/Workflows_Conflict"},"413":{"$ref":"#/components/responses/Workflows_PayloadTooLarge"},"415":{"$ref":"#/components/responses/Workflows_UnsupportedMediaType"},"423":{"$ref":"#/components/responses/Workflows_Locked"},"429":{"$ref":"#/components/responses/Workflows_RateLimited"},"500":{"$ref":"#/components/responses/Workflows_InternalError"},"503":{"$ref":"#/components/responses/Workflows_ServiceUnavailable"}}},"delete":{"operationId":"deleteWorkflowChatDeployment","summary":"Delete Workflow Chat Deployment","description":"Remove a workflow's hosted chat and release its URL identifier. The workflow API deployment remains active; use Undeploy Workflow to stop it. Workspace API keys return `403`; use a personal API key or scoped OAuth token.\n\nOAuth scope: `api:write`.","x-sim-operation":"chat_deployments.delete","x-oauth-scope":"api:write","tags":["Workflows"],"parameters":[{"name":"workflowId","in":"path","required":true,"description":"Unique workflow identifier.","schema":{"type":"string","minLength":1,"description":"Unique workflow identifier.","examples":["3b1f7c92-8d4e-4a6b-9c0d-5e2f8a714b36"]}}],"responses":{"200":{"description":"The chat deployment was removed.","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/Workflows_X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/Workflows_X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/Workflows_X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Workflows_DeleteWorkflowChatDeploymentResponse"}}}},"400":{"$ref":"#/components/responses/Workflows_BadRequest"},"401":{"$ref":"#/components/responses/Workflows_Unauthorized"},"403":{"$ref":"#/components/responses/Workflows_Forbidden"},"404":{"$ref":"#/components/responses/Workflows_NotFound"},"429":{"$ref":"#/components/responses/Workflows_RateLimited"},"500":{"$ref":"#/components/responses/Workflows_InternalError"},"503":{"$ref":"#/components/responses/Workflows_ServiceUnavailable"}}}},"/api/v2/workflows/{workflowId}/execute":{"post":{"operationId":"executeWorkflowV2","summary":"Execute Workflow","description":"Execute a deployment or use `run.source: \"manual\"` for the draft. Manual runs require personal or OAuth write access and reject async. Public deployments allow anonymous sync or streaming. Request `application/x-ndjson` for heartbeats and the final result. Timeouts return `200` with failed status and `TIMEOUT`. Supply `X-Run-Id` to prevent duplicate execution; reuse returns `409`, never a replay. Input descriptions specify compatible modes; invalid combinations return `400`.\n\nOAuth scope: `api:write`.","x-sim-operation":"workflows.execute","x-oauth-scope":"api:write","tags":["Workflows"],"security":[{"apiKey":[]},{"oauthBearer":[]},{}],"parameters":[{"name":"workflowId","in":"path","required":true,"description":"Unique workflow identifier.","schema":{"type":"string","minLength":1,"description":"Unique workflow identifier.","examples":["3b1f7c92-8d4e-4a6b-9c0d-5e2f8a714b36"]}},{"name":"x-run-id","in":"header","required":false,"description":"Run ID for API-key or OAuth callers; ignored for anonymous requests. Reuse it after an uncertain response: a claimed ID returns `409` with `RUN_ID_CONFLICT`, without replaying results. Check Get Workflow Run, but `404` can persist while the ID remains claimed and does not establish whether execution started. Do not automatically restart with a fresh or omitted ID; either can start another run.","schema":{"description":"Run ID for API-key or OAuth callers; ignored for anonymous requests. Reuse it after an uncertain response: a claimed ID returns `409` with `RUN_ID_CONFLICT`, without replaying results. Check Get Workflow Run, but `404` can persist while the ID remains claimed and does not establish whether execution started. Do not automatically restart with a fresh or omitted ID; either can start another run.","type":"string","minLength":1,"maxLength":128,"pattern":"^[A-Za-z0-9._:-]+$","examples":["run_8f14e45f-ceea-467f-a"]}},{"name":"x-sim-via","in":"header","required":false,"description":"Comma-separated workflow identifiers naming the workflow-to-workflow call chain that led to this request. Each hop appends its own workflow id, and Sim sets it automatically; supply it yourself only when relaying an existing chain. A chain at the maximum depth is rejected with `409` and `error.details.code: \"CALL_CHAIN_DEPTH_EXCEEDED\"`.","schema":{"description":"Comma-separated workflow identifiers naming the workflow-to-workflow call chain that led to this request. Each hop appends its own workflow id, and Sim sets it automatically; supply it yourself only when relaying an existing chain. A chain at the maximum depth is rejected with `409` and `error.details.code: \"CALL_CHAIN_DEPTH_EXCEEDED\"`.","type":"string"}}],"requestBody":{"required":true,"description":"Input, workflow-state selection, and execution-mode options. Input descriptions specify compatible modes; invalid combinations return `400`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Workflows_ExecuteWorkflowRequest"}}}},"responses":{"200":{"description":"A synchronous run result, heartbeat-delimited NDJSON result stream, or Server-Sent Event stream.","headers":{"X-Run-Id":{"$ref":"#/components/headers/Workflows_X-Run-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/Workflows_X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/Workflows_X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/Workflows_X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Workflows_ExecuteWorkflowSyncResponse"}},"application/x-ndjson":{"schema":{"type":"string"}},"text/event-stream":{"schema":{"type":"string"}}}},"202":{"description":"The asynchronous run was queued.","headers":{"X-Run-Id":{"$ref":"#/components/headers/Workflows_X-Run-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/Workflows_X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/Workflows_X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/Workflows_X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Workflows_ExecuteWorkflowQueuedResponse"}}}},"400":{"$ref":"#/components/responses/Workflows_BadRequest"},"401":{"$ref":"#/components/responses/Workflows_Unauthorized"},"402":{"$ref":"#/components/responses/Workflows_UsageLimitExceeded"},"403":{"$ref":"#/components/responses/Workflows_Forbidden"},"404":{"$ref":"#/components/responses/Workflows_NotFound"},"409":{"$ref":"#/components/responses/Workflows_RunIdConflict"},"413":{"$ref":"#/components/responses/Workflows_PayloadTooLarge"},"415":{"$ref":"#/components/responses/Workflows_UnsupportedMediaType"},"429":{"$ref":"#/components/responses/Workflows_RateLimited"},"499":{"$ref":"#/components/responses/Workflows_ClientClosedRequest"},"500":{"$ref":"#/components/responses/Workflows_InternalError"},"503":{"$ref":"#/components/responses/Workflows_ServiceUnavailable"}}}},"/api/v2/workflows/{workflowId}/runs":{"get":{"operationId":"listWorkflowRunsV2","summary":"List Workflow Runs","description":"List recorded runs of a workflow with filtering and opaque cursor pagination. Expired runs are permanently deleted. Retention is 30 days from run start on Free, unlimited on Pro and Team, and configured per organization on Enterprise with workspace overrides.\n\nOAuth scope: `api:read`.","x-sim-operation":"workflows.runs.list","x-oauth-scope":"api:read","tags":["Workflow Runs"],"parameters":[{"name":"workflowId","in":"path","required":true,"description":"Unique workflow identifier.","schema":{"type":"string","minLength":1,"description":"Unique workflow identifier.","examples":["3b1f7c92-8d4e-4a6b-9c0d-5e2f8a714b36"]}},{"name":"status","in":"query","required":false,"description":"Filter by run status.","schema":{"description":"Filter by run status.","type":"string","enum":["pending","running","completed","failed","cancelled","paused"]}},{"name":"trigger","in":"query","required":false,"description":"Filter by trigger type.","schema":{"description":"Filter by trigger type.","type":"string","minLength":1}},{"name":"startDate","in":"query","required":false,"description":"Only include runs started at or after this UTC ISO 8601 timestamp, e.g. `2026-08-06T00:00:00Z`. A date without a time, or a timestamp carrying a UTC offset instead of `Z`, is rejected, as is year `0000`, which names no storable instant.","schema":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$","description":"Only include runs started at or after this UTC ISO 8601 timestamp, e.g. `2026-08-06T00:00:00Z`. A date without a time, or a timestamp carrying a UTC offset instead of `Z`, is rejected, as is year `0000`, which names no storable instant."}},{"name":"endDate","in":"query","required":false,"description":"Only include runs started at or before this UTC ISO 8601 timestamp, e.g. `2026-08-06T00:00:00Z`. A date without a time, or a timestamp carrying a UTC offset instead of `Z`, is rejected, as is year `0000`, which names no storable instant.","schema":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$","description":"Only include runs started at or before this UTC ISO 8601 timestamp, e.g. `2026-08-06T00:00:00Z`. A date without a time, or a timestamp carrying a UTC offset instead of `Z`, is rejected, as is year `0000`, which names no storable instant."}},{"name":"limit","in":"query","required":false,"description":"Maximum workflow runs to return per page. Must be a whole number from 1 to 100. Defaults to 50.","schema":{"default":50,"description":"Maximum workflow runs to return per page. Must be a whole number from 1 to 100. Defaults to 50.","type":"integer","minimum":1,"maximum":100}},{"name":"cursor","in":"query","required":false,"description":"Opaque cursor from the previous page. Send it back with the same sort and filters; only `limit` may change. Change anything else and pagination must restart without a cursor.","schema":{"description":"Opaque cursor from the previous page. Send it back with the same sort and filters; only `limit` may change. Change anything else and pagination must restart without a cursor.","type":"string","minLength":1}},{"name":"order","in":"query","required":false,"description":"Sort direction by run start time. This list is sortable only by run start time, so it takes `order` in place of `sortBy`/`sortOrder`, which it rejects.","schema":{"default":"desc","description":"Sort direction by run start time. This list is sortable only by run start time, so it takes `order` in place of `sortBy`/`sortOrder`, which it rejects.","type":"string","enum":["asc","desc"]}}],"responses":{"200":{"description":"A page of workflow runs.","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/Workflows_X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/Workflows_X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/Workflows_X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Workflows_WorkflowRunListResponse"}}}},"400":{"$ref":"#/components/responses/Workflows_BadRequest"},"401":{"$ref":"#/components/responses/Workflows_Unauthorized"},"403":{"$ref":"#/components/responses/Workflows_Forbidden"},"404":{"$ref":"#/components/responses/Workflows_NotFound"},"429":{"$ref":"#/components/responses/Workflows_RateLimited"},"500":{"$ref":"#/components/responses/Workflows_InternalError"},"503":{"$ref":"#/components/responses/Workflows_ServiceUnavailable"}}}},"/api/v2/workflows/{workflowId}/runs/{runId}":{"get":{"operationId":"getWorkflowRunV2","summary":"Get Workflow Run","description":"Get current run state with optional final and block outputs. With `includeOutput`, `files` includes download paths; `includeFileBase64` inlines file bytes and returns `413` with the download path when one file or the total exceeds 16 MiB. `HEAD` checks access with the same authorization as `GET` but skips side effects, returning an empty `200` without payload headers on success.\n\nOAuth scope: `api:read`.","x-sim-operation":"workflows.runs.read","x-oauth-scope":"api:read","tags":["Workflow Runs"],"parameters":[{"name":"workflowId","in":"path","required":true,"description":"Unique workflow identifier.","schema":{"type":"string","minLength":1,"description":"Unique workflow identifier."}},{"name":"runId","in":"path","required":true,"description":"Unique workflow run identifier.","schema":{"type":"string","minLength":1,"maxLength":128,"pattern":"^[A-Za-z0-9._:-]+$","description":"Unique workflow run identifier.","examples":["run_8f14e45f-ceea-467f-a"]}},{"name":"includeOutput","in":"query","required":false,"description":"Include the final workflow output when true. It does not gate `blockOutputs`, which `selectedOutputs` selects on its own.","schema":{"description":"Include the final workflow output when true. It does not gate `blockOutputs`, which `selectedOutputs` selects on its own.","type":"boolean"}},{"name":"selectedOutputs","in":"query","required":false,"description":"Comma-separated block output references to include, as `blockId` or `blockId.path`. Block *names* are not resolved here — unlike the execute request, this resource reads a recorded run and matches ids only, so a selector that is not headed by a block id answers `400` instead of an empty `blockOutputs`.","schema":{"description":"Comma-separated block output references to include, as `blockId` or `blockId.path`. Block *names* are not resolved here — unlike the execute request, this resource reads a recorded run and matches ids only, so a selector that is not headed by a block id answers `400` instead of an empty `blockOutputs`.","type":"string"}},{"name":"includeFileBase64","in":"query","required":false,"description":"Inline each produced file's bytes as base64. Requires `includeOutput`. A file above the inline ceiling answers `413` naming its download path; fetch large files from `downloadPath` instead.","schema":{"description":"Inline each produced file's bytes as base64. Requires `includeOutput`. A file above the inline ceiling answers `413` naming its download path; fetch large files from `downloadPath` instead.","type":"boolean"}},{"name":"base64MaxBytes","in":"query","required":false,"description":"Per-file inline ceiling, lowering but never raising the server limit of 16 MiB.","schema":{"description":"Per-file inline ceiling, lowering but never raising the server limit of 16 MiB.","type":"integer","minimum":1,"maximum":16777216}}],"responses":{"200":{"description":"The workflow run status.","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/Workflows_X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/Workflows_X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/Workflows_X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Workflows_WorkflowRunStatusResponse"}}}},"400":{"$ref":"#/components/responses/Workflows_BadRequest"},"401":{"$ref":"#/components/responses/Workflows_Unauthorized"},"403":{"$ref":"#/components/responses/Workflows_Forbidden"},"404":{"$ref":"#/components/responses/Workflows_NotFound"},"409":{"$ref":"#/components/responses/Workflows_Conflict"},"413":{"$ref":"#/components/responses/Workflows_PayloadTooLarge"},"429":{"$ref":"#/components/responses/Workflows_RateLimited"},"500":{"$ref":"#/components/responses/Workflows_InternalError"},"503":{"$ref":"#/components/responses/Workflows_ServiceUnavailable"}}}},"/api/v2/workflows/{workflowId}/runs/{runId}/files/{fileId}":{"get":{"operationId":"downloadWorkflowRunFileV2","summary":"Download Workflow Run File","description":"Download one run-produced file by ID. Downloads record an audit event. Expired runs are permanently deleted. Retention is 30 days from run start on Free, unlimited on Pro and Team, and configured per organization on Enterprise with workspace overrides. `HEAD` checks access with the same authorization as `GET` but skips side effects, returning an empty `200` without payload headers on success. `HEAD` omits `Content-Length`; use file metadata to size downloads.\n\nOAuth scope: `api:read`.","x-sim-operation":"workflows.download_run_file","x-oauth-scope":"api:read","tags":["Workflow Runs"],"parameters":[{"name":"workflowId","in":"path","required":true,"description":"Unique workflow identifier.","schema":{"type":"string","minLength":1,"description":"Unique workflow identifier."}},{"name":"runId","in":"path","required":true,"description":"Unique workflow run identifier.","schema":{"type":"string","minLength":1,"maxLength":128,"pattern":"^[A-Za-z0-9._:-]+$","description":"Unique workflow run identifier.","examples":["run_8f14e45f-ceea-467f-a"]}},{"name":"fileId","in":"path","required":true,"description":"Identifier of a file the run produced, as reported by the run resource.","schema":{"type":"string","minLength":1,"maxLength":256,"description":"Identifier of a file the run produced, as reported by the run resource."}}],"responses":{"200":{"description":"The run file bytes.","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/Workflows_X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/Workflows_X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/Workflows_X-RateLimit-Reset"},"Content-Type":{"$ref":"#/components/headers/Workflows_Content-Type"},"Content-Disposition":{"$ref":"#/components/headers/Workflows_Content-Disposition"},"Content-Length":{"$ref":"#/components/headers/Workflows_Content-Length"}},"content":{"application/octet-stream":{"schema":{"type":"string","format":"binary"}}}},"400":{"$ref":"#/components/responses/Workflows_BadRequest"},"401":{"$ref":"#/components/responses/Workflows_Unauthorized"},"403":{"$ref":"#/components/responses/Workflows_Forbidden"},"404":{"$ref":"#/components/responses/Workflows_NotFound"},"409":{"$ref":"#/components/responses/Workflows_Conflict"},"429":{"$ref":"#/components/responses/Workflows_RateLimited"},"500":{"$ref":"#/components/responses/Workflows_InternalError"},"503":{"$ref":"#/components/responses/Workflows_ServiceUnavailable"}}}},"/api/v2/workflows/{workflowId}/runs/{runId}/resume":{"post":{"operationId":"resumeWorkflowRunV2","summary":"Resume Workflow Run","description":"Resume one human-in-the-loop pause. The resumed attempt receives a new run ID and returns either a synchronous result or a queue receipt.\n\nOAuth scope: `api:write`.","x-sim-operation":"workflows.runs.resume","x-oauth-scope":"api:write","tags":["Workflow Runs"],"parameters":[{"name":"workflowId","in":"path","required":true,"description":"Unique workflow identifier.","schema":{"type":"string","minLength":1,"description":"Unique workflow identifier."}},{"name":"runId","in":"path","required":true,"description":"Unique workflow run identifier.","schema":{"type":"string","minLength":1,"maxLength":128,"pattern":"^[A-Za-z0-9._:-]+$","description":"Unique workflow run identifier.","examples":["run_8f14e45f-ceea-467f-a"]}}],"requestBody":{"required":true,"description":"Pause context and optional input used to resume a workflow run.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Workflows_ResumeWorkflowRequest"}}}},"responses":{"200":{"description":"The resumed workflow attempt completed synchronously.","headers":{"X-Run-Id":{"$ref":"#/components/headers/Workflows_X-Run-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/Workflows_X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/Workflows_X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/Workflows_X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Workflows_ResumeWorkflowSyncResponse"}}}},"202":{"description":"The resumed workflow attempt was queued.","headers":{"X-Run-Id":{"$ref":"#/components/headers/Workflows_X-Run-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/Workflows_X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/Workflows_X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/Workflows_X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Workflows_ResumeWorkflowQueuedResponse"}}}},"400":{"$ref":"#/components/responses/Workflows_BadRequest"},"401":{"$ref":"#/components/responses/Workflows_Unauthorized"},"402":{"$ref":"#/components/responses/Workflows_UsageLimitExceeded"},"403":{"$ref":"#/components/responses/Workflows_Forbidden"},"404":{"$ref":"#/components/responses/Workflows_NotFound"},"409":{"$ref":"#/components/responses/Workflows_Conflict"},"413":{"$ref":"#/components/responses/Workflows_PayloadTooLarge"},"415":{"$ref":"#/components/responses/Workflows_UnsupportedMediaType"},"429":{"$ref":"#/components/responses/Workflows_RateLimited"},"500":{"$ref":"#/components/responses/Workflows_InternalError"},"503":{"$ref":"#/components/responses/Workflows_ServiceUnavailable"}}}},"/api/v2/workflows/{workflowId}/runs/{runId}/cancel":{"post":{"operationId":"cancelRunV2","summary":"Cancel Workflow Run","description":"Request cancellation of a running, queued, or paused workflow run. Terminal runs return successfully without changes. A table workflow-group run returns `409` if its cell can no longer accept cancellation.\n\nOAuth scope: `api:write`.","x-sim-operation":"workflows.runs.cancel","x-oauth-scope":"api:write","tags":["Workflow Runs"],"parameters":[{"name":"workflowId","in":"path","required":true,"description":"Unique workflow identifier.","schema":{"type":"string","minLength":1,"description":"Unique workflow identifier."}},{"name":"runId","in":"path","required":true,"description":"Unique workflow run identifier.","schema":{"type":"string","minLength":1,"maxLength":128,"pattern":"^[A-Za-z0-9._:-]+$","description":"Unique workflow run identifier.","examples":["run_8f14e45f-ceea-467f-a"]}}],"responses":{"200":{"description":"The cancellation outcome.","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/Workflows_X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/Workflows_X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/Workflows_X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Workflows_CancelWorkflowRunResponse"}}}},"400":{"$ref":"#/components/responses/Workflows_BadRequest"},"401":{"$ref":"#/components/responses/Workflows_Unauthorized"},"403":{"$ref":"#/components/responses/Workflows_Forbidden"},"404":{"$ref":"#/components/responses/Workflows_NotFound"},"409":{"$ref":"#/components/responses/Workflows_Conflict"},"429":{"$ref":"#/components/responses/Workflows_RateLimited"},"500":{"$ref":"#/components/responses/Workflows_InternalError"},"503":{"$ref":"#/components/responses/Workflows_ServiceUnavailable"}}}},"/api/v2/workflows/folders":{"get":{"operationId":"listWorkflowsFolders","summary":"List Workflow Folders","description":"List workflow folders in a workspace. Returns the complete set in one page; `nextCursor` is always null. Workspace folder trees exceeding 10,000 folders return `413`.\n\nOAuth scope: `api:read`.","x-sim-operation":"workflows.folders.list","x-oauth-scope":"api:read","tags":["Workflows"],"parameters":[{"name":"workspaceId","in":"query","required":true,"description":"Workspace whose folders should be listed.","schema":{"type":"string","minLength":1,"maxLength":128,"description":"Workspace whose folders should be listed."}},{"name":"parentPath","in":"query","required":false,"description":"Restrict results to direct children of this parent path. Unknown folder paths contribute no matches.","schema":{"description":"Restrict results to direct children of this parent path. Unknown folder paths contribute no matches.","$ref":"#/components/schemas/Workflows_FolderPathInput"}},{"name":"search","in":"query","required":false,"description":"Case-insensitive substring match against the folder name.","schema":{"description":"Case-insensitive substring match against the folder name.","type":"string","minLength":1,"maxLength":200}},{"name":"sortBy","in":"query","required":false,"description":"Field used to sort the result. Sorting by `name` is case-sensitive and follows the storage collation, so do not rely on a case-insensitive order.","schema":{"default":"name","description":"Field used to sort the result. Sorting by `name` is case-sensitive and follows the storage collation, so do not rely on a case-insensitive order.","type":"string","enum":["name","createdAt","updatedAt"]}},{"name":"sortOrder","in":"query","required":false,"description":"Sort direction.","schema":{"default":"asc","description":"Sort direction.","type":"string","enum":["asc","desc"]}}],"responses":{"200":{"description":"A list of workflow folders.","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/Workflows_X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/Workflows_X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/Workflows_X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Workflows_WorkflowFolderListResponse"}}}},"400":{"$ref":"#/components/responses/Workflows_BadRequest"},"401":{"$ref":"#/components/responses/Workflows_Unauthorized"},"403":{"$ref":"#/components/responses/Workflows_Forbidden"},"404":{"$ref":"#/components/responses/Workflows_NotFound"},"413":{"$ref":"#/components/responses/Workflows_PayloadTooLarge"},"429":{"$ref":"#/components/responses/Workflows_RateLimited"},"500":{"$ref":"#/components/responses/Workflows_InternalError"},"503":{"$ref":"#/components/responses/Workflows_ServiceUnavailable"}}},"post":{"operationId":"createWorkflowsFolder","summary":"Create Workflow Folder","description":"Create a workflow folder in a workspace. Workspace folder trees exceeding 10,000 folders return `413`.\n\nOAuth scope: `api:write`.","x-sim-operation":"workflows.folders.create","x-oauth-scope":"api:write","tags":["Workflows"],"requestBody":{"required":true,"description":"Workspace and canonical path for a new workflow folder.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Workflows_CreateWorkflowFolderRequest"}}}},"responses":{"201":{"description":"The created workflow folder.","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/Workflows_X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/Workflows_X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/Workflows_X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Workflows_CreateWorkflowFolderResponse"}}}},"400":{"$ref":"#/components/responses/Workflows_BadRequest"},"401":{"$ref":"#/components/responses/Workflows_Unauthorized"},"403":{"$ref":"#/components/responses/Workflows_Forbidden"},"404":{"$ref":"#/components/responses/Workflows_NotFound"},"409":{"$ref":"#/components/responses/Workflows_Conflict"},"413":{"$ref":"#/components/responses/Workflows_PayloadTooLarge"},"415":{"$ref":"#/components/responses/Workflows_UnsupportedMediaType"},"423":{"$ref":"#/components/responses/Workflows_Locked"},"429":{"$ref":"#/components/responses/Workflows_RateLimited"},"500":{"$ref":"#/components/responses/Workflows_InternalError"},"503":{"$ref":"#/components/responses/Workflows_ServiceUnavailable"}}},"patch":{"operationId":"relocateWorkflowsFolder","summary":"Rename or Move Workflow Folder","description":"Rename or move a workflow folder and update all descendant paths. Workspace folder trees exceeding 10,000 folders return `413`.\n\nOAuth scope: `api:write`.","x-sim-operation":"workflows.folders.relocate","x-oauth-scope":"api:write","tags":["Workflows"],"requestBody":{"required":true,"description":"Current and destination paths for a workflow folder.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Workflows_RelocateWorkflowFolderRequest"}}}},"responses":{"200":{"description":"The relocated workflow folder.","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/Workflows_X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/Workflows_X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/Workflows_X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Workflows_RelocateWorkflowFolderResponse"}}}},"400":{"$ref":"#/components/responses/Workflows_BadRequest"},"401":{"$ref":"#/components/responses/Workflows_Unauthorized"},"403":{"$ref":"#/components/responses/Workflows_Forbidden"},"404":{"$ref":"#/components/responses/Workflows_NotFound"},"409":{"$ref":"#/components/responses/Workflows_Conflict"},"413":{"$ref":"#/components/responses/Workflows_PayloadTooLarge"},"415":{"$ref":"#/components/responses/Workflows_UnsupportedMediaType"},"423":{"$ref":"#/components/responses/Workflows_Locked"},"429":{"$ref":"#/components/responses/Workflows_RateLimited"},"500":{"$ref":"#/components/responses/Workflows_InternalError"},"503":{"$ref":"#/components/responses/Workflows_ServiceUnavailable"}}},"delete":{"operationId":"deleteWorkflowsFolder","summary":"Delete Workflow Folder","description":"Archive an empty workflow folder, or set `recursive=true` to archive its subfolders and workflows. Use Restore Workflow to recover workflows.\n\nOAuth scope: `api:write`.","x-sim-operation":"workflows.folders.delete","x-oauth-scope":"api:write","tags":["Workflows"],"parameters":[{"name":"workspaceId","in":"query","required":true,"description":"Workspace containing the folder.","schema":{"type":"string","minLength":1,"maxLength":128,"description":"Workspace containing the folder."}},{"name":"path","in":"query","required":true,"description":"Path of the folder to delete.","schema":{"description":"Path of the folder to delete.","$ref":"#/components/schemas/Workflows_NonRootFolderPathInput"}},{"name":"recursive","in":"query","required":false,"description":"Delete the folder's nested files and folders too. An empty folder deletes either way; a non-empty one needs this. The listed spellings are the whole accepted vocabulary and are case-sensitive; any other value is rejected.","schema":{"description":"Delete the folder's nested files and folders too. An empty folder deletes either way; a non-empty one needs this. The listed spellings are the whole accepted vocabulary and are case-sensitive; any other value is rejected.","enum":["true","1","yes","on","y","enabled","false","0","no","off","n","disabled"],"default":"false","type":"string"}}],"responses":{"200":{"description":"The workflow folder was deleted.","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/Workflows_X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/Workflows_X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/Workflows_X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Workflows_DeleteWorkflowFolderResponse"}}}},"400":{"$ref":"#/components/responses/Workflows_BadRequest"},"401":{"$ref":"#/components/responses/Workflows_Unauthorized"},"403":{"$ref":"#/components/responses/Workflows_Forbidden"},"404":{"$ref":"#/components/responses/Workflows_NotFound"},"409":{"$ref":"#/components/responses/Workflows_Conflict"},"413":{"$ref":"#/components/responses/Workflows_PayloadTooLarge"},"423":{"$ref":"#/components/responses/Workflows_Locked"},"429":{"$ref":"#/components/responses/Workflows_RateLimited"},"500":{"$ref":"#/components/responses/Workflows_InternalError"},"503":{"$ref":"#/components/responses/Workflows_ServiceUnavailable"}}}},"/api/v2/logs":{"get":{"operationId":"listLogs","summary":"List Logs","description":"List logs with filters, selectable detail, sorting, and cursor pagination. `includeJobRuns=true` includes chat and Sim-agent jobs only with `sortBy=startedAt`, because other orderings are unsupported. `files` contains only run-produced files; use the files API for input attachments. Expired runs are permanently deleted. Retention is 30 days from run start on Free, unlimited on Pro and Team, and configured per organization on Enterprise with workspace overrides. Workspace folder trees exceeding 10,000 folders return `413`.\n\nOAuth scope: `api:read`.","x-sim-operation":"logs.list","x-oauth-scope":"api:read","tags":["Logs"],"parameters":[{"name":"workspaceId","in":"query","required":true,"description":"Workspace whose execution logs should be returned.","schema":{"type":"string","minLength":1,"maxLength":128,"description":"Workspace whose execution logs should be returned."}},{"name":"workflowIds","in":"query","required":false,"description":"Comma-separated workflow identifiers to include. An empty entry is rejected. At most 200 entries.","schema":{"type":"string","description":"Comma-separated workflow identifiers to include. An empty entry is rejected. At most 200 entries."}},{"name":"triggers","in":"query","required":false,"description":"Comma-separated, lowercase trigger types or webhook provider IDs. Matching is exact and case-sensitive; unknown values select no runs. An empty entry is rejected. The sentinel `all` disables this filter, even when listed with other values. At most 100 entries.","schema":{"type":"string","description":"Comma-separated, lowercase trigger types or webhook provider IDs. Matching is exact and case-sensitive; unknown values select no runs. An empty entry is rejected. The sentinel `all` disables this filter, even when listed with other values. At most 100 entries."}},{"name":"level","in":"query","required":false,"description":"Severity level to include.","schema":{"type":"string","enum":["info","error"],"description":"Severity level to include."}},{"name":"startDate","in":"query","required":false,"description":"Only include runs started at or after this UTC ISO 8601 timestamp, e.g. `2026-08-06T00:00:00Z`. A date without a time, or a timestamp carrying a UTC offset instead of `Z`, is rejected, as is year `0000`, which names no storable instant.","schema":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$","description":"Only include runs started at or after this UTC ISO 8601 timestamp, e.g. `2026-08-06T00:00:00Z`. A date without a time, or a timestamp carrying a UTC offset instead of `Z`, is rejected, as is year `0000`, which names no storable instant."}},{"name":"endDate","in":"query","required":false,"description":"Only include runs started at or before this UTC ISO 8601 timestamp, e.g. `2026-08-06T00:00:00Z`. A date without a time, or a timestamp carrying a UTC offset instead of `Z`, is rejected, as is year `0000`, which names no storable instant.","schema":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$","description":"Only include runs started at or before this UTC ISO 8601 timestamp, e.g. `2026-08-06T00:00:00Z`. A date without a time, or a timestamp carrying a UTC offset instead of `Z`, is rejected, as is year `0000`, which names no storable instant."}},{"name":"minDurationMs","in":"query","required":false,"description":"Minimum total execution duration in milliseconds. Whole milliseconds from 0 to 2147483647; the stored duration is a 32-bit integer, so a fractional or out-of-range bound is rejected.","schema":{"type":"integer","minimum":0,"maximum":2147483647,"description":"Minimum total execution duration in milliseconds. Whole milliseconds from 0 to 2147483647; the stored duration is a 32-bit integer, so a fractional or out-of-range bound is rejected."}},{"name":"maxDurationMs","in":"query","required":false,"description":"Maximum total execution duration in milliseconds. Whole milliseconds from 0 to 2147483647; the stored duration is a 32-bit integer, so a fractional or out-of-range bound is rejected.","schema":{"type":"integer","minimum":0,"maximum":2147483647,"description":"Maximum total execution duration in milliseconds. Whole milliseconds from 0 to 2147483647; the stored duration is a 32-bit integer, so a fractional or out-of-range bound is rejected."}},{"name":"minCost","in":"query","required":false,"description":"Minimum execution cost in USD, from 0 to 1000000. A run is never charged a negative amount, so a negative bound is rejected rather than treated as a filter that matches every run.","schema":{"type":"number","minimum":0,"maximum":1000000,"description":"Minimum execution cost in USD, from 0 to 1000000. A run is never charged a negative amount, so a negative bound is rejected rather than treated as a filter that matches every run."}},{"name":"maxCost","in":"query","required":false,"description":"Maximum execution cost in USD, from 0 to 1000000. A run is never charged a negative amount, so a negative bound is rejected rather than treated as a filter that matches every run.","schema":{"type":"number","minimum":0,"maximum":1000000,"description":"Maximum execution cost in USD, from 0 to 1000000. A run is never charged a negative amount, so a negative bound is rejected rather than treated as a filter that matches every run."}},{"name":"model","in":"query","required":false,"description":"AI model used during execution.","schema":{"type":"string","description":"AI model used during execution."}},{"name":"details","in":"query","required":false,"description":"Response detail level. `full` adds the `workflow` summary to every workflow run; a job run never carries one, whatever this is set to. `includeTraceSpans=true` and `includeFinalOutput=true` each imply `full`, so either one adds `workflow` even when `details=basic` is sent explicitly.","schema":{"default":"basic","type":"string","enum":["basic","full"],"description":"Response detail level. `full` adds the `workflow` summary to every workflow run; a job run never carries one, whatever this is set to. `includeTraceSpans=true` and `includeFinalOutput=true` each imply `full`, so either one adds `workflow` even when `details=basic` is sent explicitly."}},{"name":"includeTraceSpans","in":"query","required":false,"description":"Whether to include block-level trace spans. Implies `details=full`. Spans are pruned on their own retention schedule, so a run whose spans have aged out returns `traceSpans: []` rather than an error.","schema":{"description":"Whether to include block-level trace spans. Implies `details=full`. Spans are pruned on their own retention schedule, so a run whose spans have aged out returns `traceSpans: []` rather than an error.","type":"boolean"}},{"name":"includeFinalOutput","in":"query","required":false,"description":"Whether to include the final workflow output. Implies `details=full`, so the `workflow` summary is present regardless of what `details` is set to.","schema":{"description":"Whether to include the final workflow output. Implies `details=full`, so the `workflow` summary is present regardless of what `details` is set to.","type":"boolean"}},{"name":"limit","in":"query","required":false,"description":"Maximum log entries per page. Values outside 1–1000 are truncated and clamped into that range rather than rejected. Defaults to 100.","schema":{"description":"Maximum log entries per page. Values outside 1–1000 are truncated and clamped into that range rather than rejected. Defaults to 100.","type":"integer","default":100}},{"name":"cursor","in":"query","required":false,"description":"Opaque cursor from the previous page. Send it back with the same sort and filters; only `limit` may change. Change anything else and pagination must restart without a cursor.","schema":{"description":"Opaque cursor from the previous page. Send it back with the same sort and filters; only `limit` may change. Change anything else and pagination must restart without a cursor.","type":"string","minLength":1}},{"name":"status","in":"query","required":false,"description":"Comma-separated execution statuses to include, from `pending` | `running` | `paused` | `redacting` | `completed` | `failed` | `cancelled`. An empty entry is rejected. ANDed with `level`, which reports severity rather than lifecycle.","schema":{"type":"string","description":"Comma-separated execution statuses to include, from `pending` | `running` | `paused` | `redacting` | `completed` | `failed` | `cancelled`. An empty entry is rejected. ANDed with `level`, which reports severity rather than lifecycle."}},{"name":"workflowName","in":"query","required":false,"description":"Case-insensitive substring match against the run's workflow name. Runs whose workflow has been deleted match nothing, because the name is no longer joinable.","schema":{"type":"string","minLength":1,"maxLength":200,"description":"Case-insensitive substring match against the run's workflow name. Runs whose workflow has been deleted match nothing, because the name is no longer joinable."}},{"name":"includeJobRuns","in":"query","required":false,"description":"Include Chat and Sim-agent jobs alongside workflow runs. Jobs use `kind: \"job\"` and have no workflow or cost ledger. Workflow, folder, model, or status filters exclude jobs. This option is valid only when sorting by `startedAt`.","schema":{"description":"Include Chat and Sim-agent jobs alongside workflow runs. Jobs use `kind: \"job\"` and have no workflow or cost ledger. Workflow, folder, model, or status filters exclude jobs. This option is valid only when sorting by `startedAt`.","type":"boolean"}},{"name":"runId","in":"query","required":false,"description":"Exact run identifier to match.","schema":{"type":"string","minLength":1,"maxLength":128,"pattern":"^[A-Za-z0-9._:-]+$","description":"Exact run identifier to match."}},{"name":"sortBy","in":"query","required":false,"description":"Field used to sort the result. `durationMs` and `cost` are null until a run settles; those runs sort before recorded values in ascending order and after them in descending order. Only `startedAt` can order Chat and Sim-agent job runs, so any other value is rejected when job runs are included.","schema":{"default":"startedAt","description":"Field used to sort the result. `durationMs` and `cost` are null until a run settles; those runs sort before recorded values in ascending order and after them in descending order. Only `startedAt` can order Chat and Sim-agent job runs, so any other value is rejected when job runs are included.","type":"string","enum":["startedAt","durationMs","cost","status"]}},{"name":"sortOrder","in":"query","required":false,"description":"Sort direction.","schema":{"default":"desc","description":"Sort direction.","type":"string","enum":["asc","desc"]}},{"name":"folderPaths","in":"query","required":false,"description":"Comma-separated workflow folder paths, including descendants. Up to 100 paths. Unknown folder paths contribute no matches.","schema":{"type":"string","description":"Comma-separated workflow folder paths, including descendants. Up to 100 paths. Unknown folder paths contribute no matches."}}],"responses":{"200":{"description":"A page of execution logs matching the filters.","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/Logs_X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/Logs_X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/Logs_X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Logs_V2LogListResponse"}}}},"400":{"$ref":"#/components/responses/Logs_BadRequest"},"401":{"$ref":"#/components/responses/Logs_Unauthorized"},"403":{"$ref":"#/components/responses/Logs_Forbidden"},"404":{"$ref":"#/components/responses/Logs_NotFound"},"413":{"$ref":"#/components/responses/Logs_PayloadTooLarge"},"429":{"$ref":"#/components/responses/Logs_RateLimited"},"500":{"$ref":"#/components/responses/Logs_InternalError"},"503":{"$ref":"#/components/responses/Logs_ServiceUnavailable"}}}},"/api/v2/logs/{runId}":{"get":{"operationId":"getLog","summary":"Get Log","description":"Get a run's workflow graph, trace spans, final output, and cost. Trace spans expire separately, so an empty `traceSpans` array does not prove none were recorded. Expired runs are permanently deleted. Retention is 30 days from run start on Free, unlimited on Pro and Team, and configured per organization on Enterprise with workspace overrides. Workspace folder trees exceeding 10,000 folders return `413`.\n\nOAuth scope: `api:read`.","x-sim-operation":"logs.read_detail","x-oauth-scope":"api:read","tags":["Logs"],"parameters":[{"name":"runId","in":"path","required":true,"description":"Unique workflow run identifier.","schema":{"type":"string","minLength":1,"maxLength":128,"pattern":"^[A-Za-z0-9._:-]+$","description":"Unique workflow run identifier."}}],"responses":{"200":{"description":"The requested diagnostic log representation.","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/Logs_X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/Logs_X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/Logs_X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Logs_V2LogDetailResponse"}}}},"400":{"$ref":"#/components/responses/Logs_BadRequest"},"401":{"$ref":"#/components/responses/Logs_Unauthorized"},"403":{"$ref":"#/components/responses/Logs_Forbidden"},"404":{"$ref":"#/components/responses/Logs_NotFound"},"413":{"$ref":"#/components/responses/Logs_PayloadTooLarge"},"429":{"$ref":"#/components/responses/Logs_RateLimited"},"500":{"$ref":"#/components/responses/Logs_InternalError"},"503":{"$ref":"#/components/responses/Logs_ServiceUnavailable"}}}},"/api/v2/logs/stats":{"get":{"operationId":"getLogStats","summary":"Get Log Statistics","description":"Get run counts, success and error counts, and latency by workspace or workflow. Default bounds span recorded runs, or the last 24 hours when empty. Buckets may extend past the end. Folder filters include descendants; `workflowsTruncated` affects series, not totals. Expired runs are permanently deleted. Retention is 30 days from run start on Free, unlimited on Pro and Team, and configured per organization on Enterprise with workspace overrides. Workspace folder trees exceeding 10,000 folders return `413`.\n\nOAuth scope: `api:read`.","x-sim-operation":"logs.read_stats","x-oauth-scope":"api:read","tags":["Logs"],"parameters":[{"name":"workspaceId","in":"query","required":true,"description":"Workspace whose execution statistics to summarize.","schema":{"type":"string","minLength":1,"maxLength":128,"description":"Workspace whose execution statistics to summarize."}},{"name":"workflowIds","in":"query","required":false,"description":"Comma-separated workflow identifiers to include. At most 200 entries. An empty entry is rejected.","schema":{"type":"string","description":"Comma-separated workflow identifiers to include. At most 200 entries. An empty entry is rejected."}},{"name":"folderPaths","in":"query","required":false,"description":"Comma-separated workflow folder paths, including descendants. Up to 100 paths. Unknown folder paths contribute no matches.","schema":{"type":"string","description":"Comma-separated workflow folder paths, including descendants. Up to 100 paths. Unknown folder paths contribute no matches."}},{"name":"triggers","in":"query","required":false,"description":"Comma-separated trigger types to include. An empty entry is rejected. The vocabulary is open, so an unrecognized member selects no runs; the literal `all` disables this filter.","schema":{"type":"string","description":"Comma-separated trigger types to include. An empty entry is rejected. The vocabulary is open, so an unrecognized member selects no runs; the literal `all` disables this filter."}},{"name":"level","in":"query","required":false,"description":"Severity level to include.","schema":{"type":"string","enum":["info","error"],"description":"Severity level to include."}},{"name":"startDate","in":"query","required":false,"description":"Only include runs started at or after this UTC ISO 8601 timestamp, e.g. `2026-08-06T00:00:00Z`. A date without a time, or a timestamp carrying a UTC offset instead of `Z`, is rejected, as is year `0000`, which names no storable instant.","schema":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$","description":"Only include runs started at or after this UTC ISO 8601 timestamp, e.g. `2026-08-06T00:00:00Z`. A date without a time, or a timestamp carrying a UTC offset instead of `Z`, is rejected, as is year `0000`, which names no storable instant."}},{"name":"endDate","in":"query","required":false,"description":"Only include runs started at or before this UTC ISO 8601 timestamp, e.g. `2026-08-06T00:00:00Z`. A date without a time, or a timestamp carrying a UTC offset instead of `Z`, is rejected, as is year `0000`, which names no storable instant.","schema":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$","description":"Only include runs started at or before this UTC ISO 8601 timestamp, e.g. `2026-08-06T00:00:00Z`. A date without a time, or a timestamp carrying a UTC offset instead of `Z`, is rejected, as is year `0000`, which names no storable instant."}},{"name":"segmentCount","in":"query","required":false,"description":"Number of time buckets, up to 500. Exactly this many are returned, each at least one minute wide. Short windows extend past the requested end and include empty trailing buckets.","schema":{"default":72,"description":"Number of time buckets, up to 500. Exactly this many are returned, each at least one minute wide. Short windows extend past the requested end and include empty trailing buckets.","type":"integer","minimum":1,"maximum":500}}],"responses":{"200":{"description":"Bucketed execution statistics for the workspace.","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/Logs_X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/Logs_X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/Logs_X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Logs_V2LogStatsResponse"}}}},"400":{"$ref":"#/components/responses/Logs_BadRequest"},"401":{"$ref":"#/components/responses/Logs_Unauthorized"},"403":{"$ref":"#/components/responses/Logs_Forbidden"},"404":{"$ref":"#/components/responses/Logs_NotFound"},"413":{"$ref":"#/components/responses/Logs_PayloadTooLarge"},"429":{"$ref":"#/components/responses/Logs_RateLimited"},"500":{"$ref":"#/components/responses/Logs_InternalError"},"503":{"$ref":"#/components/responses/Logs_ServiceUnavailable"}}}},"/api/v2/files":{"get":{"operationId":"listFiles","summary":"List Files","description":"List active workspace files with folder filtering, search, sorting, and cursor pagination. Use `scope=archived` to find files available for restoration. Workspace folder trees exceeding 10,000 folders return `413`.\n\nOAuth scope: `api:read`.","x-sim-operation":"files.list","x-oauth-scope":"api:read","tags":["Files"],"parameters":[{"name":"workspaceId","in":"query","required":true,"description":"Workspace whose files should be listed.","schema":{"type":"string","minLength":1,"maxLength":128,"description":"Workspace whose files should be listed."}},{"name":"folderPath","in":"query","required":false,"description":"Restrict files to this folder, including subfolders when `recursive` is true. Unknown folder paths contribute no matches.","schema":{"description":"Restrict files to this folder, including subfolders when `recursive` is true. Unknown folder paths contribute no matches.","$ref":"#/components/schemas/FilesAudit_FolderPathInput"}},{"name":"recursive","in":"query","required":false,"description":"Include subfolders in the folder filter. Defaults to true when searching and false otherwise. Ignored without a folder filter.","schema":{"description":"Include subfolders in the folder filter. Defaults to true when searching and false otherwise. Ignored without a folder filter.","enum":["true","1","yes","on","y","enabled","false","0","no","off","n","disabled"],"type":"string"}},{"name":"scope","in":"query","required":false,"description":"Which lifecycle set to list: `active` (default) for live files, `archived` for files a delete soft-deleted. `folderPath` resolves against active folders only, so pairing it with `scope=archived` returns an empty page when the containing folder was archived too.","schema":{"default":"active","description":"Which lifecycle set to list: `active` (default) for live files, `archived` for files a delete soft-deleted. `folderPath` resolves against active folders only, so pairing it with `scope=archived` returns an empty page when the containing folder was archived too.","type":"string","enum":["active","archived"]}},{"name":"search","in":"query","required":false,"description":"Case-insensitive substring match against the file name.","schema":{"description":"Case-insensitive substring match against the file name.","type":"string","minLength":1,"maxLength":200}},{"name":"sortBy","in":"query","required":false,"description":"Field used to sort the result. Sorting by `name` is case-sensitive and follows the storage collation, so do not rely on a case-insensitive order.","schema":{"default":"uploadedAt","description":"Field used to sort the result. Sorting by `name` is case-sensitive and follows the storage collation, so do not rely on a case-insensitive order.","type":"string","enum":["name","size","uploadedAt","updatedAt"]}},{"name":"sortOrder","in":"query","required":false,"description":"Sort direction.","schema":{"default":"asc","description":"Sort direction.","type":"string","enum":["asc","desc"]}},{"name":"limit","in":"query","required":false,"description":"Maximum files per page. Values outside 1–1000 are truncated and clamped into that range rather than rejected. Defaults to 100.","schema":{"description":"Maximum files per page. Values outside 1–1000 are truncated and clamped into that range rather than rejected. Defaults to 100.","type":"integer","default":100}},{"name":"cursor","in":"query","required":false,"description":"Opaque cursor from the previous page. Send it back with the same sort and filters; only `limit` may change. Change anything else and pagination must restart without a cursor.","schema":{"description":"Opaque cursor from the previous page. Send it back with the same sort and filters; only `limit` may change. Change anything else and pagination must restart without a cursor.","type":"string","minLength":1}}],"responses":{"200":{"description":"A page of workspace files.","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/FilesAudit_X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/FilesAudit_X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/FilesAudit_X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FilesAudit_V2FileListResponse"}}}},"400":{"$ref":"#/components/responses/FilesAudit_BadRequest"},"401":{"$ref":"#/components/responses/FilesAudit_Unauthorized"},"403":{"$ref":"#/components/responses/FilesAudit_Forbidden"},"404":{"$ref":"#/components/responses/FilesAudit_NotFound"},"413":{"$ref":"#/components/responses/FilesAudit_PayloadTooLarge"},"429":{"$ref":"#/components/responses/FilesAudit_RateLimited"},"500":{"$ref":"#/components/responses/FilesAudit_InternalError"},"503":{"$ref":"#/components/responses/FilesAudit_ServiceUnavailable"}}},"post":{"operationId":"createFile","summary":"Create File","description":"Create a workspace file from inline UTF-8 or base64 content. Use an upload session for streamed or larger files.\n\nOAuth scope: `api:write`.","x-sim-operation":"files.create","x-oauth-scope":"api:write","tags":["Files"],"requestBody":{"required":true,"description":"Inline content and placement for a new workspace file.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FilesAudit_CreateFileRequest"}}}},"responses":{"201":{"description":"The created file.","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/FilesAudit_X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/FilesAudit_X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/FilesAudit_X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FilesAudit_V2FileResponse"}}}},"400":{"$ref":"#/components/responses/FilesAudit_BadRequest"},"401":{"$ref":"#/components/responses/FilesAudit_Unauthorized"},"403":{"$ref":"#/components/responses/FilesAudit_Forbidden"},"404":{"$ref":"#/components/responses/FilesAudit_NotFound"},"409":{"$ref":"#/components/responses/FilesAudit_Conflict"},"413":{"$ref":"#/components/responses/FilesAudit_PayloadTooLarge"},"415":{"$ref":"#/components/responses/FilesAudit_UnsupportedMediaType"},"429":{"$ref":"#/components/responses/FilesAudit_RateLimited"},"500":{"$ref":"#/components/responses/FilesAudit_InternalError"},"503":{"$ref":"#/components/responses/FilesAudit_ServiceUnavailable"}}}},"/api/v2/files/uploads":{"post":{"operationId":"createFileUpload","summary":"Create File Upload","description":"Create a resumable upload session and receive either a signed PUT URL or multipart instructions.\n\nOAuth scope: `api:write`.","x-sim-operation":"files.upload.create","x-oauth-scope":"api:write","tags":["Files"],"requestBody":{"required":true,"description":"File metadata required to create an upload session.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FilesAudit_CreateFileUploadRequest"}}}},"responses":{"201":{"description":"The created upload session and transfer instructions.","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/FilesAudit_X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/FilesAudit_X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/FilesAudit_X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FilesAudit_CreateFileUploadResponse"}}}},"400":{"$ref":"#/components/responses/FilesAudit_BadRequest"},"401":{"$ref":"#/components/responses/FilesAudit_Unauthorized"},"403":{"$ref":"#/components/responses/FilesAudit_Forbidden"},"404":{"$ref":"#/components/responses/FilesAudit_NotFound"},"413":{"$ref":"#/components/responses/FilesAudit_PayloadTooLarge"},"415":{"$ref":"#/components/responses/FilesAudit_UnsupportedMediaType"},"429":{"$ref":"#/components/responses/FilesAudit_RateLimited"},"500":{"$ref":"#/components/responses/FilesAudit_InternalError"},"503":{"$ref":"#/components/responses/FilesAudit_ServiceUnavailable"}}}},"/api/v2/files/uploads/{uploadId}":{"get":{"operationId":"getFileUpload","summary":"Get File Upload","description":"Get an upload session's state to determine whether an interrupted transfer can resume. Requires the signed upload token and current workspace access.\n\nOAuth scope: `api:read`.","x-sim-operation":"files.upload.read","x-oauth-scope":"api:read","tags":["Files"],"parameters":[{"name":"uploadId","in":"path","required":true,"description":"Upload session identifier.","schema":{"type":"string","minLength":1,"description":"Upload session identifier."}},{"name":"workspaceId","in":"query","required":true,"description":"Workspace that owns the upload session.","schema":{"type":"string","minLength":1,"maxLength":128,"description":"Workspace that owns the upload session."}},{"name":"upload-token","in":"header","required":true,"description":"Signed upload control token returned when the upload session was created.","schema":{"type":"string","minLength":1,"description":"Signed upload control token returned when the upload session was created."}}],"responses":{"200":{"description":"Current upload-session state.","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/FilesAudit_X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/FilesAudit_X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/FilesAudit_X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FilesAudit_FileUploadResponse"}}}},"400":{"$ref":"#/components/responses/FilesAudit_BadRequest"},"401":{"$ref":"#/components/responses/FilesAudit_Unauthorized"},"403":{"$ref":"#/components/responses/FilesAudit_Forbidden"},"404":{"$ref":"#/components/responses/FilesAudit_NotFound"},"429":{"$ref":"#/components/responses/FilesAudit_RateLimited"},"500":{"$ref":"#/components/responses/FilesAudit_InternalError"},"503":{"$ref":"#/components/responses/FilesAudit_ServiceUnavailable"}}},"delete":{"operationId":"abortFileUpload","summary":"Abort File Upload","description":"Abort an incomplete upload session and discard its uploaded data. Completed uploads cannot be aborted.\n\nOAuth scope: `api:write`.","x-sim-operation":"files.upload.cancel","x-oauth-scope":"api:write","tags":["Files"],"parameters":[{"name":"uploadId","in":"path","required":true,"description":"Upload session identifier.","schema":{"type":"string","minLength":1,"description":"Upload session identifier."}},{"name":"workspaceId","in":"query","required":true,"description":"Workspace that owns the upload session.","schema":{"type":"string","minLength":1,"maxLength":128,"description":"Workspace that owns the upload session."}},{"name":"upload-token","in":"header","required":true,"description":"Signed upload control token returned when the upload session was created.","schema":{"type":"string","minLength":1,"description":"Signed upload control token returned when the upload session was created."}}],"responses":{"200":{"description":"The aborted upload session.","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/FilesAudit_X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/FilesAudit_X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/FilesAudit_X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FilesAudit_FileUploadResponse"}}}},"400":{"$ref":"#/components/responses/FilesAudit_BadRequest"},"401":{"$ref":"#/components/responses/FilesAudit_Unauthorized"},"403":{"$ref":"#/components/responses/FilesAudit_Forbidden"},"404":{"$ref":"#/components/responses/FilesAudit_NotFound"},"409":{"$ref":"#/components/responses/FilesAudit_Conflict"},"429":{"$ref":"#/components/responses/FilesAudit_RateLimited"},"500":{"$ref":"#/components/responses/FilesAudit_InternalError"},"503":{"$ref":"#/components/responses/FilesAudit_ServiceUnavailable"}}}},"/api/v2/files/uploads/{uploadId}/parts":{"post":{"operationId":"createFileUploadPartUrls","summary":"Create File Upload Part URLs","description":"Create signed URLs for a bounded set of multipart upload part numbers.\n\nOAuth scope: `api:write`.","x-sim-operation":"files.upload.parts","x-oauth-scope":"api:write","tags":["Files"],"parameters":[{"name":"uploadId","in":"path","required":true,"description":"Upload session identifier.","schema":{"type":"string","minLength":1,"description":"Upload session identifier."}},{"name":"workspaceId","in":"query","required":true,"description":"Workspace that owns the upload session.","schema":{"type":"string","minLength":1,"maxLength":128,"description":"Workspace that owns the upload session."}},{"name":"upload-token","in":"header","required":true,"description":"Signed upload control token returned when the upload session was created.","schema":{"type":"string","minLength":1,"description":"Signed upload control token returned when the upload session was created."}}],"requestBody":{"required":true,"description":"Multipart part numbers requiring signed URLs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FilesAudit_CreateFileUploadPartUrlsRequest"}}}},"responses":{"200":{"description":"Signed URLs for the requested upload parts.","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/FilesAudit_X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/FilesAudit_X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/FilesAudit_X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FilesAudit_CreateFileUploadPartUrlsResponse"}}}},"400":{"$ref":"#/components/responses/FilesAudit_BadRequest"},"401":{"$ref":"#/components/responses/FilesAudit_Unauthorized"},"403":{"$ref":"#/components/responses/FilesAudit_Forbidden"},"404":{"$ref":"#/components/responses/FilesAudit_NotFound"},"409":{"$ref":"#/components/responses/FilesAudit_Conflict"},"413":{"$ref":"#/components/responses/FilesAudit_PayloadTooLarge"},"415":{"$ref":"#/components/responses/FilesAudit_UnsupportedMediaType"},"429":{"$ref":"#/components/responses/FilesAudit_RateLimited"},"500":{"$ref":"#/components/responses/FilesAudit_InternalError"},"503":{"$ref":"#/components/responses/FilesAudit_ServiceUnavailable"}}}},"/api/v2/files/uploads/{uploadId}/complete":{"post":{"operationId":"completeFileUpload","summary":"Complete File Upload","description":"Finalize an upload and register its workspace file. Repeating a completed upload returns the existing file.\n\nOAuth scope: `api:write`.","x-sim-operation":"files.upload.complete","x-oauth-scope":"api:write","tags":["Files"],"parameters":[{"name":"uploadId","in":"path","required":true,"description":"Upload session identifier.","schema":{"type":"string","minLength":1,"description":"Upload session identifier."}},{"name":"workspaceId","in":"query","required":true,"description":"Workspace that owns the upload session.","schema":{"type":"string","minLength":1,"maxLength":128,"description":"Workspace that owns the upload session."}},{"name":"upload-token","in":"header","required":true,"description":"Signed upload control token returned when the upload session was created.","schema":{"type":"string","minLength":1,"description":"Signed upload control token returned when the upload session was created."}}],"responses":{"200":{"description":"The completed or finalizing upload session.","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/FilesAudit_X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/FilesAudit_X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/FilesAudit_X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FilesAudit_FileUploadResponse"}}}},"400":{"$ref":"#/components/responses/FilesAudit_BadRequest"},"401":{"$ref":"#/components/responses/FilesAudit_Unauthorized"},"403":{"$ref":"#/components/responses/FilesAudit_Forbidden"},"404":{"$ref":"#/components/responses/FilesAudit_NotFound"},"409":{"$ref":"#/components/responses/FilesAudit_Conflict"},"429":{"$ref":"#/components/responses/FilesAudit_RateLimited"},"500":{"$ref":"#/components/responses/FilesAudit_InternalError"},"503":{"$ref":"#/components/responses/FilesAudit_ServiceUnavailable"}}}},"/api/v2/files/{fileId}/text":{"get":{"operationId":"readFileText","summary":"Read File Text","description":"Extract text without changing the file. Use Unzip File to unpack archives or Download File for original bytes. Unsupported types return `400`, compiling documents return `409`, and oversized files return `413`. `degraded: true` indicates incomplete or synthesized text, including some legacy `.doc` and `.ppt` results; `truncated: true` indicates a parser limit.\n\nOAuth scope: `api:read`.","x-sim-operation":"files.read_content","x-oauth-scope":"api:read","tags":["Files"],"parameters":[{"name":"fileId","in":"path","required":true,"description":"File identifier.","schema":{"type":"string","minLength":1,"maxLength":128,"pattern":"^[A-Za-z0-9_-]+$","description":"File identifier."}},{"name":"workspaceId","in":"query","required":true,"description":"Workspace that owns the file.","schema":{"type":"string","minLength":1,"maxLength":128,"description":"Workspace that owns the file."}},{"name":"maxBytes","in":"query","required":false,"description":"Optional ceiling on the source bytes fed to the parser, lowering but never raising the server limit.","schema":{"description":"Optional ceiling on the source bytes fed to the parser, lowering but never raising the server limit.","type":"integer","minimum":1,"maximum":26214400}},{"name":"offset","in":"query","required":false,"description":"First line to return, 1-based. Absent starts at the first line.","schema":{"description":"First line to return, 1-based. Absent starts at the first line.","type":"integer","minimum":1,"maximum":9007199254740991}},{"name":"limit","in":"query","required":false,"description":"How many lines to return from `offset`. Absent reads to the end.","schema":{"description":"How many lines to return from `offset`. Absent reads to the end.","type":"integer","minimum":1,"maximum":9007199254740991}}],"responses":{"200":{"description":"The extracted text and its extraction-quality flags.","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/FilesAudit_X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/FilesAudit_X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/FilesAudit_X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FilesAudit_FileTextResponse"}}}},"400":{"$ref":"#/components/responses/FilesAudit_BadRequest"},"401":{"$ref":"#/components/responses/FilesAudit_Unauthorized"},"403":{"$ref":"#/components/responses/FilesAudit_Forbidden"},"404":{"$ref":"#/components/responses/FilesAudit_NotFound"},"409":{"$ref":"#/components/responses/FilesAudit_Conflict"},"413":{"$ref":"#/components/responses/FilesAudit_PayloadTooLarge"},"429":{"$ref":"#/components/responses/FilesAudit_RateLimited"},"500":{"$ref":"#/components/responses/FilesAudit_InternalError"},"503":{"$ref":"#/components/responses/FilesAudit_ServiceUnavailable"}}}},"/api/v2/files/bulk-download":{"get":{"operationId":"bulkDownloadFiles","summary":"Bulk Download Files","description":"Stream selected files and recursive folder contents as a ZIP archive. Each selection parameter and the resolved set allow 100 entries; unmatched paths or excess entries return `400`. Total bytes are bounded. Downloads record an audit event. `HEAD` checks access with the same authorization as `GET` but skips side effects, returning an empty `200` without payload headers on success. `HEAD` omits `Content-Length`; use file metadata to size downloads.\n\nOAuth scope: `api:read`.","x-sim-operation":"files.download","x-oauth-scope":"api:read","tags":["Files"],"parameters":[{"name":"workspaceId","in":"query","required":true,"description":"Workspace containing the selection.","schema":{"type":"string","minLength":1,"maxLength":128,"description":"Workspace containing the selection."}},{"name":"fileIds","in":"query","required":false,"description":"File identifiers to include, comma-separated. At most 100 entries.","schema":{"description":"File identifiers to include, comma-separated. At most 100 entries.","type":"string"}},{"name":"folderPaths","in":"query","required":false,"description":"Comma-separated folder paths whose contents are included recursively. Up to 100 paths; resolved files share the 100-file download limit. Unknown paths are rejected.","schema":{"description":"Comma-separated folder paths whose contents are included recursively. Up to 100 paths; resolved files share the 100-file download limit. Unknown paths are rejected.","type":"string"}}],"responses":{"200":{"description":"The selected files as a zip archive.","headers":{"Content-Type":{"$ref":"#/components/headers/FilesAudit_Content-Type"},"Content-Disposition":{"$ref":"#/components/headers/FilesAudit_Content-Disposition"},"X-RateLimit-Limit":{"$ref":"#/components/headers/FilesAudit_X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/FilesAudit_X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/FilesAudit_X-RateLimit-Reset"}},"content":{"application/zip":{"schema":{"type":"string","format":"binary"}}}},"400":{"$ref":"#/components/responses/FilesAudit_BadRequest"},"401":{"$ref":"#/components/responses/FilesAudit_Unauthorized"},"403":{"$ref":"#/components/responses/FilesAudit_Forbidden"},"404":{"$ref":"#/components/responses/FilesAudit_NotFound"},"409":{"$ref":"#/components/responses/FilesAudit_Conflict"},"429":{"$ref":"#/components/responses/FilesAudit_RateLimited"},"500":{"$ref":"#/components/responses/FilesAudit_InternalError"},"503":{"$ref":"#/components/responses/FilesAudit_ServiceUnavailable"}}}},"/api/v2/files/{fileId}/unzip":{"post":{"operationId":"unzipFile","summary":"Unzip File","description":"Extract a ZIP archive into a new sibling folder and return counts and the destination path. Use List Files to inspect its contents. Large archives can take minutes; concurrent extraction of the same archive returns `409`. Size or processing-time limits return `413`.\n\nOAuth scope: `api:write`.","x-sim-operation":"files.extract_archive","x-oauth-scope":"api:write","tags":["Files"],"parameters":[{"name":"fileId","in":"path","required":true,"description":"File identifier.","schema":{"type":"string","minLength":1,"maxLength":128,"pattern":"^[A-Za-z0-9_-]+$","description":"File identifier."}}],"requestBody":{"required":true,"description":"Workspace scope for the archive.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FilesAudit_UnzipFileBody"}}}},"responses":{"200":{"description":"Counts and destination folder for the unpacked archive.","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/FilesAudit_X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/FilesAudit_X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/FilesAudit_X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FilesAudit_FileUnzipResponse"}}}},"400":{"$ref":"#/components/responses/FilesAudit_BadRequest"},"401":{"$ref":"#/components/responses/FilesAudit_Unauthorized"},"403":{"$ref":"#/components/responses/FilesAudit_Forbidden"},"404":{"$ref":"#/components/responses/FilesAudit_NotFound"},"409":{"$ref":"#/components/responses/FilesAudit_Conflict"},"413":{"$ref":"#/components/responses/FilesAudit_PayloadTooLarge"},"415":{"$ref":"#/components/responses/FilesAudit_UnsupportedMediaType"},"429":{"$ref":"#/components/responses/FilesAudit_RateLimited"},"500":{"$ref":"#/components/responses/FilesAudit_InternalError"},"503":{"$ref":"#/components/responses/FilesAudit_ServiceUnavailable"}}}},"/api/v2/files/{fileId}":{"get":{"operationId":"downloadFile","summary":"Download File","description":"Download current file bytes. Generated documents use compiled artifacts, returning `409` while compiling and `413` above the rendered-size ceiling. Downloading records an audit event. `HEAD` checks access with the same authorization as `GET` but skips side effects, returning an empty `200` without payload headers on success. `HEAD` omits `Content-Length`; use file metadata to size downloads.\n\nOAuth scope: `api:read`.","x-sim-operation":"files.download","x-oauth-scope":"api:read","tags":["Files"],"parameters":[{"name":"fileId","in":"path","required":true,"description":"File identifier.","schema":{"type":"string","minLength":1,"maxLength":128,"pattern":"^[A-Za-z0-9_-]+$","description":"File identifier."}},{"name":"workspaceId","in":"query","required":true,"description":"Workspace that owns the file.","schema":{"type":"string","minLength":1,"maxLength":128,"description":"Workspace that owns the file."}}],"responses":{"200":{"description":"The file bytes.","headers":{"Content-Type":{"$ref":"#/components/headers/FilesAudit_Content-Type"},"Content-Disposition":{"$ref":"#/components/headers/FilesAudit_Content-Disposition"},"Content-Length":{"$ref":"#/components/headers/FilesAudit_Content-Length"},"X-RateLimit-Limit":{"$ref":"#/components/headers/FilesAudit_X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/FilesAudit_X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/FilesAudit_X-RateLimit-Reset"}},"content":{"application/octet-stream":{"schema":{"type":"string","format":"binary"}}}},"400":{"$ref":"#/components/responses/FilesAudit_BadRequest"},"401":{"$ref":"#/components/responses/FilesAudit_Unauthorized"},"403":{"$ref":"#/components/responses/FilesAudit_Forbidden"},"404":{"$ref":"#/components/responses/FilesAudit_NotFound"},"409":{"$ref":"#/components/responses/FilesAudit_Conflict"},"413":{"$ref":"#/components/responses/FilesAudit_PayloadTooLarge"},"429":{"$ref":"#/components/responses/FilesAudit_RateLimited"},"500":{"$ref":"#/components/responses/FilesAudit_InternalError"},"503":{"$ref":"#/components/responses/FilesAudit_ServiceUnavailable"}}},"delete":{"operationId":"deleteFile","summary":"Delete File","description":"Archive a workspace file, retaining its stored bytes and removing API read access. List Files with `scope=archived` finds it; Restore File recovers it. Archiving an already archived file returns `404`.\n\nOAuth scope: `api:write`.","x-sim-operation":"files.delete","x-oauth-scope":"api:write","tags":["Files"],"parameters":[{"name":"fileId","in":"path","required":true,"description":"File identifier.","schema":{"type":"string","minLength":1,"maxLength":128,"pattern":"^[A-Za-z0-9_-]+$","description":"File identifier."}},{"name":"workspaceId","in":"query","required":true,"description":"Workspace that owns the file.","schema":{"type":"string","minLength":1,"maxLength":128,"description":"Workspace that owns the file."}}],"responses":{"200":{"description":"Deletion confirmation.","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/FilesAudit_X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/FilesAudit_X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/FilesAudit_X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FilesAudit_V2DeleteFileResponse"}}}},"400":{"$ref":"#/components/responses/FilesAudit_BadRequest"},"401":{"$ref":"#/components/responses/FilesAudit_Unauthorized"},"403":{"$ref":"#/components/responses/FilesAudit_Forbidden"},"404":{"$ref":"#/components/responses/FilesAudit_NotFound"},"429":{"$ref":"#/components/responses/FilesAudit_RateLimited"},"500":{"$ref":"#/components/responses/FilesAudit_InternalError"},"503":{"$ref":"#/components/responses/FilesAudit_ServiceUnavailable"}}},"patch":{"operationId":"renameFile","summary":"Rename File","description":"Rename a workspace file without changing its containing folder.\n\nOAuth scope: `api:write`.","x-sim-operation":"files.rename","x-oauth-scope":"api:write","tags":["Files"],"parameters":[{"name":"fileId","in":"path","required":true,"description":"File identifier.","schema":{"type":"string","minLength":1,"maxLength":128,"pattern":"^[A-Za-z0-9_-]+$","description":"File identifier."}}],"requestBody":{"required":true,"description":"Workspace scope and new file name.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FilesAudit_RenameFileRequest"}}}},"responses":{"200":{"description":"The renamed file.","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/FilesAudit_X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/FilesAudit_X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/FilesAudit_X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FilesAudit_V2FileResponse"}}}},"400":{"$ref":"#/components/responses/FilesAudit_BadRequest"},"401":{"$ref":"#/components/responses/FilesAudit_Unauthorized"},"403":{"$ref":"#/components/responses/FilesAudit_Forbidden"},"404":{"$ref":"#/components/responses/FilesAudit_NotFound"},"409":{"$ref":"#/components/responses/FilesAudit_Conflict"},"413":{"$ref":"#/components/responses/FilesAudit_PayloadTooLarge"},"415":{"$ref":"#/components/responses/FilesAudit_UnsupportedMediaType"},"429":{"$ref":"#/components/responses/FilesAudit_RateLimited"},"500":{"$ref":"#/components/responses/FilesAudit_InternalError"},"503":{"$ref":"#/components/responses/FilesAudit_ServiceUnavailable"}}}},"/api/v2/files/{fileId}/restore":{"post":{"operationId":"restoreFile","summary":"Restore File","description":"Restore an archived file to the workspace root. Name collisions add a `_restored` suffix; use the returned `name` and `folderPath`. An active file returns unchanged. An archived workspace returns `400`; an unresolved name collision returns `409`.\n\nOAuth scope: `api:write`.","x-sim-operation":"files.restore","x-oauth-scope":"api:write","tags":["Files"],"parameters":[{"name":"fileId","in":"path","required":true,"description":"File identifier.","schema":{"type":"string","minLength":1,"maxLength":128,"pattern":"^[A-Za-z0-9_-]+$","description":"File identifier."}}],"requestBody":{"required":true,"description":"Workspace scope for the archived file.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FilesAudit_RestoreFileRequest"}}}},"responses":{"200":{"description":"The file as it exists after the restore.","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/FilesAudit_X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/FilesAudit_X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/FilesAudit_X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FilesAudit_V2RestoreFileResponse"}}}},"400":{"$ref":"#/components/responses/FilesAudit_BadRequest"},"401":{"$ref":"#/components/responses/FilesAudit_Unauthorized"},"403":{"$ref":"#/components/responses/FilesAudit_Forbidden"},"404":{"$ref":"#/components/responses/FilesAudit_NotFound"},"409":{"$ref":"#/components/responses/FilesAudit_Conflict"},"413":{"$ref":"#/components/responses/FilesAudit_PayloadTooLarge"},"415":{"$ref":"#/components/responses/FilesAudit_UnsupportedMediaType"},"429":{"$ref":"#/components/responses/FilesAudit_RateLimited"},"500":{"$ref":"#/components/responses/FilesAudit_InternalError"},"503":{"$ref":"#/components/responses/FilesAudit_ServiceUnavailable"}}}},"/api/v2/files/{fileId}/metadata":{"get":{"operationId":"getFile","summary":"Get File Metadata","description":"Get file metadata and its public-share configuration. The `share` field is null when the file has never been shared.\n\nOAuth scope: `api:read`.","x-sim-operation":"files.read_metadata","x-oauth-scope":"api:read","tags":["Files"],"parameters":[{"name":"fileId","in":"path","required":true,"description":"File identifier.","schema":{"type":"string","minLength":1,"maxLength":128,"pattern":"^[A-Za-z0-9_-]+$","description":"File identifier."}},{"name":"workspaceId","in":"query","required":true,"description":"Workspace that owns the file.","schema":{"type":"string","minLength":1,"maxLength":128,"description":"Workspace that owns the file."}},{"name":"scope","in":"query","required":false,"description":"Which lifecycle set to read from: `active` (default) resolves live files only and returns `404` for a file a delete soft-deleted; `archived` also resolves soft-deleted files, so metadata stays readable before the file is restored. Authorization is identical for both.","schema":{"default":"active","description":"Which lifecycle set to read from: `active` (default) resolves live files only and returns `404` for a file a delete soft-deleted; `archived` also resolves soft-deleted files, so metadata stays readable before the file is restored. Authorization is identical for both.","type":"string","enum":["active","archived"]}}],"responses":{"200":{"description":"File metadata and public-share state.","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/FilesAudit_X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/FilesAudit_X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/FilesAudit_X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FilesAudit_V2FileMetadataResponse"}}}},"400":{"$ref":"#/components/responses/FilesAudit_BadRequest"},"401":{"$ref":"#/components/responses/FilesAudit_Unauthorized"},"403":{"$ref":"#/components/responses/FilesAudit_Forbidden"},"404":{"$ref":"#/components/responses/FilesAudit_NotFound"},"429":{"$ref":"#/components/responses/FilesAudit_RateLimited"},"500":{"$ref":"#/components/responses/FilesAudit_InternalError"},"503":{"$ref":"#/components/responses/FilesAudit_ServiceUnavailable"}}}},"/api/v2/audit-logs":{"get":{"operationId":"listAuditLogs","summary":"List Audit Logs","description":"List an organization audit trail with filters and opaque cursor pagination. Requires an Enterprise subscription and organization admin or owner access. Workspace API keys return `403`; use a personal API key or scoped OAuth token.\n\nOAuth scope: `api:read`.","x-sim-operation":"audit_logs.list","x-oauth-scope":"api:read","tags":["Audit Logs"],"parameters":[{"name":"action","in":"query","required":false,"description":"Filter by exact action name.","schema":{"description":"Filter by exact action name.","type":"string"}},{"name":"resourceType","in":"query","required":false,"description":"Filter by resource type. Accepts a comma-separated set; members are trimmed and deduplicated, and member order affects neither the result nor the cursor.","schema":{"description":"Filter by resource type. Accepts a comma-separated set; members are trimmed and deduplicated, and member order affects neither the result nor the cursor.","type":"string"}},{"name":"resourceId","in":"query","required":false,"description":"Filter by exact resource identifier.","schema":{"description":"Filter by exact resource identifier.","type":"string"}},{"name":"workspaceId","in":"query","required":false,"description":"Filter to actions in one workspace.","schema":{"description":"Filter to actions in one workspace.","type":"string","minLength":1,"maxLength":128}},{"name":"startDate","in":"query","required":false,"description":"Only include runs started at or after this UTC ISO 8601 timestamp, e.g. `2026-08-06T00:00:00Z`. A date without a time, or a timestamp carrying a UTC offset instead of `Z`, is rejected, as is year `0000`, which names no storable instant.","schema":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$","description":"Only include runs started at or after this UTC ISO 8601 timestamp, e.g. `2026-08-06T00:00:00Z`. A date without a time, or a timestamp carrying a UTC offset instead of `Z`, is rejected, as is year `0000`, which names no storable instant."}},{"name":"endDate","in":"query","required":false,"description":"Only include runs started at or before this UTC ISO 8601 timestamp, e.g. `2026-08-06T00:00:00Z`. A date without a time, or a timestamp carrying a UTC offset instead of `Z`, is rejected, as is year `0000`, which names no storable instant.","schema":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$","description":"Only include runs started at or before this UTC ISO 8601 timestamp, e.g. `2026-08-06T00:00:00Z`. A date without a time, or a timestamp carrying a UTC offset instead of `Z`, is rejected, as is year `0000`, which names no storable instant."}},{"name":"includeDeparted","in":"query","required":false,"description":"Include actions by users who have left the organization.","schema":{"description":"Include actions by users who have left the organization.","type":"boolean"}},{"name":"limit","in":"query","required":false,"description":"Maximum audit entries to return per page. Must be a whole number from 1 to 100. Defaults to 50.","schema":{"default":50,"description":"Maximum audit entries to return per page. Must be a whole number from 1 to 100. Defaults to 50.","type":"integer","minimum":1,"maximum":100}},{"name":"cursor","in":"query","required":false,"description":"Opaque cursor from the previous page. Send it back with the same sort and filters; only `limit` may change. Change anything else and pagination must restart without a cursor.","schema":{"description":"Opaque cursor from the previous page. Send it back with the same sort and filters; only `limit` may change. Change anything else and pagination must restart without a cursor.","type":"string","minLength":1}},{"name":"organizationId","in":"query","required":false,"description":"Organization whose audit trail should be queried. Defaults to the caller's own organization when omitted. A caller that belongs to no organization, or that names one it is not a member of, is refused with a 403.","schema":{"description":"Organization whose audit trail should be queried. Defaults to the caller's own organization when omitted. A caller that belongs to no organization, or that names one it is not a member of, is refused with a 403.","type":"string","minLength":1}},{"name":"actorEmail","in":"query","required":false,"description":"Filter by actor email address.","schema":{"description":"Filter by actor email address.","type":"string","format":"email","pattern":"^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"}}],"responses":{"200":{"description":"A page of audit-log entries.","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/FilesAudit_X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/FilesAudit_X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/FilesAudit_X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FilesAudit_V2AuditLogListResponse"}}}},"400":{"$ref":"#/components/responses/FilesAudit_BadRequest"},"401":{"$ref":"#/components/responses/FilesAudit_Unauthorized"},"403":{"$ref":"#/components/responses/FilesAudit_Forbidden"},"429":{"$ref":"#/components/responses/FilesAudit_RateLimited"},"500":{"$ref":"#/components/responses/FilesAudit_InternalError"},"503":{"$ref":"#/components/responses/FilesAudit_ServiceUnavailable"}}}},"/api/v2/audit-logs/{auditLogId}":{"get":{"operationId":"getAuditLog","summary":"Get Audit Log","description":"Get one organization audit-log entry. Requires an Enterprise subscription and organization admin or owner access. Workspace API keys return `403`; use a personal API key or scoped OAuth token.\n\nOAuth scope: `api:read`.","x-sim-operation":"audit_logs.read_detail","x-oauth-scope":"api:read","tags":["Audit Logs"],"parameters":[{"name":"auditLogId","in":"path","required":true,"description":"Audit-log entry identifier.","schema":{"type":"string","minLength":1,"description":"Audit-log entry identifier."}},{"name":"organizationId","in":"query","required":false,"description":"Organization whose audit-log entry should be returned. Defaults to the caller's own organization when omitted. A caller that belongs to no organization, or that names one it is not a member of, is refused with a 403.","schema":{"description":"Organization whose audit-log entry should be returned. Defaults to the caller's own organization when omitted. A caller that belongs to no organization, or that names one it is not a member of, is refused with a 403.","type":"string","minLength":1}}],"responses":{"200":{"description":"The requested audit-log entry.","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/FilesAudit_X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/FilesAudit_X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/FilesAudit_X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FilesAudit_V2AuditLogResponse"}}}},"400":{"$ref":"#/components/responses/FilesAudit_BadRequest"},"401":{"$ref":"#/components/responses/FilesAudit_Unauthorized"},"403":{"$ref":"#/components/responses/FilesAudit_Forbidden"},"404":{"$ref":"#/components/responses/FilesAudit_NotFound"},"429":{"$ref":"#/components/responses/FilesAudit_RateLimited"},"500":{"$ref":"#/components/responses/FilesAudit_InternalError"},"503":{"$ref":"#/components/responses/FilesAudit_ServiceUnavailable"}}}},"/api/v2/files/move":{"post":{"operationId":"moveFileItems","summary":"Move Files","description":"Move up to 1,000 files to a folder path or the workspace root.\n\nOAuth scope: `api:write`.","x-sim-operation":"files.move","x-oauth-scope":"api:write","tags":["Files"],"requestBody":{"required":true,"description":"Files and destination selected for a bulk move.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FilesAudit_MoveFileItemsRequest"}}}},"responses":{"200":{"description":"Count of moved files.","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/FilesAudit_X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/FilesAudit_X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/FilesAudit_X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FilesAudit_V2MoveFileItemsResponse"}}}},"400":{"$ref":"#/components/responses/FilesAudit_BadRequest"},"401":{"$ref":"#/components/responses/FilesAudit_Unauthorized"},"403":{"$ref":"#/components/responses/FilesAudit_Forbidden"},"404":{"$ref":"#/components/responses/FilesAudit_NotFound"},"409":{"$ref":"#/components/responses/FilesAudit_Conflict"},"413":{"$ref":"#/components/responses/FilesAudit_PayloadTooLarge"},"415":{"$ref":"#/components/responses/FilesAudit_UnsupportedMediaType"},"429":{"$ref":"#/components/responses/FilesAudit_RateLimited"},"500":{"$ref":"#/components/responses/FilesAudit_InternalError"},"503":{"$ref":"#/components/responses/FilesAudit_ServiceUnavailable"}}}},"/api/v2/files/{fileId}/share":{"get":{"operationId":"getFileShare","summary":"Get File Share","description":"Get a file's public-share configuration. An unshared file returns `data: null`; a disabled share returns its configuration with `isActive: false`.\n\nOAuth scope: `api:read`.","x-sim-operation":"files.share.read","x-oauth-scope":"api:read","tags":["Files"],"parameters":[{"name":"fileId","in":"path","required":true,"description":"File identifier.","schema":{"type":"string","minLength":1,"maxLength":128,"pattern":"^[A-Za-z0-9_-]+$","description":"File identifier."}},{"name":"workspaceId","in":"query","required":true,"description":"Workspace that owns the file.","schema":{"type":"string","minLength":1,"maxLength":128,"description":"Workspace that owns the file."}}],"responses":{"200":{"description":"Current nullable file-share state.","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/FilesAudit_X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/FilesAudit_X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/FilesAudit_X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FilesAudit_V2GetFileShareResponse"}}}},"400":{"$ref":"#/components/responses/FilesAudit_BadRequest"},"401":{"$ref":"#/components/responses/FilesAudit_Unauthorized"},"403":{"$ref":"#/components/responses/FilesAudit_Forbidden"},"404":{"$ref":"#/components/responses/FilesAudit_NotFound"},"429":{"$ref":"#/components/responses/FilesAudit_RateLimited"},"500":{"$ref":"#/components/responses/FilesAudit_InternalError"},"503":{"$ref":"#/components/responses/FilesAudit_ServiceUnavailable"}}},"patch":{"operationId":"upsertFileShare","summary":"Enable or Disable File Share","description":"Create or update a file's public share. `isActive` is required; other fields describe their behavior when access modes change. Enabling a protected mode on a previously unshared file requires its credential in the same request. Workspace API keys return `403`; use a personal API key or scoped OAuth token.\n\nOAuth scope: `api:write`.","x-sim-operation":"files.share.update","x-oauth-scope":"api:write","tags":["Files"],"parameters":[{"name":"fileId","in":"path","required":true,"description":"File identifier.","schema":{"type":"string","minLength":1,"maxLength":128,"pattern":"^[A-Za-z0-9_-]+$","description":"File identifier."}}],"requestBody":{"required":true,"description":"Desired public-share state and access policy.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FilesAudit_UpsertFileShareRequest"}}}},"responses":{"200":{"description":"The updated file share.","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/FilesAudit_X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/FilesAudit_X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/FilesAudit_X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FilesAudit_V2UpsertFileShareResponse"}}}},"400":{"$ref":"#/components/responses/FilesAudit_BadRequest"},"401":{"$ref":"#/components/responses/FilesAudit_Unauthorized"},"403":{"$ref":"#/components/responses/FilesAudit_Forbidden"},"404":{"$ref":"#/components/responses/FilesAudit_NotFound"},"413":{"$ref":"#/components/responses/FilesAudit_PayloadTooLarge"},"415":{"$ref":"#/components/responses/FilesAudit_UnsupportedMediaType"},"429":{"$ref":"#/components/responses/FilesAudit_RateLimited"},"500":{"$ref":"#/components/responses/FilesAudit_InternalError"},"503":{"$ref":"#/components/responses/FilesAudit_ServiceUnavailable"}}}},"/api/v2/files/{fileId}/content":{"patch":{"operationId":"editFileContent","summary":"Edit File Content","description":"Edit part of a UTF-8 file; use Replace File Content to replace it entirely. Search-and-replace requires one exact match unless `replaceAll` is true. Anchored modes match trimmed complete lines; their input descriptions specify boundary handling. Non-UTF-8 files return `400`. Concurrent writes return `409`; re-read before retrying.\n\nOAuth scope: `api:write`.","x-sim-operation":"files.update_content","x-oauth-scope":"api:write","tags":["Files"],"parameters":[{"name":"fileId","in":"path","required":true,"description":"File identifier.","schema":{"type":"string","minLength":1,"maxLength":128,"pattern":"^[A-Za-z0-9_-]+$","description":"File identifier."}}],"requestBody":{"required":true,"description":"Workspace scope and the change to apply.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FilesAudit_EditFileContentRequest"}}}},"responses":{"200":{"description":"The edited file and its new line count.","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/FilesAudit_X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/FilesAudit_X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/FilesAudit_X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FilesAudit_V2EditedFileResponse"}}}},"400":{"$ref":"#/components/responses/FilesAudit_BadRequest"},"401":{"$ref":"#/components/responses/FilesAudit_Unauthorized"},"403":{"$ref":"#/components/responses/FilesAudit_Forbidden"},"404":{"$ref":"#/components/responses/FilesAudit_NotFound"},"409":{"$ref":"#/components/responses/FilesAudit_Conflict"},"413":{"$ref":"#/components/responses/FilesAudit_PayloadTooLarge"},"415":{"$ref":"#/components/responses/FilesAudit_UnsupportedMediaType"},"423":{"$ref":"#/components/responses/FilesAudit_Locked"},"429":{"$ref":"#/components/responses/FilesAudit_RateLimited"},"500":{"$ref":"#/components/responses/FilesAudit_InternalError"},"503":{"$ref":"#/components/responses/FilesAudit_ServiceUnavailable"}}},"put":{"operationId":"updateFileContent","summary":"Replace File Content","description":"Replace the complete contents of an existing file from UTF-8 or base64 input.\n\nOAuth scope: `api:write`.","x-sim-operation":"files.update_content","x-oauth-scope":"api:write","tags":["Files"],"parameters":[{"name":"fileId","in":"path","required":true,"description":"File identifier.","schema":{"type":"string","minLength":1,"maxLength":128,"pattern":"^[A-Za-z0-9_-]+$","description":"File identifier."}}],"requestBody":{"required":true,"description":"Workspace scope and complete replacement content.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FilesAudit_UpdateFileContentRequest"}}}},"responses":{"200":{"description":"The updated file.","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/FilesAudit_X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/FilesAudit_X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/FilesAudit_X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FilesAudit_V2FileResponse"}}}},"400":{"$ref":"#/components/responses/FilesAudit_BadRequest"},"401":{"$ref":"#/components/responses/FilesAudit_Unauthorized"},"403":{"$ref":"#/components/responses/FilesAudit_Forbidden"},"404":{"$ref":"#/components/responses/FilesAudit_NotFound"},"413":{"$ref":"#/components/responses/FilesAudit_PayloadTooLarge"},"415":{"$ref":"#/components/responses/FilesAudit_UnsupportedMediaType"},"429":{"$ref":"#/components/responses/FilesAudit_RateLimited"},"500":{"$ref":"#/components/responses/FilesAudit_InternalError"},"503":{"$ref":"#/components/responses/FilesAudit_ServiceUnavailable"}}}},"/api/v2/files/search":{"get":{"operationId":"searchFileContent","summary":"Search File Content","description":"Search indexed text in active workspace files and return matching lines with file IDs and line numbers. `folderPaths` limits both results and reported coverage. Missing matches are inconclusive if `complete` is false or `indexStatus.skippedFiles` or `indexStatus.partialFiles` is nonzero. `truncated` means additional matches exist beyond `maxResults`.\n\nOAuth scope: `api:read`.","x-sim-operation":"files.search_content","x-oauth-scope":"api:read","tags":["Files"],"parameters":[{"name":"workspaceId","in":"query","required":true,"description":"Workspace to search.","schema":{"type":"string","minLength":1,"maxLength":128,"description":"Workspace to search."}},{"name":"query","in":"query","required":true,"description":"Regular expression, or exact text when `mode` is `exact`.","schema":{"type":"string","description":"Regular expression, or exact text when `mode` is `exact`.","minLength":3,"maxLength":512}},{"name":"mode","in":"query","required":false,"description":"How `query` is read.","schema":{"default":"regex","description":"How `query` is read.","type":"string","enum":["exact","regex"]}},{"name":"maxResults","in":"query","required":false,"description":"Maximum matching lines to return.","schema":{"default":50,"description":"Maximum matching lines to return.","type":"integer","minimum":1,"maximum":200}},{"name":"folderPaths","in":"query","required":false,"description":"Folders the search is confined to, comma-separated. Absent searches the whole workspace. The scope also narrows `indexStatus`, so `complete` describes the folders searched rather than the workspace.","schema":{"description":"Folders the search is confined to, comma-separated. Absent searches the whole workspace. The scope also narrows `indexStatus`, so `complete` describes the folders searched rather than the workspace.","type":"string"}},{"name":"includeSubfolders","in":"query","required":false,"description":"Whether the scope descends into nested folders. Absent means yes. The listed spellings are the whole accepted vocabulary and are case-sensitive; any other value is rejected.","schema":{"description":"Whether the scope descends into nested folders. Absent means yes. The listed spellings are the whole accepted vocabulary and are case-sensitive; any other value is rejected.","enum":["true","1","yes","on","y","enabled","false","0","no","off","n","disabled"],"type":"string"}}],"responses":{"200":{"description":"Matching lines and the index coverage they were drawn from.","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/FilesAudit_X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/FilesAudit_X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/FilesAudit_X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FilesAudit_V2FileSearchResultsResponse"}}}},"400":{"$ref":"#/components/responses/FilesAudit_BadRequest"},"401":{"$ref":"#/components/responses/FilesAudit_Unauthorized"},"403":{"$ref":"#/components/responses/FilesAudit_Forbidden"},"404":{"$ref":"#/components/responses/FilesAudit_NotFound"},"423":{"$ref":"#/components/responses/FilesAudit_Locked"},"429":{"$ref":"#/components/responses/FilesAudit_RateLimited"},"500":{"$ref":"#/components/responses/FilesAudit_InternalError"},"503":{"$ref":"#/components/responses/FilesAudit_ServiceUnavailable"}}}},"/api/v2/files/bulk-delete":{"post":{"operationId":"bulkDeleteFiles","summary":"Delete Files","description":"Archive up to 1,000 workspace files while retaining their stored bytes. Use Restore File to recover each file.\n\nOAuth scope: `api:write`.","x-sim-operation":"files.delete","x-oauth-scope":"api:write","tags":["Files"],"requestBody":{"required":true,"description":"Workspace and files selected for deletion.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FilesAudit_BulkDeleteFilesRequest"}}}},"responses":{"200":{"description":"Count of deleted files.","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/FilesAudit_X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/FilesAudit_X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/FilesAudit_X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FilesAudit_BulkDeleteFilesResponse"}}}},"400":{"$ref":"#/components/responses/FilesAudit_BadRequest"},"401":{"$ref":"#/components/responses/FilesAudit_Unauthorized"},"403":{"$ref":"#/components/responses/FilesAudit_Forbidden"},"404":{"$ref":"#/components/responses/FilesAudit_NotFound"},"413":{"$ref":"#/components/responses/FilesAudit_PayloadTooLarge"},"415":{"$ref":"#/components/responses/FilesAudit_UnsupportedMediaType"},"429":{"$ref":"#/components/responses/FilesAudit_RateLimited"},"500":{"$ref":"#/components/responses/FilesAudit_InternalError"},"503":{"$ref":"#/components/responses/FilesAudit_ServiceUnavailable"}}}},"/api/v2/files/folders":{"get":{"operationId":"listFilesFolders","summary":"List Folders","description":"List workspace file folders with parent-path filtering and sorting. Use `scope=archived` to find paths accepted by Restore Folder. Returns the complete set in one page; `nextCursor` is always null.\n\nOAuth scope: `api:read`.","x-sim-operation":"files.folders.list","x-oauth-scope":"api:read","tags":["Files"],"parameters":[{"name":"workspaceId","in":"query","required":true,"description":"Workspace whose folders should be listed.","schema":{"type":"string","minLength":1,"maxLength":128,"description":"Workspace whose folders should be listed."}},{"name":"parentPath","in":"query","required":false,"description":"Restrict results to direct children of this parent path. Unknown folder paths contribute no matches.","schema":{"description":"Restrict results to direct children of this parent path. Unknown folder paths contribute no matches.","$ref":"#/components/schemas/FilesAudit_FolderPathInput"}},{"name":"search","in":"query","required":false,"description":"Case-insensitive substring match against the folder name.","schema":{"description":"Case-insensitive substring match against the folder name.","type":"string","minLength":1,"maxLength":200}},{"name":"sortBy","in":"query","required":false,"description":"Field used to sort the result. Sorting by `name` is case-sensitive and follows the storage collation, so do not rely on a case-insensitive order.","schema":{"default":"name","description":"Field used to sort the result. Sorting by `name` is case-sensitive and follows the storage collation, so do not rely on a case-insensitive order.","type":"string","enum":["name","createdAt","updatedAt"]}},{"name":"sortOrder","in":"query","required":false,"description":"Sort direction.","schema":{"default":"asc","description":"Sort direction.","type":"string","enum":["asc","desc"]}},{"name":"scope","in":"query","required":false,"description":"Which lifecycle set to list: `active` (default) returns live folders only; `archived` returns folders a recursive delete soft-deleted, which is how a caller finds a path to hand to the folder restore. Authorization is identical for both.","schema":{"default":"active","description":"Which lifecycle set to list: `active` (default) returns live folders only; `archived` returns folders a recursive delete soft-deleted, which is how a caller finds a path to hand to the folder restore. Authorization is identical for both.","type":"string","enum":["active","archived"]}},{"name":"recursive","in":"query","required":false,"description":"Whether parentPath includes every descendant instead of direct children only.","schema":{"description":"Whether parentPath includes every descendant instead of direct children only.","enum":["true","1","yes","on","y","enabled","false","0","no","off","n","disabled"],"type":"string"}},{"name":"depth","in":"query","required":false,"description":"Deepest level below parentPath to include when recursive is true.","schema":{"description":"Deepest level below parentPath to include when recursive is true.","type":"integer","minimum":1,"maximum":64}}],"responses":{"200":{"description":"Workspace file folders.","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/FilesAudit_X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/FilesAudit_X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/FilesAudit_X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FilesAudit_FileFolderListResponse"}}}},"400":{"$ref":"#/components/responses/FilesAudit_BadRequest"},"401":{"$ref":"#/components/responses/FilesAudit_Unauthorized"},"403":{"$ref":"#/components/responses/FilesAudit_Forbidden"},"404":{"$ref":"#/components/responses/FilesAudit_NotFound"},"429":{"$ref":"#/components/responses/FilesAudit_RateLimited"},"500":{"$ref":"#/components/responses/FilesAudit_InternalError"},"503":{"$ref":"#/components/responses/FilesAudit_ServiceUnavailable"}}},"post":{"operationId":"createFilesFolder","summary":"Create Folder","description":"Create a folder at the supplied workspace path.\n\nOAuth scope: `api:write`.","x-sim-operation":"files.folders.create","x-oauth-scope":"api:write","tags":["Files"],"requestBody":{"required":true,"description":"Workspace and canonical path for a new folder.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FilesAudit_CreateFileFolderRequest"}}}},"responses":{"201":{"description":"The created folder.","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/FilesAudit_X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/FilesAudit_X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/FilesAudit_X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FilesAudit_FileFolderResponse"}}}},"400":{"$ref":"#/components/responses/FilesAudit_BadRequest"},"401":{"$ref":"#/components/responses/FilesAudit_Unauthorized"},"403":{"$ref":"#/components/responses/FilesAudit_Forbidden"},"404":{"$ref":"#/components/responses/FilesAudit_NotFound"},"409":{"$ref":"#/components/responses/FilesAudit_Conflict"},"413":{"$ref":"#/components/responses/FilesAudit_PayloadTooLarge"},"415":{"$ref":"#/components/responses/FilesAudit_UnsupportedMediaType"},"429":{"$ref":"#/components/responses/FilesAudit_RateLimited"},"500":{"$ref":"#/components/responses/FilesAudit_InternalError"},"503":{"$ref":"#/components/responses/FilesAudit_ServiceUnavailable"}}},"patch":{"operationId":"relocateFilesFolder","summary":"Rename or Move Folder","description":"Rename or move a folder and atomically update all descendant paths.\n\nOAuth scope: `api:write`.","x-sim-operation":"files.folders.update","x-oauth-scope":"api:write","tags":["Files"],"requestBody":{"required":true,"description":"Current and destination canonical paths for a folder.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FilesAudit_RelocateFileFolderRequest"}}}},"responses":{"200":{"description":"The relocated folder.","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/FilesAudit_X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/FilesAudit_X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/FilesAudit_X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FilesAudit_FileFolderResponse"}}}},"400":{"$ref":"#/components/responses/FilesAudit_BadRequest"},"401":{"$ref":"#/components/responses/FilesAudit_Unauthorized"},"403":{"$ref":"#/components/responses/FilesAudit_Forbidden"},"404":{"$ref":"#/components/responses/FilesAudit_NotFound"},"409":{"$ref":"#/components/responses/FilesAudit_Conflict"},"413":{"$ref":"#/components/responses/FilesAudit_PayloadTooLarge"},"415":{"$ref":"#/components/responses/FilesAudit_UnsupportedMediaType"},"429":{"$ref":"#/components/responses/FilesAudit_RateLimited"},"500":{"$ref":"#/components/responses/FilesAudit_InternalError"},"503":{"$ref":"#/components/responses/FilesAudit_ServiceUnavailable"}}},"delete":{"operationId":"deleteFilesFolder","summary":"Delete Folder","description":"Archive an empty folder, or set `recursive=true` to archive its files and subfolders. Use Restore Folder to recover the archived contents.\n\nOAuth scope: `api:write`.","x-sim-operation":"files.folders.delete","x-oauth-scope":"api:write","tags":["Files"],"parameters":[{"name":"workspaceId","in":"query","required":true,"description":"Workspace containing the folder.","schema":{"type":"string","minLength":1,"maxLength":128,"description":"Workspace containing the folder."}},{"name":"path","in":"query","required":true,"description":"Path of the folder to delete.","schema":{"description":"Path of the folder to delete.","$ref":"#/components/schemas/FilesAudit_NonRootFolderPathInput"}},{"name":"recursive","in":"query","required":false,"description":"Delete the folder's nested files and folders too. An empty folder deletes either way; a non-empty one needs this. The listed spellings are the whole accepted vocabulary and are case-sensitive; any other value is rejected.","schema":{"description":"Delete the folder's nested files and folders too. An empty folder deletes either way; a non-empty one needs this. The listed spellings are the whole accepted vocabulary and are case-sensitive; any other value is rejected.","enum":["true","1","yes","on","y","enabled","false","0","no","off","n","disabled"],"default":"false","type":"string"}}],"responses":{"200":{"description":"Folder deletion confirmation and deleted item counts.","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/FilesAudit_X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/FilesAudit_X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/FilesAudit_X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FilesAudit_DeleteFileFolderResponse"}}}},"400":{"$ref":"#/components/responses/FilesAudit_BadRequest"},"401":{"$ref":"#/components/responses/FilesAudit_Unauthorized"},"403":{"$ref":"#/components/responses/FilesAudit_Forbidden"},"404":{"$ref":"#/components/responses/FilesAudit_NotFound"},"409":{"$ref":"#/components/responses/FilesAudit_Conflict"},"429":{"$ref":"#/components/responses/FilesAudit_RateLimited"},"500":{"$ref":"#/components/responses/FilesAudit_InternalError"},"503":{"$ref":"#/components/responses/FilesAudit_ServiceUnavailable"}}}},"/api/v2/files/folders/restore":{"post":{"operationId":"restoreFilesFolder","summary":"Restore Folder","description":"Restore a folder and the files and subfolders archived with it. Use the path from List Folders with `scope=archived`. A path that is not archived returns `404`.\n\nOAuth scope: `api:write`.","x-sim-operation":"files.folders.restore","x-oauth-scope":"api:write","tags":["Files"],"requestBody":{"required":true,"description":"Workspace scope and archived folder path.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FilesAudit_RestoreFileFolderRequest"}}}},"responses":{"200":{"description":"The restored folder and what it brought back.","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/FilesAudit_X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/FilesAudit_X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/FilesAudit_X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FilesAudit_FileFolderRestoreResponse"}}}},"400":{"$ref":"#/components/responses/FilesAudit_BadRequest"},"401":{"$ref":"#/components/responses/FilesAudit_Unauthorized"},"403":{"$ref":"#/components/responses/FilesAudit_Forbidden"},"404":{"$ref":"#/components/responses/FilesAudit_NotFound"},"409":{"$ref":"#/components/responses/FilesAudit_Conflict"},"413":{"$ref":"#/components/responses/FilesAudit_PayloadTooLarge"},"415":{"$ref":"#/components/responses/FilesAudit_UnsupportedMediaType"},"429":{"$ref":"#/components/responses/FilesAudit_RateLimited"},"500":{"$ref":"#/components/responses/FilesAudit_InternalError"},"503":{"$ref":"#/components/responses/FilesAudit_ServiceUnavailable"}}}},"/api/v2/tables":{"get":{"operationId":"listTables","summary":"List Tables","description":"List active tables with folder filtering, search, sorting, and cursor pagination. Use `scope=archived` to find tables available for restoration. Workspace folder trees exceeding 10,000 folders return `413`.\n\nOAuth scope: `api:read`.","x-sim-operation":"tables.list","x-oauth-scope":"api:read","tags":["Tables"],"parameters":[{"name":"workspaceId","in":"query","required":true,"description":"Workspace whose tables should be listed.","schema":{"type":"string","minLength":1,"maxLength":128,"description":"Workspace whose tables should be listed."}},{"name":"scope","in":"query","required":false,"description":"Which lifecycle set to list: `active` (default) for live tables, `archived` for tables a delete archived and a table restore can bring back. `folderPath` resolves against active folders only, so pairing it with `scope=archived` returns an empty page when the containing folder was archived too.","schema":{"default":"active","description":"Which lifecycle set to list: `active` (default) for live tables, `archived` for tables a delete archived and a table restore can bring back. `folderPath` resolves against active folders only, so pairing it with `scope=archived` returns an empty page when the containing folder was archived too.","type":"string","enum":["active","archived"]}},{"name":"folderPath","in":"query","required":false,"description":"Restrict results to tables in this folder. Unknown folder paths contribute no matches.","schema":{"description":"Restrict results to tables in this folder. Unknown folder paths contribute no matches.","$ref":"#/components/schemas/Tables_FolderPathInput"}},{"name":"search","in":"query","required":false,"description":"Case-insensitive substring match against the resource name.","schema":{"description":"Case-insensitive substring match against the resource name.","type":"string","minLength":1,"maxLength":200}},{"name":"sortBy","in":"query","required":false,"description":"Field used to sort the result. Sorting by `name` is case-sensitive and follows the storage collation, so do not rely on a case-insensitive order.","schema":{"default":"createdAt","description":"Field used to sort the result. Sorting by `name` is case-sensitive and follows the storage collation, so do not rely on a case-insensitive order.","type":"string","enum":["name","createdAt","updatedAt"]}},{"name":"sortOrder","in":"query","required":false,"description":"Sort direction.","schema":{"default":"asc","description":"Sort direction.","type":"string","enum":["asc","desc"]}},{"name":"limit","in":"query","required":false,"description":"Maximum tables to return per page. Values outside 1–1000 are truncated and clamped into that range rather than rejected. Defaults to 100.","schema":{"description":"Maximum tables to return per page. Values outside 1–1000 are truncated and clamped into that range rather than rejected. Defaults to 100.","type":"integer","default":100}},{"name":"cursor","in":"query","required":false,"description":"Opaque cursor from the previous page. Send it back with the same sort and filters; only `limit` may change. Change anything else and pagination must restart without a cursor.","schema":{"description":"Opaque cursor from the previous page. Send it back with the same sort and filters; only `limit` may change. Change anything else and pagination must restart without a cursor.","type":"string","minLength":1}}],"responses":{"200":{"description":"A page of tables in the workspace.","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/Tables_X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/Tables_X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/Tables_X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Tables_V2TableListResponse"}}}},"400":{"$ref":"#/components/responses/Tables_BadRequest"},"401":{"$ref":"#/components/responses/Tables_Unauthorized"},"403":{"$ref":"#/components/responses/Tables_Forbidden"},"404":{"$ref":"#/components/responses/Tables_NotFound"},"413":{"$ref":"#/components/responses/Tables_PayloadTooLarge"},"429":{"$ref":"#/components/responses/Tables_RateLimited"},"500":{"$ref":"#/components/responses/Tables_InternalError"},"503":{"$ref":"#/components/responses/Tables_ServiceUnavailable"}}},"post":{"operationId":"createTable","summary":"Create Table","description":"Create a table with a typed column schema and optional folder placement.\n\nOAuth scope: `api:write`.","x-sim-operation":"tables.create","x-oauth-scope":"api:write","tags":["Tables"],"requestBody":{"required":true,"description":"Workspace, table metadata, folder placement, and typed columns.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Tables_CreateTableRequest"}}}},"responses":{"201":{"description":"The created table.","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/Tables_X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/Tables_X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/Tables_X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Tables_V2CreateTableResponse"}}}},"400":{"$ref":"#/components/responses/Tables_BadRequest"},"401":{"$ref":"#/components/responses/Tables_Unauthorized"},"403":{"$ref":"#/components/responses/Tables_Forbidden"},"404":{"$ref":"#/components/responses/Tables_NotFound"},"409":{"$ref":"#/components/responses/Tables_Conflict"},"413":{"$ref":"#/components/responses/Tables_PayloadTooLarge"},"415":{"$ref":"#/components/responses/Tables_UnsupportedMediaType"},"429":{"$ref":"#/components/responses/Tables_RateLimited"},"500":{"$ref":"#/components/responses/Tables_InternalError"},"503":{"$ref":"#/components/responses/Tables_ServiceUnavailable"}}}},"/api/v2/tables/{tableId}":{"get":{"operationId":"getTable","summary":"Get Table","description":"Get a table with its metadata, column schema, locks, and current job. Workspace folder trees exceeding 10,000 folders return `413`.\n\nOAuth scope: `api:read`.","x-sim-operation":"tables.read","x-oauth-scope":"api:read","tags":["Tables"],"parameters":[{"name":"tableId","in":"path","required":true,"description":"Unique table identifier.","schema":{"type":"string","minLength":1,"description":"Unique table identifier."}},{"name":"workspaceId","in":"query","required":true,"description":"Workspace that owns the table.","schema":{"type":"string","minLength":1,"description":"Workspace that owns the table."}}],"responses":{"200":{"description":"The requested table.","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/Tables_X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/Tables_X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/Tables_X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Tables_V2TableResponse"}}}},"400":{"$ref":"#/components/responses/Tables_BadRequest"},"401":{"$ref":"#/components/responses/Tables_Unauthorized"},"403":{"$ref":"#/components/responses/Tables_Forbidden"},"404":{"$ref":"#/components/responses/Tables_NotFound"},"413":{"$ref":"#/components/responses/Tables_PayloadTooLarge"},"429":{"$ref":"#/components/responses/Tables_RateLimited"},"500":{"$ref":"#/components/responses/Tables_InternalError"},"503":{"$ref":"#/components/responses/Tables_ServiceUnavailable"}}},"delete":{"operationId":"deleteTable","summary":"Delete Table","description":"Archive a table while retaining its rows. Use List Tables with `scope=archived` to find it and Restore Table to recover it.\n\nOAuth scope: `api:write`.","x-sim-operation":"tables.delete","x-oauth-scope":"api:write","tags":["Tables"],"parameters":[{"name":"tableId","in":"path","required":true,"description":"Unique table identifier.","schema":{"type":"string","minLength":1,"description":"Unique table identifier."}},{"name":"workspaceId","in":"query","required":true,"description":"Workspace that owns the table.","schema":{"type":"string","minLength":1,"description":"Workspace that owns the table."}}],"responses":{"200":{"description":"Table deletion acknowledgement.","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/Tables_X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/Tables_X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/Tables_X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Tables_V2DeleteTableResponse"}}}},"400":{"$ref":"#/components/responses/Tables_BadRequest"},"401":{"$ref":"#/components/responses/Tables_Unauthorized"},"403":{"$ref":"#/components/responses/Tables_Forbidden"},"404":{"$ref":"#/components/responses/Tables_NotFound"},"423":{"$ref":"#/components/responses/Tables_Locked"},"429":{"$ref":"#/components/responses/Tables_RateLimited"},"500":{"$ref":"#/components/responses/Tables_InternalError"},"503":{"$ref":"#/components/responses/Tables_ServiceUnavailable"}}},"patch":{"operationId":"updateTable","summary":"Update Table","description":"Rename a table, edit its description, or move it to a folder. Fields are saved independently: a failed request may leave partial changes. `error.details.applied` lists saved fields; retry only the remaining fields. If absent, nothing changed. Lock flags are read-only. Workspace folder trees exceeding 10,000 folders return `413`.\n\nOAuth scope: `api:write`.","x-sim-operation":"tables.update","x-oauth-scope":"api:write","tags":["Tables"],"parameters":[{"name":"tableId","in":"path","required":true,"description":"Unique table identifier.","schema":{"type":"string","minLength":1,"description":"Unique table identifier."}}],"requestBody":{"required":true,"description":"Workspace scope and one or more table metadata or placement changes.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Tables_UpdateTableRequest"}}}},"responses":{"200":{"description":"The updated table.","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/Tables_X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/Tables_X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/Tables_X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Tables_V2UpdateTableResponse"}}}},"400":{"$ref":"#/components/responses/Tables_BadRequest"},"401":{"$ref":"#/components/responses/Tables_Unauthorized"},"403":{"$ref":"#/components/responses/Tables_Forbidden"},"404":{"$ref":"#/components/responses/Tables_NotFound"},"409":{"$ref":"#/components/responses/Tables_Conflict"},"413":{"$ref":"#/components/responses/Tables_PayloadTooLarge"},"415":{"$ref":"#/components/responses/Tables_UnsupportedMediaType"},"429":{"$ref":"#/components/responses/Tables_RateLimited"},"500":{"$ref":"#/components/responses/Tables_InternalError"},"503":{"$ref":"#/components/responses/Tables_ServiceUnavailable"}}}},"/api/v2/tables/{tableId}/columns":{"post":{"operationId":"addTableColumn","summary":"Add Column","description":"Add a typed column and return the complete resulting table schema.\n\nOAuth scope: `api:write`.","x-sim-operation":"tables.columns.add","x-oauth-scope":"api:write","tags":["Tables"],"parameters":[{"name":"tableId","in":"path","required":true,"description":"Unique table identifier.","schema":{"type":"string","minLength":1,"description":"Unique table identifier."}}],"requestBody":{"required":true,"description":"Workspace scope and the typed column to add.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Tables_AddTableColumnRequest"}}}},"responses":{"201":{"description":"The updated table columns.","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/Tables_X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/Tables_X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/Tables_X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Tables_V2TableColumnsResponse"}}}},"400":{"$ref":"#/components/responses/Tables_BadRequest"},"401":{"$ref":"#/components/responses/Tables_Unauthorized"},"403":{"$ref":"#/components/responses/Tables_Forbidden"},"404":{"$ref":"#/components/responses/Tables_NotFound"},"413":{"$ref":"#/components/responses/Tables_PayloadTooLarge"},"415":{"$ref":"#/components/responses/Tables_UnsupportedMediaType"},"423":{"$ref":"#/components/responses/Tables_Locked"},"429":{"$ref":"#/components/responses/Tables_RateLimited"},"500":{"$ref":"#/components/responses/Tables_InternalError"},"503":{"$ref":"#/components/responses/Tables_ServiceUnavailable"}}},"patch":{"operationId":"updateTableColumn","summary":"Update Column","description":"Update a column by name and return the complete resulting table schema.\n\nOAuth scope: `api:write`.","x-sim-operation":"tables.columns.update","x-oauth-scope":"api:write","tags":["Tables"],"parameters":[{"name":"tableId","in":"path","required":true,"description":"Unique table identifier.","schema":{"type":"string","minLength":1,"description":"Unique table identifier."}}],"requestBody":{"required":true,"description":"Workspace scope, current column name, and fields to update.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Tables_UpdateTableColumnRequest"}}}},"responses":{"200":{"description":"The updated table columns.","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/Tables_X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/Tables_X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/Tables_X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Tables_V2TableColumnsResponse"}}}},"400":{"$ref":"#/components/responses/Tables_BadRequest"},"401":{"$ref":"#/components/responses/Tables_Unauthorized"},"403":{"$ref":"#/components/responses/Tables_Forbidden"},"404":{"$ref":"#/components/responses/Tables_NotFound"},"413":{"$ref":"#/components/responses/Tables_PayloadTooLarge"},"415":{"$ref":"#/components/responses/Tables_UnsupportedMediaType"},"423":{"$ref":"#/components/responses/Tables_Locked"},"429":{"$ref":"#/components/responses/Tables_RateLimited"},"500":{"$ref":"#/components/responses/Tables_InternalError"},"503":{"$ref":"#/components/responses/Tables_ServiceUnavailable"}}},"delete":{"operationId":"deleteTableColumn","summary":"Delete Column","description":"Delete a column by name while preserving at least one table column.\n\nOAuth scope: `api:write`.","x-sim-operation":"tables.columns.delete","x-oauth-scope":"api:write","tags":["Tables"],"parameters":[{"name":"tableId","in":"path","required":true,"description":"Unique table identifier.","schema":{"type":"string","minLength":1,"description":"Unique table identifier."}}],"requestBody":{"required":true,"description":"Workspace scope and column name to delete.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Tables_DeleteTableColumnRequest"}}}},"responses":{"200":{"description":"The surviving table columns.","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/Tables_X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/Tables_X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/Tables_X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Tables_V2TableColumnsResponse"}}}},"400":{"$ref":"#/components/responses/Tables_BadRequest"},"401":{"$ref":"#/components/responses/Tables_Unauthorized"},"403":{"$ref":"#/components/responses/Tables_Forbidden"},"404":{"$ref":"#/components/responses/Tables_NotFound"},"413":{"$ref":"#/components/responses/Tables_PayloadTooLarge"},"415":{"$ref":"#/components/responses/Tables_UnsupportedMediaType"},"423":{"$ref":"#/components/responses/Tables_Locked"},"429":{"$ref":"#/components/responses/Tables_RateLimited"},"500":{"$ref":"#/components/responses/Tables_InternalError"},"503":{"$ref":"#/components/responses/Tables_ServiceUnavailable"}}}},"/api/v2/tables/{tableId}/rows":{"get":{"operationId":"listTableRows","summary":"List Rows","description":"List rows in default order with cursor pagination. Pages default to a 5 MB limit and may contain fewer rows than requested; continue until `nextCursor` is null. Use Query Rows for filtering and sorting. `includeRunState=true` adds per-group run outcomes and reduces the row limit.\n\nOAuth scope: `api:read`.","x-sim-operation":"tables.rows.list","x-oauth-scope":"api:read","tags":["Tables"],"parameters":[{"name":"tableId","in":"path","required":true,"description":"Unique table identifier.","schema":{"type":"string","minLength":1,"description":"Unique table identifier."}},{"name":"workspaceId","in":"query","required":true,"description":"Workspace that owns the table.","schema":{"type":"string","minLength":1,"maxLength":128,"description":"Workspace that owns the table."}},{"name":"limit","in":"query","required":false,"description":"Maximum rows to return per page. Must be a whole number from 1 to 1000. Defaults to 100.","schema":{"default":100,"description":"Maximum rows to return per page. Must be a whole number from 1 to 1000. Defaults to 100.","type":"integer","minimum":1,"maximum":1000}},{"name":"cursor","in":"query","required":false,"description":"Opaque cursor from the previous page. Send it back with the same sort and filters; only `limit` may change. Change anything else and pagination must restart without a cursor.","schema":{"description":"Opaque cursor from the previous page. Send it back with the same sort and filters; only `limit` may change. Change anything else and pagination must restart without a cursor.","type":"string","minLength":1}},{"name":"includeRunState","in":"query","required":false,"description":"Include per-workflow-group run state on every returned row. Off by default: run state is a separate sidecar read and its `blockErrors` are unbounded, so a full page carries it only when asked. Caps `limit` at 200.","schema":{"description":"Include per-workflow-group run state on every returned row. Off by default: run state is a separate sidecar read and its `blockErrors` are unbounded, so a full page carries it only when asked. Caps `limit` at 200.","type":"boolean"}}],"responses":{"200":{"description":"A page of table rows.","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/Tables_X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/Tables_X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/Tables_X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Tables_V2TableRowListResponse"}}}},"400":{"$ref":"#/components/responses/Tables_BadRequest"},"401":{"$ref":"#/components/responses/Tables_Unauthorized"},"403":{"$ref":"#/components/responses/Tables_Forbidden"},"404":{"$ref":"#/components/responses/Tables_NotFound"},"429":{"$ref":"#/components/responses/Tables_RateLimited"},"500":{"$ref":"#/components/responses/Tables_InternalError"},"503":{"$ref":"#/components/responses/Tables_ServiceUnavailable"}}},"post":{"operationId":"createTableRows","summary":"Create Rows","description":"Insert one row with a data object or insert a bounded batch with a rows array. Cell keys are column names.\n\nOAuth scope: `api:write`.","x-sim-operation":"tables.rows.create","x-oauth-scope":"api:write","tags":["Tables"],"parameters":[{"name":"tableId","in":"path","required":true,"description":"Unique table identifier.","schema":{"type":"string","minLength":1,"description":"Unique table identifier."}}],"requestBody":{"required":true,"description":"A single row or bounded row batch keyed by column name.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Tables_CreateTableRowsRequest"}}}},"responses":{"201":{"description":"The inserted row or rows.","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/Tables_X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/Tables_X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/Tables_X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Tables_V2CreateTableRowsResponse"}}}},"400":{"$ref":"#/components/responses/Tables_BadRequest"},"401":{"$ref":"#/components/responses/Tables_Unauthorized"},"403":{"$ref":"#/components/responses/Tables_Forbidden"},"404":{"$ref":"#/components/responses/Tables_NotFound"},"413":{"$ref":"#/components/responses/Tables_PayloadTooLarge"},"415":{"$ref":"#/components/responses/Tables_UnsupportedMediaType"},"423":{"$ref":"#/components/responses/Tables_Locked"},"429":{"$ref":"#/components/responses/Tables_RateLimited"},"500":{"$ref":"#/components/responses/Tables_InternalError"},"503":{"$ref":"#/components/responses/Tables_ServiceUnavailable"}}},"patch":{"operationId":"updateTableRows","summary":"Update Rows by Filter","description":"Apply the same partial data patch to every row matching a non-empty predicate.\n\nOAuth scope: `api:write`.","x-sim-operation":"tables.rows.update_many","x-oauth-scope":"api:write","tags":["Tables"],"parameters":[{"name":"tableId","in":"path","required":true,"description":"Unique table identifier.","schema":{"type":"string","minLength":1,"description":"Unique table identifier."}}],"requestBody":{"required":true,"description":"Workspace scope, typed predicate, and row-data patch.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Tables_UpdateTableRowsRequest"}}}},"responses":{"200":{"description":"The bulk update result.","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/Tables_X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/Tables_X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/Tables_X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Tables_V2UpdateTableRowsResponse"}}}},"400":{"$ref":"#/components/responses/Tables_BadRequest"},"401":{"$ref":"#/components/responses/Tables_Unauthorized"},"403":{"$ref":"#/components/responses/Tables_Forbidden"},"404":{"$ref":"#/components/responses/Tables_NotFound"},"413":{"$ref":"#/components/responses/Tables_PayloadTooLarge"},"415":{"$ref":"#/components/responses/Tables_UnsupportedMediaType"},"423":{"$ref":"#/components/responses/Tables_Locked"},"429":{"$ref":"#/components/responses/Tables_RateLimited"},"500":{"$ref":"#/components/responses/Tables_InternalError"},"503":{"$ref":"#/components/responses/Tables_ServiceUnavailable"}}},"delete":{"operationId":"deleteTableRows","summary":"Delete Rows","description":"Delete rows by a non-empty predicate or an explicit bounded list of row identifiers.\n\nOAuth scope: `api:write`.","x-sim-operation":"tables.rows.delete_many","x-oauth-scope":"api:write","tags":["Tables"],"parameters":[{"name":"tableId","in":"path","required":true,"description":"Unique table identifier.","schema":{"type":"string","minLength":1,"description":"Unique table identifier."}}],"requestBody":{"required":true,"description":"Workspace scope and exactly one of a predicate or row identifier list.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Tables_DeleteTableRowsRequest"}}}},"responses":{"200":{"description":"The bulk deletion result.","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/Tables_X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/Tables_X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/Tables_X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Tables_V2DeleteTableRowsResponse"}}}},"400":{"$ref":"#/components/responses/Tables_BadRequest"},"401":{"$ref":"#/components/responses/Tables_Unauthorized"},"403":{"$ref":"#/components/responses/Tables_Forbidden"},"404":{"$ref":"#/components/responses/Tables_NotFound"},"413":{"$ref":"#/components/responses/Tables_PayloadTooLarge"},"415":{"$ref":"#/components/responses/Tables_UnsupportedMediaType"},"423":{"$ref":"#/components/responses/Tables_Locked"},"429":{"$ref":"#/components/responses/Tables_RateLimited"},"500":{"$ref":"#/components/responses/Tables_InternalError"},"503":{"$ref":"#/components/responses/Tables_ServiceUnavailable"}}}},"/api/v2/tables/{tableId}/rows/{rowId}":{"get":{"operationId":"getTableRow","summary":"Get Row","description":"Get one row by identifier. Set `includeRunState=true` to attach the row's per-workflow-group run outcomes.\n\nOAuth scope: `api:read`.","x-sim-operation":"tables.rows.read","x-oauth-scope":"api:read","tags":["Tables"],"parameters":[{"name":"tableId","in":"path","required":true,"description":"Unique table identifier.","schema":{"type":"string","minLength":1,"description":"Unique table identifier."}},{"name":"rowId","in":"path","required":true,"description":"Unique table row identifier.","schema":{"type":"string","minLength":1,"description":"Unique table row identifier."}},{"name":"workspaceId","in":"query","required":true,"description":"Workspace that owns the table.","schema":{"type":"string","minLength":1,"description":"Workspace that owns the table."}},{"name":"includeRunState","in":"query","required":false,"description":"Include per-workflow-group run state on the returned row. Off by default.","schema":{"description":"Include per-workflow-group run state on the returned row. Off by default.","type":"boolean"}}],"responses":{"200":{"description":"The requested table row.","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/Tables_X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/Tables_X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/Tables_X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Tables_V2TableRowResponse"}}}},"400":{"$ref":"#/components/responses/Tables_BadRequest"},"401":{"$ref":"#/components/responses/Tables_Unauthorized"},"403":{"$ref":"#/components/responses/Tables_Forbidden"},"404":{"$ref":"#/components/responses/Tables_NotFound"},"429":{"$ref":"#/components/responses/Tables_RateLimited"},"500":{"$ref":"#/components/responses/Tables_InternalError"},"503":{"$ref":"#/components/responses/Tables_ServiceUnavailable"}}},"patch":{"operationId":"updateTableRow","summary":"Update Row","description":"Merge a partial data patch into one row by identifier.\n\nOAuth scope: `api:write`.","x-sim-operation":"tables.rows.update","x-oauth-scope":"api:write","tags":["Tables"],"parameters":[{"name":"tableId","in":"path","required":true,"description":"Unique table identifier.","schema":{"type":"string","minLength":1,"description":"Unique table identifier."}},{"name":"rowId","in":"path","required":true,"description":"Unique table row identifier.","schema":{"type":"string","minLength":1,"description":"Unique table row identifier."}}],"requestBody":{"required":true,"description":"Workspace scope and row-data patch keyed by column name.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Tables_UpdateTableRowRequest"}}}},"responses":{"200":{"description":"The updated table row.","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/Tables_X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/Tables_X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/Tables_X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Tables_V2TableRowResponse"}}}},"400":{"$ref":"#/components/responses/Tables_BadRequest"},"401":{"$ref":"#/components/responses/Tables_Unauthorized"},"403":{"$ref":"#/components/responses/Tables_Forbidden"},"404":{"$ref":"#/components/responses/Tables_NotFound"},"413":{"$ref":"#/components/responses/Tables_PayloadTooLarge"},"415":{"$ref":"#/components/responses/Tables_UnsupportedMediaType"},"423":{"$ref":"#/components/responses/Tables_Locked"},"429":{"$ref":"#/components/responses/Tables_RateLimited"},"500":{"$ref":"#/components/responses/Tables_InternalError"},"503":{"$ref":"#/components/responses/Tables_ServiceUnavailable"}}},"delete":{"operationId":"deleteTableRow","summary":"Delete Row","description":"Delete one row by identifier.\n\nOAuth scope: `api:write`.","x-sim-operation":"tables.rows.delete","x-oauth-scope":"api:write","tags":["Tables"],"parameters":[{"name":"tableId","in":"path","required":true,"description":"Unique table identifier.","schema":{"type":"string","minLength":1,"description":"Unique table identifier."}},{"name":"rowId","in":"path","required":true,"description":"Unique table row identifier.","schema":{"type":"string","minLength":1,"description":"Unique table row identifier."}},{"name":"workspaceId","in":"query","required":true,"description":"Workspace that owns the table.","schema":{"type":"string","minLength":1,"description":"Workspace that owns the table."}}],"responses":{"200":{"description":"The row deletion result.","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/Tables_X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/Tables_X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/Tables_X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Tables_V2DeleteTableRowResponse"}}}},"400":{"$ref":"#/components/responses/Tables_BadRequest"},"401":{"$ref":"#/components/responses/Tables_Unauthorized"},"403":{"$ref":"#/components/responses/Tables_Forbidden"},"404":{"$ref":"#/components/responses/Tables_NotFound"},"423":{"$ref":"#/components/responses/Tables_Locked"},"429":{"$ref":"#/components/responses/Tables_RateLimited"},"500":{"$ref":"#/components/responses/Tables_InternalError"},"503":{"$ref":"#/components/responses/Tables_ServiceUnavailable"}}}},"/api/v2/tables/{tableId}/rows/upsert":{"post":{"operationId":"upsertTableRow","summary":"Upsert Row","description":"Insert a row or replace the row matching a selected unique column. On replacement, omitted columns are cleared; send the complete row. Use Update Row for a partial patch.\n\nOAuth scope: `api:write`.","x-sim-operation":"tables.rows.upsert","x-oauth-scope":"api:write","tags":["Tables"],"parameters":[{"name":"tableId","in":"path","required":true,"description":"Unique table identifier.","schema":{"type":"string","minLength":1,"description":"Unique table identifier."}}],"requestBody":{"required":true,"description":"Workspace scope, row data, and optional unique-column conflict target.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Tables_UpsertTableRowRequest"}}}},"responses":{"200":{"description":"The upserted row and operation performed.","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/Tables_X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/Tables_X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/Tables_X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Tables_V2UpsertTableRowResponse"}}}},"400":{"$ref":"#/components/responses/Tables_BadRequest"},"401":{"$ref":"#/components/responses/Tables_Unauthorized"},"403":{"$ref":"#/components/responses/Tables_Forbidden"},"404":{"$ref":"#/components/responses/Tables_NotFound"},"413":{"$ref":"#/components/responses/Tables_PayloadTooLarge"},"415":{"$ref":"#/components/responses/Tables_UnsupportedMediaType"},"423":{"$ref":"#/components/responses/Tables_Locked"},"429":{"$ref":"#/components/responses/Tables_RateLimited"},"500":{"$ref":"#/components/responses/Tables_InternalError"},"503":{"$ref":"#/components/responses/Tables_ServiceUnavailable"}}}},"/api/v2/tables/{tableId}/query":{"post":{"operationId":"queryTableRows","summary":"Query Rows","description":"Query rows with typed predicates, sorting, and cursor pagination. Omit the predicate to match all rows. Pages default to a 5 MB limit; continue until `nextCursor` is null. Oversized predicates return `413`. `includeRunState` adds per-group outcomes and reduces the row limit. Counts are read separately and can differ from paged results if rows change.\n\nOAuth scope: `api:read`.","x-sim-operation":"tables.rows.query","x-oauth-scope":"api:read","tags":["Tables"],"parameters":[{"name":"tableId","in":"path","required":true,"description":"Unique table identifier.","schema":{"type":"string","minLength":1,"description":"Unique table identifier."}}],"requestBody":{"required":true,"description":"Workspace scope, optional predicate and sort, and cursor pagination controls. The predicate may be one condition or an `all`/`any` group; omitting it matches every row.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Tables_QueryTableRowsRequest"}}}},"responses":{"200":{"description":"A page of matching table rows.","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/Tables_X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/Tables_X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/Tables_X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Tables_V2QueryTableRowsResponse"}}}},"400":{"$ref":"#/components/responses/Tables_BadRequest"},"401":{"$ref":"#/components/responses/Tables_Unauthorized"},"403":{"$ref":"#/components/responses/Tables_Forbidden"},"404":{"$ref":"#/components/responses/Tables_NotFound"},"413":{"$ref":"#/components/responses/Tables_PayloadTooLarge"},"415":{"$ref":"#/components/responses/Tables_UnsupportedMediaType"},"429":{"$ref":"#/components/responses/Tables_RateLimited"},"500":{"$ref":"#/components/responses/Tables_InternalError"},"503":{"$ref":"#/components/responses/Tables_ServiceUnavailable"}}}},"/api/v2/tables/{tableId}/query/count":{"post":{"operationId":"countTableRows","summary":"Count Rows","description":"Count rows matching a typed predicate, or omit the predicate to count all rows. The count is read separately from row pages and can change between requests. Oversized predicates return `413`.\n\nOAuth scope: `api:read`.","x-sim-operation":"tables.rows.query","x-oauth-scope":"api:read","tags":["Tables"],"parameters":[{"name":"tableId","in":"path","required":true,"description":"Unique table identifier.","schema":{"type":"string","minLength":1,"description":"Unique table identifier."}}],"requestBody":{"required":true,"description":"Workspace scope and the optional condition or `all`/`any` predicate group whose matches are counted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Tables_CountTableRowsRequest"}}}},"responses":{"200":{"description":"The number of matching table rows.","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/Tables_X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/Tables_X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/Tables_X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Tables_V2CountTableRowsResponse"}}}},"400":{"$ref":"#/components/responses/Tables_BadRequest"},"401":{"$ref":"#/components/responses/Tables_Unauthorized"},"403":{"$ref":"#/components/responses/Tables_Forbidden"},"404":{"$ref":"#/components/responses/Tables_NotFound"},"413":{"$ref":"#/components/responses/Tables_PayloadTooLarge"},"415":{"$ref":"#/components/responses/Tables_UnsupportedMediaType"},"429":{"$ref":"#/components/responses/Tables_RateLimited"},"500":{"$ref":"#/components/responses/Tables_InternalError"},"503":{"$ref":"#/components/responses/Tables_ServiceUnavailable"}}}},"/api/v2/tables/{tableId}/views":{"get":{"operationId":"listTableViews","summary":"List Views","description":"List saved table views, omitting references to removed columns. Returns the complete set in one page; `nextCursor` is always null.\n\nOAuth scope: `api:read`.","x-sim-operation":"tables.views.list","x-oauth-scope":"api:read","tags":["Tables"],"parameters":[{"name":"tableId","in":"path","required":true,"description":"Unique table identifier.","schema":{"type":"string","minLength":1,"description":"Unique table identifier."}},{"name":"workspaceId","in":"query","required":true,"description":"Workspace that owns the table.","schema":{"type":"string","minLength":1,"description":"Workspace that owns the table."}}],"responses":{"200":{"description":"The saved table views.","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/Tables_X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/Tables_X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/Tables_X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Tables_V2TableViewListResponse"}}}},"400":{"$ref":"#/components/responses/Tables_BadRequest"},"401":{"$ref":"#/components/responses/Tables_Unauthorized"},"403":{"$ref":"#/components/responses/Tables_Forbidden"},"404":{"$ref":"#/components/responses/Tables_NotFound"},"429":{"$ref":"#/components/responses/Tables_RateLimited"},"500":{"$ref":"#/components/responses/Tables_InternalError"},"503":{"$ref":"#/components/responses/Tables_ServiceUnavailable"}}},"post":{"operationId":"createTableView","summary":"Create View","description":"Save a filter, sort, and column layout as a named presentation of a table.\n\nOAuth scope: `api:write`.","x-sim-operation":"tables.views.create","x-oauth-scope":"api:write","tags":["Tables"],"parameters":[{"name":"tableId","in":"path","required":true,"description":"Unique table identifier.","schema":{"type":"string","minLength":1,"description":"Unique table identifier."}}],"requestBody":{"required":true,"description":"Workspace scope, name, and saved filter, sort, and layout configuration.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Tables_CreateTableViewRequest"}}}},"responses":{"201":{"description":"The created table view.","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/Tables_X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/Tables_X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/Tables_X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Tables_V2CreateTableViewResponse"}}}},"400":{"$ref":"#/components/responses/Tables_BadRequest"},"401":{"$ref":"#/components/responses/Tables_Unauthorized"},"403":{"$ref":"#/components/responses/Tables_Forbidden"},"404":{"$ref":"#/components/responses/Tables_NotFound"},"413":{"$ref":"#/components/responses/Tables_PayloadTooLarge"},"415":{"$ref":"#/components/responses/Tables_UnsupportedMediaType"},"429":{"$ref":"#/components/responses/Tables_RateLimited"},"500":{"$ref":"#/components/responses/Tables_InternalError"},"503":{"$ref":"#/components/responses/Tables_ServiceUnavailable"}}}},"/api/v2/tables/{tableId}/views/{viewId}":{"get":{"operationId":"getTableView","summary":"Get View","description":"Get one saved table view by identifier.\n\nOAuth scope: `api:read`.","x-sim-operation":"tables.views.read","x-oauth-scope":"api:read","tags":["Tables"],"parameters":[{"name":"tableId","in":"path","required":true,"description":"Unique table identifier.","schema":{"type":"string","minLength":1,"description":"Unique table identifier."}},{"name":"viewId","in":"path","required":true,"description":"Unique saved-view identifier.","schema":{"type":"string","minLength":1,"description":"Unique saved-view identifier."}},{"name":"workspaceId","in":"query","required":true,"description":"Workspace that owns the table.","schema":{"type":"string","minLength":1,"description":"Workspace that owns the table."}}],"responses":{"200":{"description":"The requested table view.","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/Tables_X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/Tables_X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/Tables_X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Tables_V2TableViewResponse"}}}},"400":{"$ref":"#/components/responses/Tables_BadRequest"},"401":{"$ref":"#/components/responses/Tables_Unauthorized"},"403":{"$ref":"#/components/responses/Tables_Forbidden"},"404":{"$ref":"#/components/responses/Tables_NotFound"},"429":{"$ref":"#/components/responses/Tables_RateLimited"},"500":{"$ref":"#/components/responses/Tables_InternalError"},"503":{"$ref":"#/components/responses/Tables_ServiceUnavailable"}}},"patch":{"operationId":"updateTableView","summary":"Update View","description":"Rename a view, replace or shallow-merge its configuration, or promote it to the table default.\n\nOAuth scope: `api:write`.","x-sim-operation":"tables.views.update","x-oauth-scope":"api:write","tags":["Tables"],"parameters":[{"name":"tableId","in":"path","required":true,"description":"Unique table identifier.","schema":{"type":"string","minLength":1,"description":"Unique table identifier."}},{"name":"viewId","in":"path","required":true,"description":"Unique saved-view identifier.","schema":{"type":"string","minLength":1,"description":"Unique saved-view identifier."}}],"requestBody":{"required":true,"description":"Workspace scope and one or more saved-view changes.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Tables_UpdateTableViewRequest"}}}},"responses":{"200":{"description":"The updated table view.","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/Tables_X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/Tables_X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/Tables_X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Tables_V2TableViewResponse"}}}},"400":{"$ref":"#/components/responses/Tables_BadRequest"},"401":{"$ref":"#/components/responses/Tables_Unauthorized"},"403":{"$ref":"#/components/responses/Tables_Forbidden"},"404":{"$ref":"#/components/responses/Tables_NotFound"},"413":{"$ref":"#/components/responses/Tables_PayloadTooLarge"},"415":{"$ref":"#/components/responses/Tables_UnsupportedMediaType"},"429":{"$ref":"#/components/responses/Tables_RateLimited"},"500":{"$ref":"#/components/responses/Tables_InternalError"},"503":{"$ref":"#/components/responses/Tables_ServiceUnavailable"}}},"delete":{"operationId":"deleteTableView","summary":"Delete View","description":"Delete a saved presentation without changing any table rows.\n\nOAuth scope: `api:write`.","x-sim-operation":"tables.views.delete","x-oauth-scope":"api:write","tags":["Tables"],"parameters":[{"name":"tableId","in":"path","required":true,"description":"Unique table identifier.","schema":{"type":"string","minLength":1,"description":"Unique table identifier."}},{"name":"viewId","in":"path","required":true,"description":"Unique saved-view identifier.","schema":{"type":"string","minLength":1,"description":"Unique saved-view identifier."}},{"name":"workspaceId","in":"query","required":true,"description":"Workspace that owns the table.","schema":{"type":"string","minLength":1,"description":"Workspace that owns the table."}}],"responses":{"200":{"description":"Table view deletion acknowledgement.","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/Tables_X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/Tables_X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/Tables_X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Tables_V2DeleteTableViewResponse"}}}},"400":{"$ref":"#/components/responses/Tables_BadRequest"},"401":{"$ref":"#/components/responses/Tables_Unauthorized"},"403":{"$ref":"#/components/responses/Tables_Forbidden"},"404":{"$ref":"#/components/responses/Tables_NotFound"},"429":{"$ref":"#/components/responses/Tables_RateLimited"},"500":{"$ref":"#/components/responses/Tables_InternalError"},"503":{"$ref":"#/components/responses/Tables_ServiceUnavailable"}}}},"/api/v2/tables/{tableId}/groups":{"get":{"operationId":"listTableWorkflowGroups","summary":"List Workflow Groups","description":"List the workflow and enrichment groups that can be dispatched for a table. Returns the complete set in one page; `nextCursor` is always null.\n\nOAuth scope: `api:read`.","x-sim-operation":"tables.groups.list","x-oauth-scope":"api:read","tags":["Tables"],"parameters":[{"name":"tableId","in":"path","required":true,"description":"Unique table identifier.","schema":{"type":"string","minLength":1,"description":"Unique table identifier."}},{"name":"workspaceId","in":"query","required":true,"description":"Workspace that owns the table.","schema":{"type":"string","minLength":1,"description":"Workspace that owns the table."}}],"responses":{"200":{"description":"The table workflow groups.","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/Tables_X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/Tables_X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/Tables_X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Tables_V2TableWorkflowGroupListResponse"}}}},"400":{"$ref":"#/components/responses/Tables_BadRequest"},"401":{"$ref":"#/components/responses/Tables_Unauthorized"},"403":{"$ref":"#/components/responses/Tables_Forbidden"},"404":{"$ref":"#/components/responses/Tables_NotFound"},"429":{"$ref":"#/components/responses/Tables_RateLimited"},"500":{"$ref":"#/components/responses/Tables_InternalError"},"503":{"$ref":"#/components/responses/Tables_ServiceUnavailable"}}},"post":{"operationId":"addTableWorkflowGroup","summary":"Add Workflow Group","description":"Bind a workflow or enrichment to the table and create the columns populated by its outputs.\n\nOAuth scope: `api:write`.","x-sim-operation":"tables.groups.create","x-oauth-scope":"api:write","tags":["Tables"],"parameters":[{"name":"tableId","in":"path","required":true,"description":"Unique table identifier.","schema":{"type":"string","minLength":1,"description":"Unique table identifier."}}],"requestBody":{"required":true,"description":"Workspace scope, producer definition, and output columns.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Tables_AddTableWorkflowGroupRequest"}}}},"responses":{"201":{"description":"The created workflow group and resulting columns.","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/Tables_X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/Tables_X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/Tables_X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Tables_V2AddTableWorkflowGroupResponse"}}}},"400":{"$ref":"#/components/responses/Tables_BadRequest"},"401":{"$ref":"#/components/responses/Tables_Unauthorized"},"403":{"$ref":"#/components/responses/Tables_Forbidden"},"404":{"$ref":"#/components/responses/Tables_NotFound"},"413":{"$ref":"#/components/responses/Tables_PayloadTooLarge"},"415":{"$ref":"#/components/responses/Tables_UnsupportedMediaType"},"423":{"$ref":"#/components/responses/Tables_Locked"},"429":{"$ref":"#/components/responses/Tables_RateLimited"},"500":{"$ref":"#/components/responses/Tables_InternalError"},"503":{"$ref":"#/components/responses/Tables_ServiceUnavailable"}}},"patch":{"operationId":"updateTableWorkflowGroup","summary":"Update Workflow Group","description":"Restructure a workflow group, its producer, outputs, or execution behavior. Repointing the group at a different workflow concurrently invalidates the resolved output types and returns `409` — retry the update.\n\nOAuth scope: `api:write`.","x-sim-operation":"tables.groups.update","x-oauth-scope":"api:write","tags":["Tables"],"parameters":[{"name":"tableId","in":"path","required":true,"description":"Unique table identifier.","schema":{"type":"string","minLength":1,"description":"Unique table identifier."}}],"requestBody":{"required":true,"description":"Workspace scope, workflow group identifier, and producer changes.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Tables_UpdateTableWorkflowGroupRequest"}}}},"responses":{"200":{"description":"The updated workflow group and resulting columns.","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/Tables_X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/Tables_X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/Tables_X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Tables_V2UpdateTableWorkflowGroupResponse"}}}},"400":{"$ref":"#/components/responses/Tables_BadRequest"},"401":{"$ref":"#/components/responses/Tables_Unauthorized"},"403":{"$ref":"#/components/responses/Tables_Forbidden"},"404":{"$ref":"#/components/responses/Tables_NotFound"},"409":{"$ref":"#/components/responses/Tables_Conflict"},"413":{"$ref":"#/components/responses/Tables_PayloadTooLarge"},"415":{"$ref":"#/components/responses/Tables_UnsupportedMediaType"},"423":{"$ref":"#/components/responses/Tables_Locked"},"429":{"$ref":"#/components/responses/Tables_RateLimited"},"500":{"$ref":"#/components/responses/Tables_InternalError"},"503":{"$ref":"#/components/responses/Tables_ServiceUnavailable"}}},"delete":{"operationId":"deleteTableWorkflowGroup","summary":"Delete Workflow Group","description":"Delete a workflow group and every table column populated by that group.\n\nOAuth scope: `api:write`.","x-sim-operation":"tables.groups.delete","x-oauth-scope":"api:write","tags":["Tables"],"parameters":[{"name":"tableId","in":"path","required":true,"description":"Unique table identifier.","schema":{"type":"string","minLength":1,"description":"Unique table identifier."}}],"requestBody":{"required":true,"description":"Workspace scope and workflow group identifier.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Tables_DeleteTableWorkflowGroupRequest"}}}},"responses":{"200":{"description":"Workflow-group deletion acknowledgement and surviving columns.","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/Tables_X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/Tables_X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/Tables_X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Tables_V2DeleteTableWorkflowGroupResponse"}}}},"400":{"$ref":"#/components/responses/Tables_BadRequest"},"401":{"$ref":"#/components/responses/Tables_Unauthorized"},"403":{"$ref":"#/components/responses/Tables_Forbidden"},"404":{"$ref":"#/components/responses/Tables_NotFound"},"413":{"$ref":"#/components/responses/Tables_PayloadTooLarge"},"415":{"$ref":"#/components/responses/Tables_UnsupportedMediaType"},"423":{"$ref":"#/components/responses/Tables_Locked"},"429":{"$ref":"#/components/responses/Tables_RateLimited"},"500":{"$ref":"#/components/responses/Tables_InternalError"},"503":{"$ref":"#/components/responses/Tables_ServiceUnavailable"}}}},"/api/v2/tables/{tableId}/dispatches":{"post":{"operationId":"createTableDispatch","summary":"Create Run Dispatch","description":"Start workflow or enrichment groups across all rows or selected rows. Poll Get Run Dispatch until `complete` or `canceled`. A null `dispatchId` means no dispatch is available to poll; check row outcomes with `includeRunState`. Use Cancel Run Dispatch to stop further scheduling.\n\nOAuth scope: `api:write`.","x-sim-operation":"tables.runs.start","x-oauth-scope":"api:write","tags":["Tables"],"parameters":[{"name":"tableId","in":"path","required":true,"description":"Unique table identifier.","schema":{"type":"string","minLength":1,"description":"Unique table identifier."}}],"requestBody":{"required":true,"description":"Workspace scope, producer groups, execution mode, and optional row scope.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Tables_CreateTableDispatchRequest"}}}},"responses":{"200":{"description":"The accepted run dispatch.","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/Tables_X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/Tables_X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/Tables_X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Tables_V2CreateTableDispatchResponse"}}}},"400":{"$ref":"#/components/responses/Tables_BadRequest"},"401":{"$ref":"#/components/responses/Tables_Unauthorized"},"403":{"$ref":"#/components/responses/Tables_Forbidden"},"404":{"$ref":"#/components/responses/Tables_NotFound"},"413":{"$ref":"#/components/responses/Tables_PayloadTooLarge"},"415":{"$ref":"#/components/responses/Tables_UnsupportedMediaType"},"429":{"$ref":"#/components/responses/Tables_RateLimited"},"500":{"$ref":"#/components/responses/Tables_InternalError"},"503":{"$ref":"#/components/responses/Tables_ServiceUnavailable"}}},"get":{"operationId":"listTableDispatches","summary":"List Active Run Dispatches","description":"List in-flight run dispatches for a table in one page; `nextCursor` is always null. Use Get Run Dispatch to read a settled dispatch.\n\nOAuth scope: `api:read`.","x-sim-operation":"tables.runs.read","x-oauth-scope":"api:read","tags":["Tables"],"parameters":[{"name":"tableId","in":"path","required":true,"description":"Unique table identifier.","schema":{"type":"string","minLength":1,"description":"Unique table identifier."}},{"name":"workspaceId","in":"query","required":true,"description":"Workspace that owns the table.","schema":{"type":"string","minLength":1,"description":"Workspace that owns the table."}}],"responses":{"200":{"description":"The table's active run dispatches.","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/Tables_X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/Tables_X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/Tables_X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Tables_V2TableRunDispatchListResponse"}}}},"400":{"$ref":"#/components/responses/Tables_BadRequest"},"401":{"$ref":"#/components/responses/Tables_Unauthorized"},"403":{"$ref":"#/components/responses/Tables_Forbidden"},"404":{"$ref":"#/components/responses/Tables_NotFound"},"429":{"$ref":"#/components/responses/Tables_RateLimited"},"500":{"$ref":"#/components/responses/Tables_InternalError"},"503":{"$ref":"#/components/responses/Tables_ServiceUnavailable"}}}},"/api/v2/tables/{tableId}/rows/{rowId}/enrichment/{groupId}":{"post":{"operationId":"runRowEnrichment","summary":"Run Enrichment For One Row","description":"Start one workflow or enrichment group for a table row. Poll Get Run Dispatch using the returned `dispatchId`. A null `dispatchId` means no dispatch is available to poll; check row outcomes with `includeRunState`.\n\nOAuth scope: `api:write`.","x-sim-operation":"tables.runs.start","x-oauth-scope":"api:write","tags":["Tables"],"parameters":[{"name":"tableId","in":"path","required":true,"description":"Unique table identifier.","schema":{"type":"string","minLength":1,"description":"Unique table identifier."}},{"name":"rowId","in":"path","required":true,"description":"Unique table row identifier.","schema":{"type":"string","minLength":1,"description":"Unique table row identifier."}},{"name":"groupId","in":"path","required":true,"description":"Workflow or enrichment group to run.","schema":{"type":"string","minLength":1,"description":"Workflow or enrichment group to run."}}],"requestBody":{"required":true,"description":"Workspace scope for the row enrichment.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Tables_RunRowEnrichmentRequest"}}}},"responses":{"200":{"description":"The accepted row enrichment dispatch.","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/Tables_X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/Tables_X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/Tables_X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Tables_V2RunRowEnrichmentResponse"}}}},"400":{"$ref":"#/components/responses/Tables_BadRequest"},"401":{"$ref":"#/components/responses/Tables_Unauthorized"},"403":{"$ref":"#/components/responses/Tables_Forbidden"},"404":{"$ref":"#/components/responses/Tables_NotFound"},"413":{"$ref":"#/components/responses/Tables_PayloadTooLarge"},"415":{"$ref":"#/components/responses/Tables_UnsupportedMediaType"},"429":{"$ref":"#/components/responses/Tables_RateLimited"},"500":{"$ref":"#/components/responses/Tables_InternalError"},"503":{"$ref":"#/components/responses/Tables_ServiceUnavailable"}}},"get":{"operationId":"getRowEnrichment","summary":"Get Enrichment Run Detail","description":"Get an enrichment cell's provider attempts, statuses, hosted-key costs, durations, and matching provider. Null means no run detail was recorded; `404` means the table, row, or group does not exist.\n\nOAuth scope: `api:read`.","x-sim-operation":"tables.rows.read","x-oauth-scope":"api:read","tags":["Tables"],"parameters":[{"name":"tableId","in":"path","required":true,"description":"Unique table identifier.","schema":{"type":"string","minLength":1,"description":"Unique table identifier."}},{"name":"rowId","in":"path","required":true,"description":"Unique table row identifier.","schema":{"type":"string","minLength":1,"description":"Unique table row identifier."}},{"name":"groupId","in":"path","required":true,"description":"Workflow or enrichment group to run.","schema":{"type":"string","minLength":1,"description":"Workflow or enrichment group to run."}},{"name":"workspaceId","in":"query","required":true,"description":"Workspace that owns the table.","schema":{"type":"string","minLength":1,"description":"Workspace that owns the table."}}],"responses":{"200":{"description":"The enrichment run detail, or null when none was recorded.","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/Tables_X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/Tables_X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/Tables_X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Tables_V2RowEnrichmentResponse"}}}},"400":{"$ref":"#/components/responses/Tables_BadRequest"},"401":{"$ref":"#/components/responses/Tables_Unauthorized"},"403":{"$ref":"#/components/responses/Tables_Forbidden"},"404":{"$ref":"#/components/responses/Tables_NotFound"},"429":{"$ref":"#/components/responses/Tables_RateLimited"},"500":{"$ref":"#/components/responses/Tables_InternalError"},"503":{"$ref":"#/components/responses/Tables_ServiceUnavailable"}}}},"/api/v2/tables/{tableId}/rows/search":{"post":{"operationId":"searchTableRows","summary":"Search Rows","description":"Search cell text for a case-insensitive substring within an optional filtered and sorted view. Returns cell coordinates, not row data; `ordinal` matches the view used by Query Rows. Results are unpaginated and capped at 1000. If `truncated` is true, narrow the search or predicate.\n\nOAuth scope: `api:read`.","x-sim-operation":"tables.rows.search","x-oauth-scope":"api:read","tags":["Tables"],"parameters":[{"name":"tableId","in":"path","required":true,"description":"Unique table identifier.","schema":{"type":"string","minLength":1,"description":"Unique table identifier."}}],"requestBody":{"required":true,"description":"Workspace scope, substring query, and optional predicate and sort.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Tables_SearchTableRowsRequest"}}}},"responses":{"200":{"description":"The matching table cells.","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/Tables_X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/Tables_X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/Tables_X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Tables_V2SearchTableRowsResponse"}}}},"400":{"$ref":"#/components/responses/Tables_BadRequest"},"401":{"$ref":"#/components/responses/Tables_Unauthorized"},"403":{"$ref":"#/components/responses/Tables_Forbidden"},"404":{"$ref":"#/components/responses/Tables_NotFound"},"413":{"$ref":"#/components/responses/Tables_PayloadTooLarge"},"415":{"$ref":"#/components/responses/Tables_UnsupportedMediaType"},"429":{"$ref":"#/components/responses/Tables_RateLimited"},"500":{"$ref":"#/components/responses/Tables_InternalError"},"503":{"$ref":"#/components/responses/Tables_ServiceUnavailable"}}}},"/api/v2/tables/imports":{"post":{"operationId":"createTableImport","summary":"Create Table Import","description":"Create a CSV import. Upload sources receive signed transfer instructions; workspace-file sources start processing directly.\n\nOAuth scope: `api:write`.","x-sim-operation":"tables.imports.create","x-oauth-scope":"api:write","tags":["Tables"],"requestBody":{"required":true,"description":"Workspace, CSV source, target table, optional mapping, and timezone.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Tables_CreateTableImportRequest"}}}},"responses":{"201":{"description":"The created table import and optional transfer instructions.","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/Tables_X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/Tables_X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/Tables_X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Tables_V2CreateTableImportResponse"}}}},"400":{"$ref":"#/components/responses/Tables_BadRequest"},"401":{"$ref":"#/components/responses/Tables_Unauthorized"},"403":{"$ref":"#/components/responses/Tables_Forbidden"},"404":{"$ref":"#/components/responses/Tables_NotFound"},"409":{"$ref":"#/components/responses/Tables_Conflict"},"413":{"$ref":"#/components/responses/Tables_PayloadTooLarge"},"415":{"$ref":"#/components/responses/Tables_UnsupportedMediaType"},"423":{"$ref":"#/components/responses/Tables_Locked"},"429":{"$ref":"#/components/responses/Tables_RateLimited"},"500":{"$ref":"#/components/responses/Tables_InternalError"},"503":{"$ref":"#/components/responses/Tables_ServiceUnavailable"}}}},"/api/v2/tables/imports/{importId}":{"get":{"operationId":"getTableImport","summary":"Get Table Import","description":"Get an import's progress and status. During `uploading`, the signed upload token is required; omitting it returns `404`.\n\nOAuth scope: `api:read`.","x-sim-operation":"tables.imports.read","x-oauth-scope":"api:read","tags":["Tables"],"parameters":[{"name":"importId","in":"path","required":true,"description":"Unique table-import identifier.","schema":{"type":"string","minLength":1,"description":"Unique table-import identifier."}},{"name":"workspaceId","in":"query","required":true,"description":"Workspace that owns the transfer resource.","schema":{"type":"string","minLength":1,"maxLength":128,"description":"Workspace that owns the transfer resource."}},{"name":"upload-token","in":"header","required":false,"description":"Signed upload control token returned when an upload-backed import was created.","schema":{"description":"Signed upload control token returned when an upload-backed import was created.","type":"string","minLength":1}}],"responses":{"200":{"description":"The requested table import.","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/Tables_X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/Tables_X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/Tables_X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Tables_V2TableImportResponse"}}}},"400":{"$ref":"#/components/responses/Tables_BadRequest"},"401":{"$ref":"#/components/responses/Tables_Unauthorized"},"403":{"$ref":"#/components/responses/Tables_Forbidden"},"404":{"$ref":"#/components/responses/Tables_NotFound"},"429":{"$ref":"#/components/responses/Tables_RateLimited"},"500":{"$ref":"#/components/responses/Tables_InternalError"},"503":{"$ref":"#/components/responses/Tables_ServiceUnavailable"}}},"delete":{"operationId":"cancelTableImport","summary":"Cancel Table Import","description":"Cancel an upload or processing import. Committed row batches remain. Non-cancelable states, including `expired`, return `409`; unknown or purged imports return `404`.\n\nOAuth scope: `api:write`.","x-sim-operation":"tables.imports.cancel","x-oauth-scope":"api:write","tags":["Tables"],"parameters":[{"name":"importId","in":"path","required":true,"description":"Unique table-import identifier.","schema":{"type":"string","minLength":1,"description":"Unique table-import identifier."}},{"name":"workspaceId","in":"query","required":true,"description":"Workspace that owns the transfer resource.","schema":{"type":"string","minLength":1,"maxLength":128,"description":"Workspace that owns the transfer resource."}},{"name":"upload-token","in":"header","required":false,"description":"Signed upload control token returned when an upload-backed import was created.","schema":{"description":"Signed upload control token returned when an upload-backed import was created.","type":"string","minLength":1}}],"responses":{"200":{"description":"The canceled table import.","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/Tables_X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/Tables_X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/Tables_X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Tables_V2CancelTableImportResponse"}}}},"400":{"$ref":"#/components/responses/Tables_BadRequest"},"401":{"$ref":"#/components/responses/Tables_Unauthorized"},"403":{"$ref":"#/components/responses/Tables_Forbidden"},"404":{"$ref":"#/components/responses/Tables_NotFound"},"409":{"$ref":"#/components/responses/Tables_Conflict"},"429":{"$ref":"#/components/responses/Tables_RateLimited"},"500":{"$ref":"#/components/responses/Tables_InternalError"},"503":{"$ref":"#/components/responses/Tables_ServiceUnavailable"}}}},"/api/v2/tables/imports/{importId}/parts":{"post":{"operationId":"createTableImportPartUrls","summary":"Create Table Import Part URLs","description":"Create signed URLs for multipart upload parts. Requires the `uploading` state; other states return `409`. Unknown or purged imports return `404`.\n\nOAuth scope: `api:write`.","x-sim-operation":"tables.imports.create_parts","x-oauth-scope":"api:write","tags":["Tables"],"parameters":[{"name":"importId","in":"path","required":true,"description":"Unique table-import identifier.","schema":{"type":"string","minLength":1,"description":"Unique table-import identifier."}},{"name":"workspaceId","in":"query","required":true,"description":"Workspace that owns the transfer resource.","schema":{"type":"string","minLength":1,"maxLength":128,"description":"Workspace that owns the transfer resource."}},{"name":"upload-token","in":"header","required":true,"description":"Signed upload control token returned when the upload session was created.","schema":{"type":"string","minLength":1,"description":"Signed upload control token returned when the upload session was created."}}],"requestBody":{"required":true,"description":"Multipart part numbers for which signed URLs should be created.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Tables_CreateTableImportPartUrlsRequest"}}}},"responses":{"200":{"description":"The signed multipart upload URLs.","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/Tables_X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/Tables_X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/Tables_X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Tables_V2CreateTableImportPartUrlsResponse"}}}},"400":{"$ref":"#/components/responses/Tables_BadRequest"},"401":{"$ref":"#/components/responses/Tables_Unauthorized"},"403":{"$ref":"#/components/responses/Tables_Forbidden"},"404":{"$ref":"#/components/responses/Tables_NotFound"},"409":{"$ref":"#/components/responses/Tables_Conflict"},"413":{"$ref":"#/components/responses/Tables_PayloadTooLarge"},"415":{"$ref":"#/components/responses/Tables_UnsupportedMediaType"},"429":{"$ref":"#/components/responses/Tables_RateLimited"},"500":{"$ref":"#/components/responses/Tables_InternalError"},"503":{"$ref":"#/components/responses/Tables_ServiceUnavailable"}}}},"/api/v2/tables/imports/{importId}/complete":{"post":{"operationId":"completeTableImportUpload","summary":"Complete Table Import Upload","description":"Verify or assemble uploaded CSV bytes and start processing under the same import ID. Requires an import awaiting upload completion; other states return `409`. Unknown or purged imports return `404`.\n\nOAuth scope: `api:write`.","x-sim-operation":"tables.imports.complete","x-oauth-scope":"api:write","tags":["Tables"],"parameters":[{"name":"importId","in":"path","required":true,"description":"Unique table-import identifier.","schema":{"type":"string","minLength":1,"description":"Unique table-import identifier."}},{"name":"workspaceId","in":"query","required":true,"description":"Workspace that owns the transfer resource.","schema":{"type":"string","minLength":1,"maxLength":128,"description":"Workspace that owns the transfer resource."}},{"name":"upload-token","in":"header","required":true,"description":"Signed upload control token returned when the upload session was created.","schema":{"type":"string","minLength":1,"description":"Signed upload control token returned when the upload session was created."}}],"responses":{"200":{"description":"The table import after upload completion.","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/Tables_X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/Tables_X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/Tables_X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Tables_V2CompleteTableImportUploadResponse"}}}},"400":{"$ref":"#/components/responses/Tables_BadRequest"},"401":{"$ref":"#/components/responses/Tables_Unauthorized"},"403":{"$ref":"#/components/responses/Tables_Forbidden"},"404":{"$ref":"#/components/responses/Tables_NotFound"},"409":{"$ref":"#/components/responses/Tables_Conflict"},"423":{"$ref":"#/components/responses/Tables_Locked"},"429":{"$ref":"#/components/responses/Tables_RateLimited"},"500":{"$ref":"#/components/responses/Tables_InternalError"},"503":{"$ref":"#/components/responses/Tables_ServiceUnavailable"}}}},"/api/v2/tables/{tableId}/exports":{"post":{"operationId":"createTableExport","summary":"Create Table Export","description":"Create a CSV or JSON export. Exports of small tables finish during the request; larger exports run asynchronously.\n\nOAuth scope: `api:write`.","x-sim-operation":"tables.exports.create","x-oauth-scope":"api:write","tags":["Tables"],"parameters":[{"name":"tableId","in":"path","required":true,"description":"Unique table identifier.","schema":{"type":"string","minLength":1,"description":"Unique table identifier."}}],"requestBody":{"required":true,"description":"Workspace scope and export format.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Tables_CreateTableExportRequest"}}}},"responses":{"201":{"description":"The created table export.","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/Tables_X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/Tables_X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/Tables_X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Tables_V2CreateTableExportResponse"}}}},"400":{"$ref":"#/components/responses/Tables_BadRequest"},"401":{"$ref":"#/components/responses/Tables_Unauthorized"},"403":{"$ref":"#/components/responses/Tables_Forbidden"},"404":{"$ref":"#/components/responses/Tables_NotFound"},"409":{"$ref":"#/components/responses/Tables_Conflict"},"413":{"$ref":"#/components/responses/Tables_PayloadTooLarge"},"415":{"$ref":"#/components/responses/Tables_UnsupportedMediaType"},"429":{"$ref":"#/components/responses/Tables_RateLimited"},"500":{"$ref":"#/components/responses/Tables_InternalError"},"503":{"$ref":"#/components/responses/Tables_ServiceUnavailable"}}}},"/api/v2/tables/{tableId}/exports/{exportId}":{"get":{"operationId":"getTableExport","summary":"Get Table Export","description":"Get a table export's progress and status.\n\nOAuth scope: `api:read`.","x-sim-operation":"tables.exports.read","x-oauth-scope":"api:read","tags":["Tables"],"parameters":[{"name":"tableId","in":"path","required":true,"description":"Unique table identifier.","schema":{"type":"string","minLength":1,"description":"Unique table identifier."}},{"name":"exportId","in":"path","required":true,"description":"Unique table-export identifier.","schema":{"type":"string","minLength":1,"description":"Unique table-export identifier."}},{"name":"workspaceId","in":"query","required":true,"description":"Workspace that owns the transfer resource.","schema":{"type":"string","minLength":1,"maxLength":128,"description":"Workspace that owns the transfer resource."}}],"responses":{"200":{"description":"The requested table export.","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/Tables_X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/Tables_X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/Tables_X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Tables_V2TableExportResponse"}}}},"400":{"$ref":"#/components/responses/Tables_BadRequest"},"401":{"$ref":"#/components/responses/Tables_Unauthorized"},"403":{"$ref":"#/components/responses/Tables_Forbidden"},"404":{"$ref":"#/components/responses/Tables_NotFound"},"429":{"$ref":"#/components/responses/Tables_RateLimited"},"500":{"$ref":"#/components/responses/Tables_InternalError"},"503":{"$ref":"#/components/responses/Tables_ServiceUnavailable"}}},"delete":{"operationId":"cancelTableExport","summary":"Cancel Table Export","description":"Cancel an export that is still in progress.\n\nOAuth scope: `api:write`.","x-sim-operation":"tables.exports.cancel","x-oauth-scope":"api:write","tags":["Tables"],"parameters":[{"name":"tableId","in":"path","required":true,"description":"Unique table identifier.","schema":{"type":"string","minLength":1,"description":"Unique table identifier."}},{"name":"exportId","in":"path","required":true,"description":"Unique table-export identifier.","schema":{"type":"string","minLength":1,"description":"Unique table-export identifier."}},{"name":"workspaceId","in":"query","required":true,"description":"Workspace that owns the transfer resource.","schema":{"type":"string","minLength":1,"maxLength":128,"description":"Workspace that owns the transfer resource."}}],"responses":{"200":{"description":"The canceled table export.","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/Tables_X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/Tables_X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/Tables_X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Tables_V2CancelTableExportResponse"}}}},"400":{"$ref":"#/components/responses/Tables_BadRequest"},"401":{"$ref":"#/components/responses/Tables_Unauthorized"},"403":{"$ref":"#/components/responses/Tables_Forbidden"},"404":{"$ref":"#/components/responses/Tables_NotFound"},"409":{"$ref":"#/components/responses/Tables_Conflict"},"429":{"$ref":"#/components/responses/Tables_RateLimited"},"500":{"$ref":"#/components/responses/Tables_InternalError"},"503":{"$ref":"#/components/responses/Tables_ServiceUnavailable"}}}},"/api/v2/tables/{tableId}/exports/{exportId}/download":{"get":{"operationId":"downloadTableExport","summary":"Download Table Export","description":"Get a short-lived signed download URL for a completed export. Other states return `409`; an unavailable export file returns `404`.\n\nOAuth scope: `api:read`.","x-sim-operation":"tables.exports.download","x-oauth-scope":"api:read","tags":["Tables"],"parameters":[{"name":"tableId","in":"path","required":true,"description":"Unique table identifier.","schema":{"type":"string","minLength":1,"description":"Unique table identifier."}},{"name":"exportId","in":"path","required":true,"description":"Unique table-export identifier.","schema":{"type":"string","minLength":1,"description":"Unique table-export identifier."}},{"name":"workspaceId","in":"query","required":true,"description":"Workspace that owns the transfer resource.","schema":{"type":"string","minLength":1,"maxLength":128,"description":"Workspace that owns the transfer resource."}}],"responses":{"200":{"description":"Signed table-export download information.","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/Tables_X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/Tables_X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/Tables_X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Tables_V2DownloadTableExportResponse"}}}},"400":{"$ref":"#/components/responses/Tables_BadRequest"},"401":{"$ref":"#/components/responses/Tables_Unauthorized"},"403":{"$ref":"#/components/responses/Tables_Forbidden"},"404":{"$ref":"#/components/responses/Tables_NotFound"},"409":{"$ref":"#/components/responses/Tables_Conflict"},"429":{"$ref":"#/components/responses/Tables_RateLimited"},"500":{"$ref":"#/components/responses/Tables_InternalError"},"503":{"$ref":"#/components/responses/Tables_ServiceUnavailable"}}}},"/api/v2/tables/{tableId}/cancel-runs":{"post":{"operationId":"cancelTableRuns","summary":"Cancel Column Runs","description":"Stop in-flight and pending workflow or enrichment cell runs across the table or one selected row.\n\nOAuth scope: `api:write`.","x-sim-operation":"tables.runs.cancel","x-oauth-scope":"api:write","tags":["Tables"],"parameters":[{"name":"tableId","in":"path","required":true,"description":"Unique table identifier.","schema":{"type":"string","minLength":1,"description":"Unique table identifier."}}],"requestBody":{"required":true,"description":"Workspace scope, cancellation scope, and optional predicate or producer groups.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Tables_CancelTableRunsRequest"}}}},"responses":{"200":{"description":"The number of canceled cell runs.","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/Tables_X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/Tables_X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/Tables_X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Tables_V2CancelTableRunsResponse"}}}},"400":{"$ref":"#/components/responses/Tables_BadRequest"},"401":{"$ref":"#/components/responses/Tables_Unauthorized"},"403":{"$ref":"#/components/responses/Tables_Forbidden"},"404":{"$ref":"#/components/responses/Tables_NotFound"},"413":{"$ref":"#/components/responses/Tables_PayloadTooLarge"},"415":{"$ref":"#/components/responses/Tables_UnsupportedMediaType"},"429":{"$ref":"#/components/responses/Tables_RateLimited"},"500":{"$ref":"#/components/responses/Tables_InternalError"},"503":{"$ref":"#/components/responses/Tables_ServiceUnavailable"}}}},"/api/v2/tables/folders":{"get":{"operationId":"listTablesFolders","summary":"List Folders","description":"List table folders, optionally limiting results to direct children of a parent path. Returns the complete set in one page; `nextCursor` is always null.\n\nOAuth scope: `api:read`.","x-sim-operation":"tables.folders.list","x-oauth-scope":"api:read","tags":["Tables"],"parameters":[{"name":"workspaceId","in":"query","required":true,"description":"Workspace whose folders should be listed.","schema":{"type":"string","minLength":1,"maxLength":128,"description":"Workspace whose folders should be listed."}},{"name":"parentPath","in":"query","required":false,"description":"Restrict results to direct children of this parent path. Unknown folder paths contribute no matches.","schema":{"description":"Restrict results to direct children of this parent path. Unknown folder paths contribute no matches.","$ref":"#/components/schemas/Tables_FolderPathInput"}},{"name":"search","in":"query","required":false,"description":"Case-insensitive substring match against the folder name.","schema":{"description":"Case-insensitive substring match against the folder name.","type":"string","minLength":1,"maxLength":200}},{"name":"sortBy","in":"query","required":false,"description":"Field used to sort the result. Sorting by `name` is case-sensitive and follows the storage collation, so do not rely on a case-insensitive order.","schema":{"default":"name","description":"Field used to sort the result. Sorting by `name` is case-sensitive and follows the storage collation, so do not rely on a case-insensitive order.","type":"string","enum":["name","createdAt","updatedAt"]}},{"name":"sortOrder","in":"query","required":false,"description":"Sort direction.","schema":{"default":"asc","description":"Sort direction.","type":"string","enum":["asc","desc"]}}],"responses":{"200":{"description":"The table folders.","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/Tables_X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/Tables_X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/Tables_X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Tables_V2TableFolderListResponse"}}}},"400":{"$ref":"#/components/responses/Tables_BadRequest"},"401":{"$ref":"#/components/responses/Tables_Unauthorized"},"403":{"$ref":"#/components/responses/Tables_Forbidden"},"404":{"$ref":"#/components/responses/Tables_NotFound"},"413":{"$ref":"#/components/responses/Tables_PayloadTooLarge"},"429":{"$ref":"#/components/responses/Tables_RateLimited"},"500":{"$ref":"#/components/responses/Tables_InternalError"},"503":{"$ref":"#/components/responses/Tables_ServiceUnavailable"}}},"post":{"operationId":"createTablesFolder","summary":"Create Folder","description":"Create one table-folder leaf whose parent path already exists.\n\nOAuth scope: `api:write`.","x-sim-operation":"tables.folders.create","x-oauth-scope":"api:write","tags":["Tables"],"requestBody":{"required":true,"description":"Workspace scope and canonical folder path to create.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Tables_CreateTableFolderRequest"}}}},"responses":{"201":{"description":"The created table folder.","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/Tables_X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/Tables_X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/Tables_X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Tables_V2CreateTableFolderResponse"}}}},"400":{"$ref":"#/components/responses/Tables_BadRequest"},"401":{"$ref":"#/components/responses/Tables_Unauthorized"},"403":{"$ref":"#/components/responses/Tables_Forbidden"},"404":{"$ref":"#/components/responses/Tables_NotFound"},"409":{"$ref":"#/components/responses/Tables_Conflict"},"413":{"$ref":"#/components/responses/Tables_PayloadTooLarge"},"415":{"$ref":"#/components/responses/Tables_UnsupportedMediaType"},"429":{"$ref":"#/components/responses/Tables_RateLimited"},"500":{"$ref":"#/components/responses/Tables_InternalError"},"503":{"$ref":"#/components/responses/Tables_ServiceUnavailable"}}},"patch":{"operationId":"relocateTablesFolder","summary":"Rename or Move Folder","description":"Rename or move a table folder and update all descendant paths.\n\nOAuth scope: `api:write`.","x-sim-operation":"tables.folders.update","x-oauth-scope":"api:write","tags":["Tables"],"requestBody":{"required":true,"description":"Workspace scope, current canonical path, and destination path.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Tables_RelocateTableFolderRequest"}}}},"responses":{"200":{"description":"The relocated table folder.","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/Tables_X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/Tables_X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/Tables_X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Tables_V2RelocateTableFolderResponse"}}}},"400":{"$ref":"#/components/responses/Tables_BadRequest"},"401":{"$ref":"#/components/responses/Tables_Unauthorized"},"403":{"$ref":"#/components/responses/Tables_Forbidden"},"404":{"$ref":"#/components/responses/Tables_NotFound"},"409":{"$ref":"#/components/responses/Tables_Conflict"},"413":{"$ref":"#/components/responses/Tables_PayloadTooLarge"},"415":{"$ref":"#/components/responses/Tables_UnsupportedMediaType"},"429":{"$ref":"#/components/responses/Tables_RateLimited"},"500":{"$ref":"#/components/responses/Tables_InternalError"},"503":{"$ref":"#/components/responses/Tables_ServiceUnavailable"}}},"delete":{"operationId":"deleteTablesFolder","summary":"Delete Folder","description":"Archive an empty folder, or set `recursive=true` to archive its tables and subfolders. Use Restore Folder to recover the archived contents.\n\nOAuth scope: `api:write`.","x-sim-operation":"tables.folders.delete","x-oauth-scope":"api:write","tags":["Tables"],"parameters":[{"name":"workspaceId","in":"query","required":true,"description":"Workspace containing the folder.","schema":{"type":"string","minLength":1,"maxLength":128,"description":"Workspace containing the folder."}},{"name":"path","in":"query","required":true,"description":"Path of the folder to delete.","schema":{"description":"Path of the folder to delete.","$ref":"#/components/schemas/Tables_NonRootFolderPathInput"}},{"name":"recursive","in":"query","required":false,"description":"Delete the folder's nested files and folders too. An empty folder deletes either way; a non-empty one needs this. The listed spellings are the whole accepted vocabulary and are case-sensitive; any other value is rejected.","schema":{"description":"Delete the folder's nested files and folders too. An empty folder deletes either way; a non-empty one needs this. The listed spellings are the whole accepted vocabulary and are case-sensitive; any other value is rejected.","enum":["true","1","yes","on","y","enabled","false","0","no","off","n","disabled"],"default":"false","type":"string"}}],"responses":{"200":{"description":"Table-folder deletion acknowledgement.","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/Tables_X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/Tables_X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/Tables_X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Tables_V2DeleteTableFolderResponse"}}}},"400":{"$ref":"#/components/responses/Tables_BadRequest"},"401":{"$ref":"#/components/responses/Tables_Unauthorized"},"403":{"$ref":"#/components/responses/Tables_Forbidden"},"404":{"$ref":"#/components/responses/Tables_NotFound"},"409":{"$ref":"#/components/responses/Tables_Conflict"},"413":{"$ref":"#/components/responses/Tables_PayloadTooLarge"},"423":{"$ref":"#/components/responses/Tables_Locked"},"429":{"$ref":"#/components/responses/Tables_RateLimited"},"500":{"$ref":"#/components/responses/Tables_InternalError"},"503":{"$ref":"#/components/responses/Tables_ServiceUnavailable"}}}},"/api/v2/tables/folders/restore":{"post":{"operationId":"restoreTablesFolder","summary":"Restore Folder","description":"Restore an archived table folder, its descendants, and tables using its former path. An archived parent moves it to the root; name conflicts may change the returned `path`. Non-archived paths return `404`. Save the path from Delete Folder, because List Folders does not include archived table folders.\n\nOAuth scope: `api:write`.","x-sim-operation":"tables.folders.restore","x-oauth-scope":"api:write","tags":["Tables"],"requestBody":{"required":true,"description":"Workspace scope and the canonical path the archived folder held.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Tables_RestoreTableFolderRequest"}}}},"responses":{"200":{"description":"The restored table folder and what it brought back.","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/Tables_X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/Tables_X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/Tables_X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Tables_V2RestoreTableFolderResponse"}}}},"400":{"$ref":"#/components/responses/Tables_BadRequest"},"401":{"$ref":"#/components/responses/Tables_Unauthorized"},"403":{"$ref":"#/components/responses/Tables_Forbidden"},"404":{"$ref":"#/components/responses/Tables_NotFound"},"409":{"$ref":"#/components/responses/Tables_Conflict"},"413":{"$ref":"#/components/responses/Tables_PayloadTooLarge"},"415":{"$ref":"#/components/responses/Tables_UnsupportedMediaType"},"429":{"$ref":"#/components/responses/Tables_RateLimited"},"500":{"$ref":"#/components/responses/Tables_InternalError"},"503":{"$ref":"#/components/responses/Tables_ServiceUnavailable"}}}},"/api/v2/tables/{tableId}/restore":{"post":{"operationId":"restoreTable","summary":"Restore Table","description":"Restore a table and its archived rows, views, and workflow groups. Active tables return unchanged without a new audit event. Name conflicts may change the returned `name`. Find archived tables with List Tables and `scope=archived`.\n\nOAuth scope: `api:write`.","x-sim-operation":"tables.restore","x-oauth-scope":"api:write","tags":["Tables"],"parameters":[{"name":"tableId","in":"path","required":true,"description":"Unique table identifier.","schema":{"type":"string","minLength":1,"description":"Unique table identifier."}}],"requestBody":{"required":true,"description":"Workspace scope for the archived table.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Tables_RestoreTableRequest"}}}},"responses":{"200":{"description":"The restored table.","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/Tables_X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/Tables_X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/Tables_X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Tables_V2RestoreTableResponse"}}}},"400":{"$ref":"#/components/responses/Tables_BadRequest"},"401":{"$ref":"#/components/responses/Tables_Unauthorized"},"403":{"$ref":"#/components/responses/Tables_Forbidden"},"404":{"$ref":"#/components/responses/Tables_NotFound"},"409":{"$ref":"#/components/responses/Tables_Conflict"},"413":{"$ref":"#/components/responses/Tables_PayloadTooLarge"},"415":{"$ref":"#/components/responses/Tables_UnsupportedMediaType"},"429":{"$ref":"#/components/responses/Tables_RateLimited"},"500":{"$ref":"#/components/responses/Tables_InternalError"},"503":{"$ref":"#/components/responses/Tables_ServiceUnavailable"}}}},"/api/v2/tables/{tableId}/rows/bulk-update":{"post":{"operationId":"bulkUpdateTableRows","summary":"Bulk Update Rows","description":"Apply separate partial patches to up to 1,000 rows, preserving omitted columns. A row outside the table rejects the entire request with `400` and lists missing IDs. Use Update Rows by Filter to apply one patch to every matching row.\n\nOAuth scope: `api:write`.","x-sim-operation":"tables.rows.update_many","x-oauth-scope":"api:write","tags":["Tables"],"parameters":[{"name":"tableId","in":"path","required":true,"description":"Unique table identifier.","schema":{"type":"string","minLength":1,"description":"Unique table identifier."}}],"requestBody":{"required":true,"description":"Workspace scope and one merge patch per row.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Tables_BulkUpdateTableRowsRequest"}}}},"responses":{"200":{"description":"The bulk update result.","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/Tables_X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/Tables_X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/Tables_X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Tables_V2BulkUpdateTableRowsResponse"}}}},"400":{"$ref":"#/components/responses/Tables_BadRequest"},"401":{"$ref":"#/components/responses/Tables_Unauthorized"},"403":{"$ref":"#/components/responses/Tables_Forbidden"},"404":{"$ref":"#/components/responses/Tables_NotFound"},"413":{"$ref":"#/components/responses/Tables_PayloadTooLarge"},"415":{"$ref":"#/components/responses/Tables_UnsupportedMediaType"},"423":{"$ref":"#/components/responses/Tables_Locked"},"429":{"$ref":"#/components/responses/Tables_RateLimited"},"500":{"$ref":"#/components/responses/Tables_InternalError"},"503":{"$ref":"#/components/responses/Tables_ServiceUnavailable"}}}},"/api/v2/tables/{tableId}/dispatches/{dispatchId}":{"get":{"operationId":"getTableDispatch","summary":"Get Run Dispatch","description":"Get a dispatch's current state. Poll until `complete` or `canceled`; use row reads with `includeRunState` for per-cell outcomes.\n\nOAuth scope: `api:read`.","x-sim-operation":"tables.runs.read","x-oauth-scope":"api:read","tags":["Tables"],"parameters":[{"name":"tableId","in":"path","required":true,"description":"Unique table identifier.","schema":{"type":"string","minLength":1,"description":"Unique table identifier."}},{"name":"dispatchId","in":"path","required":true,"description":"Unique table run-dispatch identifier.","schema":{"type":"string","minLength":1,"description":"Unique table run-dispatch identifier."}},{"name":"workspaceId","in":"query","required":true,"description":"Workspace that owns the transfer resource.","schema":{"type":"string","minLength":1,"maxLength":128,"description":"Workspace that owns the transfer resource."}}],"responses":{"200":{"description":"The requested run dispatch.","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/Tables_X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/Tables_X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/Tables_X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Tables_V2TableRunDispatchResponse"}}}},"400":{"$ref":"#/components/responses/Tables_BadRequest"},"401":{"$ref":"#/components/responses/Tables_Unauthorized"},"403":{"$ref":"#/components/responses/Tables_Forbidden"},"404":{"$ref":"#/components/responses/Tables_NotFound"},"429":{"$ref":"#/components/responses/Tables_RateLimited"},"500":{"$ref":"#/components/responses/Tables_InternalError"},"503":{"$ref":"#/components/responses/Tables_ServiceUnavailable"}}},"delete":{"operationId":"cancelTableDispatch","summary":"Cancel Run Dispatch","description":"Stop a dispatch from scheduling more cells. Already queued or running cells continue; use Cancel Column Runs to stop them. Completed or canceled dispatches return unchanged.\n\nOAuth scope: `api:write`.","x-sim-operation":"tables.runs.cancel","x-oauth-scope":"api:write","tags":["Tables"],"parameters":[{"name":"tableId","in":"path","required":true,"description":"Unique table identifier.","schema":{"type":"string","minLength":1,"description":"Unique table identifier."}},{"name":"dispatchId","in":"path","required":true,"description":"Unique table run-dispatch identifier.","schema":{"type":"string","minLength":1,"description":"Unique table run-dispatch identifier."}},{"name":"workspaceId","in":"query","required":true,"description":"Workspace that owns the transfer resource.","schema":{"type":"string","minLength":1,"maxLength":128,"description":"Workspace that owns the transfer resource."}}],"responses":{"200":{"description":"The dispatch in its post-cancellation state.","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/Tables_X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/Tables_X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/Tables_X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Tables_V2CancelTableDispatchResponse"}}}},"400":{"$ref":"#/components/responses/Tables_BadRequest"},"401":{"$ref":"#/components/responses/Tables_Unauthorized"},"403":{"$ref":"#/components/responses/Tables_Forbidden"},"404":{"$ref":"#/components/responses/Tables_NotFound"},"429":{"$ref":"#/components/responses/Tables_RateLimited"},"500":{"$ref":"#/components/responses/Tables_InternalError"},"503":{"$ref":"#/components/responses/Tables_ServiceUnavailable"}}}},"/api/v2/tables/move":{"post":{"operationId":"moveTables","summary":"Move Tables and Folders","description":"Move up to 100 tables and folders to one destination. Items succeed or fail independently: covered tables are `skipped`, missing items are `notFound`, and lock or cycle failures include reasons in `failed`. An invalid destination rejects the request before any move.\n\nOAuth scope: `api:write`.","x-sim-operation":"tables.bulk_move","x-oauth-scope":"api:write","tags":["Tables"],"requestBody":{"required":true,"description":"Workspace scope, the tables and folder paths to move, and the destination folder path.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Tables_BulkMoveTablesRequest"}}}},"responses":{"200":{"description":"Per-item outcome of the bulk move.","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/Tables_X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/Tables_X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/Tables_X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Tables_V2MoveTablesResponse"}}}},"400":{"$ref":"#/components/responses/Tables_BadRequest"},"401":{"$ref":"#/components/responses/Tables_Unauthorized"},"403":{"$ref":"#/components/responses/Tables_Forbidden"},"404":{"$ref":"#/components/responses/Tables_NotFound"},"413":{"$ref":"#/components/responses/Tables_PayloadTooLarge"},"415":{"$ref":"#/components/responses/Tables_UnsupportedMediaType"},"429":{"$ref":"#/components/responses/Tables_RateLimited"},"500":{"$ref":"#/components/responses/Tables_InternalError"},"503":{"$ref":"#/components/responses/Tables_ServiceUnavailable"}}}},"/api/v2/tables/bulk-delete":{"post":{"operationId":"bulkDeleteTables","summary":"Bulk Delete Tables and Folders","description":"Archive up to 100 selected tables and folders, including folder contents. Items succeed or fail independently, with `skipped`, `notFound`, and `failed` outcomes. `deletedItems` includes all descendants. Use Restore Table or Restore Folder to recover archived items.\n\nOAuth scope: `api:write`.","x-sim-operation":"tables.bulk_delete","x-oauth-scope":"api:write","tags":["Tables"],"requestBody":{"required":true,"description":"Workspace scope, and the tables and folder paths to delete.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Tables_BulkDeleteTablesRequest"}}}},"responses":{"200":{"description":"Per-item outcome of the bulk delete.","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/Tables_X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/Tables_X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/Tables_X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Tables_V2BulkDeleteTablesResponse"}}}},"400":{"$ref":"#/components/responses/Tables_BadRequest"},"401":{"$ref":"#/components/responses/Tables_Unauthorized"},"403":{"$ref":"#/components/responses/Tables_Forbidden"},"404":{"$ref":"#/components/responses/Tables_NotFound"},"413":{"$ref":"#/components/responses/Tables_PayloadTooLarge"},"415":{"$ref":"#/components/responses/Tables_UnsupportedMediaType"},"423":{"$ref":"#/components/responses/Tables_Locked"},"429":{"$ref":"#/components/responses/Tables_RateLimited"},"500":{"$ref":"#/components/responses/Tables_InternalError"},"503":{"$ref":"#/components/responses/Tables_ServiceUnavailable"}}}},"/api/v2/knowledge":{"get":{"operationId":"listKnowledgeBases","summary":"List Knowledge Bases","description":"List active knowledge bases in a workspace with folder filtering, search, sorting, and cursor pagination. Use `scope=archived` to find knowledge bases available for restoration. Workspace folder trees exceeding 10,000 folders return `413`.\n\nOAuth scope: `api:read`.","x-sim-operation":"knowledge.list","x-oauth-scope":"api:read","tags":["Knowledge Bases"],"parameters":[{"name":"workspaceId","in":"query","required":true,"description":"Workspace whose knowledge bases should be listed.","schema":{"type":"string","minLength":1,"maxLength":128,"description":"Workspace whose knowledge bases should be listed."}},{"name":"scope","in":"query","required":false,"description":"Lifecycle scope: active or archived knowledge bases. Use Restore Knowledge Base to recover archived entries. Folder paths resolve only active folders, so filtering by an archived folder returns no matches.","schema":{"default":"active","description":"Lifecycle scope: active or archived knowledge bases. Use Restore Knowledge Base to recover archived entries. Folder paths resolve only active folders, so filtering by an archived folder returns no matches.","type":"string","enum":["active","archived"]}},{"name":"folderPath","in":"query","required":false,"description":"Restrict results to knowledge bases in this folder. Unknown folder paths contribute no matches.","schema":{"description":"Restrict results to knowledge bases in this folder. Unknown folder paths contribute no matches.","$ref":"#/components/schemas/Knowledge_FolderPathInput"}},{"name":"search","in":"query","required":false,"description":"Case-insensitive substring match against the resource name.","schema":{"description":"Case-insensitive substring match against the resource name.","type":"string","minLength":1,"maxLength":200}},{"name":"sortBy","in":"query","required":false,"description":"Field used to sort the result. Sorting by `name` is case-sensitive and follows the storage collation, so do not rely on a case-insensitive order.","schema":{"default":"createdAt","description":"Field used to sort the result. Sorting by `name` is case-sensitive and follows the storage collation, so do not rely on a case-insensitive order.","type":"string","enum":["name","createdAt","updatedAt"]}},{"name":"sortOrder","in":"query","required":false,"description":"Sort direction.","schema":{"default":"asc","description":"Sort direction.","type":"string","enum":["asc","desc"]}},{"name":"limit","in":"query","required":false,"description":"Maximum knowledge bases to return per page. Must be a whole number from 1 to 100. Defaults to 50.","schema":{"default":50,"description":"Maximum knowledge bases to return per page. Must be a whole number from 1 to 100. Defaults to 50.","type":"integer","minimum":1,"maximum":100}},{"name":"cursor","in":"query","required":false,"description":"Opaque cursor from the previous page. Send it back with the same sort and filters; only `limit` may change. Change anything else and pagination must restart without a cursor.","schema":{"description":"Opaque cursor from the previous page. Send it back with the same sort and filters; only `limit` may change. Change anything else and pagination must restart without a cursor.","type":"string","minLength":1}}],"responses":{"200":{"description":"A page of knowledge bases.","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/Knowledge_X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/Knowledge_X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/Knowledge_X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Knowledge_V2KnowledgeBaseListResponse"}}}},"400":{"$ref":"#/components/responses/Knowledge_BadRequest"},"401":{"$ref":"#/components/responses/Knowledge_Unauthorized"},"403":{"$ref":"#/components/responses/Knowledge_Forbidden"},"404":{"$ref":"#/components/responses/Knowledge_NotFound"},"413":{"$ref":"#/components/responses/Knowledge_PayloadTooLarge"},"429":{"$ref":"#/components/responses/Knowledge_RateLimited"},"500":{"$ref":"#/components/responses/Knowledge_InternalError"},"503":{"$ref":"#/components/responses/Knowledge_ServiceUnavailable"}}},"post":{"operationId":"createKnowledgeBase","summary":"Create Knowledge Base","description":"Create a knowledge base in a workspace with optional folder placement and chunking configuration. An unknown `folderPath` returns `404`. Workspace folder trees exceeding 10,000 folders return `413`.\n\nOAuth scope: `api:write`.","x-sim-operation":"knowledge.create","x-oauth-scope":"api:write","tags":["Knowledge Bases"],"requestBody":{"required":true,"description":"Workspace, name, description, chunking configuration, and folder placement.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Knowledge_CreateKnowledgeBaseRequest"}}}},"responses":{"201":{"description":"The created knowledge base.","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/Knowledge_X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/Knowledge_X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/Knowledge_X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Knowledge_V2KnowledgeBaseResponse"}}}},"400":{"$ref":"#/components/responses/Knowledge_BadRequest"},"401":{"$ref":"#/components/responses/Knowledge_Unauthorized"},"403":{"$ref":"#/components/responses/Knowledge_Forbidden"},"404":{"$ref":"#/components/responses/Knowledge_NotFound"},"409":{"$ref":"#/components/responses/Knowledge_Conflict"},"413":{"$ref":"#/components/responses/Knowledge_PayloadTooLarge"},"415":{"$ref":"#/components/responses/Knowledge_UnsupportedMediaType"},"429":{"$ref":"#/components/responses/Knowledge_RateLimited"},"500":{"$ref":"#/components/responses/Knowledge_InternalError"},"503":{"$ref":"#/components/responses/Knowledge_ServiceUnavailable"}}}},"/api/v2/knowledge/{knowledgeBaseId}":{"get":{"operationId":"getKnowledgeBase","summary":"Get Knowledge Base","description":"Get a knowledge base's metadata and document counts. Inaccessible knowledge bases return `404`. Workspace folder trees exceeding 10,000 folders return `413`.\n\nOAuth scope: `api:read`.","x-sim-operation":"knowledge.read","x-oauth-scope":"api:read","tags":["Knowledge Bases"],"parameters":[{"name":"knowledgeBaseId","in":"path","required":true,"description":"Unique knowledge base identifier.","schema":{"type":"string","minLength":1,"description":"Unique knowledge base identifier."}},{"name":"workspaceId","in":"query","required":true,"description":"Workspace that owns the knowledge base.","schema":{"type":"string","minLength":1,"description":"Workspace that owns the knowledge base."}}],"responses":{"200":{"description":"The requested knowledge base.","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/Knowledge_X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/Knowledge_X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/Knowledge_X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Knowledge_V2KnowledgeBaseResponse"}}}},"400":{"$ref":"#/components/responses/Knowledge_BadRequest"},"401":{"$ref":"#/components/responses/Knowledge_Unauthorized"},"403":{"$ref":"#/components/responses/Knowledge_Forbidden"},"404":{"$ref":"#/components/responses/Knowledge_NotFound"},"413":{"$ref":"#/components/responses/Knowledge_PayloadTooLarge"},"429":{"$ref":"#/components/responses/Knowledge_RateLimited"},"500":{"$ref":"#/components/responses/Knowledge_InternalError"},"503":{"$ref":"#/components/responses/Knowledge_ServiceUnavailable"}}},"patch":{"operationId":"updateKnowledgeBase","summary":"Update Knowledge Base","description":"Update a knowledge base's name, description, chunking configuration, or folder placement. Workspace folder trees exceeding 10,000 folders return `413`.\n\nOAuth scope: `api:write`.","x-sim-operation":"knowledge.update","x-oauth-scope":"api:write","tags":["Knowledge Bases"],"parameters":[{"name":"knowledgeBaseId","in":"path","required":true,"description":"Unique knowledge base identifier.","schema":{"type":"string","minLength":1,"description":"Unique knowledge base identifier."}}],"requestBody":{"required":true,"description":"Workspace scope and fields to update. At least one mutable field is required.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Knowledge_UpdateKnowledgeBaseRequest"}}}},"responses":{"200":{"description":"The updated knowledge base.","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/Knowledge_X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/Knowledge_X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/Knowledge_X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Knowledge_V2KnowledgeBaseResponse"}}}},"400":{"$ref":"#/components/responses/Knowledge_BadRequest"},"401":{"$ref":"#/components/responses/Knowledge_Unauthorized"},"403":{"$ref":"#/components/responses/Knowledge_Forbidden"},"404":{"$ref":"#/components/responses/Knowledge_NotFound"},"409":{"$ref":"#/components/responses/Knowledge_Conflict"},"413":{"$ref":"#/components/responses/Knowledge_PayloadTooLarge"},"415":{"$ref":"#/components/responses/Knowledge_UnsupportedMediaType"},"429":{"$ref":"#/components/responses/Knowledge_RateLimited"},"500":{"$ref":"#/components/responses/Knowledge_InternalError"},"503":{"$ref":"#/components/responses/Knowledge_ServiceUnavailable"}}},"delete":{"operationId":"deleteKnowledgeBase","summary":"Delete Knowledge Base","description":"Archive a knowledge base, its documents, and its connectors, pausing synchronization. Use List Knowledge Bases with `scope=archived` to find it and Restore Knowledge Base to recover it.\n\nOAuth scope: `api:write`.","x-sim-operation":"knowledge.delete","x-oauth-scope":"api:write","tags":["Knowledge Bases"],"parameters":[{"name":"knowledgeBaseId","in":"path","required":true,"description":"Unique knowledge base identifier.","schema":{"type":"string","minLength":1,"description":"Unique knowledge base identifier."}},{"name":"workspaceId","in":"query","required":true,"description":"Workspace that owns the knowledge base.","schema":{"type":"string","minLength":1,"description":"Workspace that owns the knowledge base."}}],"responses":{"200":{"description":"Knowledge base deletion acknowledgement.","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/Knowledge_X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/Knowledge_X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/Knowledge_X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Knowledge_V2KnowledgeDeleteResponse"}}}},"400":{"$ref":"#/components/responses/Knowledge_BadRequest"},"401":{"$ref":"#/components/responses/Knowledge_Unauthorized"},"403":{"$ref":"#/components/responses/Knowledge_Forbidden"},"404":{"$ref":"#/components/responses/Knowledge_NotFound"},"429":{"$ref":"#/components/responses/Knowledge_RateLimited"},"500":{"$ref":"#/components/responses/Knowledge_InternalError"},"503":{"$ref":"#/components/responses/Knowledge_ServiceUnavailable"}}}},"/api/v2/knowledge/{knowledgeBaseId}/export":{"get":{"operationId":"exportKnowledgeBase","summary":"Export Knowledge Base","description":"Stream a knowledge base as a bundle archive: its configuration, tag definitions, each workspace-visible document's file and chunk text, and optionally chunk vectors. Access-control lists, connector links, and credentials never leave. More than 2000 documents returns `413`. Exports record an audit event. `HEAD` checks access with the same authorization as `GET` but skips side effects, returning an empty `200` without payload headers on success. `HEAD` omits `Content-Length`; use file metadata to size downloads.\n\nOAuth scope: `api:read`.","x-sim-operation":"knowledge.export","x-oauth-scope":"api:read","tags":["Knowledge Bases"],"parameters":[{"name":"knowledgeBaseId","in":"path","required":true,"description":"Unique knowledge base identifier.","schema":{"type":"string","minLength":1,"description":"Unique knowledge base identifier."}},{"name":"workspaceId","in":"query","required":true,"description":"Workspace that owns the knowledge base.","schema":{"type":"string","minLength":1,"maxLength":128,"description":"Workspace that owns the knowledge base."}},{"name":"vectors","in":"query","required":false,"description":"Include chunk vectors so an import into a deployment with the same embedding model reuses them instead of re-embedding.","schema":{"description":"Include chunk vectors so an import into a deployment with the same embedding model reuses them instead of re-embedding.","type":"boolean"}}],"responses":{"200":{"description":"The knowledge base as a zip archive.","headers":{"Content-Type":{"$ref":"#/components/headers/Knowledge_Content-Type"},"Content-Disposition":{"$ref":"#/components/headers/Knowledge_Content-Disposition"},"X-RateLimit-Limit":{"$ref":"#/components/headers/Knowledge_X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/Knowledge_X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/Knowledge_X-RateLimit-Reset"}},"content":{"application/zip":{"schema":{"type":"string","format":"binary"}}}},"400":{"$ref":"#/components/responses/Knowledge_BadRequest"},"401":{"$ref":"#/components/responses/Knowledge_Unauthorized"},"403":{"$ref":"#/components/responses/Knowledge_Forbidden"},"404":{"$ref":"#/components/responses/Knowledge_NotFound"},"413":{"$ref":"#/components/responses/Knowledge_PayloadTooLarge"},"429":{"$ref":"#/components/responses/Knowledge_RateLimited"},"500":{"$ref":"#/components/responses/Knowledge_InternalError"},"503":{"$ref":"#/components/responses/Knowledge_ServiceUnavailable"}}}},"/api/v2/knowledge/{knowledgeBaseId}/connectors":{"get":{"operationId":"listKnowledgeConnectors","summary":"List Knowledge Connectors","description":"List external sources connected to a knowledge base with cursor pagination. Stored API keys are never returned. Workspace API keys return `403`; use a personal API key or scoped OAuth token.\n\nOAuth scope: `api:read`.","x-sim-operation":"knowledge.connectors.list","x-oauth-scope":"api:read","tags":["Knowledge Bases"],"parameters":[{"name":"knowledgeBaseId","in":"path","required":true,"description":"Unique knowledge base identifier.","schema":{"type":"string","minLength":1,"description":"Unique knowledge base identifier."}},{"name":"workspaceId","in":"query","required":true,"description":"Workspace that owns the knowledge base.","schema":{"type":"string","minLength":1,"maxLength":128,"description":"Workspace that owns the knowledge base."}},{"name":"sortBy","in":"query","required":false,"description":"Field used to sort the result.","schema":{"default":"createdAt","description":"Field used to sort the result.","type":"string","enum":["connectorType","createdAt","updatedAt"]}},{"name":"sortOrder","in":"query","required":false,"description":"Sort direction.","schema":{"default":"desc","description":"Sort direction.","type":"string","enum":["asc","desc"]}},{"name":"limit","in":"query","required":false,"description":"Maximum connectors to return per page. Must be a whole number from 1 to 100. Defaults to 50.","schema":{"default":50,"description":"Maximum connectors to return per page. Must be a whole number from 1 to 100. Defaults to 50.","type":"integer","minimum":1,"maximum":100}},{"name":"cursor","in":"query","required":false,"description":"Opaque cursor from the previous page. Send it back with the same sort and filters; only `limit` may change. Change anything else and pagination must restart without a cursor.","schema":{"description":"Opaque cursor from the previous page. Send it back with the same sort and filters; only `limit` may change. Change anything else and pagination must restart without a cursor.","type":"string","minLength":1}}],"responses":{"200":{"description":"A page of knowledge connectors.","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/Knowledge_X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/Knowledge_X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/Knowledge_X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Knowledge_V2KnowledgeConnectorListResponse"}}}},"400":{"$ref":"#/components/responses/Knowledge_BadRequest"},"401":{"$ref":"#/components/responses/Knowledge_Unauthorized"},"403":{"$ref":"#/components/responses/Knowledge_Forbidden"},"404":{"$ref":"#/components/responses/Knowledge_NotFound"},"429":{"$ref":"#/components/responses/Knowledge_RateLimited"},"500":{"$ref":"#/components/responses/Knowledge_InternalError"},"503":{"$ref":"#/components/responses/Knowledge_ServiceUnavailable"}}},"post":{"operationId":"createKnowledgeConnector","summary":"Create Knowledge Connector","description":"Validate and connect an external source, then queue its initial synchronization. The `apiKey` field is never returned. Workspace API keys return `403`; use a personal API key or scoped OAuth token.\n\nOAuth scope: `api:write`.","x-sim-operation":"knowledge.connectors.create","x-oauth-scope":"api:write","tags":["Knowledge Bases"],"parameters":[{"name":"knowledgeBaseId","in":"path","required":true,"description":"Unique knowledge base identifier.","schema":{"type":"string","minLength":1,"description":"Unique knowledge base identifier."}}],"requestBody":{"required":true,"description":"Workspace, connector type, authentication reference, source configuration, and sync schedule.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Knowledge_CreateKnowledgeConnectorRequest"}}}},"responses":{"201":{"description":"The created connector without secret material.","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/Knowledge_X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/Knowledge_X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/Knowledge_X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Knowledge_V2KnowledgeConnectorResponse"}}}},"400":{"$ref":"#/components/responses/Knowledge_BadRequest"},"401":{"$ref":"#/components/responses/Knowledge_Unauthorized"},"403":{"$ref":"#/components/responses/Knowledge_Forbidden"},"404":{"$ref":"#/components/responses/Knowledge_NotFound"},"409":{"$ref":"#/components/responses/Knowledge_Conflict"},"413":{"$ref":"#/components/responses/Knowledge_PayloadTooLarge"},"415":{"$ref":"#/components/responses/Knowledge_UnsupportedMediaType"},"429":{"$ref":"#/components/responses/Knowledge_RateLimited"},"500":{"$ref":"#/components/responses/Knowledge_InternalError"},"503":{"$ref":"#/components/responses/Knowledge_ServiceUnavailable"}}}},"/api/v2/knowledge/{knowledgeBaseId}/connectors/{connectorId}":{"get":{"operationId":"getKnowledgeConnector","summary":"Get Knowledge Connector","description":"Get one connector and its ten most recent synchronization attempts. Stored API keys are never returned. Workspace API keys return `403`; use a personal API key or scoped OAuth token.\n\nOAuth scope: `api:read`.","x-sim-operation":"knowledge.connectors.read","x-oauth-scope":"api:read","tags":["Knowledge Bases"],"parameters":[{"name":"connectorId","in":"path","required":true,"description":"Connector selected for the operation.","schema":{"type":"string","minLength":1,"description":"Connector selected for the operation."}},{"name":"knowledgeBaseId","in":"path","required":true,"description":"Knowledge base that owns the connector.","schema":{"type":"string","minLength":1,"description":"Knowledge base that owns the connector."}},{"name":"workspaceId","in":"query","required":true,"description":"Workspace that owns the knowledge base.","schema":{"type":"string","minLength":1,"maxLength":128,"description":"Workspace that owns the knowledge base."}}],"responses":{"200":{"description":"The connector and recent synchronization history.","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/Knowledge_X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/Knowledge_X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/Knowledge_X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Knowledge_V2KnowledgeConnectorDetailResponse"}}}},"400":{"$ref":"#/components/responses/Knowledge_BadRequest"},"401":{"$ref":"#/components/responses/Knowledge_Unauthorized"},"403":{"$ref":"#/components/responses/Knowledge_Forbidden"},"404":{"$ref":"#/components/responses/Knowledge_NotFound"},"429":{"$ref":"#/components/responses/Knowledge_RateLimited"},"500":{"$ref":"#/components/responses/Knowledge_InternalError"},"503":{"$ref":"#/components/responses/Knowledge_ServiceUnavailable"}}},"patch":{"operationId":"updateKnowledgeConnector","summary":"Update Knowledge Connector","description":"Update connector source configuration, schedule, or active state. Replacing source configuration on a runnable connector queues an immediate synchronization; paused connectors retain the change without synchronizing until resumed. Source configuration cannot be replaced while synchronization is already in progress. Authentication material cannot be changed through this operation. Workspace API keys return `403`; use a personal API key or scoped OAuth token.\n\nOAuth scope: `api:write`.","x-sim-operation":"knowledge.connectors.update","x-oauth-scope":"api:write","tags":["Knowledge Bases"],"parameters":[{"name":"connectorId","in":"path","required":true,"description":"Connector selected for the operation.","schema":{"type":"string","minLength":1,"description":"Connector selected for the operation."}},{"name":"knowledgeBaseId","in":"path","required":true,"description":"Knowledge base that owns the connector.","schema":{"type":"string","minLength":1,"description":"Knowledge base that owns the connector."}}],"requestBody":{"required":true,"description":"Workspace scope and at least one mutable connector field.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Knowledge_UpdateKnowledgeConnectorRequest"}}}},"responses":{"200":{"description":"The updated connector.","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/Knowledge_X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/Knowledge_X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/Knowledge_X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Knowledge_V2KnowledgeConnectorResponse"}}}},"400":{"$ref":"#/components/responses/Knowledge_BadRequest"},"401":{"$ref":"#/components/responses/Knowledge_Unauthorized"},"403":{"$ref":"#/components/responses/Knowledge_Forbidden"},"404":{"$ref":"#/components/responses/Knowledge_NotFound"},"409":{"$ref":"#/components/responses/Knowledge_Conflict"},"413":{"$ref":"#/components/responses/Knowledge_PayloadTooLarge"},"415":{"$ref":"#/components/responses/Knowledge_UnsupportedMediaType"},"429":{"$ref":"#/components/responses/Knowledge_RateLimited"},"500":{"$ref":"#/components/responses/Knowledge_InternalError"},"503":{"$ref":"#/components/responses/Knowledge_ServiceUnavailable"}}},"delete":{"operationId":"deleteKnowledgeConnector","summary":"Delete Knowledge Connector","description":"Delete a connector and optionally its synchronized documents. Documents are retained by default. Workspace API keys return `403`; use a personal API key or scoped OAuth token.\n\nOAuth scope: `api:write`.","x-sim-operation":"knowledge.connectors.delete","x-oauth-scope":"api:write","tags":["Knowledge Bases"],"parameters":[{"name":"connectorId","in":"path","required":true,"description":"Connector selected for the operation.","schema":{"type":"string","minLength":1,"description":"Connector selected for the operation."}},{"name":"knowledgeBaseId","in":"path","required":true,"description":"Knowledge base that owns the connector.","schema":{"type":"string","minLength":1,"description":"Knowledge base that owns the connector."}},{"name":"workspaceId","in":"query","required":true,"description":"Workspace that owns the knowledge base.","schema":{"type":"string","minLength":1,"maxLength":128,"description":"Workspace that owns the knowledge base."}},{"name":"deleteDocuments","in":"query","required":false,"description":"Also permanently delete documents produced by this connector.","schema":{"description":"Also permanently delete documents produced by this connector.","type":"boolean"}}],"responses":{"200":{"description":"Connector deletion acknowledgement and document counts.","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/Knowledge_X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/Knowledge_X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/Knowledge_X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Knowledge_V2KnowledgeConnectorDeleteResponse"}}}},"400":{"$ref":"#/components/responses/Knowledge_BadRequest"},"401":{"$ref":"#/components/responses/Knowledge_Unauthorized"},"403":{"$ref":"#/components/responses/Knowledge_Forbidden"},"404":{"$ref":"#/components/responses/Knowledge_NotFound"},"429":{"$ref":"#/components/responses/Knowledge_RateLimited"},"500":{"$ref":"#/components/responses/Knowledge_InternalError"},"503":{"$ref":"#/components/responses/Knowledge_ServiceUnavailable"}}}},"/api/v2/knowledge/{knowledgeBaseId}/connectors/{connectorId}/sync":{"post":{"operationId":"syncKnowledgeConnector","summary":"Sync Knowledge Connector","description":"Queue a connector synchronization. Rehydration forces existing documents to be fetched and indexed again. Workspace API keys return `403`; use a personal API key or scoped OAuth token.\n\nOAuth scope: `api:write`.","x-sim-operation":"knowledge.connectors.sync","x-oauth-scope":"api:write","tags":["Knowledge Bases"],"parameters":[{"name":"connectorId","in":"path","required":true,"description":"Connector selected for the operation.","schema":{"type":"string","minLength":1,"description":"Connector selected for the operation."}},{"name":"knowledgeBaseId","in":"path","required":true,"description":"Knowledge base that owns the connector.","schema":{"type":"string","minLength":1,"description":"Knowledge base that owns the connector."}}],"requestBody":{"required":true,"description":"Workspace scope and optional full rehydration control.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Knowledge_SyncKnowledgeConnectorRequest"}}}},"responses":{"200":{"description":"Synchronization was queued.","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/Knowledge_X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/Knowledge_X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/Knowledge_X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Knowledge_V2KnowledgeConnectorSyncResponse"}}}},"400":{"$ref":"#/components/responses/Knowledge_BadRequest"},"401":{"$ref":"#/components/responses/Knowledge_Unauthorized"},"403":{"$ref":"#/components/responses/Knowledge_Forbidden"},"404":{"$ref":"#/components/responses/Knowledge_NotFound"},"409":{"$ref":"#/components/responses/Knowledge_Conflict"},"413":{"$ref":"#/components/responses/Knowledge_PayloadTooLarge"},"415":{"$ref":"#/components/responses/Knowledge_UnsupportedMediaType"},"429":{"$ref":"#/components/responses/Knowledge_RateLimited"},"500":{"$ref":"#/components/responses/Knowledge_InternalError"},"503":{"$ref":"#/components/responses/Knowledge_ServiceUnavailable"}}}},"/api/v2/knowledge/{knowledgeBaseId}/connectors/{connectorId}/documents":{"get":{"operationId":"listKnowledgeConnectorDocuments","summary":"List Knowledge Connector Documents","description":"List documents produced by one connector with opaque cursor pagination. Excluded documents are omitted unless explicitly requested. Workspace API keys return `403`; use a personal API key or scoped OAuth token.\n\nOAuth scope: `api:read`.","x-sim-operation":"knowledge.connectors.documents.list","x-oauth-scope":"api:read","tags":["Knowledge Bases"],"parameters":[{"name":"connectorId","in":"path","required":true,"description":"Connector selected for the operation.","schema":{"type":"string","minLength":1,"description":"Connector selected for the operation."}},{"name":"knowledgeBaseId","in":"path","required":true,"description":"Knowledge base that owns the connector.","schema":{"type":"string","minLength":1,"description":"Knowledge base that owns the connector."}},{"name":"workspaceId","in":"query","required":true,"description":"Workspace that owns the knowledge base.","schema":{"type":"string","minLength":1,"maxLength":128,"description":"Workspace that owns the knowledge base."}},{"name":"includeExcluded","in":"query","required":false,"description":"Include documents explicitly excluded by a user.","schema":{"description":"Include documents explicitly excluded by a user.","type":"boolean"}},{"name":"limit","in":"query","required":false,"description":"Maximum connector documents to return per page. Must be a whole number from 1 to 100. Defaults to 50.","schema":{"default":50,"description":"Maximum connector documents to return per page. Must be a whole number from 1 to 100. Defaults to 50.","type":"integer","minimum":1,"maximum":100}},{"name":"cursor","in":"query","required":false,"description":"Opaque cursor from the previous page. Send it back with the same sort and filters; only `limit` may change. Change anything else and pagination must restart without a cursor.","schema":{"description":"Opaque cursor from the previous page. Send it back with the same sort and filters; only `limit` may change. Change anything else and pagination must restart without a cursor.","type":"string","minLength":1}}],"responses":{"200":{"description":"A page of connector documents.","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/Knowledge_X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/Knowledge_X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/Knowledge_X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Knowledge_V2KnowledgeConnectorDocumentListResponse"}}}},"400":{"$ref":"#/components/responses/Knowledge_BadRequest"},"401":{"$ref":"#/components/responses/Knowledge_Unauthorized"},"403":{"$ref":"#/components/responses/Knowledge_Forbidden"},"404":{"$ref":"#/components/responses/Knowledge_NotFound"},"429":{"$ref":"#/components/responses/Knowledge_RateLimited"},"500":{"$ref":"#/components/responses/Knowledge_InternalError"},"503":{"$ref":"#/components/responses/Knowledge_ServiceUnavailable"}}},"patch":{"operationId":"updateKnowledgeConnectorDocuments","summary":"Update Knowledge Connector Documents","description":"Exclude connector documents from knowledge search or restore previously excluded documents. Only documents produced by the selected connector can change. Workspace API keys return `403`; use a personal API key or scoped OAuth token.\n\nOAuth scope: `api:write`.","x-sim-operation":"knowledge.connectors.documents.update","x-oauth-scope":"api:write","tags":["Knowledge Bases"],"parameters":[{"name":"connectorId","in":"path","required":true,"description":"Connector selected for the operation.","schema":{"type":"string","minLength":1,"description":"Connector selected for the operation."}},{"name":"knowledgeBaseId","in":"path","required":true,"description":"Knowledge base that owns the connector.","schema":{"type":"string","minLength":1,"description":"Knowledge base that owns the connector."}}],"requestBody":{"required":true,"description":"Workspace, restore or exclude operation, and selected document identifiers.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Knowledge_UpdateKnowledgeConnectorDocumentsRequest"}}}},"responses":{"200":{"description":"The selected connector documents were updated.","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/Knowledge_X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/Knowledge_X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/Knowledge_X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Knowledge_V2KnowledgeConnectorDocumentsUpdateResponse"}}}},"400":{"$ref":"#/components/responses/Knowledge_BadRequest"},"401":{"$ref":"#/components/responses/Knowledge_Unauthorized"},"403":{"$ref":"#/components/responses/Knowledge_Forbidden"},"404":{"$ref":"#/components/responses/Knowledge_NotFound"},"413":{"$ref":"#/components/responses/Knowledge_PayloadTooLarge"},"415":{"$ref":"#/components/responses/Knowledge_UnsupportedMediaType"},"429":{"$ref":"#/components/responses/Knowledge_RateLimited"},"500":{"$ref":"#/components/responses/Knowledge_InternalError"},"503":{"$ref":"#/components/responses/Knowledge_ServiceUnavailable"}}}},"/api/v2/knowledge/search":{"post":{"operationId":"searchKnowledge","summary":"Search Knowledge","description":"Search one or more knowledge bases with semantic vector retrieval, optional hybrid full-text retrieval, and structured tag filters. Every result names the `knowledgeBaseId` it came from. A request body over 2 MiB is a `413`. Reranking returns `409` when the stored results cannot pass secret-provenance enforcement.\n\nOAuth scope: `api:read`.","x-sim-operation":"knowledge.search","x-oauth-scope":"api:read","tags":["Knowledge Bases"],"requestBody":{"required":true,"description":"Knowledge bases, query, result limit, retrieval mode, and optional tag filters.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Knowledge_SearchKnowledgeRequest"}}}},"responses":{"200":{"description":"Matching document chunks ordered by relevance.","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/Knowledge_X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/Knowledge_X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/Knowledge_X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Knowledge_V2KnowledgeSearchResponse"}}}},"400":{"$ref":"#/components/responses/Knowledge_BadRequest"},"401":{"$ref":"#/components/responses/Knowledge_Unauthorized"},"402":{"$ref":"#/components/responses/Knowledge_UsageLimitExceeded"},"403":{"$ref":"#/components/responses/Knowledge_Forbidden"},"404":{"$ref":"#/components/responses/Knowledge_NotFound"},"409":{"$ref":"#/components/responses/Knowledge_Conflict"},"413":{"$ref":"#/components/responses/Knowledge_PayloadTooLarge"},"415":{"$ref":"#/components/responses/Knowledge_UnsupportedMediaType"},"429":{"$ref":"#/components/responses/Knowledge_RateLimited"},"500":{"$ref":"#/components/responses/Knowledge_InternalError"},"503":{"$ref":"#/components/responses/Knowledge_ServiceUnavailable"}}}},"/api/v2/knowledge/{knowledgeBaseId}/tags":{"get":{"operationId":"listKnowledgeTags","summary":"List Tags","description":"List the knowledge base's tag definitions with display names, write slots, and field types. Filters and document reads use display names; document writes use slots. Returns the complete set in one page; `nextCursor` is always null.\n\nOAuth scope: `api:read`.","x-sim-operation":"knowledge.tags.list","x-oauth-scope":"api:read","tags":["Knowledge Bases"],"parameters":[{"name":"knowledgeBaseId","in":"path","required":true,"description":"Unique knowledge base identifier.","schema":{"type":"string","minLength":1,"description":"Unique knowledge base identifier."}},{"name":"workspaceId","in":"query","required":true,"description":"Workspace that owns the knowledge base.","schema":{"type":"string","minLength":1,"description":"Workspace that owns the knowledge base."}}],"responses":{"200":{"description":"The knowledge base tag vocabulary.","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/Knowledge_X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/Knowledge_X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/Knowledge_X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Knowledge_V2KnowledgeTagListResponse"}}}},"400":{"$ref":"#/components/responses/Knowledge_BadRequest"},"401":{"$ref":"#/components/responses/Knowledge_Unauthorized"},"403":{"$ref":"#/components/responses/Knowledge_Forbidden"},"404":{"$ref":"#/components/responses/Knowledge_NotFound"},"429":{"$ref":"#/components/responses/Knowledge_RateLimited"},"500":{"$ref":"#/components/responses/Knowledge_InternalError"},"503":{"$ref":"#/components/responses/Knowledge_ServiceUnavailable"}}},"post":{"operationId":"createKnowledgeTag","summary":"Create Tag","description":"Create a tag definition. Write document values by `tagSlot` and filter by `displayName`. Omitting `tagSlot` selects a free slot; exhaustion returns `400`. An occupied slot or duplicate name returns `409`. Use Bulk Save Tag Definitions for multiple definitions. Workspace API keys return `403`; use a personal API key or scoped OAuth token.\n\nOAuth scope: `api:write`.","x-sim-operation":"knowledge.tags.create","x-oauth-scope":"api:write","tags":["Knowledge Bases"],"parameters":[{"name":"knowledgeBaseId","in":"path","required":true,"description":"Unique knowledge base identifier.","schema":{"type":"string","minLength":1,"description":"Unique knowledge base identifier."}}],"requestBody":{"required":true,"description":"Workspace scope, display name, field type, and optional slot.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Knowledge_CreateKnowledgeTagRequest"}}}},"responses":{"201":{"description":"The created tag definition.","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/Knowledge_X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/Knowledge_X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/Knowledge_X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Knowledge_V2KnowledgeTagResponse"}}}},"400":{"$ref":"#/components/responses/Knowledge_BadRequest"},"401":{"$ref":"#/components/responses/Knowledge_Unauthorized"},"403":{"$ref":"#/components/responses/Knowledge_Forbidden"},"404":{"$ref":"#/components/responses/Knowledge_NotFound"},"409":{"$ref":"#/components/responses/Knowledge_Conflict"},"413":{"$ref":"#/components/responses/Knowledge_PayloadTooLarge"},"415":{"$ref":"#/components/responses/Knowledge_UnsupportedMediaType"},"429":{"$ref":"#/components/responses/Knowledge_RateLimited"},"500":{"$ref":"#/components/responses/Knowledge_InternalError"},"503":{"$ref":"#/components/responses/Knowledge_ServiceUnavailable"}}},"put":{"operationId":"bulkSaveKnowledgeTagDefinitions","summary":"Bulk Save Tag Definitions","description":"Create or update tag definitions, preserving unspecified slots. Updates require `originalDisplayName`; other entries create tags. Slot and name conflicts appear in per-definition `errors` with HTTP `200`, leaving conflicting values unchanged. Use Update Document to set tag values. Workspace API keys return `403`; use a personal API key or scoped OAuth token.\n\nOAuth scope: `api:write`.","x-sim-operation":"knowledge.tags.bulk_save","x-oauth-scope":"api:write","tags":["Knowledge Bases"],"parameters":[{"name":"knowledgeBaseId","in":"path","required":true,"description":"Unique knowledge base identifier.","schema":{"type":"string","minLength":1,"description":"Unique knowledge base identifier."}}],"requestBody":{"required":true,"description":"Workspace scope and the tag definitions to create or update.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Knowledge_BulkSaveKnowledgeTagDefinitionsRequest"}}}},"responses":{"200":{"description":"Definitions created and updated by the save.","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/Knowledge_X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/Knowledge_X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/Knowledge_X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Knowledge_V2BulkSaveKnowledgeTagDefinitionsResponse"}}}},"400":{"$ref":"#/components/responses/Knowledge_BadRequest"},"401":{"$ref":"#/components/responses/Knowledge_Unauthorized"},"403":{"$ref":"#/components/responses/Knowledge_Forbidden"},"404":{"$ref":"#/components/responses/Knowledge_NotFound"},"413":{"$ref":"#/components/responses/Knowledge_PayloadTooLarge"},"415":{"$ref":"#/components/responses/Knowledge_UnsupportedMediaType"},"429":{"$ref":"#/components/responses/Knowledge_RateLimited"},"500":{"$ref":"#/components/responses/Knowledge_InternalError"},"503":{"$ref":"#/components/responses/Knowledge_ServiceUnavailable"}}},"delete":{"operationId":"deleteKnowledgeTagDefinitions","summary":"Delete Tag Definitions","description":"Delete unused tag definitions by default. With `unused=false`, permanently delete all definitions and their values from documents and chunks. Use Delete Tag to remove one definition. Workspace API keys return `403`; use a personal API key or scoped OAuth token.\n\nOAuth scope: `api:write`.","x-sim-operation":"knowledge.tags.cleanup","x-oauth-scope":"api:write","tags":["Knowledge Bases"],"parameters":[{"name":"knowledgeBaseId","in":"path","required":true,"description":"Unique knowledge base identifier.","schema":{"type":"string","minLength":1,"description":"Unique knowledge base identifier."}},{"name":"workspaceId","in":"query","required":true,"description":"Workspace that owns the knowledge base.","schema":{"type":"string","minLength":1,"maxLength":128,"description":"Workspace that owns the knowledge base."}},{"name":"unused","in":"query","required":false,"description":"Whether to remove only the tag definitions no document in the knowledge base still carries a value for. Defaults to true. Pass `unused=false` to delete every definition on the knowledge base, which also clears its slot on every document and chunk and is not recoverable.","schema":{"description":"Whether to remove only the tag definitions no document in the knowledge base still carries a value for. Defaults to true. Pass `unused=false` to delete every definition on the knowledge base, which also clears its slot on every document and chunk and is not recoverable.","type":"boolean"}}],"responses":{"200":{"description":"Number of tag definitions removed.","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/Knowledge_X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/Knowledge_X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/Knowledge_X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Knowledge_V2DeleteKnowledgeTagDefinitionsResponse"}}}},"400":{"$ref":"#/components/responses/Knowledge_BadRequest"},"401":{"$ref":"#/components/responses/Knowledge_Unauthorized"},"403":{"$ref":"#/components/responses/Knowledge_Forbidden"},"404":{"$ref":"#/components/responses/Knowledge_NotFound"},"429":{"$ref":"#/components/responses/Knowledge_RateLimited"},"500":{"$ref":"#/components/responses/Knowledge_InternalError"},"503":{"$ref":"#/components/responses/Knowledge_ServiceUnavailable"}}}},"/api/v2/knowledge/{knowledgeBaseId}/documents":{"get":{"operationId":"listKnowledgeDocuments","summary":"List Documents","description":"List documents with filename search, state and tag filters, sorting, and cursor pagination. Tag values use display names; use List Tags to resolve the slots required for writes.\n\nOAuth scope: `api:read`.","x-sim-operation":"knowledge.documents.list","x-oauth-scope":"api:read","tags":["Knowledge Bases"],"parameters":[{"name":"knowledgeBaseId","in":"path","required":true,"description":"Unique knowledge base identifier.","schema":{"type":"string","minLength":1,"description":"Unique knowledge base identifier."}},{"name":"workspaceId","in":"query","required":true,"description":"Workspace that owns the knowledge base.","schema":{"type":"string","minLength":1,"description":"Workspace that owns the knowledge base."}},{"name":"limit","in":"query","required":false,"description":"Maximum documents to return per page. Must be a whole number from 1 to 100. Defaults to 50.","schema":{"default":50,"description":"Maximum documents to return per page. Must be a whole number from 1 to 100. Defaults to 50.","type":"integer","minimum":1,"maximum":100}},{"name":"search","in":"query","required":false,"description":"Case-insensitive substring match against the document filename.","schema":{"description":"Case-insensitive substring match against the document filename.","type":"string","minLength":1,"maxLength":200}},{"name":"enabledFilter","in":"query","required":false,"description":"Filter by whether documents are enabled for search.","schema":{"default":"all","description":"Filter by whether documents are enabled for search.","type":"string","enum":["all","enabled","disabled"]}},{"name":"sortBy","in":"query","required":false,"description":"Field used to sort the result. Sorting by `filename` is case-sensitive and follows the storage collation, so do not rely on a case-insensitive order.","schema":{"default":"uploadedAt","description":"Field used to sort the result. Sorting by `filename` is case-sensitive and follows the storage collation, so do not rely on a case-insensitive order.","type":"string","enum":["filename","fileSize","tokenCount","chunkCount","uploadedAt","processingStatus","enabled"]}},{"name":"sortOrder","in":"query","required":false,"description":"Sort direction.","schema":{"default":"desc","description":"Sort direction.","type":"string","enum":["asc","desc"]}},{"name":"cursor","in":"query","required":false,"description":"Opaque cursor from the previous page. Send it back with the same sort and filters; only `limit` may change. Change anything else and pagination must restart without a cursor.","schema":{"description":"Opaque cursor from the previous page. Send it back with the same sort and filters; only `limit` may change. Change anything else and pagination must restart without a cursor.","type":"string","minLength":1}},{"name":"tagFilters","in":"query","required":false,"description":"A JSON-encoded array of at most 10 tag filters, using the same display-name shape as knowledge search: `[{\"tagName\":\"category\",\"operator\":\"eq\",\"value\":\"billing\"}]`. Every filter must hold, including two that name the same tag. A name that is not defined in this knowledge base is rejected, never ignored.","schema":{"description":"A JSON-encoded array of at most 10 tag filters, using the same display-name shape as knowledge search: `[{\"tagName\":\"category\",\"operator\":\"eq\",\"value\":\"billing\"}]`. Every filter must hold, including two that name the same tag. A name that is not defined in this knowledge base is rejected, never ignored.","examples":["[{\"tagName\":\"category\",\"operator\":\"eq\",\"value\":\"billing\"}]"],"type":"string"}}],"responses":{"200":{"description":"A page of knowledge documents.","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/Knowledge_X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/Knowledge_X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/Knowledge_X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Knowledge_V2KnowledgeDocumentListResponse"}}}},"400":{"$ref":"#/components/responses/Knowledge_BadRequest"},"401":{"$ref":"#/components/responses/Knowledge_Unauthorized"},"403":{"$ref":"#/components/responses/Knowledge_Forbidden"},"404":{"$ref":"#/components/responses/Knowledge_NotFound"},"429":{"$ref":"#/components/responses/Knowledge_RateLimited"},"500":{"$ref":"#/components/responses/Knowledge_InternalError"},"503":{"$ref":"#/components/responses/Knowledge_ServiceUnavailable"}}},"patch":{"operationId":"bulkUpdateKnowledgeDocuments","summary":"Bulk Enable or Disable Documents","description":"Enable or disable selected documents, or use `selectAll` for the entire knowledge base. Use Delete Document to remove documents individually. Workspace API keys return `403`; use a personal API key or scoped OAuth token.\n\nOAuth scope: `api:write`.","x-sim-operation":"knowledge.documents.bulk","x-oauth-scope":"api:write","tags":["Knowledge Bases"],"parameters":[{"name":"knowledgeBaseId","in":"path","required":true,"description":"Unique knowledge base identifier.","schema":{"type":"string","minLength":1,"description":"Unique knowledge base identifier."}}],"requestBody":{"required":true,"description":"Operation and the documents it applies to.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Knowledge_BulkUpdateKnowledgeDocumentsRequest"}}}},"responses":{"200":{"description":"The number and identifiers of the documents that changed.","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/Knowledge_X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/Knowledge_X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/Knowledge_X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Knowledge_V2BulkKnowledgeDocumentsResponse"}}}},"400":{"$ref":"#/components/responses/Knowledge_BadRequest"},"401":{"$ref":"#/components/responses/Knowledge_Unauthorized"},"403":{"$ref":"#/components/responses/Knowledge_Forbidden"},"404":{"$ref":"#/components/responses/Knowledge_NotFound"},"413":{"$ref":"#/components/responses/Knowledge_PayloadTooLarge"},"415":{"$ref":"#/components/responses/Knowledge_UnsupportedMediaType"},"429":{"$ref":"#/components/responses/Knowledge_RateLimited"},"500":{"$ref":"#/components/responses/Knowledge_InternalError"},"503":{"$ref":"#/components/responses/Knowledge_ServiceUnavailable"}}},"post":{"operationId":"uploadKnowledgeDocument","summary":"Upload Document","description":"Upload one document as multipart form data. Processing continues asynchronously after the document is accepted.\n\nOAuth scope: `api:write`.","x-sim-operation":"knowledge.documents.upload","x-oauth-scope":"api:write","tags":["Knowledge Bases"],"parameters":[{"name":"knowledgeBaseId","in":"path","required":true,"description":"Unique knowledge base identifier.","schema":{"type":"string","minLength":1,"description":"Unique knowledge base identifier."}},{"name":"workspaceId","in":"query","required":true,"description":"Workspace that owns the knowledge base.","schema":{"type":"string","minLength":1,"maxLength":128,"description":"Workspace that owns the knowledge base."}}],"requestBody":{"required":true,"description":"Multipart form containing the document file.","content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Knowledge_UploadKnowledgeDocumentForm"}}}},"responses":{"201":{"description":"The accepted document queued for processing.","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/Knowledge_X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/Knowledge_X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/Knowledge_X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Knowledge_V2KnowledgeDocumentSummaryResponse"}}}},"400":{"$ref":"#/components/responses/Knowledge_BadRequest"},"401":{"$ref":"#/components/responses/Knowledge_Unauthorized"},"402":{"$ref":"#/components/responses/Knowledge_UsageLimitExceeded"},"403":{"$ref":"#/components/responses/Knowledge_Forbidden"},"404":{"$ref":"#/components/responses/Knowledge_NotFound"},"413":{"$ref":"#/components/responses/Knowledge_PayloadTooLarge"},"415":{"$ref":"#/components/responses/Knowledge_UnsupportedMediaType"},"429":{"$ref":"#/components/responses/Knowledge_RateLimited"},"500":{"$ref":"#/components/responses/Knowledge_InternalError"},"503":{"$ref":"#/components/responses/Knowledge_ServiceUnavailable"}}}},"/api/v2/knowledge/{knowledgeBaseId}/documents/uploads":{"post":{"operationId":"createKnowledgeDocumentUpload","summary":"Create Document Upload","description":"Create a resumable upload session and receive direct PUT or multipart transfer instructions.\n\nOAuth scope: `api:write`.","x-sim-operation":"knowledge.documents.upload.create","x-oauth-scope":"api:write","tags":["Knowledge Bases"],"parameters":[{"name":"knowledgeBaseId","in":"path","required":true,"description":"Unique knowledge base identifier.","schema":{"type":"string","minLength":1,"description":"Unique knowledge base identifier."}}],"requestBody":{"required":true,"description":"Document metadata used to authorize and initialize the upload.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Knowledge_CreateKnowledgeDocumentUploadRequest"}}}},"responses":{"201":{"description":"The created upload session and transfer instructions.","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/Knowledge_X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/Knowledge_X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/Knowledge_X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Knowledge_V2CreateKnowledgeDocumentUploadResponse"}}}},"400":{"$ref":"#/components/responses/Knowledge_BadRequest"},"401":{"$ref":"#/components/responses/Knowledge_Unauthorized"},"402":{"$ref":"#/components/responses/Knowledge_UsageLimitExceeded"},"403":{"$ref":"#/components/responses/Knowledge_Forbidden"},"404":{"$ref":"#/components/responses/Knowledge_NotFound"},"413":{"$ref":"#/components/responses/Knowledge_PayloadTooLarge"},"415":{"$ref":"#/components/responses/Knowledge_UnsupportedMediaType"},"429":{"$ref":"#/components/responses/Knowledge_RateLimited"},"500":{"$ref":"#/components/responses/Knowledge_InternalError"},"503":{"$ref":"#/components/responses/Knowledge_ServiceUnavailable"}}}},"/api/v2/knowledge/{knowledgeBaseId}/documents/uploads/{uploadId}":{"delete":{"operationId":"abortKnowledgeDocumentUpload","summary":"Abort Document Upload","description":"Abort an incomplete upload session and discard its uploaded data. Completed uploads cannot be aborted.\n\nOAuth scope: `api:write`.","x-sim-operation":"knowledge.documents.upload.cancel","x-oauth-scope":"api:write","tags":["Knowledge Bases"],"parameters":[{"name":"knowledgeBaseId","in":"path","required":true,"description":"Unique knowledge base identifier.","schema":{"type":"string","minLength":1,"description":"Unique knowledge base identifier."}},{"name":"uploadId","in":"path","required":true,"description":"Upload session identifier returned when the upload was created.","schema":{"type":"string","minLength":1,"description":"Upload session identifier returned when the upload was created."}},{"name":"workspaceId","in":"query","required":true,"description":"Workspace that owns the knowledge base.","schema":{"type":"string","minLength":1,"maxLength":128,"description":"Workspace that owns the knowledge base."}},{"name":"upload-token","in":"header","required":true,"description":"Signed upload control token returned when the upload session was created.","schema":{"type":"string","minLength":1,"description":"Signed upload control token returned when the upload session was created."}}],"responses":{"200":{"description":"The aborted upload session.","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/Knowledge_X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/Knowledge_X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/Knowledge_X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Knowledge_V2KnowledgeDocumentUploadResponse"}}}},"400":{"$ref":"#/components/responses/Knowledge_BadRequest"},"401":{"$ref":"#/components/responses/Knowledge_Unauthorized"},"403":{"$ref":"#/components/responses/Knowledge_Forbidden"},"404":{"$ref":"#/components/responses/Knowledge_NotFound"},"409":{"$ref":"#/components/responses/Knowledge_Conflict"},"429":{"$ref":"#/components/responses/Knowledge_RateLimited"},"500":{"$ref":"#/components/responses/Knowledge_InternalError"},"503":{"$ref":"#/components/responses/Knowledge_ServiceUnavailable"}}}},"/api/v2/knowledge/{knowledgeBaseId}/documents/uploads/{uploadId}/parts":{"post":{"operationId":"createKnowledgeDocumentUploadPartUrls","summary":"Create Document Upload Part URLs","description":"Create short-lived signed PUT URLs for up to 100 multipart part numbers.\n\nOAuth scope: `api:write`.","x-sim-operation":"knowledge.documents.upload.parts","x-oauth-scope":"api:write","tags":["Knowledge Bases"],"parameters":[{"name":"knowledgeBaseId","in":"path","required":true,"description":"Unique knowledge base identifier.","schema":{"type":"string","minLength":1,"description":"Unique knowledge base identifier."}},{"name":"uploadId","in":"path","required":true,"description":"Upload session identifier returned when the upload was created.","schema":{"type":"string","minLength":1,"description":"Upload session identifier returned when the upload was created."}},{"name":"workspaceId","in":"query","required":true,"description":"Workspace that owns the knowledge base.","schema":{"type":"string","minLength":1,"maxLength":128,"description":"Workspace that owns the knowledge base."}},{"name":"upload-token","in":"header","required":true,"description":"Signed upload control token returned when the upload session was created.","schema":{"type":"string","minLength":1,"description":"Signed upload control token returned when the upload session was created."}}],"requestBody":{"required":true,"description":"Multipart part numbers for which signed URLs should be created.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Knowledge_CreateKnowledgeDocumentUploadPartUrlsRequest"}}}},"responses":{"200":{"description":"Signed URLs for the requested upload parts.","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/Knowledge_X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/Knowledge_X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/Knowledge_X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Knowledge_V2KnowledgeDocumentUploadPartUrlsResponse"}}}},"400":{"$ref":"#/components/responses/Knowledge_BadRequest"},"401":{"$ref":"#/components/responses/Knowledge_Unauthorized"},"403":{"$ref":"#/components/responses/Knowledge_Forbidden"},"404":{"$ref":"#/components/responses/Knowledge_NotFound"},"409":{"$ref":"#/components/responses/Knowledge_Conflict"},"413":{"$ref":"#/components/responses/Knowledge_PayloadTooLarge"},"415":{"$ref":"#/components/responses/Knowledge_UnsupportedMediaType"},"429":{"$ref":"#/components/responses/Knowledge_RateLimited"},"500":{"$ref":"#/components/responses/Knowledge_InternalError"},"503":{"$ref":"#/components/responses/Knowledge_ServiceUnavailable"}}}},"/api/v2/knowledge/{knowledgeBaseId}/documents/uploads/{uploadId}/complete":{"post":{"operationId":"completeKnowledgeDocumentUpload","summary":"Complete Document Upload","description":"Verify a direct upload or assemble multipart parts, create the knowledge document, and queue asynchronous processing.\n\nOAuth scope: `api:write`.","x-sim-operation":"knowledge.documents.upload.complete","x-oauth-scope":"api:write","tags":["Knowledge Bases"],"parameters":[{"name":"knowledgeBaseId","in":"path","required":true,"description":"Unique knowledge base identifier.","schema":{"type":"string","minLength":1,"description":"Unique knowledge base identifier."}},{"name":"uploadId","in":"path","required":true,"description":"Upload session identifier returned when the upload was created.","schema":{"type":"string","minLength":1,"description":"Upload session identifier returned when the upload was created."}},{"name":"workspaceId","in":"query","required":true,"description":"Workspace that owns the knowledge base.","schema":{"type":"string","minLength":1,"maxLength":128,"description":"Workspace that owns the knowledge base."}},{"name":"upload-token","in":"header","required":true,"description":"Signed upload control token returned when the upload session was created.","schema":{"type":"string","minLength":1,"description":"Signed upload control token returned when the upload session was created."}}],"responses":{"200":{"description":"The completed upload and queued document.","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/Knowledge_X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/Knowledge_X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/Knowledge_X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Knowledge_V2KnowledgeDocumentUploadResponse"}}}},"400":{"$ref":"#/components/responses/Knowledge_BadRequest"},"401":{"$ref":"#/components/responses/Knowledge_Unauthorized"},"403":{"$ref":"#/components/responses/Knowledge_Forbidden"},"404":{"$ref":"#/components/responses/Knowledge_NotFound"},"409":{"$ref":"#/components/responses/Knowledge_Conflict"},"429":{"$ref":"#/components/responses/Knowledge_RateLimited"},"500":{"$ref":"#/components/responses/Knowledge_InternalError"},"503":{"$ref":"#/components/responses/Knowledge_ServiceUnavailable"}}}},"/api/v2/knowledge/{knowledgeBaseId}/documents/{documentId}":{"get":{"operationId":"getKnowledgeDocument","summary":"Get Document","description":"Get document metadata, processing status, and source connector details.\n\nOAuth scope: `api:read`.","x-sim-operation":"knowledge.documents.read","x-oauth-scope":"api:read","tags":["Knowledge Bases"],"parameters":[{"name":"documentId","in":"path","required":true,"description":"Unique knowledge document identifier.","schema":{"type":"string","minLength":1,"description":"Unique knowledge document identifier."}},{"name":"knowledgeBaseId","in":"path","required":true,"description":"Unique knowledge base identifier.","schema":{"type":"string","minLength":1,"description":"Unique knowledge base identifier."}},{"name":"workspaceId","in":"query","required":true,"description":"Workspace that owns the knowledge base.","schema":{"type":"string","minLength":1,"description":"Workspace that owns the knowledge base."}}],"responses":{"200":{"description":"The requested knowledge document.","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/Knowledge_X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/Knowledge_X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/Knowledge_X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Knowledge_V2KnowledgeDocumentResponse"}}}},"400":{"$ref":"#/components/responses/Knowledge_BadRequest"},"401":{"$ref":"#/components/responses/Knowledge_Unauthorized"},"403":{"$ref":"#/components/responses/Knowledge_Forbidden"},"404":{"$ref":"#/components/responses/Knowledge_NotFound"},"429":{"$ref":"#/components/responses/Knowledge_RateLimited"},"500":{"$ref":"#/components/responses/Knowledge_InternalError"},"503":{"$ref":"#/components/responses/Knowledge_ServiceUnavailable"}}},"patch":{"operationId":"updateKnowledgeDocument","summary":"Update Document","description":"Rename a document, change search availability, update tag slots, or requeue processing. Omitted fields remain unchanged; indexing state is read-only. Use List Tags to resolve names to slots and Get Document for source connector details, which this response omits. Workspace API keys return `403`; use a personal API key or scoped OAuth token.\n\nOAuth scope: `api:write`.","x-sim-operation":"knowledge.documents.update","x-oauth-scope":"api:write","tags":["Knowledge Bases"],"parameters":[{"name":"documentId","in":"path","required":true,"description":"Unique knowledge document identifier.","schema":{"type":"string","minLength":1,"description":"Unique knowledge document identifier."}},{"name":"knowledgeBaseId","in":"path","required":true,"description":"Unique knowledge base identifier.","schema":{"type":"string","minLength":1,"description":"Unique knowledge base identifier."}}],"requestBody":{"required":true,"description":"Filename, search state, tag slot values, or a processing retry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Knowledge_UpdateKnowledgeDocumentRequest"}}}},"responses":{"200":{"description":"The updated document, or the requeue acknowledgement.","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/Knowledge_X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/Knowledge_X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/Knowledge_X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Knowledge_V2UpdateKnowledgeDocumentResponse"}}}},"400":{"$ref":"#/components/responses/Knowledge_BadRequest"},"401":{"$ref":"#/components/responses/Knowledge_Unauthorized"},"403":{"$ref":"#/components/responses/Knowledge_Forbidden"},"404":{"$ref":"#/components/responses/Knowledge_NotFound"},"413":{"$ref":"#/components/responses/Knowledge_PayloadTooLarge"},"415":{"$ref":"#/components/responses/Knowledge_UnsupportedMediaType"},"429":{"$ref":"#/components/responses/Knowledge_RateLimited"},"500":{"$ref":"#/components/responses/Knowledge_InternalError"},"503":{"$ref":"#/components/responses/Knowledge_ServiceUnavailable"}}},"delete":{"operationId":"deleteKnowledgeDocument","summary":"Delete Document","description":"Remove a document from listings and search. Uploaded documents and their chunks are deleted. Connector documents are excluded while retaining their stored data; later synchronization does not re-add them.\n\nOAuth scope: `api:write`.","x-sim-operation":"knowledge.documents.delete","x-oauth-scope":"api:write","tags":["Knowledge Bases"],"parameters":[{"name":"documentId","in":"path","required":true,"description":"Unique knowledge document identifier.","schema":{"type":"string","minLength":1,"description":"Unique knowledge document identifier."}},{"name":"knowledgeBaseId","in":"path","required":true,"description":"Unique knowledge base identifier.","schema":{"type":"string","minLength":1,"description":"Unique knowledge base identifier."}},{"name":"workspaceId","in":"query","required":true,"description":"Workspace that owns the knowledge base.","schema":{"type":"string","minLength":1,"description":"Workspace that owns the knowledge base."}}],"responses":{"200":{"description":"Knowledge document deletion acknowledgement.","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/Knowledge_X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/Knowledge_X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/Knowledge_X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Knowledge_V2KnowledgeDeleteResponse"}}}},"400":{"$ref":"#/components/responses/Knowledge_BadRequest"},"401":{"$ref":"#/components/responses/Knowledge_Unauthorized"},"403":{"$ref":"#/components/responses/Knowledge_Forbidden"},"404":{"$ref":"#/components/responses/Knowledge_NotFound"},"429":{"$ref":"#/components/responses/Knowledge_RateLimited"},"500":{"$ref":"#/components/responses/Knowledge_InternalError"},"503":{"$ref":"#/components/responses/Knowledge_ServiceUnavailable"}}}},"/api/v2/knowledge/folders":{"get":{"operationId":"listKnowledgeFolders","summary":"List Folders","description":"List folders in the knowledge-base folder tree with filtering and sorting. Returns the complete set in one page; `nextCursor` is always null. Workspace folder trees exceeding 10,000 folders return `413`.\n\nOAuth scope: `api:read`.","x-sim-operation":"knowledge.folders.list","x-oauth-scope":"api:read","tags":["Knowledge Bases"],"parameters":[{"name":"workspaceId","in":"query","required":true,"description":"Workspace whose folders should be listed.","schema":{"type":"string","minLength":1,"maxLength":128,"description":"Workspace whose folders should be listed."}},{"name":"parentPath","in":"query","required":false,"description":"Restrict results to direct children of this parent path. Unknown folder paths contribute no matches.","schema":{"description":"Restrict results to direct children of this parent path. Unknown folder paths contribute no matches.","$ref":"#/components/schemas/Knowledge_FolderPathInput"}},{"name":"search","in":"query","required":false,"description":"Case-insensitive substring match against the folder name.","schema":{"description":"Case-insensitive substring match against the folder name.","type":"string","minLength":1,"maxLength":200}},{"name":"sortBy","in":"query","required":false,"description":"Field used to sort the result. Sorting by `name` is case-sensitive and follows the storage collation, so do not rely on a case-insensitive order.","schema":{"default":"name","description":"Field used to sort the result. Sorting by `name` is case-sensitive and follows the storage collation, so do not rely on a case-insensitive order.","type":"string","enum":["name","createdAt","updatedAt"]}},{"name":"sortOrder","in":"query","required":false,"description":"Sort direction.","schema":{"default":"asc","description":"Sort direction.","type":"string","enum":["asc","desc"]}}],"responses":{"200":{"description":"A page of knowledge-base folders.","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/Knowledge_X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/Knowledge_X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/Knowledge_X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Knowledge_V2KnowledgeFolderListResponse"}}}},"400":{"$ref":"#/components/responses/Knowledge_BadRequest"},"401":{"$ref":"#/components/responses/Knowledge_Unauthorized"},"403":{"$ref":"#/components/responses/Knowledge_Forbidden"},"404":{"$ref":"#/components/responses/Knowledge_NotFound"},"413":{"$ref":"#/components/responses/Knowledge_PayloadTooLarge"},"429":{"$ref":"#/components/responses/Knowledge_RateLimited"},"500":{"$ref":"#/components/responses/Knowledge_InternalError"},"503":{"$ref":"#/components/responses/Knowledge_ServiceUnavailable"}}},"post":{"operationId":"createKnowledgeFolder","summary":"Create Folder","description":"Create a folder in the knowledge-base folder tree. Workspace folder trees exceeding 10,000 folders return `413`.\n\nOAuth scope: `api:write`.","x-sim-operation":"knowledge.folders.create","x-oauth-scope":"api:write","tags":["Knowledge Bases"],"requestBody":{"required":true,"description":"Workspace and canonical path for a new knowledge-base folder.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Knowledge_CreateKnowledgeFolderRequest"}}}},"responses":{"201":{"description":"The created knowledge-base folder.","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/Knowledge_X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/Knowledge_X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/Knowledge_X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Knowledge_V2KnowledgeFolderResponse"}}}},"400":{"$ref":"#/components/responses/Knowledge_BadRequest"},"401":{"$ref":"#/components/responses/Knowledge_Unauthorized"},"403":{"$ref":"#/components/responses/Knowledge_Forbidden"},"404":{"$ref":"#/components/responses/Knowledge_NotFound"},"409":{"$ref":"#/components/responses/Knowledge_Conflict"},"413":{"$ref":"#/components/responses/Knowledge_PayloadTooLarge"},"415":{"$ref":"#/components/responses/Knowledge_UnsupportedMediaType"},"429":{"$ref":"#/components/responses/Knowledge_RateLimited"},"500":{"$ref":"#/components/responses/Knowledge_InternalError"},"503":{"$ref":"#/components/responses/Knowledge_ServiceUnavailable"}}},"patch":{"operationId":"relocateKnowledgeFolder","summary":"Rename or Move Folder","description":"Rename or move a folder and atomically rewrite descendant paths. Workspace folder trees exceeding 10,000 folders return `413`.\n\nOAuth scope: `api:write`.","x-sim-operation":"knowledge.folders.relocate","x-oauth-scope":"api:write","tags":["Knowledge Bases"],"requestBody":{"required":true,"description":"Current and destination canonical paths for a knowledge-base folder.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Knowledge_RelocateKnowledgeFolderRequest"}}}},"responses":{"200":{"description":"The relocated knowledge-base folder.","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/Knowledge_X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/Knowledge_X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/Knowledge_X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Knowledge_V2KnowledgeFolderResponse"}}}},"400":{"$ref":"#/components/responses/Knowledge_BadRequest"},"401":{"$ref":"#/components/responses/Knowledge_Unauthorized"},"403":{"$ref":"#/components/responses/Knowledge_Forbidden"},"404":{"$ref":"#/components/responses/Knowledge_NotFound"},"409":{"$ref":"#/components/responses/Knowledge_Conflict"},"413":{"$ref":"#/components/responses/Knowledge_PayloadTooLarge"},"415":{"$ref":"#/components/responses/Knowledge_UnsupportedMediaType"},"429":{"$ref":"#/components/responses/Knowledge_RateLimited"},"500":{"$ref":"#/components/responses/Knowledge_InternalError"},"503":{"$ref":"#/components/responses/Knowledge_ServiceUnavailable"}}},"delete":{"operationId":"deleteKnowledgeFolder","summary":"Delete Folder","description":"Archive an empty folder, or set `recursive=true` to archive its subfolders and knowledge bases. Use Restore Knowledge Base to recover knowledge bases.\n\nOAuth scope: `api:write`.","x-sim-operation":"knowledge.folders.delete","x-oauth-scope":"api:write","tags":["Knowledge Bases"],"parameters":[{"name":"workspaceId","in":"query","required":true,"description":"Workspace containing the folder.","schema":{"type":"string","minLength":1,"maxLength":128,"description":"Workspace containing the folder."}},{"name":"path","in":"query","required":true,"description":"Path of the folder to delete.","schema":{"description":"Path of the folder to delete.","$ref":"#/components/schemas/Knowledge_NonRootFolderPathInput"}},{"name":"recursive","in":"query","required":false,"description":"Delete the folder's nested files and folders too. An empty folder deletes either way; a non-empty one needs this. The listed spellings are the whole accepted vocabulary and are case-sensitive; any other value is rejected.","schema":{"description":"Delete the folder's nested files and folders too. An empty folder deletes either way; a non-empty one needs this. The listed spellings are the whole accepted vocabulary and are case-sensitive; any other value is rejected.","enum":["true","1","yes","on","y","enabled","false","0","no","off","n","disabled"],"default":"false","type":"string"}}],"responses":{"200":{"description":"Folder deletion acknowledgement and deleted item counts.","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/Knowledge_X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/Knowledge_X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/Knowledge_X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Knowledge_V2DeleteKnowledgeFolderResponse"}}}},"400":{"$ref":"#/components/responses/Knowledge_BadRequest"},"401":{"$ref":"#/components/responses/Knowledge_Unauthorized"},"403":{"$ref":"#/components/responses/Knowledge_Forbidden"},"404":{"$ref":"#/components/responses/Knowledge_NotFound"},"409":{"$ref":"#/components/responses/Knowledge_Conflict"},"413":{"$ref":"#/components/responses/Knowledge_PayloadTooLarge"},"429":{"$ref":"#/components/responses/Knowledge_RateLimited"},"500":{"$ref":"#/components/responses/Knowledge_InternalError"},"503":{"$ref":"#/components/responses/Knowledge_ServiceUnavailable"}}}},"/api/v2/knowledge/{knowledgeBaseId}/restore":{"post":{"operationId":"restoreKnowledgeBase","summary":"Restore Knowledge Base","description":"Restore a knowledge base and the documents and connectors archived with it. Active knowledge bases return unchanged without a new audit event. An archived workspace returns `409`; an archived containing folder moves the restored knowledge base to the workspace root. Workspace folder trees exceeding 10,000 folders return `413`.\n\nOAuth scope: `api:write`.","x-sim-operation":"knowledge.restore","x-oauth-scope":"api:write","tags":["Knowledge Bases"],"parameters":[{"name":"knowledgeBaseId","in":"path","required":true,"description":"Unique knowledge base identifier.","schema":{"type":"string","minLength":1,"description":"Unique knowledge base identifier."}}],"requestBody":{"required":true,"description":"Workspace scope for the knowledge base.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Knowledge_RestoreKnowledgeBaseRequest"}}}},"responses":{"200":{"description":"The restored knowledge base.","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/Knowledge_X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/Knowledge_X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/Knowledge_X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Knowledge_V2KnowledgeBaseResponse"}}}},"400":{"$ref":"#/components/responses/Knowledge_BadRequest"},"401":{"$ref":"#/components/responses/Knowledge_Unauthorized"},"403":{"$ref":"#/components/responses/Knowledge_Forbidden"},"404":{"$ref":"#/components/responses/Knowledge_NotFound"},"409":{"$ref":"#/components/responses/Knowledge_Conflict"},"413":{"$ref":"#/components/responses/Knowledge_PayloadTooLarge"},"415":{"$ref":"#/components/responses/Knowledge_UnsupportedMediaType"},"429":{"$ref":"#/components/responses/Knowledge_RateLimited"},"500":{"$ref":"#/components/responses/Knowledge_InternalError"},"503":{"$ref":"#/components/responses/Knowledge_ServiceUnavailable"}}}},"/api/v2/knowledge/{knowledgeBaseId}/documents/from-workspace-files":{"post":{"operationId":"addWorkspaceFilesToKnowledgeBase","summary":"Index Workspace Files","description":"Queue stored workspace files for indexing without re-uploading bytes. Unreadable, unsupported, or over-100 MB files appear in `failed`; valid files are queued. Partial success returns `200`. Use Get Document to poll processing after receiving document IDs. Workspace API keys return `403`; use a personal API key or scoped OAuth token.\n\nOAuth scope: `api:write`.","x-sim-operation":"knowledge.documents.add_workspace_files","x-oauth-scope":"api:write","tags":["Knowledge Bases"],"parameters":[{"name":"knowledgeBaseId","in":"path","required":true,"description":"Unique knowledge base identifier.","schema":{"type":"string","minLength":1,"description":"Unique knowledge base identifier."}}],"requestBody":{"required":true,"description":"Workspace scope and the workspace file references to index.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Knowledge_AddWorkspaceFilesToKnowledgeBaseRequest"}}}},"responses":{"200":{"description":"Files queued for indexing, with any that could not be.","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/Knowledge_X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/Knowledge_X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/Knowledge_X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Knowledge_V2AddWorkspaceFilesToKnowledgeBaseResponse"}}}},"400":{"$ref":"#/components/responses/Knowledge_BadRequest"},"401":{"$ref":"#/components/responses/Knowledge_Unauthorized"},"402":{"$ref":"#/components/responses/Knowledge_UsageLimitExceeded"},"403":{"$ref":"#/components/responses/Knowledge_Forbidden"},"404":{"$ref":"#/components/responses/Knowledge_NotFound"},"413":{"$ref":"#/components/responses/Knowledge_PayloadTooLarge"},"415":{"$ref":"#/components/responses/Knowledge_UnsupportedMediaType"},"429":{"$ref":"#/components/responses/Knowledge_RateLimited"},"500":{"$ref":"#/components/responses/Knowledge_InternalError"},"503":{"$ref":"#/components/responses/Knowledge_ServiceUnavailable"}}}},"/api/v2/knowledge/{knowledgeBaseId}/documents/{documentId}/chunks":{"get":{"operationId":"listKnowledgeChunks","summary":"List Chunks","description":"List document chunks with content search, enabled filtering, sorting, and cursor pagination. Tags use slots; use List Tags to resolve display names. Documents that have not finished processing return `409` with their current status. Workspace API keys return `403`; use a personal API key or scoped OAuth token.\n\nOAuth scope: `api:read`.","x-sim-operation":"knowledge.chunks.list","x-oauth-scope":"api:read","tags":["Knowledge Bases"],"parameters":[{"name":"documentId","in":"path","required":true,"description":"Unique knowledge document identifier.","schema":{"type":"string","minLength":1,"description":"Unique knowledge document identifier."}},{"name":"knowledgeBaseId","in":"path","required":true,"description":"Unique knowledge base identifier.","schema":{"type":"string","minLength":1,"description":"Unique knowledge base identifier."}},{"name":"workspaceId","in":"query","required":true,"description":"Workspace that owns the knowledge base.","schema":{"type":"string","minLength":1,"maxLength":128,"description":"Workspace that owns the knowledge base."}},{"name":"search","in":"query","required":false,"description":"Case-insensitive substring match against chunk content.","schema":{"description":"Case-insensitive substring match against chunk content.","type":"string","minLength":1,"maxLength":200}},{"name":"enabled","in":"query","required":false,"description":"Restrict to enabled or disabled chunks. `all` returns both.","schema":{"default":"all","description":"Restrict to enabled or disabled chunks. `all` returns both.","type":"string","enum":["true","false","all"]}},{"name":"sortBy","in":"query","required":false,"description":"Field used to sort the result.","schema":{"default":"chunkIndex","description":"Field used to sort the result.","type":"string","enum":["chunkIndex","tokenCount","enabled"]}},{"name":"sortOrder","in":"query","required":false,"description":"Sort direction.","schema":{"default":"asc","description":"Sort direction.","type":"string","enum":["asc","desc"]}},{"name":"limit","in":"query","required":false,"description":"Maximum chunks to return per page. Must be a whole number from 1 to 100. Defaults to 50.","schema":{"default":50,"description":"Maximum chunks to return per page. Must be a whole number from 1 to 100. Defaults to 50.","type":"integer","minimum":1,"maximum":100}},{"name":"cursor","in":"query","required":false,"description":"Opaque cursor from the previous page. Send it back with the same sort and filters; only `limit` may change. Change anything else and pagination must restart without a cursor.","schema":{"description":"Opaque cursor from the previous page. Send it back with the same sort and filters; only `limit` may change. Change anything else and pagination must restart without a cursor.","type":"string","minLength":1}}],"responses":{"200":{"description":"A page of document chunks.","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/Knowledge_X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/Knowledge_X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/Knowledge_X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Knowledge_V2KnowledgeChunkListResponse"}}}},"400":{"$ref":"#/components/responses/Knowledge_BadRequest"},"401":{"$ref":"#/components/responses/Knowledge_Unauthorized"},"403":{"$ref":"#/components/responses/Knowledge_Forbidden"},"404":{"$ref":"#/components/responses/Knowledge_NotFound"},"409":{"$ref":"#/components/responses/Knowledge_Conflict"},"429":{"$ref":"#/components/responses/Knowledge_RateLimited"},"500":{"$ref":"#/components/responses/Knowledge_InternalError"},"503":{"$ref":"#/components/responses/Knowledge_ServiceUnavailable"}}},"post":{"operationId":"createKnowledgeChunk","summary":"Create Chunk","description":"Append a chunk, embedding it before the response so it is immediately searchable. It inherits the document's tags and next `chunkIndex`. Connector-synced chunks are read-only and return `403` with `error.details.code: \"CONNECTOR_MANAGED_RESOURCE_READ_ONLY\"`; change the source and re-sync, or exclude the document. Workspace API keys return `403`; use a personal API key or scoped OAuth token.\n\nOAuth scope: `api:write`.","x-sim-operation":"knowledge.chunks.create","x-oauth-scope":"api:write","tags":["Knowledge Bases"],"parameters":[{"name":"documentId","in":"path","required":true,"description":"Unique knowledge document identifier.","schema":{"type":"string","minLength":1,"description":"Unique knowledge document identifier."}},{"name":"knowledgeBaseId","in":"path","required":true,"description":"Unique knowledge base identifier.","schema":{"type":"string","minLength":1,"description":"Unique knowledge base identifier."}}],"requestBody":{"required":true,"description":"Workspace scope and the text to embed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Knowledge_CreateKnowledgeChunkRequest"}}}},"responses":{"201":{"description":"The created chunk.","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/Knowledge_X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/Knowledge_X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/Knowledge_X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Knowledge_V2KnowledgeChunkResponse"}}}},"400":{"$ref":"#/components/responses/Knowledge_BadRequest"},"401":{"$ref":"#/components/responses/Knowledge_Unauthorized"},"403":{"$ref":"#/components/responses/Knowledge_Forbidden"},"404":{"$ref":"#/components/responses/Knowledge_NotFound"},"413":{"$ref":"#/components/responses/Knowledge_PayloadTooLarge"},"415":{"$ref":"#/components/responses/Knowledge_UnsupportedMediaType"},"429":{"$ref":"#/components/responses/Knowledge_RateLimited"},"500":{"$ref":"#/components/responses/Knowledge_InternalError"},"503":{"$ref":"#/components/responses/Knowledge_ServiceUnavailable"}}},"patch":{"operationId":"bulkUpdateKnowledgeChunks","summary":"Bulk Update Chunks","description":"Enable, disable, or delete multiple chunks in one best-effort request. Unknown chunk IDs appear in `errors` without failing the request; `processed` counts matched chunks, not changes. Connector-synced chunks are read-only and return `403` with `error.details.code: \"CONNECTOR_MANAGED_RESOURCE_READ_ONLY\"`; change the source and re-sync, or exclude the document. Workspace API keys return `403`; use a personal API key or scoped OAuth token.\n\nOAuth scope: `api:write`.","x-sim-operation":"knowledge.chunks.bulk","x-oauth-scope":"api:write","tags":["Knowledge Bases"],"parameters":[{"name":"documentId","in":"path","required":true,"description":"Unique knowledge document identifier.","schema":{"type":"string","minLength":1,"description":"Unique knowledge document identifier."}},{"name":"knowledgeBaseId","in":"path","required":true,"description":"Unique knowledge base identifier.","schema":{"type":"string","minLength":1,"description":"Unique knowledge base identifier."}}],"requestBody":{"required":true,"description":"Workspace scope, the operation to apply, and the chunks to apply it to.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Knowledge_BulkUpdateKnowledgeChunksRequest"}}}},"responses":{"200":{"description":"Outcome of the bulk chunk operation.","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/Knowledge_X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/Knowledge_X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/Knowledge_X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Knowledge_V2BulkKnowledgeChunksResponse"}}}},"400":{"$ref":"#/components/responses/Knowledge_BadRequest"},"401":{"$ref":"#/components/responses/Knowledge_Unauthorized"},"403":{"$ref":"#/components/responses/Knowledge_Forbidden"},"404":{"$ref":"#/components/responses/Knowledge_NotFound"},"413":{"$ref":"#/components/responses/Knowledge_PayloadTooLarge"},"415":{"$ref":"#/components/responses/Knowledge_UnsupportedMediaType"},"429":{"$ref":"#/components/responses/Knowledge_RateLimited"},"500":{"$ref":"#/components/responses/Knowledge_InternalError"},"503":{"$ref":"#/components/responses/Knowledge_ServiceUnavailable"}}}},"/api/v2/knowledge/{knowledgeBaseId}/documents/{documentId}/chunks/{chunkId}":{"get":{"operationId":"getKnowledgeChunk","summary":"Get Chunk","description":"Get one chunk of a document, including the exact text that was embedded. Documents that have not finished processing return `409` with their current status. Workspace API keys return `403`; use a personal API key or scoped OAuth token.\n\nOAuth scope: `api:read`.","x-sim-operation":"knowledge.chunks.read","x-oauth-scope":"api:read","tags":["Knowledge Bases"],"parameters":[{"name":"documentId","in":"path","required":true,"description":"Unique knowledge document identifier.","schema":{"type":"string","minLength":1,"description":"Unique knowledge document identifier."}},{"name":"chunkId","in":"path","required":true,"description":"Unique chunk identifier.","schema":{"type":"string","minLength":1,"description":"Unique chunk identifier."}},{"name":"knowledgeBaseId","in":"path","required":true,"description":"Unique knowledge base identifier.","schema":{"type":"string","minLength":1,"description":"Unique knowledge base identifier."}},{"name":"workspaceId","in":"query","required":true,"description":"Workspace that owns the knowledge base.","schema":{"type":"string","minLength":1,"maxLength":128,"description":"Workspace that owns the knowledge base."}}],"responses":{"200":{"description":"The requested chunk.","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/Knowledge_X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/Knowledge_X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/Knowledge_X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Knowledge_V2KnowledgeChunkResponse"}}}},"400":{"$ref":"#/components/responses/Knowledge_BadRequest"},"401":{"$ref":"#/components/responses/Knowledge_Unauthorized"},"403":{"$ref":"#/components/responses/Knowledge_Forbidden"},"404":{"$ref":"#/components/responses/Knowledge_NotFound"},"409":{"$ref":"#/components/responses/Knowledge_Conflict"},"429":{"$ref":"#/components/responses/Knowledge_RateLimited"},"500":{"$ref":"#/components/responses/Knowledge_InternalError"},"503":{"$ref":"#/components/responses/Knowledge_ServiceUnavailable"}}},"patch":{"operationId":"updateKnowledgeChunk","summary":"Update Chunk","description":"Correct chunk text or disable it from search. Changing `content` re-embeds immediately and recalculates document token and character counts; disabling retains the index. Connector-synced chunks are read-only and return `403` with `error.details.code: \"CONNECTOR_MANAGED_RESOURCE_READ_ONLY\"`; change the source and re-sync, or exclude the document. Documents that have not finished processing return `409` with their current status. Workspace API keys return `403`; use a personal API key or scoped OAuth token.\n\nOAuth scope: `api:write`.","x-sim-operation":"knowledge.chunks.update","x-oauth-scope":"api:write","tags":["Knowledge Bases"],"parameters":[{"name":"documentId","in":"path","required":true,"description":"Unique knowledge document identifier.","schema":{"type":"string","minLength":1,"description":"Unique knowledge document identifier."}},{"name":"chunkId","in":"path","required":true,"description":"Unique chunk identifier.","schema":{"type":"string","minLength":1,"description":"Unique chunk identifier."}},{"name":"knowledgeBaseId","in":"path","required":true,"description":"Unique knowledge base identifier.","schema":{"type":"string","minLength":1,"description":"Unique knowledge base identifier."}}],"requestBody":{"required":true,"description":"Workspace scope and the fields to update. At least one is required.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Knowledge_UpdateKnowledgeChunkRequest"}}}},"responses":{"200":{"description":"The updated chunk.","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/Knowledge_X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/Knowledge_X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/Knowledge_X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Knowledge_V2KnowledgeChunkResponse"}}}},"400":{"$ref":"#/components/responses/Knowledge_BadRequest"},"401":{"$ref":"#/components/responses/Knowledge_Unauthorized"},"403":{"$ref":"#/components/responses/Knowledge_Forbidden"},"404":{"$ref":"#/components/responses/Knowledge_NotFound"},"409":{"$ref":"#/components/responses/Knowledge_Conflict"},"413":{"$ref":"#/components/responses/Knowledge_PayloadTooLarge"},"415":{"$ref":"#/components/responses/Knowledge_UnsupportedMediaType"},"429":{"$ref":"#/components/responses/Knowledge_RateLimited"},"500":{"$ref":"#/components/responses/Knowledge_InternalError"},"503":{"$ref":"#/components/responses/Knowledge_ServiceUnavailable"}}},"delete":{"operationId":"deleteKnowledgeChunk","summary":"Delete Chunk","description":"Permanently remove one chunk and subtract it from document counts. Remaining `chunkIndex` values stay stable and may become non-contiguous. Connector-synced chunks are read-only and return `403` with `error.details.code: \"CONNECTOR_MANAGED_RESOURCE_READ_ONLY\"`; change the source and re-sync, or exclude the document. Documents that have not finished processing return `409` with their current status. Workspace API keys return `403`; use a personal API key or scoped OAuth token.\n\nOAuth scope: `api:write`.","x-sim-operation":"knowledge.chunks.delete","x-oauth-scope":"api:write","tags":["Knowledge Bases"],"parameters":[{"name":"documentId","in":"path","required":true,"description":"Unique knowledge document identifier.","schema":{"type":"string","minLength":1,"description":"Unique knowledge document identifier."}},{"name":"chunkId","in":"path","required":true,"description":"Unique chunk identifier.","schema":{"type":"string","minLength":1,"description":"Unique chunk identifier."}},{"name":"knowledgeBaseId","in":"path","required":true,"description":"Unique knowledge base identifier.","schema":{"type":"string","minLength":1,"description":"Unique knowledge base identifier."}},{"name":"workspaceId","in":"query","required":true,"description":"Workspace that owns the knowledge base.","schema":{"type":"string","minLength":1,"maxLength":128,"description":"Workspace that owns the knowledge base."}}],"responses":{"200":{"description":"Chunk deletion acknowledgement.","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/Knowledge_X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/Knowledge_X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/Knowledge_X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Knowledge_V2KnowledgeDeleteResponse"}}}},"400":{"$ref":"#/components/responses/Knowledge_BadRequest"},"401":{"$ref":"#/components/responses/Knowledge_Unauthorized"},"403":{"$ref":"#/components/responses/Knowledge_Forbidden"},"404":{"$ref":"#/components/responses/Knowledge_NotFound"},"409":{"$ref":"#/components/responses/Knowledge_Conflict"},"429":{"$ref":"#/components/responses/Knowledge_RateLimited"},"500":{"$ref":"#/components/responses/Knowledge_InternalError"},"503":{"$ref":"#/components/responses/Knowledge_ServiceUnavailable"}}}},"/api/v2/knowledge/{knowledgeBaseId}/tags/{tagId}":{"patch":{"operationId":"updateKnowledgeTag","summary":"Update Tag","description":"Rename a tag or change its slot-compatible `fieldType`. Renaming changes read and filter names without moving the slot or its values. Slots are fixed for a tag's lifetime; an incompatible type returns `400` and requires creating a new tag. A duplicate display name returns `409`. Workspace API keys return `403`; use a personal API key or scoped OAuth token.\n\nOAuth scope: `api:write`.","x-sim-operation":"knowledge.tags.update","x-oauth-scope":"api:write","tags":["Knowledge Bases"],"parameters":[{"name":"tagId","in":"path","required":true,"description":"Unique tag definition identifier.","schema":{"type":"string","minLength":1,"description":"Unique tag definition identifier."}},{"name":"knowledgeBaseId","in":"path","required":true,"description":"Unique knowledge base identifier.","schema":{"type":"string","minLength":1,"description":"Unique knowledge base identifier."}}],"requestBody":{"required":true,"description":"Workspace scope and the fields to update. At least one is required.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Knowledge_UpdateKnowledgeTagRequest"}}}},"responses":{"200":{"description":"The updated tag definition.","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/Knowledge_X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/Knowledge_X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/Knowledge_X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Knowledge_V2KnowledgeTagResponse"}}}},"400":{"$ref":"#/components/responses/Knowledge_BadRequest"},"401":{"$ref":"#/components/responses/Knowledge_Unauthorized"},"403":{"$ref":"#/components/responses/Knowledge_Forbidden"},"404":{"$ref":"#/components/responses/Knowledge_NotFound"},"409":{"$ref":"#/components/responses/Knowledge_Conflict"},"413":{"$ref":"#/components/responses/Knowledge_PayloadTooLarge"},"415":{"$ref":"#/components/responses/Knowledge_UnsupportedMediaType"},"429":{"$ref":"#/components/responses/Knowledge_RateLimited"},"500":{"$ref":"#/components/responses/Knowledge_InternalError"},"503":{"$ref":"#/components/responses/Knowledge_ServiceUnavailable"}}},"delete":{"operationId":"deleteKnowledgeTag","summary":"Delete Tag","description":"Permanently delete a tag definition and its values from every document and chunk in the knowledge base. Workspace API keys return `403`; use a personal API key or scoped OAuth token.\n\nOAuth scope: `api:write`.","x-sim-operation":"knowledge.tags.delete","x-oauth-scope":"api:write","tags":["Knowledge Bases"],"parameters":[{"name":"tagId","in":"path","required":true,"description":"Unique tag definition identifier.","schema":{"type":"string","minLength":1,"description":"Unique tag definition identifier."}},{"name":"knowledgeBaseId","in":"path","required":true,"description":"Unique knowledge base identifier.","schema":{"type":"string","minLength":1,"description":"Unique knowledge base identifier."}},{"name":"workspaceId","in":"query","required":true,"description":"Workspace that owns the knowledge base.","schema":{"type":"string","minLength":1,"maxLength":128,"description":"Workspace that owns the knowledge base."}}],"responses":{"200":{"description":"Tag deletion acknowledgement.","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/Knowledge_X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/Knowledge_X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/Knowledge_X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Knowledge_V2DeleteKnowledgeTagResponse"}}}},"400":{"$ref":"#/components/responses/Knowledge_BadRequest"},"401":{"$ref":"#/components/responses/Knowledge_Unauthorized"},"403":{"$ref":"#/components/responses/Knowledge_Forbidden"},"404":{"$ref":"#/components/responses/Knowledge_NotFound"},"409":{"$ref":"#/components/responses/Knowledge_Conflict"},"429":{"$ref":"#/components/responses/Knowledge_RateLimited"},"500":{"$ref":"#/components/responses/Knowledge_InternalError"},"503":{"$ref":"#/components/responses/Knowledge_ServiceUnavailable"}}}},"/api/v2/knowledge/{knowledgeBaseId}/tags/next-slot":{"get":{"operationId":"getNextKnowledgeTagSlot","summary":"Get Next Tag Slot","description":"Get the next available slot and remaining capacity for a field type. This does not reserve a slot. Create Tag selects a free slot when `tagSlot` is omitted. Workspace API keys return `403`; use a personal API key or scoped OAuth token.\n\nOAuth scope: `api:read`.","x-sim-operation":"knowledge.tags.read_next_slot","x-oauth-scope":"api:read","tags":["Knowledge Bases"],"parameters":[{"name":"knowledgeBaseId","in":"path","required":true,"description":"Unique knowledge base identifier.","schema":{"type":"string","minLength":1,"description":"Unique knowledge base identifier."}},{"name":"workspaceId","in":"query","required":true,"description":"Workspace that owns the knowledge base.","schema":{"type":"string","minLength":1,"maxLength":128,"description":"Workspace that owns the knowledge base."}},{"name":"fieldType","in":"query","required":true,"description":"Value type stored in the slot; it decides which slots are usable and which filter operators apply. Slot capacity per type: text 7, number 5, date 2, boolean 3.","schema":{"type":"string","enum":["text","number","date","boolean"],"description":"Value type stored in the slot; it decides which slots are usable and which filter operators apply. Slot capacity per type: text 7, number 5, date 2, boolean 3.","examples":["text"]}}],"responses":{"200":{"description":"Slot availability for the requested field type.","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/Knowledge_X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/Knowledge_X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/Knowledge_X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Knowledge_V2NextKnowledgeTagSlotResponse"}}}},"400":{"$ref":"#/components/responses/Knowledge_BadRequest"},"401":{"$ref":"#/components/responses/Knowledge_Unauthorized"},"403":{"$ref":"#/components/responses/Knowledge_Forbidden"},"404":{"$ref":"#/components/responses/Knowledge_NotFound"},"429":{"$ref":"#/components/responses/Knowledge_RateLimited"},"500":{"$ref":"#/components/responses/Knowledge_InternalError"},"503":{"$ref":"#/components/responses/Knowledge_ServiceUnavailable"}}}},"/api/v2/knowledge/{knowledgeBaseId}/tags/usage":{"get":{"operationId":"listKnowledgeTagUsage","summary":"List Tag Usage","description":"Count the documents and chunks with a value for each defined tag. Returns the complete set in one page; `nextCursor` is always null. Workspace API keys return `403`; use a personal API key or scoped OAuth token.\n\nOAuth scope: `api:read`.","x-sim-operation":"knowledge.tags.read_usage","x-oauth-scope":"api:read","tags":["Knowledge Bases"],"parameters":[{"name":"knowledgeBaseId","in":"path","required":true,"description":"Unique knowledge base identifier.","schema":{"type":"string","minLength":1,"description":"Unique knowledge base identifier."}},{"name":"workspaceId","in":"query","required":true,"description":"Workspace that owns the knowledge base.","schema":{"type":"string","minLength":1,"maxLength":128,"description":"Workspace that owns the knowledge base."}}],"responses":{"200":{"description":"Usage counts for every defined tag.","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/Knowledge_X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/Knowledge_X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/Knowledge_X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Knowledge_V2KnowledgeTagUsageListResponse"}}}},"400":{"$ref":"#/components/responses/Knowledge_BadRequest"},"401":{"$ref":"#/components/responses/Knowledge_Unauthorized"},"403":{"$ref":"#/components/responses/Knowledge_Forbidden"},"404":{"$ref":"#/components/responses/Knowledge_NotFound"},"429":{"$ref":"#/components/responses/Knowledge_RateLimited"},"500":{"$ref":"#/components/responses/Knowledge_InternalError"},"503":{"$ref":"#/components/responses/Knowledge_ServiceUnavailable"}}}},"/api/v2/billing/status":{"get":{"operationId":"getBillingStatus","summary":"Get Billing Status","description":"Get the current plan, billing standing, credit allowance, and storage quota. Pooled `credits` and `storage` are visible only to callers who can manage the payer's billing; workspace API keys receive null for both. Use List Billing Logs for credit history.\n\nOAuth scope: `api:read`.","x-sim-operation":"billing.status.read","x-oauth-scope":"api:read","tags":["Billing"],"parameters":[{"name":"workspaceId","in":"query","required":false,"description":"Workspace whose payer should be resolved. A workspace API key is pinned to its own workspace: any other id answers `404 Workspace not found`, which is also what an id that does not exist answers.","schema":{"description":"Workspace whose payer should be resolved. A workspace API key is pinned to its own workspace: any other id answers `404 Workspace not found`, which is also what an id that does not exist answers.","type":"string","minLength":1,"maxLength":128}}],"responses":{"200":{"description":"The current billing and storage status.","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/Billing_X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/Billing_X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/Billing_X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Billing_V2BillingStatusResponse"}}}},"400":{"$ref":"#/components/responses/Billing_BadRequest"},"401":{"$ref":"#/components/responses/Billing_Unauthorized"},"403":{"$ref":"#/components/responses/Billing_Forbidden"},"404":{"$ref":"#/components/responses/Billing_NotFound"},"429":{"$ref":"#/components/responses/Billing_RateLimited"},"500":{"$ref":"#/components/responses/Billing_InternalError"},"503":{"$ref":"#/components/responses/Billing_ServiceUnavailable"}}}},"/api/v2/billing/logs":{"get":{"operationId":"listBillingLogs","summary":"List Billing Logs","description":"List credit usage with source filtering and cursor pagination. The default `period` is `30d`; pagination covers only the selected time window. An inverted custom window returns `400`.\n\nOAuth scope: `api:read`.","x-sim-operation":"billing.logs.list","x-oauth-scope":"api:read","tags":["Billing"],"parameters":[{"name":"source","in":"query","required":false,"description":"Restrict results to one usage source.","schema":{"description":"Restrict results to one usage source.","type":"string","enum":["workflow","wand","sim-chat","mcp_copilot","mothership_block","knowledge-base","voice-input","enrichment","voice-output","api-tool"]}},{"name":"workspaceId","in":"query","required":false,"description":"Narrow the ledger to one workspace. An OAuth token or personal API key reports only its user's events; a workspace API key reports every member's events in its bound workspace. The response `scope` identifies which view was returned. A workspace key asking for another workspace receives the same `404 Workspace not found` as an unknown id.","schema":{"description":"Narrow the ledger to one workspace. An OAuth token or personal API key reports only its user's events; a workspace API key reports every member's events in its bound workspace. The response `scope` identifies which view was returned. A workspace key asking for another workspace receives the same `404 Workspace not found` as an unknown id.","type":"string","minLength":1,"maxLength":128}},{"name":"period","in":"query","required":false,"description":"Relative window, all history, or a custom date range. `startDate` and `endDate` are accepted only with `custom`; every other value computes its own window.","schema":{"default":"30d","description":"Relative window, all history, or a custom date range. `startDate` and `endDate` are accepted only with `custom`; every other value computes its own window.","type":"string","enum":["1d","7d","30d","all","custom"]}},{"name":"startDate","in":"query","required":false,"description":"Only include usage events recorded at or after this UTC ISO 8601 timestamp, e.g. `2026-08-06T00:00:00Z`. Requires `period=custom`. A date without a time, or a timestamp carrying a UTC offset instead of `Z`, is rejected, as is year `0000`, which names no storable instant.","schema":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$","description":"Only include usage events recorded at or after this UTC ISO 8601 timestamp, e.g. `2026-08-06T00:00:00Z`. Requires `period=custom`. A date without a time, or a timestamp carrying a UTC offset instead of `Z`, is rejected, as is year `0000`, which names no storable instant."}},{"name":"endDate","in":"query","required":false,"description":"Only include usage events recorded at or before this UTC ISO 8601 timestamp, e.g. `2026-08-06T00:00:00Z`. Requires `period=custom`, and defaults to now when omitted. A date without a time, or a timestamp carrying a UTC offset instead of `Z`, is rejected, as is year `0000`, which names no storable instant.","schema":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$","description":"Only include usage events recorded at or before this UTC ISO 8601 timestamp, e.g. `2026-08-06T00:00:00Z`. Requires `period=custom`, and defaults to now when omitted. A date without a time, or a timestamp carrying a UTC offset instead of `Z`, is rejected, as is year `0000`, which names no storable instant."}},{"name":"limit","in":"query","required":false,"description":"Maximum usage events per page. Must be a whole number from 1 to 100. Defaults to 50.","schema":{"default":50,"description":"Maximum usage events per page. Must be a whole number from 1 to 100. Defaults to 50.","type":"integer","minimum":1,"maximum":100}},{"name":"cursor","in":"query","required":false,"description":"Opaque cursor from the previous page. Send it back with the same sort and filters; only `limit` may change. Change anything else and pagination must restart without a cursor.","schema":{"description":"Opaque cursor from the previous page. Send it back with the same sort and filters; only `limit` may change. Change anything else and pagination must restart without a cursor.","type":"string","minLength":1}}],"responses":{"200":{"description":"A page of usage events.","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/Billing_X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/Billing_X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/Billing_X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Billing_V2BillingLogListResponse"}}}},"400":{"$ref":"#/components/responses/Billing_BadRequest"},"401":{"$ref":"#/components/responses/Billing_Unauthorized"},"403":{"$ref":"#/components/responses/Billing_Forbidden"},"404":{"$ref":"#/components/responses/Billing_NotFound"},"429":{"$ref":"#/components/responses/Billing_RateLimited"},"500":{"$ref":"#/components/responses/Billing_InternalError"},"503":{"$ref":"#/components/responses/Billing_ServiceUnavailable"}}}},"/api/v2/workspaces":{"get":{"operationId":"listWorkspaces","summary":"List Workspaces","description":"List active workspaces available to the calling credential with opaque cursor pagination. A personal API key or OAuth token sees accessible workspaces that permit user-held API credentials; a workspace API key sees only its bound workspace.\n\nOAuth scope: `api:read`.","x-sim-operation":"workspaces.list_public","x-oauth-scope":"api:read","tags":["Workspaces"],"parameters":[{"name":"sortBy","in":"query","required":false,"description":"Field used to sort the result. Sorting by `name` is case-sensitive and follows the storage collation, so do not rely on a case-insensitive order.","schema":{"default":"createdAt","description":"Field used to sort the result. Sorting by `name` is case-sensitive and follows the storage collation, so do not rely on a case-insensitive order.","type":"string","enum":["name","createdAt","updatedAt"]}},{"name":"sortOrder","in":"query","required":false,"description":"Sort direction.","schema":{"default":"desc","description":"Sort direction.","type":"string","enum":["asc","desc"]}},{"name":"limit","in":"query","required":false,"description":"Maximum workspaces to return per page. Must be a whole number from 1 to 100. Defaults to 50.","schema":{"default":50,"description":"Maximum workspaces to return per page. Must be a whole number from 1 to 100. Defaults to 50.","type":"integer","minimum":1,"maximum":100}},{"name":"cursor","in":"query","required":false,"description":"Opaque cursor from the previous page. Send it back with the same sort and filters; only `limit` may change. Change anything else and pagination must restart without a cursor.","schema":{"description":"Opaque cursor from the previous page. Send it back with the same sort and filters; only `limit` may change. Change anything else and pagination must restart without a cursor.","type":"string","minLength":1}}],"responses":{"200":{"description":"Public metadata for workspaces available to the credential.","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/Resources_X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/Resources_X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/Resources_X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Resources_ListWorkspacesResponse"}}}},"400":{"$ref":"#/components/responses/Resources_BadRequest"},"401":{"$ref":"#/components/responses/Resources_Unauthorized"},"403":{"$ref":"#/components/responses/Resources_Forbidden"},"404":{"$ref":"#/components/responses/Resources_NotFound"},"429":{"$ref":"#/components/responses/Resources_RateLimited"},"500":{"$ref":"#/components/responses/Resources_InternalError"},"503":{"$ref":"#/components/responses/Resources_ServiceUnavailable"}}}},"/api/v2/workspaces/{workspaceId}":{"get":{"operationId":"getWorkspace","summary":"Get Workspace","description":"Get metadata for an accessible workspace.\n\nOAuth scope: `api:read`.","x-sim-operation":"workspaces.read_public_detail","x-oauth-scope":"api:read","tags":["Workspaces"],"parameters":[{"name":"workspaceId","in":"path","required":true,"description":"Workspace to retrieve.","schema":{"type":"string","minLength":1,"maxLength":128,"description":"Workspace to retrieve."}}],"responses":{"200":{"description":"Public workspace metadata.","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/Resources_X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/Resources_X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/Resources_X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Resources_GetWorkspaceResponse"}}}},"400":{"$ref":"#/components/responses/Resources_BadRequest"},"401":{"$ref":"#/components/responses/Resources_Unauthorized"},"403":{"$ref":"#/components/responses/Resources_Forbidden"},"404":{"$ref":"#/components/responses/Resources_NotFound"},"429":{"$ref":"#/components/responses/Resources_RateLimited"},"500":{"$ref":"#/components/responses/Resources_InternalError"},"503":{"$ref":"#/components/responses/Resources_ServiceUnavailable"}}}},"/api/v2/workspaces/{workspaceId}/members":{"get":{"operationId":"listWorkspaceMembers","summary":"List Workspace Members","description":"List workspace members by email, including explicit grants and inherited organization admin access.\n\nOAuth scope: `api:read`.","x-sim-operation":"workspaces.members.list_public","x-oauth-scope":"api:read","tags":["Workspaces"],"parameters":[{"name":"workspaceId","in":"path","required":true,"description":"Workspace to retrieve.","schema":{"type":"string","minLength":1,"maxLength":128,"description":"Workspace to retrieve."}},{"name":"limit","in":"query","required":false,"description":"Maximum members to return per page. Must be a whole number from 1 to 100. Defaults to 50.","schema":{"default":50,"description":"Maximum members to return per page. Must be a whole number from 1 to 100. Defaults to 50.","type":"integer","minimum":1,"maximum":100}},{"name":"cursor","in":"query","required":false,"description":"Opaque cursor from the previous page. Send it back with the same sort and filters; only `limit` may change. Change anything else and pagination must restart without a cursor.","schema":{"description":"Opaque cursor from the previous page. Send it back with the same sort and filters; only `limit` may change. Change anything else and pagination must restart without a cursor.","type":"string","minLength":1}}],"responses":{"200":{"description":"An email-ordered page of effective workspace members.","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/Resources_X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/Resources_X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/Resources_X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Resources_ListWorkspaceMembersResponse"}}}},"400":{"$ref":"#/components/responses/Resources_BadRequest"},"401":{"$ref":"#/components/responses/Resources_Unauthorized"},"403":{"$ref":"#/components/responses/Resources_Forbidden"},"404":{"$ref":"#/components/responses/Resources_NotFound"},"429":{"$ref":"#/components/responses/Resources_RateLimited"},"500":{"$ref":"#/components/responses/Resources_InternalError"},"503":{"$ref":"#/components/responses/Resources_ServiceUnavailable"}}}},"/api/v2/mcp-servers":{"get":{"operationId":"listMcpServers","summary":"List MCP Servers","description":"List MCP servers registered in a workspace, excluding request-header values and OAuth secrets. Connection metadata remains at registration defaults until List MCP Server Tools performs discovery.\n\nOAuth scope: `api:read`.","x-sim-operation":"mcp_servers.list","x-oauth-scope":"api:read","tags":["MCP Servers"],"parameters":[{"name":"workspaceId","in":"query","required":true,"description":"Workspace that owns the MCP server.","schema":{"type":"string","minLength":1,"maxLength":128,"description":"Workspace that owns the MCP server."}},{"name":"search","in":"query","required":false,"description":"Case-insensitive substring match against the server name.","schema":{"description":"Case-insensitive substring match against the server name.","type":"string","minLength":1,"maxLength":200}},{"name":"sortBy","in":"query","required":false,"description":"Field used to sort the result. Sorting by `name` is case-sensitive and follows the storage collation, so do not rely on a case-insensitive order.","schema":{"default":"createdAt","description":"Field used to sort the result. Sorting by `name` is case-sensitive and follows the storage collation, so do not rely on a case-insensitive order.","type":"string","enum":["name","createdAt","updatedAt"]}},{"name":"sortOrder","in":"query","required":false,"description":"Sort direction.","schema":{"default":"desc","description":"Sort direction.","type":"string","enum":["asc","desc"]}},{"name":"limit","in":"query","required":false,"description":"Maximum MCP servers to return per page. Must be a whole number from 1 to 100. Defaults to 50.","schema":{"default":50,"description":"Maximum MCP servers to return per page. Must be a whole number from 1 to 100. Defaults to 50.","type":"integer","minimum":1,"maximum":100}},{"name":"cursor","in":"query","required":false,"description":"Opaque cursor from the previous page. Send it back with the same sort and filters; only `limit` may change. Change anything else and pagination must restart without a cursor.","schema":{"description":"Opaque cursor from the previous page. Send it back with the same sort and filters; only `limit` may change. Change anything else and pagination must restart without a cursor.","type":"string","minLength":1}}],"responses":{"200":{"description":"MCP servers registered in the workspace.","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/Resources_X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/Resources_X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/Resources_X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Resources_ListMcpServersResponse"}}}},"400":{"$ref":"#/components/responses/Resources_BadRequest"},"401":{"$ref":"#/components/responses/Resources_Unauthorized"},"403":{"$ref":"#/components/responses/Resources_Forbidden"},"404":{"$ref":"#/components/responses/Resources_NotFound"},"429":{"$ref":"#/components/responses/Resources_RateLimited"},"500":{"$ref":"#/components/responses/Resources_InternalError"},"503":{"$ref":"#/components/responses/Resources_ServiceUnavailable"}}},"post":{"operationId":"createMcpServer","summary":"Create MCP Server","description":"Register an external MCP server without connecting to it. A duplicate URL returns `409`; use Update MCP Server to change the existing registration. The server remains disconnected until List MCP Server Tools succeeds.\n\nOAuth scope: `api:write`.","x-sim-operation":"mcp_servers.create","x-oauth-scope":"api:write","tags":["MCP Servers"],"requestBody":{"required":true,"description":"Configuration for a new MCP server.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Resources_CreateMcpServerRequest"}}}},"responses":{"201":{"description":"The MCP server was registered.","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/Resources_X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/Resources_X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/Resources_X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Resources_CreateMcpServerResponse"}}}},"400":{"$ref":"#/components/responses/Resources_BadRequest"},"401":{"$ref":"#/components/responses/Resources_Unauthorized"},"403":{"$ref":"#/components/responses/Resources_Forbidden"},"404":{"$ref":"#/components/responses/Resources_NotFound"},"409":{"$ref":"#/components/responses/Resources_Conflict"},"413":{"$ref":"#/components/responses/Resources_PayloadTooLarge"},"415":{"$ref":"#/components/responses/Resources_UnsupportedMediaType"},"429":{"$ref":"#/components/responses/Resources_RateLimited"},"500":{"$ref":"#/components/responses/Resources_InternalError"},"503":{"$ref":"#/components/responses/Resources_ServiceUnavailable"}}}},"/api/v2/mcp-servers/{mcpServerId}":{"get":{"operationId":"getMcpServer","summary":"Get MCP Server","description":"Get one MCP server by identifier. Request-header values and OAuth client secrets are never returned.\n\nOAuth scope: `api:read`.","x-sim-operation":"mcp_servers.read","x-oauth-scope":"api:read","tags":["MCP Servers"],"parameters":[{"name":"mcpServerId","in":"path","required":true,"description":"Unique MCP server identifier.","schema":{"type":"string","minLength":1,"description":"Unique MCP server identifier."}},{"name":"workspaceId","in":"query","required":true,"description":"Workspace that owns the MCP server.","schema":{"type":"string","minLength":1,"maxLength":128,"description":"Workspace that owns the MCP server."}}],"responses":{"200":{"description":"The MCP server.","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/Resources_X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/Resources_X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/Resources_X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Resources_GetMcpServerResponse"}}}},"400":{"$ref":"#/components/responses/Resources_BadRequest"},"401":{"$ref":"#/components/responses/Resources_Unauthorized"},"403":{"$ref":"#/components/responses/Resources_Forbidden"},"404":{"$ref":"#/components/responses/Resources_NotFound"},"429":{"$ref":"#/components/responses/Resources_RateLimited"},"500":{"$ref":"#/components/responses/Resources_InternalError"},"503":{"$ref":"#/components/responses/Resources_ServiceUnavailable"}}},"patch":{"operationId":"updateMcpServer","summary":"Update MCP Server","description":"Update an MCP server's supplied fields. Omitted fields remain unchanged unless the field specifies otherwise. Authentication changes revoke the stored OAuth grant and reset connection metadata. Use List MCP Server Tools to reconnect.\n\nOAuth scope: `api:write`.","x-sim-operation":"mcp_servers.update","x-oauth-scope":"api:write","tags":["MCP Servers"],"parameters":[{"name":"mcpServerId","in":"path","required":true,"description":"Unique MCP server identifier.","schema":{"type":"string","minLength":1,"description":"Unique MCP server identifier."}}],"requestBody":{"required":true,"description":"MCP server fields to change; omitted fields retain their stored values.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Resources_UpdateMcpServerRequest"}}}},"responses":{"200":{"description":"The updated MCP server.","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/Resources_X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/Resources_X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/Resources_X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Resources_UpdateMcpServerResponse"}}}},"400":{"$ref":"#/components/responses/Resources_BadRequest"},"401":{"$ref":"#/components/responses/Resources_Unauthorized"},"403":{"$ref":"#/components/responses/Resources_Forbidden"},"404":{"$ref":"#/components/responses/Resources_NotFound"},"413":{"$ref":"#/components/responses/Resources_PayloadTooLarge"},"415":{"$ref":"#/components/responses/Resources_UnsupportedMediaType"},"429":{"$ref":"#/components/responses/Resources_RateLimited"},"500":{"$ref":"#/components/responses/Resources_InternalError"},"503":{"$ref":"#/components/responses/Resources_ServiceUnavailable"}}},"delete":{"operationId":"deleteMcpServer","summary":"Delete MCP Server","description":"Remove an MCP server and revoke its OAuth tokens. Workflows retain blocks that referenced the server's tools, but those tools can no longer be called.\n\nOAuth scope: `api:write`.","x-sim-operation":"mcp_servers.delete","x-oauth-scope":"api:write","tags":["MCP Servers"],"parameters":[{"name":"mcpServerId","in":"path","required":true,"description":"Unique MCP server identifier.","schema":{"type":"string","minLength":1,"description":"Unique MCP server identifier."}},{"name":"workspaceId","in":"query","required":true,"description":"Workspace that owns the MCP server.","schema":{"type":"string","minLength":1,"maxLength":128,"description":"Workspace that owns the MCP server."}}],"responses":{"200":{"description":"The MCP server was deleted.","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/Resources_X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/Resources_X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/Resources_X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Resources_DeleteMcpServerResponse"}}}},"400":{"$ref":"#/components/responses/Resources_BadRequest"},"401":{"$ref":"#/components/responses/Resources_Unauthorized"},"403":{"$ref":"#/components/responses/Resources_Forbidden"},"404":{"$ref":"#/components/responses/Resources_NotFound"},"429":{"$ref":"#/components/responses/Resources_RateLimited"},"500":{"$ref":"#/components/responses/Resources_InternalError"},"503":{"$ref":"#/components/responses/Resources_ServiceUnavailable"}}}},"/api/v2/mcp-servers/{mcpServerId}/tools":{"get":{"operationId":"listMcpServerTools","summary":"List MCP Server Tools","description":"Discover up to 1,000 tools within 5 MB, connect to the server, and update connection metadata. Results are unpaginated. Invalid OAuth returns `409` with `MCP_SERVER_REAUTHORIZATION_REQUIRED`; reauthorize through the browser. Unavailable servers return `503`. `HEAD` checks access with the same authorization as `GET` but skips side effects, returning an empty `200` without payload headers on success. Workspace API keys return `403`; use a personal API key or scoped OAuth token.\n\nOAuth scope: `api:write`.","x-sim-operation":"mcp_servers.tools.discover","x-oauth-scope":"api:write","tags":["MCP Servers"],"parameters":[{"name":"mcpServerId","in":"path","required":true,"description":"Unique MCP server identifier.","schema":{"type":"string","minLength":1,"description":"Unique MCP server identifier."}},{"name":"workspaceId","in":"query","required":true,"description":"Workspace that owns the MCP server.","schema":{"type":"string","minLength":1,"maxLength":128,"description":"Workspace that owns the MCP server."}},{"name":"refresh","in":"query","required":false,"description":"Refresh tools using your credentials. Otherwise results may reuse another workspace member's recent discovery and omit newly added tools.","schema":{"description":"Refresh tools using your credentials. Otherwise results may reuse another workspace member's recent discovery and omit newly added tools.","type":"boolean"}}],"responses":{"200":{"description":"Tools exposed by the MCP server.","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/Resources_X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/Resources_X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/Resources_X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Resources_ListMcpServerToolsResponse"}}}},"400":{"$ref":"#/components/responses/Resources_BadRequest"},"401":{"$ref":"#/components/responses/Resources_Unauthorized"},"403":{"$ref":"#/components/responses/Resources_Forbidden"},"404":{"$ref":"#/components/responses/Resources_NotFound"},"409":{"$ref":"#/components/responses/Resources_Conflict"},"429":{"$ref":"#/components/responses/Resources_RateLimited"},"500":{"$ref":"#/components/responses/Resources_InternalError"},"503":{"$ref":"#/components/responses/Resources_ServiceUnavailable"}}}},"/api/v2/skills":{"get":{"operationId":"listSkills","summary":"List Skills","description":"List workspace and built-in skills with cursor pagination. Built-in skills are read-only. The list omits skill bodies; use Get Skill to read content.\n\nOAuth scope: `api:read`.","x-sim-operation":"skills.list","x-oauth-scope":"api:read","tags":["Skills"],"parameters":[{"name":"workspaceId","in":"query","required":true,"description":"Workspace that owns the skill.","schema":{"type":"string","minLength":1,"maxLength":128,"description":"Workspace that owns the skill."}},{"name":"search","in":"query","required":false,"description":"Case-insensitive substring match against the skill name.","schema":{"description":"Case-insensitive substring match against the skill name.","type":"string","minLength":1,"maxLength":200}},{"name":"sortBy","in":"query","required":false,"description":"Field used to sort the result. Sorting by `name` is case-sensitive and follows the storage collation, so do not rely on a case-insensitive order.","schema":{"default":"createdAt","description":"Field used to sort the result. Sorting by `name` is case-sensitive and follows the storage collation, so do not rely on a case-insensitive order.","type":"string","enum":["name","createdAt","updatedAt"]}},{"name":"sortOrder","in":"query","required":false,"description":"Sort direction.","schema":{"default":"desc","description":"Sort direction.","type":"string","enum":["asc","desc"]}},{"name":"limit","in":"query","required":false,"description":"Maximum skills to return per page. Must be a whole number from 1 to 100. Defaults to 50.","schema":{"default":50,"description":"Maximum skills to return per page. Must be a whole number from 1 to 100. Defaults to 50.","type":"integer","minimum":1,"maximum":100}},{"name":"cursor","in":"query","required":false,"description":"Opaque cursor from the previous page. Send it back with the same sort and filters; only `limit` may change. Change anything else and pagination must restart without a cursor.","schema":{"description":"Opaque cursor from the previous page. Send it back with the same sort and filters; only `limit` may change. Change anything else and pagination must restart without a cursor.","type":"string","minLength":1}}],"responses":{"200":{"description":"Skills available in the workspace.","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/Resources_X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/Resources_X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/Resources_X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Resources_ListSkillsResponse"}}}},"400":{"$ref":"#/components/responses/Resources_BadRequest"},"401":{"$ref":"#/components/responses/Resources_Unauthorized"},"403":{"$ref":"#/components/responses/Resources_Forbidden"},"404":{"$ref":"#/components/responses/Resources_NotFound"},"429":{"$ref":"#/components/responses/Resources_RateLimited"},"500":{"$ref":"#/components/responses/Resources_InternalError"},"503":{"$ref":"#/components/responses/Resources_ServiceUnavailable"}}},"post":{"operationId":"createSkill","summary":"Create Skill","description":"Create one skill in a workspace. Its kebab-case name must be unique and cannot be reserved by a built-in skill. Workspace API keys return `403`; use a personal API key or scoped OAuth token.\n\nOAuth scope: `api:write`.","x-sim-operation":"skills.create","x-oauth-scope":"api:write","tags":["Skills"],"requestBody":{"required":true,"description":"Definition of a new skill.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Resources_CreateSkillRequest"}}}},"responses":{"201":{"description":"The skill was created.","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/Resources_X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/Resources_X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/Resources_X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Resources_CreateSkillResponse"}}}},"400":{"$ref":"#/components/responses/Resources_BadRequest"},"401":{"$ref":"#/components/responses/Resources_Unauthorized"},"403":{"$ref":"#/components/responses/Resources_Forbidden"},"404":{"$ref":"#/components/responses/Resources_NotFound"},"409":{"$ref":"#/components/responses/Resources_Conflict"},"413":{"$ref":"#/components/responses/Resources_PayloadTooLarge"},"415":{"$ref":"#/components/responses/Resources_UnsupportedMediaType"},"429":{"$ref":"#/components/responses/Resources_RateLimited"},"500":{"$ref":"#/components/responses/Resources_InternalError"},"503":{"$ref":"#/components/responses/Resources_ServiceUnavailable"}}}},"/api/v2/skills/{skillId}":{"get":{"operationId":"getSkill","summary":"Get Skill","description":"Get one workspace or built-in skill, including its full content. Built-in skills are marked read-only.\n\nOAuth scope: `api:read`.","x-sim-operation":"skills.read","x-oauth-scope":"api:read","tags":["Skills"],"parameters":[{"name":"skillId","in":"path","required":true,"description":"Unique skill identifier. A built-in skill is `builtin-` followed by its name, for example `builtin-research`.","schema":{"type":"string","minLength":1,"description":"Unique skill identifier. A built-in skill is `builtin-` followed by its name, for example `builtin-research`."}},{"name":"workspaceId","in":"query","required":true,"description":"Workspace that owns the skill.","schema":{"type":"string","minLength":1,"maxLength":128,"description":"Workspace that owns the skill."}}],"responses":{"200":{"description":"The skill.","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/Resources_X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/Resources_X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/Resources_X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Resources_GetSkillResponse"}}}},"400":{"$ref":"#/components/responses/Resources_BadRequest"},"401":{"$ref":"#/components/responses/Resources_Unauthorized"},"403":{"$ref":"#/components/responses/Resources_Forbidden"},"404":{"$ref":"#/components/responses/Resources_NotFound"},"429":{"$ref":"#/components/responses/Resources_RateLimited"},"500":{"$ref":"#/components/responses/Resources_InternalError"},"503":{"$ref":"#/components/responses/Resources_ServiceUnavailable"}}},"patch":{"operationId":"updateSkill","summary":"Update Skill","description":"Update a workspace skill. Omitted fields remain unchanged. Built-in skills are read-only. Workspace API keys return `403`; use a personal API key or scoped OAuth token.\n\nOAuth scope: `api:write`.","x-sim-operation":"skills.update","x-oauth-scope":"api:write","tags":["Skills"],"parameters":[{"name":"skillId","in":"path","required":true,"description":"Unique skill identifier. A built-in skill is `builtin-` followed by its name, for example `builtin-research`.","schema":{"type":"string","minLength":1,"description":"Unique skill identifier. A built-in skill is `builtin-` followed by its name, for example `builtin-research`."}}],"requestBody":{"required":true,"description":"Skill fields to change; at least one editable field is required.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Resources_UpdateSkillRequest"}}}},"responses":{"200":{"description":"The updated skill.","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/Resources_X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/Resources_X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/Resources_X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Resources_UpdateSkillResponse"}}}},"400":{"$ref":"#/components/responses/Resources_BadRequest"},"401":{"$ref":"#/components/responses/Resources_Unauthorized"},"403":{"$ref":"#/components/responses/Resources_Forbidden"},"404":{"$ref":"#/components/responses/Resources_NotFound"},"409":{"$ref":"#/components/responses/Resources_Conflict"},"413":{"$ref":"#/components/responses/Resources_PayloadTooLarge"},"415":{"$ref":"#/components/responses/Resources_UnsupportedMediaType"},"429":{"$ref":"#/components/responses/Resources_RateLimited"},"500":{"$ref":"#/components/responses/Resources_InternalError"},"503":{"$ref":"#/components/responses/Resources_ServiceUnavailable"}}},"delete":{"operationId":"deleteSkill","summary":"Delete Skill","description":"Delete a workspace skill. Built-in skills are read-only and cannot be deleted. Workspace API keys return `403`; use a personal API key or scoped OAuth token.\n\nOAuth scope: `api:write`.","x-sim-operation":"skills.delete","x-oauth-scope":"api:write","tags":["Skills"],"parameters":[{"name":"skillId","in":"path","required":true,"description":"Unique skill identifier. A built-in skill is `builtin-` followed by its name, for example `builtin-research`.","schema":{"type":"string","minLength":1,"description":"Unique skill identifier. A built-in skill is `builtin-` followed by its name, for example `builtin-research`."}},{"name":"workspaceId","in":"query","required":true,"description":"Workspace that owns the skill.","schema":{"type":"string","minLength":1,"maxLength":128,"description":"Workspace that owns the skill."}}],"responses":{"200":{"description":"The skill was deleted.","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/Resources_X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/Resources_X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/Resources_X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Resources_DeleteSkillResponse"}}}},"400":{"$ref":"#/components/responses/Resources_BadRequest"},"401":{"$ref":"#/components/responses/Resources_Unauthorized"},"403":{"$ref":"#/components/responses/Resources_Forbidden"},"404":{"$ref":"#/components/responses/Resources_NotFound"},"429":{"$ref":"#/components/responses/Resources_RateLimited"},"500":{"$ref":"#/components/responses/Resources_InternalError"},"503":{"$ref":"#/components/responses/Resources_ServiceUnavailable"}}}},"/api/v2/skills/{skillId}/editors":{"get":{"operationId":"listSkillEditors","summary":"List Skill Editors","description":"List skill editors and workspace administrators with cursor pagination.\n\nOAuth scope: `api:read`.","x-sim-operation":"skills.editors.list","x-oauth-scope":"api:read","tags":["Skills"],"parameters":[{"name":"skillId","in":"path","required":true,"description":"Unique skill identifier. A built-in skill is `builtin-` followed by its name, for example `builtin-research`.","schema":{"type":"string","minLength":1,"description":"Unique skill identifier. A built-in skill is `builtin-` followed by its name, for example `builtin-research`."}},{"name":"workspaceId","in":"query","required":true,"description":"Workspace that owns the skill.","schema":{"type":"string","minLength":1,"maxLength":128,"description":"Workspace that owns the skill."}},{"name":"sortBy","in":"query","required":false,"description":"Field used to sort the result. Sorting by `name` is case-sensitive and follows the storage collation, so do not rely on a case-insensitive order.","schema":{"default":"email","description":"Field used to sort the result. Sorting by `name` is case-sensitive and follows the storage collation, so do not rely on a case-insensitive order.","type":"string","enum":["email","name"]}},{"name":"sortOrder","in":"query","required":false,"description":"Sort direction.","schema":{"default":"asc","description":"Sort direction.","type":"string","enum":["asc","desc"]}},{"name":"limit","in":"query","required":false,"description":"Maximum skill editors to return per page. Must be a whole number from 1 to 100. Defaults to 50.","schema":{"default":50,"description":"Maximum skill editors to return per page. Must be a whole number from 1 to 100. Defaults to 50.","type":"integer","minimum":1,"maximum":100}},{"name":"cursor","in":"query","required":false,"description":"Opaque cursor from the previous page. Send it back with the same sort and filters; only `limit` may change. Change anything else and pagination must restart without a cursor.","schema":{"description":"Opaque cursor from the previous page. Send it back with the same sort and filters; only `limit` may change. Change anything else and pagination must restart without a cursor.","type":"string","minLength":1}}],"responses":{"200":{"description":"Users who can edit the skill.","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/Resources_X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/Resources_X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/Resources_X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Resources_ListSkillEditorsResponse"}}}},"400":{"$ref":"#/components/responses/Resources_BadRequest"},"401":{"$ref":"#/components/responses/Resources_Unauthorized"},"403":{"$ref":"#/components/responses/Resources_Forbidden"},"404":{"$ref":"#/components/responses/Resources_NotFound"},"429":{"$ref":"#/components/responses/Resources_RateLimited"},"500":{"$ref":"#/components/responses/Resources_InternalError"},"503":{"$ref":"#/components/responses/Resources_ServiceUnavailable"}}},"post":{"operationId":"grantSkillEditor","summary":"Grant Skill Editor","description":"Grant skill editor access to a workspace member by email. Requires an existing editor or workspace admin; admins already have access and cannot receive explicit grants. Existing grants return `200`; new grants return `201`. Workspace API keys return `403`; use a personal API key or scoped OAuth token.\n\nOAuth scope: `api:write`.","x-sim-operation":"skills.editors.grant","x-oauth-scope":"api:write","tags":["Skills"],"parameters":[{"name":"skillId","in":"path","required":true,"description":"Unique skill identifier. A built-in skill is `builtin-` followed by its name, for example `builtin-research`.","schema":{"type":"string","minLength":1,"description":"Unique skill identifier. A built-in skill is `builtin-` followed by its name, for example `builtin-research`."}}],"requestBody":{"required":true,"description":"Workspace scope and email of the member to grant.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Resources_GrantSkillEditorRequest"}}}},"responses":{"200":{"description":"The workspace member was already a skill editor.","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/Resources_X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/Resources_X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/Resources_X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Resources_GrantSkillEditorResponse"}}}},"201":{"description":"The skill editor grant was created.","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/Resources_X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/Resources_X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/Resources_X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Resources_GrantSkillEditorResponse"}}}},"400":{"$ref":"#/components/responses/Resources_BadRequest"},"401":{"$ref":"#/components/responses/Resources_Unauthorized"},"403":{"$ref":"#/components/responses/Resources_Forbidden"},"404":{"$ref":"#/components/responses/Resources_NotFound"},"413":{"$ref":"#/components/responses/Resources_PayloadTooLarge"},"415":{"$ref":"#/components/responses/Resources_UnsupportedMediaType"},"429":{"$ref":"#/components/responses/Resources_RateLimited"},"500":{"$ref":"#/components/responses/Resources_InternalError"},"503":{"$ref":"#/components/responses/Resources_ServiceUnavailable"}}},"delete":{"operationId":"revokeSkillEditor","summary":"Revoke Skill Editor","description":"Revoke an explicit editor grant by email. The caller must already be a skill editor or workspace administrator. Workspace administrators have derived access that cannot be revoked. Workspace API keys return `403`; use a personal API key or scoped OAuth token.\n\nOAuth scope: `api:write`.","x-sim-operation":"skills.editors.revoke","x-oauth-scope":"api:write","tags":["Skills"],"parameters":[{"name":"skillId","in":"path","required":true,"description":"Unique skill identifier. A built-in skill is `builtin-` followed by its name, for example `builtin-research`.","schema":{"type":"string","minLength":1,"description":"Unique skill identifier. A built-in skill is `builtin-` followed by its name, for example `builtin-research`."}},{"name":"workspaceId","in":"query","required":true,"description":"Workspace that owns the skill.","schema":{"type":"string","minLength":1,"maxLength":128,"description":"Workspace that owns the skill."}},{"name":"email","in":"query","required":true,"description":"Email address of a current workspace member.","schema":{"type":"string","format":"email","pattern":"^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$","description":"Email address of a current workspace member."}}],"responses":{"200":{"description":"The explicit editor grant was revoked.","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/Resources_X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/Resources_X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/Resources_X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Resources_RevokeSkillEditorResponse"}}}},"400":{"$ref":"#/components/responses/Resources_BadRequest"},"401":{"$ref":"#/components/responses/Resources_Unauthorized"},"403":{"$ref":"#/components/responses/Resources_Forbidden"},"404":{"$ref":"#/components/responses/Resources_NotFound"},"429":{"$ref":"#/components/responses/Resources_RateLimited"},"500":{"$ref":"#/components/responses/Resources_InternalError"},"503":{"$ref":"#/components/responses/Resources_ServiceUnavailable"}}}},"/api/v2/custom-tools":{"get":{"operationId":"listCustomTools","summary":"List Custom Tools","description":"List code-backed custom tools in a workspace with cursor pagination.\n\nOAuth scope: `api:read`.","x-sim-operation":"custom_tools.list","x-oauth-scope":"api:read","tags":["Custom Tools"],"parameters":[{"name":"workspaceId","in":"query","required":true,"description":"Workspace that owns the custom tool.","schema":{"type":"string","minLength":1,"maxLength":128,"description":"Workspace that owns the custom tool."}},{"name":"search","in":"query","required":false,"description":"Case-insensitive substring match against the tool title.","schema":{"description":"Case-insensitive substring match against the tool title.","type":"string","minLength":1,"maxLength":200}},{"name":"sortBy","in":"query","required":false,"description":"Field used to sort the result.","schema":{"default":"createdAt","description":"Field used to sort the result.","type":"string","enum":["title","createdAt","updatedAt"]}},{"name":"sortOrder","in":"query","required":false,"description":"Sort direction.","schema":{"default":"desc","description":"Sort direction.","type":"string","enum":["asc","desc"]}},{"name":"limit","in":"query","required":false,"description":"Maximum custom tools to return per page. Must be a whole number from 1 to 100. Defaults to 50.","schema":{"default":50,"description":"Maximum custom tools to return per page. Must be a whole number from 1 to 100. Defaults to 50.","type":"integer","minimum":1,"maximum":100}},{"name":"cursor","in":"query","required":false,"description":"Opaque cursor from the previous page. Send it back with the same sort and filters; only `limit` may change. Change anything else and pagination must restart without a cursor.","schema":{"description":"Opaque cursor from the previous page. Send it back with the same sort and filters; only `limit` may change. Change anything else and pagination must restart without a cursor.","type":"string","minLength":1}}],"responses":{"200":{"description":"Custom tools defined in the workspace.","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/Resources_X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/Resources_X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/Resources_X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Resources_ListCustomToolsResponse"}}}},"400":{"$ref":"#/components/responses/Resources_BadRequest"},"401":{"$ref":"#/components/responses/Resources_Unauthorized"},"403":{"$ref":"#/components/responses/Resources_Forbidden"},"404":{"$ref":"#/components/responses/Resources_NotFound"},"429":{"$ref":"#/components/responses/Resources_RateLimited"},"500":{"$ref":"#/components/responses/Resources_InternalError"},"503":{"$ref":"#/components/responses/Resources_ServiceUnavailable"}}},"post":{"operationId":"createCustomTool","summary":"Create Custom Tool","description":"Create a code-backed custom tool in a workspace. Its title must be unique because tools resolve by title at call time.\n\nOAuth scope: `api:write`.","x-sim-operation":"custom_tools.create","x-oauth-scope":"api:write","tags":["Custom Tools"],"requestBody":{"required":true,"description":"Definition and implementation of a new custom tool.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Resources_CreateCustomToolRequest"}}}},"responses":{"201":{"description":"The custom tool was created.","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/Resources_X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/Resources_X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/Resources_X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Resources_CreateCustomToolResponse"}}}},"400":{"$ref":"#/components/responses/Resources_BadRequest"},"401":{"$ref":"#/components/responses/Resources_Unauthorized"},"403":{"$ref":"#/components/responses/Resources_Forbidden"},"404":{"$ref":"#/components/responses/Resources_NotFound"},"409":{"$ref":"#/components/responses/Resources_Conflict"},"413":{"$ref":"#/components/responses/Resources_PayloadTooLarge"},"415":{"$ref":"#/components/responses/Resources_UnsupportedMediaType"},"429":{"$ref":"#/components/responses/Resources_RateLimited"},"500":{"$ref":"#/components/responses/Resources_InternalError"},"503":{"$ref":"#/components/responses/Resources_ServiceUnavailable"}}}},"/api/v2/custom-tools/{customToolId}":{"get":{"operationId":"getCustomTool","summary":"Get Custom Tool","description":"Get one custom tool by identifier, scoped to its workspace.\n\nOAuth scope: `api:read`.","x-sim-operation":"custom_tools.read","x-oauth-scope":"api:read","tags":["Custom Tools"],"parameters":[{"name":"customToolId","in":"path","required":true,"description":"Unique custom tool identifier.","schema":{"type":"string","minLength":1,"description":"Unique custom tool identifier."}},{"name":"workspaceId","in":"query","required":true,"description":"Workspace that owns the custom tool.","schema":{"type":"string","minLength":1,"maxLength":128,"description":"Workspace that owns the custom tool."}}],"responses":{"200":{"description":"The custom tool.","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/Resources_X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/Resources_X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/Resources_X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Resources_GetCustomToolResponse"}}}},"400":{"$ref":"#/components/responses/Resources_BadRequest"},"401":{"$ref":"#/components/responses/Resources_Unauthorized"},"403":{"$ref":"#/components/responses/Resources_Forbidden"},"404":{"$ref":"#/components/responses/Resources_NotFound"},"429":{"$ref":"#/components/responses/Resources_RateLimited"},"500":{"$ref":"#/components/responses/Resources_InternalError"},"503":{"$ref":"#/components/responses/Resources_ServiceUnavailable"}}},"patch":{"operationId":"updateCustomTool","summary":"Update Custom Tool","description":"Update a custom tool. Omitted fields remain unchanged; titles must remain unique within the workspace.\n\nOAuth scope: `api:write`.","x-sim-operation":"custom_tools.update","x-oauth-scope":"api:write","tags":["Custom Tools"],"parameters":[{"name":"customToolId","in":"path","required":true,"description":"Unique custom tool identifier.","schema":{"type":"string","minLength":1,"description":"Unique custom tool identifier."}}],"requestBody":{"required":true,"description":"Custom tool fields to change; at least one editable field is required.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Resources_UpdateCustomToolRequest"}}}},"responses":{"200":{"description":"The updated custom tool.","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/Resources_X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/Resources_X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/Resources_X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Resources_UpdateCustomToolResponse"}}}},"400":{"$ref":"#/components/responses/Resources_BadRequest"},"401":{"$ref":"#/components/responses/Resources_Unauthorized"},"403":{"$ref":"#/components/responses/Resources_Forbidden"},"404":{"$ref":"#/components/responses/Resources_NotFound"},"409":{"$ref":"#/components/responses/Resources_Conflict"},"413":{"$ref":"#/components/responses/Resources_PayloadTooLarge"},"415":{"$ref":"#/components/responses/Resources_UnsupportedMediaType"},"429":{"$ref":"#/components/responses/Resources_RateLimited"},"500":{"$ref":"#/components/responses/Resources_InternalError"},"503":{"$ref":"#/components/responses/Resources_ServiceUnavailable"}}},"delete":{"operationId":"deleteCustomTool","summary":"Delete Custom Tool","description":"Delete a custom tool. Agent blocks retain their configuration but can no longer call the deleted tool.\n\nOAuth scope: `api:write`.","x-sim-operation":"custom_tools.delete","x-oauth-scope":"api:write","tags":["Custom Tools"],"parameters":[{"name":"customToolId","in":"path","required":true,"description":"Unique custom tool identifier.","schema":{"type":"string","minLength":1,"description":"Unique custom tool identifier."}},{"name":"workspaceId","in":"query","required":true,"description":"Workspace that owns the custom tool.","schema":{"type":"string","minLength":1,"maxLength":128,"description":"Workspace that owns the custom tool."}}],"responses":{"200":{"description":"The custom tool was deleted.","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/Resources_X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/Resources_X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/Resources_X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Resources_DeleteCustomToolResponse"}}}},"400":{"$ref":"#/components/responses/Resources_BadRequest"},"401":{"$ref":"#/components/responses/Resources_Unauthorized"},"403":{"$ref":"#/components/responses/Resources_Forbidden"},"404":{"$ref":"#/components/responses/Resources_NotFound"},"429":{"$ref":"#/components/responses/Resources_RateLimited"},"500":{"$ref":"#/components/responses/Resources_InternalError"},"503":{"$ref":"#/components/responses/Resources_ServiceUnavailable"}}}},"/api/v2/sandboxes":{"get":{"operationId":"listSandboxes","summary":"List Sandboxes","description":"List reusable dependency environments for Function blocks, including language packages, managed CLIs, and system packages. Sandboxes remain visible after a plan downgrade.\n\nOAuth scope: `api:read`.","x-sim-operation":"sandboxes.list","x-oauth-scope":"api:read","tags":["Sandboxes"],"parameters":[{"name":"workspaceId","in":"query","required":true,"description":"Workspace that owns the sandbox.","schema":{"type":"string","minLength":1,"maxLength":128,"description":"Workspace that owns the sandbox."}},{"name":"search","in":"query","required":false,"description":"Case-insensitive substring match against the sandbox name.","schema":{"description":"Case-insensitive substring match against the sandbox name.","type":"string","minLength":1,"maxLength":200}},{"name":"sortBy","in":"query","required":false,"description":"Field used to sort the result. Sorting by `name` is case-sensitive and follows the storage collation, so do not rely on a case-insensitive order.","schema":{"default":"name","description":"Field used to sort the result. Sorting by `name` is case-sensitive and follows the storage collation, so do not rely on a case-insensitive order.","type":"string","enum":["name","createdAt","updatedAt"]}},{"name":"sortOrder","in":"query","required":false,"description":"Sort direction.","schema":{"default":"asc","description":"Sort direction.","type":"string","enum":["asc","desc"]}},{"name":"limit","in":"query","required":false,"description":"Maximum sandboxes to return per page. Must be a whole number from 1 to 100. Defaults to 50.","schema":{"default":50,"description":"Maximum sandboxes to return per page. Must be a whole number from 1 to 100. Defaults to 50.","type":"integer","minimum":1,"maximum":100}},{"name":"cursor","in":"query","required":false,"description":"Opaque cursor from the previous page. Send it back with the same sort and filters; only `limit` may change. Change anything else and pagination must restart without a cursor.","schema":{"description":"Opaque cursor from the previous page. Send it back with the same sort and filters; only `limit` may change. Change anything else and pagination must restart without a cursor.","type":"string","minLength":1}}],"responses":{"200":{"description":"Sandboxes defined in the workspace.","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/Resources_X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/Resources_X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/Resources_X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Resources_ListSandboxesResponse"}}}},"400":{"$ref":"#/components/responses/Resources_BadRequest"},"401":{"$ref":"#/components/responses/Resources_Unauthorized"},"403":{"$ref":"#/components/responses/Resources_Forbidden"},"404":{"$ref":"#/components/responses/Resources_NotFound"},"429":{"$ref":"#/components/responses/Resources_RateLimited"},"500":{"$ref":"#/components/responses/Resources_InternalError"},"503":{"$ref":"#/components/responses/Resources_ServiceUnavailable"}}},"post":{"operationId":"createSandbox","summary":"Create Sandbox","description":"Create a uniquely named dependency environment. If a build is needed, track readiness with `buildStatus`; null means no build is required. Invalid dependencies return `400` with field details. Requires workspace admin access on Max or Enterprise. Creates and updates share a rate limit; respect `Retry-After`. Workspace API keys return `403`; use a personal API key or scoped OAuth token.\n\nOAuth scope: `api:write`.","x-sim-operation":"sandboxes.create","x-oauth-scope":"api:write","tags":["Sandboxes"],"requestBody":{"required":true,"description":"Name, language, and dependency set of a new sandbox.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Resources_CreateSandboxRequest"}}}},"responses":{"201":{"description":"The sandbox was created; a build is scheduled where the deployment prebuilds images.","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/Resources_X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/Resources_X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/Resources_X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Resources_CreateSandboxResponse"}}}},"400":{"$ref":"#/components/responses/Resources_BadRequest"},"401":{"$ref":"#/components/responses/Resources_Unauthorized"},"403":{"$ref":"#/components/responses/Resources_Forbidden"},"404":{"$ref":"#/components/responses/Resources_NotFound"},"409":{"$ref":"#/components/responses/Resources_Conflict"},"413":{"$ref":"#/components/responses/Resources_PayloadTooLarge"},"415":{"$ref":"#/components/responses/Resources_UnsupportedMediaType"},"429":{"$ref":"#/components/responses/Resources_RateLimited"},"500":{"$ref":"#/components/responses/Resources_InternalError"},"503":{"$ref":"#/components/responses/Resources_ServiceUnavailable"}}}},"/api/v2/sandboxes/{sandboxId}":{"get":{"operationId":"getSandbox","summary":"Get Sandbox","description":"Get one sandbox by identifier, scoped to its workspace, including its current build state and any build failure.\n\nOAuth scope: `api:read`.","x-sim-operation":"sandboxes.read","x-oauth-scope":"api:read","tags":["Sandboxes"],"parameters":[{"name":"sandboxId","in":"path","required":true,"description":"Unique sandbox identifier.","schema":{"type":"string","minLength":1,"description":"Unique sandbox identifier."}},{"name":"workspaceId","in":"query","required":true,"description":"Workspace that owns the sandbox.","schema":{"type":"string","minLength":1,"maxLength":128,"description":"Workspace that owns the sandbox."}}],"responses":{"200":{"description":"The sandbox.","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/Resources_X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/Resources_X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/Resources_X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Resources_GetSandboxResponse"}}}},"400":{"$ref":"#/components/responses/Resources_BadRequest"},"401":{"$ref":"#/components/responses/Resources_Unauthorized"},"403":{"$ref":"#/components/responses/Resources_Forbidden"},"404":{"$ref":"#/components/responses/Resources_NotFound"},"429":{"$ref":"#/components/responses/Resources_RateLimited"},"500":{"$ref":"#/components/responses/Resources_InternalError"},"503":{"$ref":"#/components/responses/Resources_ServiceUnavailable"}}},"patch":{"operationId":"updateSandbox","summary":"Update Sandbox","description":"Update a sandbox, preserving omitted fields and replacing supplied lists. Dependency changes may start a build; resending a failed specification retries its build. `buildStatus: null` means no build is required. Requires workspace admin access on Max or Enterprise. Creates and updates share a rate limit; respect `Retry-After`. Workspace API keys return `403`; use a personal API key or scoped OAuth token.\n\nOAuth scope: `api:write`.","x-sim-operation":"sandboxes.update","x-oauth-scope":"api:write","tags":["Sandboxes"],"parameters":[{"name":"sandboxId","in":"path","required":true,"description":"Unique sandbox identifier.","schema":{"type":"string","minLength":1,"description":"Unique sandbox identifier."}}],"requestBody":{"required":true,"description":"Sandbox fields to change; at least one editable field is required.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Resources_UpdateSandboxRequest"}}}},"responses":{"200":{"description":"The updated sandbox.","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/Resources_X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/Resources_X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/Resources_X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Resources_UpdateSandboxResponse"}}}},"400":{"$ref":"#/components/responses/Resources_BadRequest"},"401":{"$ref":"#/components/responses/Resources_Unauthorized"},"403":{"$ref":"#/components/responses/Resources_Forbidden"},"404":{"$ref":"#/components/responses/Resources_NotFound"},"409":{"$ref":"#/components/responses/Resources_Conflict"},"413":{"$ref":"#/components/responses/Resources_PayloadTooLarge"},"415":{"$ref":"#/components/responses/Resources_UnsupportedMediaType"},"429":{"$ref":"#/components/responses/Resources_RateLimited"},"500":{"$ref":"#/components/responses/Resources_InternalError"},"503":{"$ref":"#/components/responses/Resources_ServiceUnavailable"}}},"delete":{"operationId":"deleteSandbox","summary":"Delete Sandbox","description":"Delete a sandbox. Function blocks using it fail until reconfigured. Requires workspace admin access on Max or Enterprise. Workspace API keys return `403`; use a personal API key or scoped OAuth token.\n\nOAuth scope: `api:write`.","x-sim-operation":"sandboxes.delete","x-oauth-scope":"api:write","tags":["Sandboxes"],"parameters":[{"name":"sandboxId","in":"path","required":true,"description":"Unique sandbox identifier.","schema":{"type":"string","minLength":1,"description":"Unique sandbox identifier."}},{"name":"workspaceId","in":"query","required":true,"description":"Workspace that owns the sandbox.","schema":{"type":"string","minLength":1,"maxLength":128,"description":"Workspace that owns the sandbox."}}],"responses":{"200":{"description":"The sandbox was deleted.","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/Resources_X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/Resources_X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/Resources_X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Resources_DeleteSandboxResponse"}}}},"400":{"$ref":"#/components/responses/Resources_BadRequest"},"401":{"$ref":"#/components/responses/Resources_Unauthorized"},"403":{"$ref":"#/components/responses/Resources_Forbidden"},"404":{"$ref":"#/components/responses/Resources_NotFound"},"429":{"$ref":"#/components/responses/Resources_RateLimited"},"500":{"$ref":"#/components/responses/Resources_InternalError"},"503":{"$ref":"#/components/responses/Resources_ServiceUnavailable"}}}},"/api/v2/credentials":{"get":{"operationId":"listCredentials","summary":"List Credentials","description":"List OAuth and service-account connections visible to the caller. Secret material is never returned.\n\nOAuth scope: `api:read`.","x-sim-operation":"credentials.connections.list","x-oauth-scope":"api:read","tags":["Credentials"],"parameters":[{"name":"workspaceId","in":"query","required":true,"description":"Workspace whose credentials should be listed.","schema":{"type":"string","minLength":1,"maxLength":128,"description":"Workspace whose credentials should be listed."}},{"name":"type","in":"query","required":false,"description":"Restrict results to this credential type.","schema":{"description":"Restrict results to this credential type.","type":"string","enum":["oauth","service_account"]}},{"name":"providerId","in":"query","required":false,"description":"Restrict results to credentials for this integration provider.","schema":{"description":"Restrict results to credentials for this integration provider.","type":"string","minLength":1}},{"name":"search","in":"query","required":false,"description":"Case-insensitive substring match against the credential display name.","schema":{"description":"Case-insensitive substring match against the credential display name.","type":"string","minLength":1,"maxLength":200}},{"name":"sortBy","in":"query","required":false,"description":"Field used to sort the result.","schema":{"default":"createdAt","description":"Field used to sort the result.","type":"string","enum":["displayName","createdAt","updatedAt"]}},{"name":"sortOrder","in":"query","required":false,"description":"Sort direction.","schema":{"default":"desc","description":"Sort direction.","type":"string","enum":["asc","desc"]}},{"name":"limit","in":"query","required":false,"description":"Maximum credentials to return per page. Must be a whole number from 1 to 100. Defaults to 50.","schema":{"default":50,"description":"Maximum credentials to return per page. Must be a whole number from 1 to 100. Defaults to 50.","type":"integer","minimum":1,"maximum":100}},{"name":"cursor","in":"query","required":false,"description":"Opaque cursor from the previous page. Send it back with the same sort and filters; only `limit` may change. Change anything else and pagination must restart without a cursor.","schema":{"description":"Opaque cursor from the previous page. Send it back with the same sort and filters; only `limit` may change. Change anything else and pagination must restart without a cursor.","type":"string","minLength":1}}],"responses":{"200":{"description":"Credentials visible to the caller.","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/Resources_X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/Resources_X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/Resources_X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Resources_ListCredentialsResponse"}}}},"400":{"$ref":"#/components/responses/Resources_BadRequest"},"401":{"$ref":"#/components/responses/Resources_Unauthorized"},"403":{"$ref":"#/components/responses/Resources_Forbidden"},"404":{"$ref":"#/components/responses/Resources_NotFound"},"429":{"$ref":"#/components/responses/Resources_RateLimited"},"500":{"$ref":"#/components/responses/Resources_InternalError"},"503":{"$ref":"#/components/responses/Resources_ServiceUnavailable"}}},"post":{"operationId":"createServiceAccountCredential","summary":"Create Service-Account Credential","description":"Verify and store a service-account credential using the fields from List Credential Providers, encoded as a JSON object string in `credentials`. Secrets are never returned. A matching source returns the existing credential with `200`; creation returns `201`. Workspace API keys return `403`; use a personal API key or scoped OAuth token.\n\nOAuth scope: `api:write`.","x-sim-operation":"credentials.service_accounts.create","x-oauth-scope":"api:write","tags":["Credentials"],"requestBody":{"required":true,"description":"Provider identifier, optional display metadata, and a write-only JSON object string containing the fields declared by provider discovery.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Resources_CreateServiceAccountCredentialRequest"}}}},"responses":{"200":{"description":"An existing credential matched the verified source.","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/Resources_X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/Resources_X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/Resources_X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Resources_CreateServiceAccountCredentialResponse"}}}},"201":{"description":"The service-account credential was created.","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/Resources_X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/Resources_X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/Resources_X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Resources_CreateServiceAccountCredentialResponse"}}}},"400":{"$ref":"#/components/responses/Resources_BadRequest"},"401":{"$ref":"#/components/responses/Resources_Unauthorized"},"403":{"$ref":"#/components/responses/Resources_Forbidden"},"404":{"$ref":"#/components/responses/Resources_NotFound"},"409":{"$ref":"#/components/responses/Resources_Conflict"},"413":{"$ref":"#/components/responses/Resources_PayloadTooLarge"},"415":{"$ref":"#/components/responses/Resources_UnsupportedMediaType"},"429":{"$ref":"#/components/responses/Resources_RateLimited"},"500":{"$ref":"#/components/responses/Resources_InternalError"},"503":{"$ref":"#/components/responses/Resources_ServiceUnavailable"}}}},"/api/v2/credentials/providers":{"get":{"operationId":"listCredentialProviders","summary":"List Credential Providers","description":"List OAuth and service-account connection methods and their availability. OAuth options provide provider IDs for browser connections; service-account methods declare required fields and write-only secrets. Supports provider-name search. Returns the complete set in one page; `nextCursor` is always null.\n\nOAuth scope: `api:read`.","x-sim-operation":"credentials.providers.list","x-oauth-scope":"api:read","tags":["Credentials"],"parameters":[{"name":"workspaceId","in":"query","required":true,"description":"Workspace used to evaluate credential-provider availability and integration policy.","schema":{"type":"string","minLength":1,"maxLength":128,"description":"Workspace used to evaluate credential-provider availability and integration policy."}},{"name":"search","in":"query","required":false,"description":"Case-insensitive substring match against the credential provider name.","schema":{"description":"Case-insensitive substring match against the credential provider name.","type":"string","minLength":1,"maxLength":200}}],"responses":{"200":{"description":"Credential provider catalog with caller-specific availability.","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/Resources_X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/Resources_X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/Resources_X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Resources_ListCredentialProvidersResponse"}}}},"400":{"$ref":"#/components/responses/Resources_BadRequest"},"401":{"$ref":"#/components/responses/Resources_Unauthorized"},"403":{"$ref":"#/components/responses/Resources_Forbidden"},"404":{"$ref":"#/components/responses/Resources_NotFound"},"429":{"$ref":"#/components/responses/Resources_RateLimited"},"500":{"$ref":"#/components/responses/Resources_InternalError"},"503":{"$ref":"#/components/responses/Resources_ServiceUnavailable"}}}},"/api/v2/credentials/connections":{"post":{"operationId":"createCredentialConnection","summary":"Create Credential Connection","description":"Create a short-lived browser URL for connecting an OAuth provider or reconnecting an existing OAuth credential. Open the URL, sign in as the authenticated user, complete provider authorization, then refresh the credentials list. Workspace API keys return `403`; use a personal API key or scoped OAuth token.\n\nOAuth scope: `api:write`.","x-sim-operation":"credentials.connections.create","x-oauth-scope":"api:write","tags":["Credentials"],"requestBody":{"required":true,"description":"For a new connection, provide providerId and displayName. For a reconnect, provide only credentialId; the existing display name is preserved.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Resources_CreateCredentialConnectionBody"}}}},"responses":{"200":{"description":"A short-lived browser authorization URL.","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/Resources_X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/Resources_X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/Resources_X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Resources_CreateCredentialConnectionResponse"}}}},"400":{"$ref":"#/components/responses/Resources_BadRequest"},"401":{"$ref":"#/components/responses/Resources_Unauthorized"},"403":{"$ref":"#/components/responses/Resources_Forbidden"},"404":{"$ref":"#/components/responses/Resources_NotFound"},"409":{"$ref":"#/components/responses/Resources_Conflict"},"413":{"$ref":"#/components/responses/Resources_PayloadTooLarge"},"415":{"$ref":"#/components/responses/Resources_UnsupportedMediaType"},"429":{"$ref":"#/components/responses/Resources_RateLimited"},"500":{"$ref":"#/components/responses/Resources_InternalError"},"503":{"$ref":"#/components/responses/Resources_ServiceUnavailable"}}}},"/api/v2/credentials/{credentialId}":{"delete":{"operationId":"deleteCredential","summary":"Disconnect Credential","description":"Disconnect an OAuth or service-account credential and clear its stored workflow, deployment, paused-run, knowledge-connector, and webhook references. Credential admin access is required. Workspace API keys return `403`; use a personal API key or scoped OAuth token.\n\nOAuth scope: `api:write`.","x-sim-operation":"credentials.delete","x-oauth-scope":"api:write","tags":["Credentials"],"parameters":[{"name":"credentialId","in":"path","required":true,"description":"Credential to disconnect.","schema":{"type":"string","minLength":1,"maxLength":255,"description":"Credential to disconnect."}},{"name":"workspaceId","in":"query","required":true,"description":"Workspace expected to own the credential.","schema":{"type":"string","minLength":1,"maxLength":128,"description":"Workspace expected to own the credential."}}],"responses":{"200":{"description":"The credential was disconnected.","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/Resources_X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/Resources_X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/Resources_X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Resources_DeleteCredentialResponse"}}}},"400":{"$ref":"#/components/responses/Resources_BadRequest"},"401":{"$ref":"#/components/responses/Resources_Unauthorized"},"403":{"$ref":"#/components/responses/Resources_Forbidden"},"404":{"$ref":"#/components/responses/Resources_NotFound"},"429":{"$ref":"#/components/responses/Resources_RateLimited"},"500":{"$ref":"#/components/responses/Resources_InternalError"},"503":{"$ref":"#/components/responses/Resources_ServiceUnavailable"}}},"patch":{"operationId":"updateCredential","summary":"Update Credential","description":"Rename a service-account credential or rotate its secret fields, preserving omitted values and the credential ID. Requires credential admin access. Provider rejection preserves the old secret and returns `400` with `providerErrorCode`; outages return `503`. Fields for a different credential type return `400`. Workspace API keys return `403`; use a personal API key or scoped OAuth token.\n\nOAuth scope: `api:write`.","x-sim-operation":"credentials.update","x-oauth-scope":"api:write","tags":["Credentials"],"parameters":[{"name":"credentialId","in":"path","required":true,"description":"Credential to update.","schema":{"type":"string","minLength":1,"maxLength":255,"description":"Credential to update."}},{"name":"workspaceId","in":"query","required":true,"description":"Workspace expected to own the credential.","schema":{"type":"string","minLength":1,"maxLength":128,"description":"Workspace expected to own the credential."}}],"requestBody":{"required":true,"description":"Replacement display metadata and the write-only fields declared by provider discovery.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Resources_UpdateCredentialRequest"}}}},"responses":{"200":{"description":"The updated credential without secret material.","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/Resources_X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/Resources_X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/Resources_X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Resources_UpdateCredentialResponse"}}}},"400":{"$ref":"#/components/responses/Resources_BadRequest"},"401":{"$ref":"#/components/responses/Resources_Unauthorized"},"403":{"$ref":"#/components/responses/Resources_Forbidden"},"404":{"$ref":"#/components/responses/Resources_NotFound"},"409":{"$ref":"#/components/responses/Resources_Conflict"},"413":{"$ref":"#/components/responses/Resources_PayloadTooLarge"},"415":{"$ref":"#/components/responses/Resources_UnsupportedMediaType"},"429":{"$ref":"#/components/responses/Resources_RateLimited"},"500":{"$ref":"#/components/responses/Resources_InternalError"},"503":{"$ref":"#/components/responses/Resources_ServiceUnavailable"}}}},"/api/v2/secrets":{"get":{"operationId":"listSecrets","summary":"List Secrets","description":"List workspace and caller-owned personal secrets with cursor pagination. Only workspace secrets marked `unredacted` include values; all other entries contain metadata only. Workspace API keys return `403`; use a personal API key or scoped OAuth token.\n\nOAuth scope: `api:read`.","x-sim-operation":"secrets.list","x-oauth-scope":"api:read","tags":["Secrets"],"parameters":[{"name":"workspaceId","in":"query","required":true,"description":"Workspace whose secret metadata should be listed.","schema":{"type":"string","minLength":1,"maxLength":128,"description":"Workspace whose secret metadata should be listed."}},{"name":"scope","in":"query","required":false,"description":"Restrict results to one ownership scope.","schema":{"description":"Restrict results to one ownership scope.","type":"string","enum":["workspace","personal"]}},{"name":"search","in":"query","required":false,"description":"Case-insensitive substring match against the secret name.","schema":{"description":"Case-insensitive substring match against the secret name.","type":"string","minLength":1,"maxLength":200}},{"name":"sortBy","in":"query","required":false,"description":"Field used to sort the result. Sorting by `name` is case-sensitive and follows the storage collation, so do not rely on a case-insensitive order.","schema":{"default":"name","description":"Field used to sort the result. Sorting by `name` is case-sensitive and follows the storage collation, so do not rely on a case-insensitive order.","type":"string","enum":["name","createdAt","updatedAt"]}},{"name":"sortOrder","in":"query","required":false,"description":"Sort direction.","schema":{"default":"asc","description":"Sort direction.","type":"string","enum":["asc","desc"]}},{"name":"limit","in":"query","required":false,"description":"Maximum secrets to return per page. Must be a whole number from 1 to 100. Defaults to 50.","schema":{"default":50,"description":"Maximum secrets to return per page. Must be a whole number from 1 to 100. Defaults to 50.","type":"integer","minimum":1,"maximum":100}},{"name":"cursor","in":"query","required":false,"description":"Opaque cursor from the previous page. Send it back with the same sort and filters; only `limit` may change. Change anything else and pagination must restart without a cursor.","schema":{"description":"Opaque cursor from the previous page. Send it back with the same sort and filters; only `limit` may change. Change anything else and pagination must restart without a cursor.","type":"string","minLength":1}}],"responses":{"200":{"description":"Secret metadata visible to the caller.","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/Resources_X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/Resources_X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/Resources_X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Resources_ListSecretsResponse"}}}},"400":{"$ref":"#/components/responses/Resources_BadRequest"},"401":{"$ref":"#/components/responses/Resources_Unauthorized"},"403":{"$ref":"#/components/responses/Resources_Forbidden"},"404":{"$ref":"#/components/responses/Resources_NotFound"},"429":{"$ref":"#/components/responses/Resources_RateLimited"},"500":{"$ref":"#/components/responses/Resources_InternalError"},"503":{"$ref":"#/components/responses/Resources_ServiceUnavailable"}}}},"/api/v2/secrets/{name}":{"put":{"operationId":"setSecret","summary":"Set Secret","description":"Create or replace a workspace or personal secret without returning its value. For existing workspace secrets, omit `value` to update metadata only; this returns `404` if absent. Personal secrets always require `value`. List Secrets can reveal workspace values marked `unredacted`. Workspace API keys return `403`; use a personal API key or scoped OAuth token.\n\nOAuth scope: `api:write`.","x-sim-operation":"secrets.set","x-oauth-scope":"api:write","tags":["Secrets"],"parameters":[{"name":"name","in":"path","required":true,"description":"Secret to create or replace.","schema":{"type":"string","minLength":1,"maxLength":255,"pattern":"^[A-Za-z0-9_]+$","description":"Secret to create or replace."}}],"requestBody":{"required":true,"description":"Ownership scope and write-only value for the secret. A workspace secret may instead send description or unredacted alone, without a value.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Resources_SetSecretRequest"}}}},"responses":{"200":{"description":"The existing secret value was replaced, or its metadata was updated in place.","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/Resources_X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/Resources_X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/Resources_X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Resources_SetSecretResponse"}}}},"201":{"description":"The secret was created.","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/Resources_X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/Resources_X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/Resources_X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Resources_SetSecretResponse"}}}},"400":{"$ref":"#/components/responses/Resources_BadRequest"},"401":{"$ref":"#/components/responses/Resources_Unauthorized"},"403":{"$ref":"#/components/responses/Resources_Forbidden"},"404":{"$ref":"#/components/responses/Resources_NotFound"},"413":{"$ref":"#/components/responses/Resources_PayloadTooLarge"},"415":{"$ref":"#/components/responses/Resources_UnsupportedMediaType"},"429":{"$ref":"#/components/responses/Resources_RateLimited"},"500":{"$ref":"#/components/responses/Resources_InternalError"},"503":{"$ref":"#/components/responses/Resources_ServiceUnavailable"}}},"delete":{"operationId":"deleteSecret","summary":"Delete Secret","description":"Delete a workspace or caller-owned personal secret without reading or returning its stored value. Workspace API keys return `403`; use a personal API key or scoped OAuth token.\n\nOAuth scope: `api:write`.","x-sim-operation":"secrets.delete","x-oauth-scope":"api:write","tags":["Secrets"],"parameters":[{"name":"name","in":"path","required":true,"description":"Secret to delete.","schema":{"type":"string","minLength":1,"maxLength":255,"pattern":"^[A-Za-z0-9_]+$","description":"Secret to delete."}},{"name":"workspaceId","in":"query","required":true,"description":"Workspace the request is authorized against. A workspace secret is deleted from it; a personal secret is deleted for the caller in all of their workspaces.","schema":{"type":"string","minLength":1,"maxLength":128,"description":"Workspace the request is authorized against. A workspace secret is deleted from it; a personal secret is deleted for the caller in all of their workspaces."}},{"name":"scope","in":"query","required":true,"description":"Whether the secret belongs to the workspace or to the caller. A personal secret belongs to the caller across every workspace, not to one workspace.","schema":{"type":"string","enum":["workspace","personal"],"description":"Whether the secret belongs to the workspace or to the caller. A personal secret belongs to the caller across every workspace, not to one workspace."}}],"responses":{"200":{"description":"The secret was deleted.","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/Resources_X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/Resources_X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/Resources_X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Resources_DeleteSecretResponse"}}}},"400":{"$ref":"#/components/responses/Resources_BadRequest"},"401":{"$ref":"#/components/responses/Resources_Unauthorized"},"403":{"$ref":"#/components/responses/Resources_Forbidden"},"404":{"$ref":"#/components/responses/Resources_NotFound"},"429":{"$ref":"#/components/responses/Resources_RateLimited"},"500":{"$ref":"#/components/responses/Resources_InternalError"},"503":{"$ref":"#/components/responses/Resources_ServiceUnavailable"}}}},"/api/v2/meta":{"get":{"operationId":"getApiMeta","summary":"Get API Capabilities","description":"Get whether v2 is available, what kind of API credential is calling, and when it expires. Requires a valid API key or OAuth access token.\n\nOAuth scope: `api:read`.","x-sim-operation":"meta.capabilities.read","x-oauth-scope":"api:read","tags":["Meta"],"responses":{"200":{"description":"Availability and lifecycle facts about the calling credential.","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/Resources_X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/Resources_X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/Resources_X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Resources_GetApiMetaResponse"}}}},"400":{"$ref":"#/components/responses/Resources_BadRequest"},"401":{"$ref":"#/components/responses/Resources_Unauthorized"},"429":{"$ref":"#/components/responses/Resources_RateLimited"},"500":{"$ref":"#/components/responses/Resources_InternalError"},"503":{"$ref":"#/components/responses/Resources_ServiceUnavailable"}}}},"/api/v2/workflow-mcp-servers":{"get":{"operationId":"listWorkflowMcpServers","summary":"List Workflow MCP Servers","description":"List MCP servers that expose deployed workflows to external clients. Use List MCP Servers for external servers Sim calls. Tool names share a 2,000-name page limit; inspect `toolNamesTruncated` and use List Workflow MCP Tools for a server's inventory. Workspace API keys return `403`; use a personal API key or scoped OAuth token.\n\nOAuth scope: `api:read`.","x-sim-operation":"mcp_servers.workflow_deployments.list","x-oauth-scope":"api:read","tags":["MCP Servers"],"parameters":[{"name":"workspaceId","in":"query","required":true,"description":"Workspace whose published MCP servers to list.","schema":{"type":"string","minLength":1,"maxLength":128,"description":"Workspace whose published MCP servers to list."}},{"name":"sortBy","in":"query","required":false,"description":"Field used to sort the result. Sorting by `name` is case-sensitive and follows the storage collation, so do not rely on a case-insensitive order.","schema":{"default":"createdAt","description":"Field used to sort the result. Sorting by `name` is case-sensitive and follows the storage collation, so do not rely on a case-insensitive order.","type":"string","enum":["name","createdAt","updatedAt"]}},{"name":"sortOrder","in":"query","required":false,"description":"Sort direction.","schema":{"default":"desc","description":"Sort direction.","type":"string","enum":["asc","desc"]}},{"name":"limit","in":"query","required":false,"description":"Maximum workflow-MCP servers to return per page. Must be a whole number from 1 to 100. Defaults to 50.","schema":{"default":50,"description":"Maximum workflow-MCP servers to return per page. Must be a whole number from 1 to 100. Defaults to 50.","type":"integer","minimum":1,"maximum":100}},{"name":"cursor","in":"query","required":false,"description":"Opaque cursor from the previous page. Send it back with the same sort and filters; only `limit` may change. Change anything else and pagination must restart without a cursor.","schema":{"description":"Opaque cursor from the previous page. Send it back with the same sort and filters; only `limit` may change. Change anything else and pagination must restart without a cursor.","type":"string","minLength":1}}],"responses":{"200":{"description":"A page of published MCP servers.","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/Resources_X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/Resources_X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/Resources_X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Resources_ListWorkflowMcpServersResponse"}}}},"400":{"$ref":"#/components/responses/Resources_BadRequest"},"401":{"$ref":"#/components/responses/Resources_Unauthorized"},"403":{"$ref":"#/components/responses/Resources_Forbidden"},"404":{"$ref":"#/components/responses/Resources_NotFound"},"429":{"$ref":"#/components/responses/Resources_RateLimited"},"500":{"$ref":"#/components/responses/Resources_InternalError"},"503":{"$ref":"#/components/responses/Resources_ServiceUnavailable"}}},"post":{"operationId":"createWorkflowMcpServer","summary":"Create Workflow MCP Server","description":"Create an MCP server that exposes deployed workflows as tools. Every supplied workflow must already be deployed. With `isPublic: true`, anyone with the server URL can execute its workflows without a Sim API key. Workspace API keys return `403`; use a personal API key or scoped OAuth token.\n\nOAuth scope: `api:write`.","x-sim-operation":"mcp_servers.workflow_deployments.create_server","x-oauth-scope":"api:write","tags":["MCP Servers"],"requestBody":{"required":true,"description":"A new workspace-published MCP server and the workflows it exposes.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Resources_CreateWorkflowMcpServerRequest"}}}},"responses":{"201":{"description":"The published MCP server.","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/Resources_X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/Resources_X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/Resources_X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Resources_CreateWorkflowMcpServerResponse"}}}},"400":{"$ref":"#/components/responses/Resources_BadRequest"},"401":{"$ref":"#/components/responses/Resources_Unauthorized"},"403":{"$ref":"#/components/responses/Resources_Forbidden"},"404":{"$ref":"#/components/responses/Resources_NotFound"},"409":{"$ref":"#/components/responses/Resources_Conflict"},"413":{"$ref":"#/components/responses/Resources_PayloadTooLarge"},"415":{"$ref":"#/components/responses/Resources_UnsupportedMediaType"},"429":{"$ref":"#/components/responses/Resources_RateLimited"},"500":{"$ref":"#/components/responses/Resources_InternalError"},"503":{"$ref":"#/components/responses/Resources_ServiceUnavailable"}}}},"/api/v2/workflow-mcp-servers/{serverId}":{"get":{"operationId":"getWorkflowMcpServer","summary":"Get Workflow MCP Server","description":"Get a published workflow MCP server's metadata and client endpoint. Use List Workflow MCP Tools for its tool inventory. Workspace API keys return `403`; use a personal API key or scoped OAuth token.\n\nOAuth scope: `api:read`.","x-sim-operation":"mcp_servers.workflow_deployments.read_server","x-oauth-scope":"api:read","tags":["MCP Servers"],"parameters":[{"name":"serverId","in":"path","required":true,"description":"Unique workflow-MCP server identifier.","schema":{"type":"string","minLength":1,"description":"Unique workflow-MCP server identifier."}}],"responses":{"200":{"description":"The MCP server.","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/Resources_X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/Resources_X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/Resources_X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Resources_GetWorkflowMcpServerResponse"}}}},"400":{"$ref":"#/components/responses/Resources_BadRequest"},"401":{"$ref":"#/components/responses/Resources_Unauthorized"},"403":{"$ref":"#/components/responses/Resources_Forbidden"},"404":{"$ref":"#/components/responses/Resources_NotFound"},"429":{"$ref":"#/components/responses/Resources_RateLimited"},"500":{"$ref":"#/components/responses/Resources_InternalError"},"503":{"$ref":"#/components/responses/Resources_ServiceUnavailable"}}},"patch":{"operationId":"updateWorkflowMcpServer","summary":"Update Workflow MCP Server","description":"Update a workflow MCP server's name, description, or public access. Omitted fields remain unchanged; `description: null` clears the description. Publish or unpublish tools separately. Workspace API keys return `403`; use a personal API key or scoped OAuth token.\n\nOAuth scope: `api:write`.","x-sim-operation":"mcp_servers.workflow_deployments.update_server","x-oauth-scope":"api:write","tags":["MCP Servers"],"parameters":[{"name":"serverId","in":"path","required":true,"description":"Unique workflow-MCP server identifier.","schema":{"type":"string","minLength":1,"description":"Unique workflow-MCP server identifier."}}],"requestBody":{"required":true,"description":"Merge-patch body for a published MCP server.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Resources_UpdateWorkflowMcpServerRequest"}}}},"responses":{"200":{"description":"The updated MCP server.","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/Resources_X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/Resources_X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/Resources_X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Resources_UpdateWorkflowMcpServerResponse"}}}},"400":{"$ref":"#/components/responses/Resources_BadRequest"},"401":{"$ref":"#/components/responses/Resources_Unauthorized"},"403":{"$ref":"#/components/responses/Resources_Forbidden"},"404":{"$ref":"#/components/responses/Resources_NotFound"},"409":{"$ref":"#/components/responses/Resources_Conflict"},"413":{"$ref":"#/components/responses/Resources_PayloadTooLarge"},"415":{"$ref":"#/components/responses/Resources_UnsupportedMediaType"},"429":{"$ref":"#/components/responses/Resources_RateLimited"},"500":{"$ref":"#/components/responses/Resources_InternalError"},"503":{"$ref":"#/components/responses/Resources_ServiceUnavailable"}}},"delete":{"operationId":"deleteWorkflowMcpServer","summary":"Delete Workflow MCP Server","description":"Delete a workflow MCP server and stop serving its tools. The underlying workflows remain deployed and executable through the workflow API. Workspace API keys return `403`; use a personal API key or scoped OAuth token.\n\nOAuth scope: `api:write`.","x-sim-operation":"mcp_servers.workflow_deployments.delete_server","x-oauth-scope":"api:write","tags":["MCP Servers"],"parameters":[{"name":"serverId","in":"path","required":true,"description":"Unique workflow-MCP server identifier.","schema":{"type":"string","minLength":1,"description":"Unique workflow-MCP server identifier."}}],"responses":{"200":{"description":"The MCP server was unpublished.","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/Resources_X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/Resources_X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/Resources_X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Resources_DeleteWorkflowMcpServerResponse"}}}},"400":{"$ref":"#/components/responses/Resources_BadRequest"},"401":{"$ref":"#/components/responses/Resources_Unauthorized"},"403":{"$ref":"#/components/responses/Resources_Forbidden"},"404":{"$ref":"#/components/responses/Resources_NotFound"},"409":{"$ref":"#/components/responses/Resources_Conflict"},"429":{"$ref":"#/components/responses/Resources_RateLimited"},"500":{"$ref":"#/components/responses/Resources_InternalError"},"503":{"$ref":"#/components/responses/Resources_ServiceUnavailable"}}}},"/api/v2/workflow-mcp-servers/{serverId}/tools":{"get":{"operationId":"listWorkflowMcpTools","summary":"List Workflow MCP Tools","description":"List a server's published tools by name, including workflow IDs used to unpublish them. Returns up to 2,000 tools with `nextCursor: null`; `truncated` indicates an incomplete inventory that cannot be paginated. Workspace API keys return `403`; use a personal API key or scoped OAuth token.\n\nOAuth scope: `api:read`.","x-sim-operation":"mcp_servers.workflow_deployments.list_tools","x-oauth-scope":"api:read","tags":["MCP Servers"],"parameters":[{"name":"serverId","in":"path","required":true,"description":"Unique workflow-MCP server identifier.","schema":{"type":"string","minLength":1,"description":"Unique workflow-MCP server identifier."}}],"responses":{"200":{"description":"The tools this server publishes.","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/Resources_X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/Resources_X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/Resources_X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Resources_ListWorkflowMcpToolsResponse"}}}},"400":{"$ref":"#/components/responses/Resources_BadRequest"},"401":{"$ref":"#/components/responses/Resources_Unauthorized"},"403":{"$ref":"#/components/responses/Resources_Forbidden"},"404":{"$ref":"#/components/responses/Resources_NotFound"},"429":{"$ref":"#/components/responses/Resources_RateLimited"},"500":{"$ref":"#/components/responses/Resources_InternalError"},"503":{"$ref":"#/components/responses/Resources_ServiceUnavailable"}}},"post":{"operationId":"deployWorkflowMcpTool","summary":"Publish Workflow As MCP Tool","description":"Publish a deployed workflow as an MCP tool using its deployed input schema. Each server has at most one tool per workflow; repeating the call replaces that tool and returns `200` with `updated: true`. Workspace API keys return `403`; use a personal API key or scoped OAuth token.\n\nOAuth scope: `api:write`.","x-sim-operation":"mcp_servers.workflow_deployments.deploy_tool","x-oauth-scope":"api:write","tags":["MCP Servers"],"parameters":[{"name":"serverId","in":"path","required":true,"description":"Unique workflow-MCP server identifier.","schema":{"type":"string","minLength":1,"description":"Unique workflow-MCP server identifier."}}],"requestBody":{"required":true,"description":"The workflow to publish and the tool metadata MCP clients see.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Resources_DeployWorkflowMcpToolRequest"}}}},"responses":{"200":{"description":"The published tool.","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/Resources_X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/Resources_X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/Resources_X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Resources_DeployWorkflowMcpToolResponse"}}}},"400":{"$ref":"#/components/responses/Resources_BadRequest"},"401":{"$ref":"#/components/responses/Resources_Unauthorized"},"403":{"$ref":"#/components/responses/Resources_Forbidden"},"404":{"$ref":"#/components/responses/Resources_NotFound"},"409":{"$ref":"#/components/responses/Resources_Conflict"},"413":{"$ref":"#/components/responses/Resources_PayloadTooLarge"},"415":{"$ref":"#/components/responses/Resources_UnsupportedMediaType"},"429":{"$ref":"#/components/responses/Resources_RateLimited"},"500":{"$ref":"#/components/responses/Resources_InternalError"},"503":{"$ref":"#/components/responses/Resources_ServiceUnavailable"}}}},"/api/v2/workflow-mcp-servers/{serverId}/tools/{workflowId}":{"delete":{"operationId":"undeployWorkflowMcpTool","summary":"Unpublish Workflow MCP Tool","description":"Unpublish an MCP tool by its workflow ID. The workflow's API deployment remains active. Workspace API keys return `403`; use a personal API key or scoped OAuth token.\n\nOAuth scope: `api:write`.","x-sim-operation":"mcp_servers.workflow_deployments.undeploy_tool","x-oauth-scope":"api:write","tags":["MCP Servers"],"parameters":[{"name":"serverId","in":"path","required":true,"description":"Unique workflow-MCP server identifier.","schema":{"type":"string","minLength":1,"description":"Unique workflow-MCP server identifier."}},{"name":"workflowId","in":"path","required":true,"description":"Workflow published as a tool on this server.","schema":{"type":"string","minLength":1,"description":"Workflow published as a tool on this server."}}],"responses":{"200":{"description":"The tool was removed.","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/Resources_X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/Resources_X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/Resources_X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Resources_UndeployWorkflowMcpToolResponse"}}}},"400":{"$ref":"#/components/responses/Resources_BadRequest"},"401":{"$ref":"#/components/responses/Resources_Unauthorized"},"403":{"$ref":"#/components/responses/Resources_Forbidden"},"404":{"$ref":"#/components/responses/Resources_NotFound"},"409":{"$ref":"#/components/responses/Resources_Conflict"},"429":{"$ref":"#/components/responses/Resources_RateLimited"},"500":{"$ref":"#/components/responses/Resources_InternalError"},"503":{"$ref":"#/components/responses/Resources_ServiceUnavailable"}}}},"/api/v2/blocks":{"get":{"operationId":"listBlocks","summary":"List Blocks","description":"List built-in and workspace-deployed blocks visible to the caller. Integration allowlists and preview visibility restrict results. Use `capability=trigger` for workflow starters and Get Block or Get Tool to resolve operation and tool IDs.\n\nOAuth scope: `api:read`.","x-sim-operation":"catalog.blocks.list","x-oauth-scope":"api:read","tags":["Catalog"],"parameters":[{"name":"workspaceId","in":"query","required":true,"description":"Workspace whose integration allowlist, revealed preview blocks, and deployed custom blocks decide what this catalog contains.","schema":{"type":"string","minLength":1,"maxLength":128,"description":"Workspace whose integration allowlist, revealed preview blocks, and deployed custom blocks decide what this catalog contains."}},{"name":"search","in":"query","required":false,"description":"Case-insensitive substring match against the block id, name, and description.","schema":{"description":"Case-insensitive substring match against the block id, name, and description.","type":"string","minLength":1,"maxLength":200}},{"name":"category","in":"query","required":false,"description":"Restrict to one toolbar category.","schema":{"description":"Restrict to one toolbar category.","type":"string","enum":["blocks","tools","triggers"]}},{"name":"capability","in":"query","required":false,"description":"Restrict to blocks that can start a workflow — the `triggers` category, blocks declaring `triggerAllowed`, and blocks with trigger-mode fields.","schema":{"description":"Restrict to blocks that can start a workflow — the `triggers` category, blocks declaring `triggerAllowed`, and blocks with trigger-mode fields.","type":"string","enum":["trigger"]}},{"name":"source","in":"query","required":false,"description":"Restrict to built-in blocks or this workspace's deployed custom blocks.","schema":{"description":"Restrict to built-in blocks or this workspace's deployed custom blocks.","type":"string","enum":["builtin","custom"]}},{"name":"sortBy","in":"query","required":false,"description":"Field used to sort the result. Sorting by `name` is case-sensitive and follows the storage collation, so do not rely on a case-insensitive order.","schema":{"default":"id","description":"Field used to sort the result. Sorting by `name` is case-sensitive and follows the storage collation, so do not rely on a case-insensitive order.","type":"string","enum":["id","name","category"]}},{"name":"sortOrder","in":"query","required":false,"description":"Sort direction.","schema":{"default":"asc","description":"Sort direction.","type":"string","enum":["asc","desc"]}},{"name":"limit","in":"query","required":false,"description":"Maximum blocks to return per page. Must be a whole number from 1 to 100. Defaults to 50.","schema":{"default":50,"description":"Maximum blocks to return per page. Must be a whole number from 1 to 100. Defaults to 50.","type":"integer","minimum":1,"maximum":100}},{"name":"cursor","in":"query","required":false,"description":"Opaque cursor from the previous page. Send it back with the same sort and filters; only `limit` may change. Change anything else and pagination must restart without a cursor.","schema":{"description":"Opaque cursor from the previous page. Send it back with the same sort and filters; only `limit` may change. Change anything else and pagination must restart without a cursor.","type":"string","minLength":1}}],"responses":{"200":{"description":"A page of blocks available in the workspace.","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/Resources_X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/Resources_X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/Resources_X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Resources_ListBlocksResponse"}}}},"400":{"$ref":"#/components/responses/Resources_BadRequest"},"401":{"$ref":"#/components/responses/Resources_Unauthorized"},"403":{"$ref":"#/components/responses/Resources_Forbidden"},"404":{"$ref":"#/components/responses/Resources_NotFound"},"429":{"$ref":"#/components/responses/Resources_RateLimited"},"500":{"$ref":"#/components/responses/Resources_InternalError"},"503":{"$ref":"#/components/responses/Resources_ServiceUnavailable"}}}},"/api/v2/blocks/{blockId}":{"get":{"operationId":"getBlock","summary":"Get Block","description":"Get a block's fields, conditions, operations, tool schemas, and triggers. Unversioned types resolve to the newest visible version; the returned `id` identifies that version. Hidden or missing blocks return `404`.\n\nOAuth scope: `api:read`.","x-sim-operation":"catalog.blocks.read","x-oauth-scope":"api:read","tags":["Catalog"],"parameters":[{"name":"blockId","in":"path","required":true,"description":"Block type identifier. An unversioned base type resolves to the newest version, and the response echoes the resolved id.","schema":{"type":"string","minLength":1,"maxLength":255,"description":"Block type identifier. An unversioned base type resolves to the newest version, and the response echoes the resolved id."}},{"name":"workspaceId","in":"query","required":true,"description":"Workspace whose integration allowlist, revealed preview blocks, and deployed custom blocks decide what this catalog contains.","schema":{"type":"string","minLength":1,"maxLength":128,"description":"Workspace whose integration allowlist, revealed preview blocks, and deployed custom blocks decide what this catalog contains."}}],"responses":{"200":{"description":"The block.","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/Resources_X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/Resources_X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/Resources_X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Resources_GetBlockResponse"}}}},"400":{"$ref":"#/components/responses/Resources_BadRequest"},"401":{"$ref":"#/components/responses/Resources_Unauthorized"},"403":{"$ref":"#/components/responses/Resources_Forbidden"},"404":{"$ref":"#/components/responses/Resources_NotFound"},"429":{"$ref":"#/components/responses/Resources_RateLimited"},"500":{"$ref":"#/components/responses/Resources_InternalError"},"503":{"$ref":"#/components/responses/Resources_ServiceUnavailable"}}}},"/api/v2/tools":{"get":{"operationId":"listTools","summary":"List Tools","description":"List built-in tools exposed by blocks visible to the caller. Use List MCP Server Tools for an external server's tools and List Custom Tools for workspace code-backed tools.\n\nOAuth scope: `api:read`.","x-sim-operation":"catalog.tools.list","x-oauth-scope":"api:read","tags":["Catalog"],"parameters":[{"name":"workspaceId","in":"query","required":true,"description":"Workspace whose integration allowlist, revealed preview blocks, and deployed custom blocks decide what this catalog contains.","schema":{"type":"string","minLength":1,"maxLength":128,"description":"Workspace whose integration allowlist, revealed preview blocks, and deployed custom blocks decide what this catalog contains."}},{"name":"search","in":"query","required":false,"description":"Case-insensitive substring match against the tool id, name, and description.","schema":{"description":"Case-insensitive substring match against the tool id, name, and description.","type":"string","minLength":1,"maxLength":200}},{"name":"hostedApiKey","in":"query","required":false,"description":"Restrict to tools by how their API key is supplied.","schema":{"description":"Restrict to tools by how their API key is supplied.","type":"string","enum":["always","conditional","none"]}},{"name":"oauthProvider","in":"query","required":false,"description":"Restrict to tools that authenticate against this OAuth service.","schema":{"description":"Restrict to tools that authenticate against this OAuth service.","type":"string","minLength":1,"maxLength":255}},{"name":"sortBy","in":"query","required":false,"description":"Field used to sort the result. Sorting by `name` is case-sensitive and follows the storage collation, so do not rely on a case-insensitive order.","schema":{"default":"id","description":"Field used to sort the result. Sorting by `name` is case-sensitive and follows the storage collation, so do not rely on a case-insensitive order.","type":"string","enum":["id","name"]}},{"name":"sortOrder","in":"query","required":false,"description":"Sort direction.","schema":{"default":"asc","description":"Sort direction.","type":"string","enum":["asc","desc"]}},{"name":"limit","in":"query","required":false,"description":"Maximum tools to return per page. Must be a whole number from 1 to 100. Defaults to 50.","schema":{"default":50,"description":"Maximum tools to return per page. Must be a whole number from 1 to 100. Defaults to 50.","type":"integer","minimum":1,"maximum":100}},{"name":"cursor","in":"query","required":false,"description":"Opaque cursor from the previous page. Send it back with the same sort and filters; only `limit` may change. Change anything else and pagination must restart without a cursor.","schema":{"description":"Opaque cursor from the previous page. Send it back with the same sort and filters; only `limit` may change. Change anything else and pagination must restart without a cursor.","type":"string","minLength":1}}],"responses":{"200":{"description":"A page of built-in tools available in the workspace.","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/Resources_X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/Resources_X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/Resources_X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Resources_ListToolsResponse"}}}},"400":{"$ref":"#/components/responses/Resources_BadRequest"},"401":{"$ref":"#/components/responses/Resources_Unauthorized"},"403":{"$ref":"#/components/responses/Resources_Forbidden"},"404":{"$ref":"#/components/responses/Resources_NotFound"},"429":{"$ref":"#/components/responses/Resources_RateLimited"},"500":{"$ref":"#/components/responses/Resources_InternalError"},"503":{"$ref":"#/components/responses/Resources_ServiceUnavailable"}}}},"/api/v2/tools/{toolId}":{"get":{"operationId":"getTool","summary":"Get Tool","description":"Get a built-in tool's parameters and outputs. Registered IDs resolve exactly; other names resolve to the newest family version. The returned `id` identifies the resolved tool. Hidden or missing tools return `404`.\n\nOAuth scope: `api:read`.","x-sim-operation":"catalog.tools.read","x-oauth-scope":"api:read","tags":["Catalog"],"parameters":[{"name":"toolId","in":"path","required":true,"description":"Tool identifier. An unversioned name resolves to the newest version, and the response echoes the resolved id.","schema":{"type":"string","minLength":1,"maxLength":255,"description":"Tool identifier. An unversioned name resolves to the newest version, and the response echoes the resolved id."}},{"name":"workspaceId","in":"query","required":true,"description":"Workspace whose integration allowlist, revealed preview blocks, and deployed custom blocks decide what this catalog contains.","schema":{"type":"string","minLength":1,"maxLength":128,"description":"Workspace whose integration allowlist, revealed preview blocks, and deployed custom blocks decide what this catalog contains."}}],"responses":{"200":{"description":"The tool.","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/Resources_X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/Resources_X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/Resources_X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Resources_GetToolResponse"}}}},"400":{"$ref":"#/components/responses/Resources_BadRequest"},"401":{"$ref":"#/components/responses/Resources_Unauthorized"},"403":{"$ref":"#/components/responses/Resources_Forbidden"},"404":{"$ref":"#/components/responses/Resources_NotFound"},"429":{"$ref":"#/components/responses/Resources_RateLimited"},"500":{"$ref":"#/components/responses/Resources_InternalError"},"503":{"$ref":"#/components/responses/Resources_ServiceUnavailable"}}}},"/api/v2/tools/{toolId}/execute":{"post":{"operationId":"executeTool","summary":"Run Tool","description":"Run a built-in tool using published parameter IDs. Sim resolves `credentialId`, hosted keys, and whole-value `{{VAR_NAME}}` references for `user-only` parameters; other values pass through verbatim. Third-party refusal returns `200` with `status: \"failed\"`; the error envelope covers API failures. Hidden or missing tools return `404`; disallowed integrations return `403` with `error.details.code: INTEGRATION_NOT_ALLOWED`. Hosted-key use is billed to the workspace. Workspace API keys return `403`; use a personal API key or scoped OAuth token.\n\nOAuth scope: `api:write`.","x-sim-operation":"tools.execute","x-oauth-scope":"api:write","tags":["Catalog"],"parameters":[{"name":"toolId","in":"path","required":true,"description":"Tool identifier. An unversioned name resolves to the newest version, and the response echoes the resolved id.","schema":{"type":"string","minLength":1,"maxLength":255,"description":"Tool identifier. An unversioned name resolves to the newest version, and the response echoes the resolved id."}}],"requestBody":{"required":true,"description":"Workspace, arguments, and the credential to authenticate with.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Resources_ExecuteToolRequest"}}}},"responses":{"200":{"description":"The outcome of the tool call.","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/Resources_X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/Resources_X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/Resources_X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Resources_ExecuteToolResponse"}}}},"400":{"$ref":"#/components/responses/Resources_BadRequest"},"401":{"$ref":"#/components/responses/Resources_Unauthorized"},"403":{"$ref":"#/components/responses/Resources_Forbidden"},"404":{"$ref":"#/components/responses/Resources_NotFound"},"413":{"$ref":"#/components/responses/Resources_PayloadTooLarge"},"415":{"$ref":"#/components/responses/Resources_UnsupportedMediaType"},"429":{"$ref":"#/components/responses/Resources_RateLimited"},"500":{"$ref":"#/components/responses/Resources_InternalError"},"503":{"$ref":"#/components/responses/Resources_ServiceUnavailable"}}}},"/api/v2/connector-types":{"get":{"operationId":"listConnectorTypes","summary":"List Connector Types","description":"List connector types and accepted source configuration. A field with `multi: true` stores `string[]`. `canonicalParamId` links picker and manual fields that write the same key; send exactly one, keyed by `canonicalParamId` rather than its own `id`. Returns the complete set in one page; `nextCursor` is always null.\n\nOAuth scope: `api:read`.","x-sim-operation":"catalog.connector_types.list","x-oauth-scope":"api:read","tags":["Catalog"],"parameters":[{"name":"workspaceId","in":"query","required":true,"description":"Workspace whose integration allowlist, revealed preview blocks, and deployed custom blocks decide what this catalog contains.","schema":{"type":"string","minLength":1,"maxLength":128,"description":"Workspace whose integration allowlist, revealed preview blocks, and deployed custom blocks decide what this catalog contains."}},{"name":"search","in":"query","required":false,"description":"Case-insensitive substring match against the connector name.","schema":{"description":"Case-insensitive substring match against the connector name.","type":"string","minLength":1,"maxLength":200}}],"responses":{"200":{"description":"The connector-type catalog.","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/Resources_X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/Resources_X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/Resources_X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Resources_ListConnectorTypesResponse"}}}},"400":{"$ref":"#/components/responses/Resources_BadRequest"},"401":{"$ref":"#/components/responses/Resources_Unauthorized"},"403":{"$ref":"#/components/responses/Resources_Forbidden"},"404":{"$ref":"#/components/responses/Resources_NotFound"},"429":{"$ref":"#/components/responses/Resources_RateLimited"},"500":{"$ref":"#/components/responses/Resources_InternalError"},"503":{"$ref":"#/components/responses/Resources_ServiceUnavailable"}}}}},"components":{"securitySchemes":{"apiKey":{"type":"apiKey","in":"header","name":"X-API-Key","description":"Your Sim API key, personal or workspace-scoped. Generate one under Settings, then API Keys. Operations that reject workspace keys say so in their own description."},"oauthBearer":{"type":"http","scheme":"bearer","bearerFormat":"OAuth 2.0 access token","description":"A Sim OAuth access token obtained by a registered client through the authorization-code flow. Each operation declares its required scope: api:read permits reads and searches; api:write also permits changes and execution and implies api:read. Scope requirements follow the application operation, independent of HTTP method or workspace role."}},"headers":{"Workflows_Content-Type":{"description":"MIME type of the file, defaulting to application/octet-stream when the stored type is unavailable.","schema":{"type":"string","title":"Content type","description":"MIME type of the file, defaulting to application/octet-stream when the stored type is unavailable."}},"Workflows_Content-Disposition":{"description":"Attachment disposition containing sanitized and RFC 5987 encoded filenames.","schema":{"type":"string","title":"Content disposition","description":"Attachment disposition containing sanitized and RFC 5987 encoded filenames."}},"Workflows_Content-Length":{"description":"File size in bytes.","schema":{"type":"string","pattern":"^(0|[1-9]\\d*)$","title":"Content length","description":"File size in bytes."}},"Workflows_X-RateLimit-Limit":{"description":"Maximum requests allowed in the current window.","schema":{"type":"integer","minimum":0,"maximum":9007199254740991,"title":"Rate limit","description":"Maximum requests allowed in the current window."}},"Workflows_X-RateLimit-Remaining":{"description":"Requests remaining in the current window.","schema":{"type":"integer","minimum":0,"maximum":9007199254740991,"title":"Rate limit remaining","description":"Requests remaining in the current window."}},"Workflows_X-RateLimit-Reset":{"description":"ISO 8601 timestamp when the current rate-limit window resets.","schema":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$","title":"Rate limit reset","description":"ISO 8601 timestamp when the current rate-limit window resets."}},"Workflows_Retry-After":{"description":"Seconds to wait before retrying, sent on `429` and `503`. Add jitter rather than retrying at exactly this offset.","schema":{"type":"integer","minimum":0,"maximum":9007199254740991,"title":"Retry after","description":"Seconds to wait before retrying, sent on `429` and `503`. Add jitter rather than retrying at exactly this offset."}},"Workflows_X-Run-Id":{"description":"Identifier assigned to the workflow run.","schema":{"type":"string","minLength":1,"title":"Run identifier","description":"Identifier assigned to the workflow run."}},"Logs_X-RateLimit-Limit":{"description":"Maximum requests allowed in the current window.","schema":{"type":"integer","minimum":0,"maximum":9007199254740991,"title":"Rate limit","description":"Maximum requests allowed in the current window."}},"Logs_X-RateLimit-Remaining":{"description":"Requests remaining in the current window.","schema":{"type":"integer","minimum":0,"maximum":9007199254740991,"title":"Rate limit remaining","description":"Requests remaining in the current window."}},"Logs_X-RateLimit-Reset":{"description":"ISO 8601 timestamp when the current rate-limit window resets.","schema":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$","title":"Rate limit reset","description":"ISO 8601 timestamp when the current rate-limit window resets."}},"Logs_Retry-After":{"description":"Seconds to wait before retrying, sent on `429` and `503`. Add jitter rather than retrying at exactly this offset.","schema":{"type":"integer","minimum":0,"maximum":9007199254740991,"title":"Retry after","description":"Seconds to wait before retrying, sent on `429` and `503`. Add jitter rather than retrying at exactly this offset."}},"Logs_X-Run-Id":{"description":"Identifier assigned to the workflow run.","schema":{"type":"string","minLength":1,"title":"Run identifier","description":"Identifier assigned to the workflow run."}},"FilesAudit_Content-Type":{"description":"MIME type of the file, defaulting to application/octet-stream when the stored type is unavailable.","schema":{"type":"string","title":"Content type","description":"MIME type of the file, defaulting to application/octet-stream when the stored type is unavailable."}},"FilesAudit_Content-Disposition":{"description":"Attachment disposition containing sanitized and RFC 5987 encoded filenames.","schema":{"type":"string","title":"Content disposition","description":"Attachment disposition containing sanitized and RFC 5987 encoded filenames."}},"FilesAudit_Content-Length":{"description":"File size in bytes.","schema":{"type":"string","pattern":"^(0|[1-9]\\d*)$","title":"Content length","description":"File size in bytes."}},"FilesAudit_X-RateLimit-Limit":{"description":"Maximum requests allowed in the current window.","schema":{"type":"integer","minimum":0,"maximum":9007199254740991,"title":"Rate limit","description":"Maximum requests allowed in the current window."}},"FilesAudit_X-RateLimit-Remaining":{"description":"Requests remaining in the current window.","schema":{"type":"integer","minimum":0,"maximum":9007199254740991,"title":"Rate limit remaining","description":"Requests remaining in the current window."}},"FilesAudit_X-RateLimit-Reset":{"description":"ISO 8601 timestamp when the current rate-limit window resets.","schema":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$","title":"Rate limit reset","description":"ISO 8601 timestamp when the current rate-limit window resets."}},"FilesAudit_Retry-After":{"description":"Seconds to wait before retrying, sent on `429` and `503`. Add jitter rather than retrying at exactly this offset.","schema":{"type":"integer","minimum":0,"maximum":9007199254740991,"title":"Retry after","description":"Seconds to wait before retrying, sent on `429` and `503`. Add jitter rather than retrying at exactly this offset."}},"FilesAudit_X-Run-Id":{"description":"Identifier assigned to the workflow run.","schema":{"type":"string","minLength":1,"title":"Run identifier","description":"Identifier assigned to the workflow run."}},"Tables_X-RateLimit-Limit":{"description":"Maximum requests allowed in the current window.","schema":{"type":"integer","minimum":0,"maximum":9007199254740991,"title":"Rate limit","description":"Maximum requests allowed in the current window."}},"Tables_X-RateLimit-Remaining":{"description":"Requests remaining in the current window.","schema":{"type":"integer","minimum":0,"maximum":9007199254740991,"title":"Rate limit remaining","description":"Requests remaining in the current window."}},"Tables_X-RateLimit-Reset":{"description":"ISO 8601 timestamp when the current rate-limit window resets.","schema":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$","title":"Rate limit reset","description":"ISO 8601 timestamp when the current rate-limit window resets."}},"Tables_Retry-After":{"description":"Seconds to wait before retrying, sent on `429` and `503`. Add jitter rather than retrying at exactly this offset.","schema":{"type":"integer","minimum":0,"maximum":9007199254740991,"title":"Retry after","description":"Seconds to wait before retrying, sent on `429` and `503`. Add jitter rather than retrying at exactly this offset."}},"Tables_X-Run-Id":{"description":"Identifier assigned to the workflow run.","schema":{"type":"string","minLength":1,"title":"Run identifier","description":"Identifier assigned to the workflow run."}},"Knowledge_Content-Type":{"description":"MIME type of the file, defaulting to application/octet-stream when the stored type is unavailable.","schema":{"type":"string","title":"Content type","description":"MIME type of the file, defaulting to application/octet-stream when the stored type is unavailable."}},"Knowledge_Content-Disposition":{"description":"Attachment disposition containing sanitized and RFC 5987 encoded filenames.","schema":{"type":"string","title":"Content disposition","description":"Attachment disposition containing sanitized and RFC 5987 encoded filenames."}},"Knowledge_Content-Length":{"description":"File size in bytes.","schema":{"type":"string","pattern":"^(0|[1-9]\\d*)$","title":"Content length","description":"File size in bytes."}},"Knowledge_X-RateLimit-Limit":{"description":"Maximum requests allowed in the current window.","schema":{"type":"integer","minimum":0,"maximum":9007199254740991,"title":"Rate limit","description":"Maximum requests allowed in the current window."}},"Knowledge_X-RateLimit-Remaining":{"description":"Requests remaining in the current window.","schema":{"type":"integer","minimum":0,"maximum":9007199254740991,"title":"Rate limit remaining","description":"Requests remaining in the current window."}},"Knowledge_X-RateLimit-Reset":{"description":"ISO 8601 timestamp when the current rate-limit window resets.","schema":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$","title":"Rate limit reset","description":"ISO 8601 timestamp when the current rate-limit window resets."}},"Knowledge_Retry-After":{"description":"Seconds to wait before retrying, sent on `429` and `503`. Add jitter rather than retrying at exactly this offset.","schema":{"type":"integer","minimum":0,"maximum":9007199254740991,"title":"Retry after","description":"Seconds to wait before retrying, sent on `429` and `503`. Add jitter rather than retrying at exactly this offset."}},"Knowledge_X-Run-Id":{"description":"Identifier assigned to the workflow run.","schema":{"type":"string","minLength":1,"title":"Run identifier","description":"Identifier assigned to the workflow run."}},"Billing_X-RateLimit-Limit":{"description":"Maximum requests allowed in the current window.","schema":{"type":"integer","minimum":0,"maximum":9007199254740991,"title":"Rate limit","description":"Maximum requests allowed in the current window."}},"Billing_X-RateLimit-Remaining":{"description":"Requests remaining in the current window.","schema":{"type":"integer","minimum":0,"maximum":9007199254740991,"title":"Rate limit remaining","description":"Requests remaining in the current window."}},"Billing_X-RateLimit-Reset":{"description":"ISO 8601 timestamp when the current rate-limit window resets.","schema":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$","title":"Rate limit reset","description":"ISO 8601 timestamp when the current rate-limit window resets."}},"Billing_Retry-After":{"description":"Seconds to wait before retrying, sent on `429` and `503`. Add jitter rather than retrying at exactly this offset.","schema":{"type":"integer","minimum":0,"maximum":9007199254740991,"title":"Retry after","description":"Seconds to wait before retrying, sent on `429` and `503`. Add jitter rather than retrying at exactly this offset."}},"Billing_X-Run-Id":{"description":"Identifier assigned to the workflow run.","schema":{"type":"string","minLength":1,"title":"Run identifier","description":"Identifier assigned to the workflow run."}},"Resources_X-RateLimit-Limit":{"description":"Maximum requests allowed in the current window.","schema":{"type":"integer","minimum":0,"maximum":9007199254740991,"title":"Rate limit","description":"Maximum requests allowed in the current window."}},"Resources_X-RateLimit-Remaining":{"description":"Requests remaining in the current window.","schema":{"type":"integer","minimum":0,"maximum":9007199254740991,"title":"Rate limit remaining","description":"Requests remaining in the current window."}},"Resources_X-RateLimit-Reset":{"description":"ISO 8601 timestamp when the current rate-limit window resets.","schema":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$","title":"Rate limit reset","description":"ISO 8601 timestamp when the current rate-limit window resets."}},"Resources_Retry-After":{"description":"Seconds to wait before retrying, sent on `429` and `503`. Add jitter rather than retrying at exactly this offset.","schema":{"type":"integer","minimum":0,"maximum":9007199254740991,"title":"Retry after","description":"Seconds to wait before retrying, sent on `429` and `503`. Add jitter rather than retrying at exactly this offset."}},"Resources_X-Run-Id":{"description":"Identifier assigned to the workflow run.","schema":{"type":"string","minLength":1,"title":"Run identifier","description":"Identifier assigned to the workflow run."}}},"responses":{"Workflows_BadRequest":{"description":"The request is invalid. This includes a query parameter sent with no value (`?limit=`, `?search=`), which is rejected rather than read as zero, empty, or the parameter default — omit the parameter instead.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Workflows_V2Error"},"example":{"error":{"code":"BAD_REQUEST","message":"Invalid request"}}}}},"Workflows_Unauthorized":{"description":"The API credential is missing or invalid.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Workflows_V2Error"},"example":{"error":{"code":"UNAUTHORIZED","message":"Authentication required"}}}}},"Workflows_UsageLimitExceeded":{"description":"The workspace has exceeded its usage or billing limits.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Workflows_V2Error"},"example":{"error":{"code":"USAGE_LIMIT_EXCEEDED","message":"Usage limit exceeded. Please upgrade your plan to continue."}}}}},"Workflows_Forbidden":{"description":"The caller lacks the rights this operation requires. When the cause is one a caller can act on, `error.details.code` names it. A resource in a workspace the caller cannot reach at all answers `404` instead, so absence and denial are indistinguishable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Workflows_V2Error"},"example":{"error":{"code":"FORBIDDEN","message":"Insufficient workspace permissions","details":{"code":"INSUFFICIENT_WORKSPACE_ROLE"}}}}}},"Workflows_NotFound":{"description":"The requested resource was not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Workflows_V2Error"},"example":{"error":{"code":"NOT_FOUND","message":"Not found"}}}}},"Workflows_Conflict":{"description":"The request conflicts with current resource state.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Workflows_V2Error"},"example":{"error":{"code":"CONFLICT","message":"Webhook path already in use"}}}}},"Workflows_RunIdConflict":{"description":"The run cannot be started, for one of two causes named by `error.details.code`: `RUN_ID_CONFLICT` when the supplied `X-Run-Id` is already claimed, and `CALL_CHAIN_DEPTH_EXCEEDED` when the incoming `X-Sim-Via` chain has reached the maximum workflow-to-workflow call depth.","headers":{"X-Run-Id":{"$ref":"#/components/headers/Workflows_X-Run-Id"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Workflows_V2Error"},"example":{"error":{"code":"CONFLICT","message":"Run ID has already been used","details":{"code":"RUN_ID_CONFLICT","runId":"0f7c1a2e-9b3d-4c58-8a21-6d4e5f7a9b01"}}}}}},"Workflows_PayloadTooLarge":{"description":"The request, or a resource collection it must materialize, exceeds the allowed size: an oversized request body, a generated artifact past the download ceiling, or a workspace folder tree too large to load in full.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Workflows_V2Error"},"example":{"error":{"code":"PAYLOAD_TOO_LARGE","message":"Request body is too large"}}}}},"Workflows_UnsupportedMediaType":{"description":"The request uses an unsupported media type.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Workflows_V2Error"},"example":{"error":{"code":"UNSUPPORTED_MEDIA_TYPE","message":"Request body must be sent as application/json"}}}}},"Workflows_Locked":{"description":"The resource is temporarily locked or unavailable; retry the request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Workflows_V2Error"},"example":{"error":{"code":"LOCKED","message":"Workflow is locked"}}}}},"Workflows_RateLimited":{"description":"The caller exceeded the request rate limit.","headers":{"Retry-After":{"$ref":"#/components/headers/Workflows_Retry-After"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Workflows_V2Error"},"example":{"error":{"code":"RATE_LIMITED","message":"API rate limit exceeded","details":{"retryAfter":"2026-01-01T00:00:30.000Z"}}}}}},"Workflows_ClientClosedRequest":{"description":"The client closed the connection before the response was produced. An abort can leave the run going, so `error.details.runId` carries the run id — reconcile against the runs resource rather than starting another run.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Workflows_V2Error"},"example":{"error":{"code":"CLIENT_CLOSED_REQUEST","message":"Client cancelled request","details":{"runId":"0f7c1a2e-9b3d-4c58-8a21-6d4e5f7a9b01"}}}}}},"Workflows_InternalError":{"description":"An unexpected server error occurred.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Workflows_V2Error"},"example":{"error":{"code":"INTERNAL_ERROR","message":"Internal server error"}}}}},"Workflows_ServiceUnavailable":{"description":"A required service is temporarily unavailable. `Retry-After` carries the seconds to wait; treat it as a floor and add jitter. The header is omitted when `error.details.code` is `ASYNC_ENQUEUE_AMBIGUOUS`, because the run may already have started — reconcile against the returned run id instead of retrying.","headers":{"Retry-After":{"$ref":"#/components/headers/Workflows_Retry-After"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Workflows_V2Error"},"example":{"error":{"code":"SERVICE_UNAVAILABLE","message":"Service temporarily unavailable"}}}}},"Logs_BadRequest":{"description":"The request is invalid. This includes a query parameter sent with no value (`?limit=`, `?search=`), which is rejected rather than read as zero, empty, or the parameter default — omit the parameter instead.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Logs_V2Error"},"example":{"error":{"code":"BAD_REQUEST","message":"Invalid request"}}}}},"Logs_Unauthorized":{"description":"The API credential is missing or invalid.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Logs_V2Error"},"example":{"error":{"code":"UNAUTHORIZED","message":"Authentication required"}}}}},"Logs_Forbidden":{"description":"The caller lacks the rights this operation requires. When the cause is one a caller can act on, `error.details.code` names it. A resource in a workspace the caller cannot reach at all answers `404` instead, so absence and denial are indistinguishable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Logs_V2Error"},"example":{"error":{"code":"FORBIDDEN","message":"Insufficient workspace permissions","details":{"code":"INSUFFICIENT_WORKSPACE_ROLE"}}}}}},"Logs_NotFound":{"description":"The requested resource was not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Logs_V2Error"},"example":{"error":{"code":"NOT_FOUND","message":"Not found"}}}}},"Logs_PayloadTooLarge":{"description":"The request, or a resource collection it must materialize, exceeds the allowed size: an oversized request body, a generated artifact past the download ceiling, or a workspace folder tree too large to load in full.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Logs_V2Error"},"example":{"error":{"code":"PAYLOAD_TOO_LARGE","message":"Request body is too large"}}}}},"Logs_RateLimited":{"description":"The caller exceeded the request rate limit.","headers":{"Retry-After":{"$ref":"#/components/headers/Logs_Retry-After"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Logs_V2Error"},"example":{"error":{"code":"RATE_LIMITED","message":"API rate limit exceeded","details":{"retryAfter":"2026-01-01T00:00:30.000Z"}}}}}},"Logs_InternalError":{"description":"An unexpected server error occurred.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Logs_V2Error"},"example":{"error":{"code":"INTERNAL_ERROR","message":"Internal server error"}}}}},"Logs_ServiceUnavailable":{"description":"A required service is temporarily unavailable. `Retry-After` carries the seconds to wait; treat it as a floor and add jitter. The header is omitted when `error.details.code` is `ASYNC_ENQUEUE_AMBIGUOUS`, because the run may already have started — reconcile against the returned run id instead of retrying.","headers":{"Retry-After":{"$ref":"#/components/headers/Logs_Retry-After"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Logs_V2Error"},"example":{"error":{"code":"SERVICE_UNAVAILABLE","message":"Service temporarily unavailable"}}}}},"FilesAudit_BadRequest":{"description":"The request is invalid. This includes a query parameter sent with no value (`?limit=`, `?search=`), which is rejected rather than read as zero, empty, or the parameter default — omit the parameter instead.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FilesAudit_V2Error"},"example":{"error":{"code":"BAD_REQUEST","message":"Invalid request"}}}}},"FilesAudit_Unauthorized":{"description":"The API credential is missing or invalid.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FilesAudit_V2Error"},"example":{"error":{"code":"UNAUTHORIZED","message":"Authentication required"}}}}},"FilesAudit_Forbidden":{"description":"The caller lacks the rights this operation requires. When the cause is one a caller can act on, `error.details.code` names it. A resource in a workspace the caller cannot reach at all answers `404` instead, so absence and denial are indistinguishable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FilesAudit_V2Error"},"example":{"error":{"code":"FORBIDDEN","message":"Insufficient workspace permissions","details":{"code":"INSUFFICIENT_WORKSPACE_ROLE"}}}}}},"FilesAudit_NotFound":{"description":"The requested resource was not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FilesAudit_V2Error"},"example":{"error":{"code":"NOT_FOUND","message":"Not found"}}}}},"FilesAudit_Conflict":{"description":"The request conflicts with current resource state.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FilesAudit_V2Error"},"example":{"error":{"code":"CONFLICT","message":"The request conflicts with the current resource state"}}}}},"FilesAudit_PayloadTooLarge":{"description":"The request, or a resource collection it must materialize, exceeds the allowed size: an oversized request body, a generated artifact past the download ceiling, or a workspace folder tree too large to load in full.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FilesAudit_V2Error"},"example":{"error":{"code":"PAYLOAD_TOO_LARGE","message":"Request body is too large"}}}}},"FilesAudit_UnsupportedMediaType":{"description":"The request uses an unsupported media type.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FilesAudit_V2Error"},"example":{"error":{"code":"UNSUPPORTED_MEDIA_TYPE","message":"Request body must be sent as application/json"}}}}},"FilesAudit_Locked":{"description":"The resource is temporarily locked or unavailable; retry the request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FilesAudit_V2Error"},"example":{"error":{"code":"LOCKED","message":"The file or its search index is temporarily locked; retry the request"}}}}},"FilesAudit_RateLimited":{"description":"The caller exceeded the request rate limit.","headers":{"Retry-After":{"$ref":"#/components/headers/FilesAudit_Retry-After"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FilesAudit_V2Error"},"example":{"error":{"code":"RATE_LIMITED","message":"API rate limit exceeded","details":{"retryAfter":"2026-01-01T00:00:30.000Z"}}}}}},"FilesAudit_InternalError":{"description":"An unexpected server error occurred.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FilesAudit_V2Error"},"example":{"error":{"code":"INTERNAL_ERROR","message":"Internal server error"}}}}},"FilesAudit_ServiceUnavailable":{"description":"A required service is temporarily unavailable. `Retry-After` carries the seconds to wait; treat it as a floor and add jitter. The header is omitted when `error.details.code` is `ASYNC_ENQUEUE_AMBIGUOUS`, because the run may already have started — reconcile against the returned run id instead of retrying.","headers":{"Retry-After":{"$ref":"#/components/headers/FilesAudit_Retry-After"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FilesAudit_V2Error"},"example":{"error":{"code":"SERVICE_UNAVAILABLE","message":"Service temporarily unavailable"}}}}},"Tables_BadRequest":{"description":"The request is invalid. This includes a query parameter sent with no value (`?limit=`, `?search=`), which is rejected rather than read as zero, empty, or the parameter default — omit the parameter instead.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Tables_V2Error"},"example":{"error":{"code":"BAD_REQUEST","message":"Invalid request"}}}}},"Tables_Unauthorized":{"description":"The API credential is missing or invalid.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Tables_V2Error"},"example":{"error":{"code":"UNAUTHORIZED","message":"Authentication required"}}}}},"Tables_Forbidden":{"description":"The caller lacks the rights this operation requires. When the cause is one a caller can act on, `error.details.code` names it. A resource in a workspace the caller cannot reach at all answers `404` instead, so absence and denial are indistinguishable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Tables_V2Error"},"example":{"error":{"code":"FORBIDDEN","message":"Insufficient workspace permissions","details":{"code":"INSUFFICIENT_WORKSPACE_ROLE"}}}}}},"Tables_NotFound":{"description":"The requested resource was not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Tables_V2Error"},"example":{"error":{"code":"NOT_FOUND","message":"Not found"}}}}},"Tables_Conflict":{"description":"The request conflicts with current resource state.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Tables_V2Error"},"example":{"error":{"code":"CONFLICT","message":"A table named \"Orders\" already exists in this workspace"}}}}},"Tables_PayloadTooLarge":{"description":"The request, or a resource collection it must materialize, exceeds the allowed size: an oversized request body, a generated artifact past the download ceiling, or a workspace folder tree too large to load in full.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Tables_V2Error"},"example":{"error":{"code":"PAYLOAD_TOO_LARGE","message":"Request body is too large"}}}}},"Tables_UnsupportedMediaType":{"description":"The request uses an unsupported media type.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Tables_V2Error"},"example":{"error":{"code":"UNSUPPORTED_MEDIA_TYPE","message":"Request body must be sent as application/json"}}}}},"Tables_Locked":{"description":"The resource is temporarily locked or unavailable; retry the request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Tables_V2Error"},"example":{"error":{"code":"LOCKED","message":"This table is insert-locked: new rows cannot be added.","details":{"lock":"insert"}}}}}},"Tables_RateLimited":{"description":"The caller exceeded the request rate limit.","headers":{"Retry-After":{"$ref":"#/components/headers/Tables_Retry-After"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Tables_V2Error"},"example":{"error":{"code":"RATE_LIMITED","message":"API rate limit exceeded","details":{"retryAfter":"2026-01-01T00:00:30.000Z"}}}}}},"Tables_InternalError":{"description":"An unexpected server error occurred.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Tables_V2Error"},"example":{"error":{"code":"INTERNAL_ERROR","message":"Internal server error"}}}}},"Tables_ServiceUnavailable":{"description":"A required service is temporarily unavailable. `Retry-After` carries the seconds to wait; treat it as a floor and add jitter. The header is omitted when `error.details.code` is `ASYNC_ENQUEUE_AMBIGUOUS`, because the run may already have started — reconcile against the returned run id instead of retrying.","headers":{"Retry-After":{"$ref":"#/components/headers/Tables_Retry-After"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Tables_V2Error"},"example":{"error":{"code":"SERVICE_UNAVAILABLE","message":"Service temporarily unavailable"}}}}},"Knowledge_BadRequest":{"description":"The request is invalid. This includes a query parameter sent with no value (`?limit=`, `?search=`), which is rejected rather than read as zero, empty, or the parameter default — omit the parameter instead.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Knowledge_V2Error"},"example":{"error":{"code":"BAD_REQUEST","message":"Invalid request"}}}}},"Knowledge_Unauthorized":{"description":"The API credential is missing or invalid.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Knowledge_V2Error"},"example":{"error":{"code":"UNAUTHORIZED","message":"Authentication required"}}}}},"Knowledge_UsageLimitExceeded":{"description":"The workspace has exceeded its usage or billing limits.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Knowledge_V2Error"},"example":{"error":{"code":"USAGE_LIMIT_EXCEEDED","message":"Usage limit exceeded. Please upgrade your plan to continue."}}}}},"Knowledge_Forbidden":{"description":"The caller lacks the rights this operation requires. When the cause is one a caller can act on, `error.details.code` names it. A resource in a workspace the caller cannot reach at all answers `404` instead, so absence and denial are indistinguishable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Knowledge_V2Error"},"example":{"error":{"code":"FORBIDDEN","message":"Insufficient workspace permissions","details":{"code":"INSUFFICIENT_WORKSPACE_ROLE"}}}}}},"Knowledge_NotFound":{"description":"The requested resource was not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Knowledge_V2Error"},"example":{"error":{"code":"NOT_FOUND","message":"Not found"}}}}},"Knowledge_Conflict":{"description":"The request conflicts with current resource state.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Knowledge_V2Error"},"example":{"error":{"code":"CONFLICT","message":"Upload has already been completed"}}}}},"Knowledge_PayloadTooLarge":{"description":"The request, or a resource collection it must materialize, exceeds the allowed size: an oversized request body, a generated artifact past the download ceiling, or a workspace folder tree too large to load in full.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Knowledge_V2Error"},"example":{"error":{"code":"PAYLOAD_TOO_LARGE","message":"Request body is too large"}}}}},"Knowledge_UnsupportedMediaType":{"description":"The request uses an unsupported media type.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Knowledge_V2Error"},"example":{"error":{"code":"UNSUPPORTED_MEDIA_TYPE","message":"Request body must be sent as application/json"}}}}},"Knowledge_RateLimited":{"description":"The caller exceeded the request rate limit.","headers":{"Retry-After":{"$ref":"#/components/headers/Knowledge_Retry-After"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Knowledge_V2Error"},"example":{"error":{"code":"RATE_LIMITED","message":"API rate limit exceeded","details":{"retryAfter":"2026-01-01T00:00:30.000Z"}}}}}},"Knowledge_InternalError":{"description":"An unexpected server error occurred.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Knowledge_V2Error"},"example":{"error":{"code":"INTERNAL_ERROR","message":"Internal server error"}}}}},"Knowledge_ServiceUnavailable":{"description":"A required service is temporarily unavailable. `Retry-After` carries the seconds to wait; treat it as a floor and add jitter. The header is omitted when `error.details.code` is `ASYNC_ENQUEUE_AMBIGUOUS`, because the run may already have started — reconcile against the returned run id instead of retrying.","headers":{"Retry-After":{"$ref":"#/components/headers/Knowledge_Retry-After"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Knowledge_V2Error"},"example":{"error":{"code":"SERVICE_UNAVAILABLE","message":"Service temporarily unavailable"}}}}},"Billing_BadRequest":{"description":"The request is invalid. This includes a query parameter sent with no value (`?limit=`, `?search=`), which is rejected rather than read as zero, empty, or the parameter default — omit the parameter instead.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Billing_V2Error"},"example":{"error":{"code":"BAD_REQUEST","message":"Invalid request"}}}}},"Billing_Unauthorized":{"description":"The API credential is missing or invalid.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Billing_V2Error"},"example":{"error":{"code":"UNAUTHORIZED","message":"Authentication required"}}}}},"Billing_Forbidden":{"description":"The caller lacks the rights this operation requires. When the cause is one a caller can act on, `error.details.code` names it. A resource in a workspace the caller cannot reach at all answers `404` instead, so absence and denial are indistinguishable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Billing_V2Error"},"example":{"error":{"code":"FORBIDDEN","message":"Insufficient workspace permissions","details":{"code":"INSUFFICIENT_WORKSPACE_ROLE"}}}}}},"Billing_NotFound":{"description":"The requested resource was not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Billing_V2Error"},"example":{"error":{"code":"NOT_FOUND","message":"Not found"}}}}},"Billing_RateLimited":{"description":"The caller exceeded the request rate limit.","headers":{"Retry-After":{"$ref":"#/components/headers/Billing_Retry-After"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Billing_V2Error"},"example":{"error":{"code":"RATE_LIMITED","message":"API rate limit exceeded","details":{"retryAfter":"2026-01-01T00:00:30.000Z"}}}}}},"Billing_InternalError":{"description":"An unexpected server error occurred.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Billing_V2Error"},"example":{"error":{"code":"INTERNAL_ERROR","message":"Internal server error"}}}}},"Billing_ServiceUnavailable":{"description":"A required service is temporarily unavailable. `Retry-After` carries the seconds to wait; treat it as a floor and add jitter. The header is omitted when `error.details.code` is `ASYNC_ENQUEUE_AMBIGUOUS`, because the run may already have started — reconcile against the returned run id instead of retrying.","headers":{"Retry-After":{"$ref":"#/components/headers/Billing_Retry-After"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Billing_V2Error"},"example":{"error":{"code":"SERVICE_UNAVAILABLE","message":"Service temporarily unavailable"}}}}},"Resources_BadRequest":{"description":"The request is invalid. This includes a query parameter sent with no value (`?limit=`, `?search=`), which is rejected rather than read as zero, empty, or the parameter default — omit the parameter instead.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Resources_V2Error"},"example":{"error":{"code":"BAD_REQUEST","message":"Invalid request"}}}}},"Resources_Unauthorized":{"description":"The API credential is missing or invalid.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Resources_V2Error"},"example":{"error":{"code":"UNAUTHORIZED","message":"Authentication required"}}}}},"Resources_Forbidden":{"description":"The caller lacks the rights this operation requires. When the cause is one a caller can act on, `error.details.code` names it. A resource in a workspace the caller cannot reach at all answers `404` instead, so absence and denial are indistinguishable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Resources_V2Error"},"example":{"error":{"code":"FORBIDDEN","message":"Insufficient workspace permissions","details":{"code":"INSUFFICIENT_WORKSPACE_ROLE"}}}}}},"Resources_NotFound":{"description":"The requested resource was not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Resources_V2Error"},"example":{"error":{"code":"NOT_FOUND","message":"Not found"}}}}},"Resources_Conflict":{"description":"The request conflicts with current resource state.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Resources_V2Error"},"example":{"error":{"code":"CONFLICT","message":"The request conflicts with the current state of the resource"}}}}},"Resources_PayloadTooLarge":{"description":"The request, or a resource collection it must materialize, exceeds the allowed size: an oversized request body, a generated artifact past the download ceiling, or a workspace folder tree too large to load in full.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Resources_V2Error"},"example":{"error":{"code":"PAYLOAD_TOO_LARGE","message":"Request body is too large"}}}}},"Resources_UnsupportedMediaType":{"description":"The request uses an unsupported media type.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Resources_V2Error"},"example":{"error":{"code":"UNSUPPORTED_MEDIA_TYPE","message":"Request body must be sent as application/json"}}}}},"Resources_RateLimited":{"description":"The caller exceeded the request rate limit.","headers":{"Retry-After":{"$ref":"#/components/headers/Resources_Retry-After"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Resources_V2Error"},"example":{"error":{"code":"RATE_LIMITED","message":"API rate limit exceeded","details":{"retryAfter":"2026-01-01T00:00:30.000Z"}}}}}},"Resources_InternalError":{"description":"An unexpected server error occurred.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Resources_V2Error"},"example":{"error":{"code":"INTERNAL_ERROR","message":"Internal server error"}}}}},"Resources_ServiceUnavailable":{"description":"A required service is temporarily unavailable. `Retry-After` carries the seconds to wait; treat it as a floor and add jitter. The header is omitted when `error.details.code` is `ASYNC_ENQUEUE_AMBIGUOUS`, because the run may already have started — reconcile against the returned run id instead of retrying.","headers":{"Retry-After":{"$ref":"#/components/headers/Resources_Retry-After"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Resources_V2Error"},"example":{"error":{"code":"SERVICE_UNAVAILABLE","message":"Service temporarily unavailable"}}}}}},"schemas":{"Workflows_V2ActionableForbiddenDetails":{"type":"object","properties":{"code":{"$ref":"#/components/schemas/Workflows_V2ForbiddenDetailCode"}},"required":["code"],"additionalProperties":{"description":"Additional context for this refusal."},"title":"Actionable forbidden details","description":"Machine-readable cause and optional context for an actionable `403` response."},"Workflows_V2ForbiddenDetailCode":{"type":"string","enum":["INSUFFICIENT_WORKSPACE_ROLE","PERSONAL_API_KEYS_DISABLED","WORKSPACE_KEY_OPERATION_NOT_PERMITTED","PRINCIPAL_KIND_NOT_PERMITTED","ORGANIZATION_MEMBERSHIP_REQUIRED","ORGANIZATION_ADMIN_REQUIRED","ENTERPRISE_PLAN_REQUIRED","ORGANIZATION_PLAN_REQUIRED","AUDIT_LOGS_DISABLED","SKILL_EDITOR_ACCESS_REQUIRED","SECRET_ADMIN_ACCESS_REQUIRED","WORKSPACE_RESOURCE_LIMIT_REACHED","PUBLIC_SHARING_NOT_ALLOWED","CREDENTIAL_ADMIN_ACCESS_REQUIRED","MCP_SERVER_URL_NOT_ALLOWED","WORKSPACE_PLAN_CAPABILITY_REQUIRED","CHAT_AUTH_MODE_NOT_PERMITTED","CONNECTOR_MANAGED_RESOURCE_READ_ONLY","PERMISSION_GROUP_CAPABILITY_BLOCKED","INTEGRATION_NOT_ALLOWED","INSUFFICIENT_SCOPE","SCIM_MANAGED_MEMBERSHIP"],"title":"Forbidden detail code","description":"Stable cause code for an actionable `403` response."},"Workflows_V2Error":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","description":"Stable machine-readable error code."},"message":{"type":"string","description":"Human-readable explanation of the error."},"details":{"description":"Structured error context whose keys depend on the error. Actionable `403` responses use the `V2ActionableForbiddenDetails` shape; validation failures may return issue arrays instead.","anyOf":[{"$ref":"#/components/schemas/Workflows_V2ActionableForbiddenDetails"},{"description":"Other structured context defined by the specific error."}]}},"required":["code","message"],"additionalProperties":false,"description":"Canonical error details."}},"required":["error"],"additionalProperties":false,"title":"v2 error response","description":"Canonical error envelope returned by the public v2 API.","examples":[{"error":{"code":"BAD_REQUEST","message":"The request is invalid."}}]},"Workflows_FolderPathInput":{"title":"Folder path input","description":"Folder path. A missing leading slash is normalized before validation. Segments are percent-encoded, so a folder shown as \"New folder\" is `/New%20folder`: everything outside `A-Z a-z 0-9 - _ . ~` is escaped as uppercase hex, and only that exact encoding is accepted. A trailing slash, an empty segment, and a literal `.` or `..` segment are rejected. At most 64 segments and 4096 encoded bytes.","maxLength":4096,"type":"string"},"Workflows_WorkflowListItem":{"type":"object","properties":{"id":{"type":"string","description":"Unique workflow identifier.","examples":["3b1f7c92-8d4e-4a6b-9c0d-5e2f8a714b36"]},"webUrl":{"type":"string","format":"uri","description":"Canonical absolute URL for opening this resource in the Sim web application."},"name":{"type":"string","description":"Workflow name.","examples":["Customer support triage"]},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Workflow description, or null when none is set."},"folderPath":{"type":"string","title":"Folder path","description":"Canonical containing-folder path; `/` is the workspace root.","maxLength":4096,"examples":["/Operations"]},"workspaceId":{"type":"string","description":"Workspace that owns the workflow."},"isDeployed":{"type":"boolean","description":"Whether the workflow has an active deployment."},"deployedAt":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"ISO 8601 activation timestamp, or null when not deployed.","format":"date-time"},"runCount":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Lifetime count of successful runs, excluding failed, canceled, and paused runs. Log retention does not reduce this count; it may differ from the number returned by List Workflow Runs."},"lastRunAt":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"ISO 8601 timestamp of the latest run counted by `runCount`, or null when none has been. Stamped by the same successful-run path, so a workflow whose only runs failed reports null here.","format":"date-time"},"createdAt":{"type":"string","description":"ISO 8601 timestamp when the workflow was created.","format":"date-time"},"updatedAt":{"type":"string","description":"ISO 8601 timestamp when the workflow was last updated.","format":"date-time"}},"required":["id","webUrl","name","description","folderPath","workspaceId","isDeployed","deployedAt","runCount","lastRunAt","createdAt","updatedAt"],"additionalProperties":false,"title":"Workflow summary","description":"Summary of a workflow and its deployment and run state."},"Workflows_WorkflowListResponse":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Workflows_WorkflowListItem"},"description":"Items in the current page."},"nextCursor":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Opaque cursor for the next page. Send it back as `cursor`; `null` means there is nothing further to fetch. Never construct one yourself."}},"required":["data","nextCursor"],"additionalProperties":false,"title":"Workflow list response","description":"A cursor-paginated page of workflow summaries.","examples":[{"data":[{"id":"3b1f7c92-8d4e-4a6b-9c0d-5e2f8a714b36","webUrl":"https://www.sim.ai/workspace/a91c4b2e-6d3f-4e8a-b5c7-0d9e2f1a8c64/w/3b1f7c92-8d4e-4a6b-9c0d-5e2f8a714b36","name":"Customer support triage","description":"Routes incoming support requests to the right team.","folderPath":"/Operations","workspaceId":"a91c4b2e-6d3f-4e8a-b5c7-0d9e2f1a8c64","isDeployed":true,"deployedAt":"2026-06-12T10:30:00.000Z","runCount":42,"lastRunAt":"2026-08-09T18:04:11.000Z","createdAt":"2026-05-01T09:00:00.000Z","updatedAt":"2026-08-09T18:04:11.000Z"}],"nextCursor":null}]},"Workflows_SeededWorkflowBlock":{"type":"object","properties":{"id":{"type":"string","description":"Block identifier."},"type":{"type":"string","description":"Registered block type."},"name":{"type":"string","description":"Block display name."}},"required":["id","type","name"],"additionalProperties":false,"title":"Seeded workflow block","description":"A block the platform placed in a newly created workflow."},"Workflows_CreateWorkflowResult":{"type":"object","properties":{"id":{"type":"string","description":"Unique workflow identifier.","examples":["3b1f7c92-8d4e-4a6b-9c0d-5e2f8a714b36"]},"webUrl":{"type":"string","format":"uri","description":"Canonical absolute URL for opening this resource in the Sim web application."},"name":{"type":"string","description":"Workflow name.","examples":["Customer support triage"]},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Workflow description, or null when none is set."},"folderPath":{"type":"string","title":"Folder path","description":"Canonical containing-folder path; `/` is the workspace root.","maxLength":4096,"examples":["/Operations"]},"workspaceId":{"type":"string","description":"Workspace that owns the workflow."},"isDeployed":{"type":"boolean","description":"Whether the workflow has an active deployment."},"deployedAt":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"ISO 8601 activation timestamp, or null when not deployed.","format":"date-time"},"runCount":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Lifetime count of successful runs, excluding failed, canceled, and paused runs. Log retention does not reduce this count; it may differ from the number returned by List Workflow Runs."},"lastRunAt":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"ISO 8601 timestamp of the latest run counted by `runCount`, or null when none has been. Stamped by the same successful-run path, so a workflow whose only runs failed reports null here.","format":"date-time"},"createdAt":{"type":"string","description":"ISO 8601 timestamp when the workflow was created.","format":"date-time"},"updatedAt":{"type":"string","description":"ISO 8601 timestamp when the workflow was last updated.","format":"date-time"},"blocks":{"type":"array","items":{"$ref":"#/components/schemas/Workflows_SeededWorkflowBlock"},"description":"Blocks seeded into the new workflow. Contains the start block; attach edges to its `id`."}},"required":["id","webUrl","name","description","folderPath","workspaceId","isDeployed","deployedAt","runCount","lastRunAt","createdAt","updatedAt","blocks"],"additionalProperties":false,"title":"Create workflow result","description":"The created workflow and the blocks it was seeded with."},"Workflows_CreateWorkflowResponse":{"type":"object","properties":{"data":{"description":"Response data.","$ref":"#/components/schemas/Workflows_CreateWorkflowResult"}},"required":["data"],"additionalProperties":false,"title":"Create workflow response","description":"The created workflow and the blocks it was seeded with.","examples":[{"data":{"id":"3b1f7c92-8d4e-4a6b-9c0d-5e2f8a714b36","webUrl":"https://www.sim.ai/workspace/a91c4b2e-6d3f-4e8a-b5c7-0d9e2f1a8c64/w/3b1f7c92-8d4e-4a6b-9c0d-5e2f8a714b36","name":"Customer support triage","description":"Routes incoming support requests to the right team.","folderPath":"/Operations","workspaceId":"a91c4b2e-6d3f-4e8a-b5c7-0d9e2f1a8c64","isDeployed":false,"deployedAt":null,"runCount":0,"lastRunAt":null,"createdAt":"2026-05-01T09:00:00.000Z","updatedAt":"2026-08-09T18:04:11.000Z","blocks":[{"id":"start-1","type":"starter","name":"Start"}]}}]},"Workflows_CreateWorkflowRequest":{"type":"object","properties":{"workspaceId":{"type":"string","minLength":1,"maxLength":128,"description":"Workspace in which to create the workflow."},"name":{"type":"string","minLength":1,"maxLength":255,"description":"Workflow name."},"description":{"description":"Optional workflow description.","anyOf":[{"type":"string","maxLength":50000},{"type":"null"}]},"folderPath":{"$ref":"#/components/schemas/Workflows_FolderPathInput"}},"required":["workspaceId","name"],"additionalProperties":false,"title":"Create workflow request","description":"Name, description, workspace, and optional folder for a new workflow."},"Workflows_WorkflowBlock":{"type":"object","properties":{"id":{"type":"string","minLength":1,"description":"Block identifier, unique within the workflow."},"type":{"type":"string","description":"Registered block type."},"name":{"type":"string","description":"Block display name; must be unique within the workflow."},"position":{"type":"object","properties":{"x":{"type":"number","description":"Canvas x coordinate."},"y":{"type":"number","description":"Canvas y coordinate."}},"required":["x","y"],"additionalProperties":false,"description":"Canvas coordinates of a block."},"subBlocks":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"object","properties":{"id":{"type":"string","minLength":1,"description":"Sub-block identifier."},"type":{"type":"string","minLength":1,"description":"Sub-block input type."},"value":{"description":"Configured value; shape depends on the sub-block type."}},"required":["id","type","value"],"additionalProperties":false,"description":"One configurable input on a block."},"description":"Configured inputs keyed by sub-block id."},"outputs":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"description":"Declared shape of one output; depends on the block type."},"description":"Declared output shape keyed by output name."},"enabled":{"type":"boolean","description":"Whether the block runs."},"horizontalHandles":{"description":"Whether edge handles render horizontally.","type":"boolean"},"height":{"description":"Rendered block height.","type":"number"},"advancedMode":{"description":"Whether the block is edited in advanced mode.","type":"boolean"},"errorEnabled":{"description":"Whether the block exposes an error branch.","type":"boolean"},"retry":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether the block retries on failure."},"maxTries":{"type":"integer","minimum":2,"maximum":5,"description":"Total attempts, including the first."},"waitBetweenTriesMs":{"type":"integer","minimum":0,"maximum":5000,"description":"Delay between attempts, in milliseconds."}},"required":["enabled","maxTries","waitBetweenTriesMs"],"additionalProperties":false,"description":"Per-block retry configuration."},"triggerMode":{"description":"Whether the block acts as the workflow trigger.","type":"boolean"},"data":{"type":"object","properties":{"parentId":{"description":"Identifier of the containing loop or parallel.","type":"string"},"extent":{"description":"Constrains the block to its parent bounds.","type":"string","const":"parent"},"width":{"description":"Rendered container width.","type":"number"},"height":{"description":"Rendered container height.","type":"number"},"collection":{"description":"Items a forEach loop or collection parallel iterates."},"count":{"description":"Iteration count for a `for` loop or count parallel.","type":"number"},"loopType":{"description":"Loop container kind.","type":"string","enum":["for","forEach","while","doWhile"]},"whileCondition":{"description":"Condition expression for a `while` loop.","type":"string"},"doWhileCondition":{"description":"Condition expression for a `doWhile` loop.","type":"string"},"parallelType":{"description":"Parallel container kind.","type":"string","enum":["collection","count"]},"batchSize":{"description":"Maximum concurrent branches of a parallel.","type":"number"},"type":{"description":"Container subtype.","type":"string"},"canonicalModes":{"description":"Per-field editing mode, keyed by canonical parameter id.","type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"string","enum":["basic","advanced"]}}},"additionalProperties":false,"description":"Container and layout metadata carried by a block."},"locked":{"description":"Whether the block is locked against edits.","type":"boolean"}},"required":["id","type","name","position","subBlocks","outputs","enabled"],"additionalProperties":false,"title":"Workflow block","description":"One node of a workflow graph and its configuration."},"Workflows_WorkflowEdge":{"type":"object","properties":{"id":{"type":"string","minLength":1,"description":"Edge identifier, unique within the workflow."},"source":{"type":"string","minLength":1,"description":"Source block id."},"target":{"type":"string","minLength":1,"description":"Target block id."},"sourceHandle":{"description":"Source port, or null for the block default.","anyOf":[{"type":"string"},{"type":"null"}]},"targetHandle":{"description":"Target port, or null for the block default.","anyOf":[{"type":"string"},{"type":"null"}]},"type":{"description":"Edge renderer type.","type":"string"}},"required":["id","source","target"],"additionalProperties":false,"title":"Workflow edge","description":"A directed connection between two blocks."},"Workflows_WorkflowLoop":{"type":"object","properties":{"id":{"type":"string","description":"Loop container identifier; equal to the loop block id."},"nodes":{"type":"array","items":{"type":"string"},"description":"Block ids inside the loop."},"iterations":{"type":"number","description":"Resolved iteration count."},"loopType":{"type":"string","enum":["for","forEach","while","doWhile"],"description":"Loop kind."},"forEachItems":{"description":"Items a forEach loop iterates, or the expression producing them.","anyOf":[{"type":"array","items":{"description":"One item the loop iterates."}},{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"description":"One item the loop iterates."}},{"type":"string"}]},"whileCondition":{"description":"Condition expression for a `while` loop.","type":"string"},"doWhileCondition":{"description":"Condition expression for a `doWhile` loop.","type":"string"},"enabled":{"description":"Whether the loop runs.","type":"boolean"},"locked":{"description":"Whether the loop is locked against edits.","type":"boolean"}},"required":["id","nodes","iterations","loopType"],"additionalProperties":false,"title":"Workflow loop","description":"A loop container derived from the workflow blocks."},"Workflows_WorkflowParallel":{"type":"object","properties":{"id":{"type":"string","description":"Parallel container identifier; equal to the parallel block id."},"nodes":{"type":"array","items":{"type":"string"},"description":"Block ids inside the parallel."},"distribution":{"description":"Items distributed across branches, or the expression producing them.","anyOf":[{"type":"array","items":{"description":"One item distributed to a branch."}},{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"description":"One item distributed to a branch."}},{"type":"string"}]},"count":{"description":"Fixed branch count.","type":"number"},"parallelType":{"description":"Parallel kind.","type":"string","enum":["count","collection"]},"batchSize":{"description":"Maximum concurrent branches.","type":"number"},"enabled":{"description":"Whether the parallel runs.","type":"boolean"},"locked":{"description":"Whether the parallel is locked against edits.","type":"boolean"}},"required":["id","nodes"],"additionalProperties":false,"title":"Workflow parallel","description":"A parallel container derived from the workflow blocks."},"Workflows_WorkflowVariable":{"type":"object","properties":{"id":{"type":"string","minLength":1,"description":"Variable identifier."},"name":{"type":"string","description":"Variable name, referenced from block inputs."},"type":{"default":"string","description":"Declared variable type.","type":"string","enum":["string","number","boolean","object","array","plain"]},"value":{"description":"Variable value; free-form and validated per `type` at use time."}},"required":["id","name","type","value"],"additionalProperties":false,"title":"Workflow variable","description":"A workflow-scoped variable."},"Workflows_WorkflowGraph":{"type":"object","properties":{"blocks":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"$ref":"#/components/schemas/Workflows_WorkflowBlock"},"description":"Blocks keyed by block id."},"edges":{"maxItems":10000,"type":"array","items":{"$ref":"#/components/schemas/Workflows_WorkflowEdge"},"description":"Directed connections between blocks."},"loops":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"$ref":"#/components/schemas/Workflows_WorkflowLoop"},"description":"Loop containers keyed by container id; always present, `{}` when there are none."},"parallels":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"$ref":"#/components/schemas/Workflows_WorkflowParallel"},"description":"Parallel containers keyed by container id; always present, `{}` when there are none."},"variables":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"$ref":"#/components/schemas/Workflows_WorkflowVariable"},"description":"Workflow variables keyed by variable id; always present, `{}` when there are none."}},"required":["blocks","edges","loops","parallels","variables"],"additionalProperties":false,"title":"Workflow graph","description":"The editable draft graph of a workflow: blocks, edges, derived loop and parallel containers, and variables."},"Workflows_WorkflowStateResponse":{"type":"object","properties":{"data":{"description":"Response data.","$ref":"#/components/schemas/Workflows_WorkflowGraph"}},"required":["data"],"additionalProperties":false,"title":"Workflow state response","description":"The editable draft graph of a workflow.","examples":[{"data":{"blocks":{},"edges":[],"loops":{},"parallels":{},"variables":{}}}]},"Workflows_WorkflowLintReport":{"type":"object","properties":{"sources":{"type":"array","items":{"type":"object","properties":{"blockId":{"type":"string","description":"Block the finding is about."},"blockName":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Display name of the block, when it has one."},"blockType":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Registered type of the block, when it has one."}},"required":["blockId","blockName","blockType"],"additionalProperties":false},"description":"Blocks with no incoming edge. A trigger block is naturally a source; anything else here is unreachable."},"sinks":{"type":"array","items":{"type":"object","properties":{"blockId":{"type":"string","description":"Block the finding is about."},"blockName":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Display name of the block, when it has one."},"blockType":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Registered type of the block, when it has one."}},"required":["blockId","blockName","blockType"],"additionalProperties":false},"description":"Blocks with no outgoing edge."},"orphanBlocks":{"type":"array","items":{"type":"object","properties":{"blockId":{"type":"string","description":"Block the finding is about."},"blockName":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Display name of the block, when it has one."},"blockType":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Registered type of the block, when it has one."}},"required":["blockId","blockName","blockType"],"additionalProperties":false},"description":"Blocks with neither an incoming nor an outgoing edge."},"emptyOutgoingPorts":{"type":"array","items":{"type":"object","properties":{"blockId":{"type":"string","description":"Block the finding is about."},"blockName":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Display name of the block, when it has one."},"blockType":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Registered type of the block, when it has one."},"handle":{"type":"string","description":"Source handle with nothing connected to it."},"label":{"type":"string","description":"Human-readable name of the port."}},"required":["blockId","blockName","blockType","handle","label"],"additionalProperties":false},"description":"Branch and container ports that lead nowhere."},"invalidBranchPorts":{"type":"array","items":{"type":"object","properties":{"blockId":{"type":"string","description":"Block the finding is about."},"blockName":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Display name of the block, when it has one."},"blockType":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Registered type of the block, when it has one."},"sourceHandle":{"type":"string","description":"Source handle that does not match the block."},"reason":{"type":"string","description":"Why the handle is not valid for this block."}},"required":["blockId","blockName","blockType","sourceHandle","reason"],"additionalProperties":false},"description":"Condition and router edges whose source handle names no real branch."},"invalidConnectionTargets":{"type":"array","items":{"type":"object","properties":{"sourceBlockId":{"type":"string","description":"Block the edge leaves."},"sourceBlockName":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Display name of the source block."},"sourceHandle":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Handle the edge leaves from."},"targetBlockId":{"type":"string","description":"Block the edge points at."},"reason":{"type":"string","description":"Why the target is not a legal destination."}},"required":["sourceBlockId","sourceBlockName","sourceHandle","targetBlockId","reason"],"additionalProperties":false},"description":"Edges pointing at a block that cannot legally receive them."},"fieldIssues":{"type":"array","items":{"type":"object","properties":{"blockId":{"type":"string","description":"Block the finding is about."},"blockName":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Display name of the block, when it has one."},"blockType":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Registered type of the block, when it has one."},"missingRequiredFields":{"type":"array","items":{"type":"string"},"description":"Required sub-block fields that resolve empty in the active mode."},"inactiveModeValues":{"type":"array","items":{"type":"object","properties":{"canonicalId":{"type":"string","description":"Canonical parameter the two sub-block modes share."},"activeMemberId":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Sub-block the runtime reads, where the value should live."},"inactiveMemberId":{"type":"string","description":"Sub-block holding the stranded value, which the runtime ignores."},"kind":{"type":"string","enum":["credential","resource","other"],"description":"What kind of value is stranded."}},"required":["canonicalId","activeMemberId","inactiveMemberId","kind"],"additionalProperties":false},"description":"Values stranded on the inactive member of a canonical pair."}},"required":["blockId","blockName","blockType","missingRequiredFields","inactiveModeValues"],"additionalProperties":false},"description":"Per-block configuration problems. The most actionable part of the report for a headless graph builder: a block missing a required field will fail at run time."},"unresolvedReferences":{"type":"array","items":{"type":"object","properties":{"blockId":{"type":"string","description":"Block the finding is about."},"blockName":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Display name of the block, when it has one."},"blockType":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Registered type of the block, when it has one."},"field":{"type":"string","description":"Sub-block field holding the reference."},"value":{"anyOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}],"description":"The reference, or references, that did not resolve."},"kind":{"type":"string","enum":["credential","resource","custom-tool","mcp-tool","skill"],"description":"What kind of entity the reference was expected to name."},"reason":{"type":"string","description":"Why the reference does not resolve."}},"required":["blockId","blockName","blockType","field","value","kind","reason"],"additionalProperties":false},"description":"Credential, resource, tool, and skill references that do not resolve. These values are still persisted; they are reported, not dropped."},"notes":{"type":"array","items":{"type":"string"},"description":"Advisory notes about the report itself."}},"required":["sources","sinks","orphanBlocks","emptyOutgoingPorts","invalidBranchPorts","invalidConnectionTargets","fieldIssues","unresolvedReferences","notes"],"additionalProperties":false,"title":"Workflow lint report","description":"Advisory findings about the saved graph. Findings never block the write; they tell a caller what will misbehave at run time."},"Workflows_ReplaceWorkflowStateResult":{"type":"object","properties":{"id":{"type":"string","description":"Identifier of the workflow whose draft graph was written."},"warnings":{"type":"array","items":{"type":"string"},"description":"Non-fatal notes about blocks and edges that were normalized or dropped before persistence. Empty when there was nothing to report."},"needsRedeployment":{"type":"boolean","description":"Whether the live deployment now differs from the draft. A graph write never changes what the deployed endpoint serves; deploy to publish it."},"lint":{"$ref":"#/components/schemas/Workflows_WorkflowLintReport"},"dryRun":{"type":"boolean","description":"Whether this request only validated. `true` means nothing was persisted; the findings describe what a committed write of the same body would produce."}},"required":["id","warnings","needsRedeployment","lint","dryRun"],"additionalProperties":false,"title":"Replace workflow state result","description":"Outcome of replacing a workflow draft graph, with its advisory findings."},"Workflows_ReplaceWorkflowStateResponse":{"type":"object","properties":{"data":{"description":"Response data.","$ref":"#/components/schemas/Workflows_ReplaceWorkflowStateResult"}},"required":["data"],"additionalProperties":false,"title":"Replace workflow state response","description":"Outcome of replacing a workflow draft graph.","examples":[{"data":{"id":"3b1f7c92-8d4e-4a6b-9c0d-5e2f8a714b36","warnings":[],"needsRedeployment":true,"dryRun":false,"lint":{"sources":[],"sinks":[],"orphanBlocks":[],"emptyOutgoingPorts":[],"invalidBranchPorts":[],"invalidConnectionTargets":[],"fieldIssues":[],"unresolvedReferences":[],"notes":[]}}}]},"Workflows_WorkflowBlockInput":{"type":"object","properties":{"id":{"type":"string","minLength":1,"description":"Block identifier, unique within the workflow."},"type":{"type":"string","minLength":1,"description":"Registered block type."},"name":{"type":"string","minLength":1,"maxLength":255,"description":"Block display name; must be unique within the workflow."},"position":{"type":"object","properties":{"x":{"type":"number","description":"Canvas x coordinate."},"y":{"type":"number","description":"Canvas y coordinate."}},"required":["x","y"],"description":"Canvas coordinates of a block."},"subBlocks":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"object","properties":{"id":{"type":"string","minLength":1,"description":"Sub-block identifier."},"type":{"type":"string","minLength":1,"description":"Sub-block input type."},"value":{"description":"Configured value; shape depends on the sub-block type."}},"required":["id","type","value"],"description":"One configurable input on a block."},"description":"Configured inputs keyed by sub-block id."},"outputs":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"description":"Declared shape of one output; depends on the block type."},"description":"Declared output shape keyed by output name."},"enabled":{"type":"boolean","description":"Whether the block runs."},"horizontalHandles":{"description":"Whether edge handles render horizontally.","type":"boolean"},"height":{"description":"Rendered block height.","type":"number"},"advancedMode":{"description":"Whether the block is edited in advanced mode.","type":"boolean"},"errorEnabled":{"description":"Whether the block exposes an error branch.","type":"boolean"},"retry":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether the block retries on failure."},"maxTries":{"type":"integer","minimum":2,"maximum":5,"description":"Total attempts, including the first."},"waitBetweenTriesMs":{"type":"integer","minimum":0,"maximum":5000,"description":"Delay between attempts, in milliseconds."}},"required":["enabled","maxTries","waitBetweenTriesMs"],"description":"Per-block retry configuration."},"triggerMode":{"description":"Whether the block acts as the workflow trigger.","type":"boolean"},"data":{"type":"object","properties":{"parentId":{"description":"Identifier of the containing loop or parallel.","type":"string"},"extent":{"description":"Constrains the block to its parent bounds.","type":"string","const":"parent"},"width":{"description":"Rendered container width.","type":"number"},"height":{"description":"Rendered container height.","type":"number"},"collection":{"description":"Items a forEach loop or collection parallel iterates."},"count":{"description":"Iteration count for a `for` loop or count parallel.","type":"number"},"loopType":{"description":"Loop container kind.","type":"string","enum":["for","forEach","while","doWhile"]},"whileCondition":{"description":"Condition expression for a `while` loop.","type":"string"},"doWhileCondition":{"description":"Condition expression for a `doWhile` loop.","type":"string"},"parallelType":{"description":"Parallel container kind.","type":"string","enum":["collection","count"]},"batchSize":{"description":"Maximum concurrent branches of a parallel.","type":"number"},"type":{"description":"Container subtype.","type":"string"},"canonicalModes":{"description":"Per-field editing mode, keyed by canonical parameter id.","type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"string","enum":["basic","advanced"]}}},"description":"Container and layout metadata carried by a block."},"locked":{"description":"Whether the block is locked against edits.","type":"boolean"}},"required":["id","type","name","position","subBlocks","outputs","enabled"],"title":"Workflow block","description":"One node of a workflow graph and its configuration."},"Workflows_WorkflowEdgeInput":{"type":"object","properties":{"id":{"type":"string","minLength":1,"description":"Edge identifier, unique within the workflow."},"source":{"type":"string","minLength":1,"description":"Source block id."},"target":{"type":"string","minLength":1,"description":"Target block id."},"sourceHandle":{"description":"Source port, or null for the block default.","anyOf":[{"type":"string"},{"type":"null"}]},"targetHandle":{"description":"Target port, or null for the block default.","anyOf":[{"type":"string"},{"type":"null"}]},"type":{"description":"Edge renderer type.","type":"string"}},"required":["id","source","target"],"title":"Workflow edge","description":"A directed connection between two blocks."},"Workflows_WorkflowLoopInput":{"type":"object","properties":{"id":{"type":"string","description":"Loop container identifier; equal to the loop block id."},"nodes":{"type":"array","items":{"type":"string"},"description":"Block ids inside the loop."},"iterations":{"type":"number","description":"Resolved iteration count."},"loopType":{"type":"string","enum":["for","forEach","while","doWhile"],"description":"Loop kind."},"forEachItems":{"description":"Items a forEach loop iterates, or the expression producing them.","anyOf":[{"type":"array","items":{"description":"One item the loop iterates."}},{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"description":"One item the loop iterates."}},{"type":"string"}]},"whileCondition":{"description":"Condition expression for a `while` loop.","type":"string"},"doWhileCondition":{"description":"Condition expression for a `doWhile` loop.","type":"string"},"enabled":{"description":"Whether the loop runs.","type":"boolean"},"locked":{"description":"Whether the loop is locked against edits.","type":"boolean"}},"required":["id","nodes","iterations","loopType"],"title":"Workflow loop","description":"A loop container derived from the workflow blocks."},"Workflows_WorkflowParallelInput":{"type":"object","properties":{"id":{"type":"string","description":"Parallel container identifier; equal to the parallel block id."},"nodes":{"type":"array","items":{"type":"string"},"description":"Block ids inside the parallel."},"distribution":{"description":"Items distributed across branches, or the expression producing them.","anyOf":[{"type":"array","items":{"description":"One item distributed to a branch."}},{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"description":"One item distributed to a branch."}},{"type":"string"}]},"count":{"description":"Fixed branch count.","type":"number"},"parallelType":{"description":"Parallel kind.","type":"string","enum":["count","collection"]},"batchSize":{"description":"Maximum concurrent branches.","type":"number"},"enabled":{"description":"Whether the parallel runs.","type":"boolean"},"locked":{"description":"Whether the parallel is locked against edits.","type":"boolean"}},"required":["id","nodes"],"title":"Workflow parallel","description":"A parallel container derived from the workflow blocks."},"Workflows_WorkflowVariableInput":{"type":"object","properties":{"id":{"type":"string","minLength":1,"description":"Variable identifier."},"name":{"type":"string","minLength":1,"maxLength":255,"description":"Variable name, referenced from block inputs."},"type":{"type":"string","enum":["string","number","boolean","object","array","plain"],"description":"Declared variable type."},"value":{"description":"Variable value; free-form and validated per `type` at use time."}},"required":["id","name","type","value"],"title":"Workflow variable","description":"A workflow-scoped variable."},"Workflows_ReplaceWorkflowStateRequest":{"type":"object","properties":{"blocks":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"$ref":"#/components/schemas/Workflows_WorkflowBlockInput"},"description":"Blocks keyed by block id."},"edges":{"maxItems":10000,"type":"array","items":{"$ref":"#/components/schemas/Workflows_WorkflowEdgeInput"},"description":"Directed connections between blocks."},"loops":{"description":"Ignored on write: loop containers are recomputed from `blocks`.","type":"object","propertyNames":{"type":"string"},"additionalProperties":{"$ref":"#/components/schemas/Workflows_WorkflowLoopInput"}},"parallels":{"description":"Ignored on write: parallel containers are recomputed from `blocks`.","type":"object","propertyNames":{"type":"string"},"additionalProperties":{"$ref":"#/components/schemas/Workflows_WorkflowParallelInput"}},"variables":{"description":"Replacement variable set. Omit to leave the stored variables untouched.","type":"object","propertyNames":{"type":"string"},"additionalProperties":{"$ref":"#/components/schemas/Workflows_WorkflowVariableInput"}}},"required":["blocks","edges"],"additionalProperties":false,"title":"Replace workflow state request","description":"A complete replacement draft graph for a workflow.","examples":[{"blocks":{},"edges":[]}]},"Workflows_WorkflowSkippedItem":{"type":"object","properties":{"type":{"type":"string","enum":["block_not_found","invalid_block_type","block_not_allowed","model_not_allowed","block_locked","tool_not_allowed","invalid_edge_target","invalid_edge_source","invalid_edge_scope","invalid_source_handle","invalid_target_handle","invalid_subblock_field","missing_required_params","invalid_subflow_parent","nested_subflow_not_allowed","duplicate_block_name","reserved_block_name","retry_not_supported","duplicate_trigger","duplicate_single_instance_block","disabled_ancestor"],"description":"Machine-readable reason the engine declined an operation."},"operationType":{"type":"string","description":"The `operation_type` that was declined."},"blockId":{"type":"string","description":"Block the declined operation targeted."},"reason":{"type":"string","description":"Human-readable explanation."},"details":{"description":"Additional context for the reason; keys depend on `type`.","type":"object","propertyNames":{"type":"string"},"additionalProperties":{"description":"One piece of engine-supplied context for the reason."}}},"required":["type","operationType","blockId","reason"],"additionalProperties":false,"title":"Workflow skipped item","description":"One operation the edit engine did not apply."},"Workflows_WorkflowInputValidationError":{"type":"object","properties":{"blockId":{"type":"string","description":"Block whose input was rejected."},"blockType":{"type":"string","description":"Type of the block whose input was rejected."},"field":{"type":"string","description":"Sub-block field that was rejected."},"error":{"type":"string","description":"Why the value was rejected."}},"required":["blockId","blockType","field","error"],"additionalProperties":false,"title":"Workflow input validation error","description":"One block input that was dropped rather than persisted."},"Workflows_ApplyWorkflowOperationsResult":{"type":"object","properties":{"id":{"type":"string","description":"Identifier of the workflow whose draft graph was written."},"warnings":{"type":"array","items":{"type":"string"},"description":"Non-fatal notes about blocks and edges that were normalized or dropped before persistence. Empty when there was nothing to report."},"needsRedeployment":{"type":"boolean","description":"Whether the live deployment now differs from the draft. A graph write never changes what the deployed endpoint serves; deploy to publish it."},"applied":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Operations the engine applied."},"skipped":{"type":"array","items":{"$ref":"#/components/schemas/Workflows_WorkflowSkippedItem"},"description":"Operations the engine declined. Empty when everything applied."},"deferred":{"type":"array","items":{"$ref":"#/components/schemas/Workflows_WorkflowSkippedItem"},"description":"Edges waiting for target blocks. They apply automatically when their targets exist, in this batch or a later one. Do not resubmit them."},"inputValidationErrors":{"type":"array","items":{"$ref":"#/components/schemas/Workflows_WorkflowInputValidationError"},"description":"Block inputs that were dropped rather than persisted, and only those. The rest of the operation still applied. References that merely fail to resolve stay persisted and are reported in `lint.unresolvedReferences` instead."},"mintedBlockIds":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"string","description":"The id the block was actually given."},"description":"Minted block ids keyed by requested `block_id`, present only when they differ. References within this batch are remapped automatically; later requests must use the minted id. Supply a UUID when the requested id must survive unchanged."},"lint":{"$ref":"#/components/schemas/Workflows_WorkflowLintReport"},"dryRun":{"type":"boolean","description":"Whether this request only evaluated. `true` means nothing was persisted; the outcome describes what a committed apply of the same body would produce."}},"required":["id","warnings","needsRedeployment","applied","skipped","deferred","inputValidationErrors","mintedBlockIds","lint","dryRun"],"additionalProperties":false,"title":"Apply workflow operations result","description":"Outcome of a batch of semantic edits against a workflow graph."},"Workflows_ApplyWorkflowOperationsResponse":{"type":"object","properties":{"data":{"description":"Response data.","$ref":"#/components/schemas/Workflows_ApplyWorkflowOperationsResult"}},"required":["data"],"additionalProperties":false,"title":"Apply workflow operations response","description":"Outcome of a batch of semantic edits.","examples":[{"data":{"id":"3b1f7c92-8d4e-4a6b-9c0d-5e2f8a714b36","applied":1,"skipped":[],"deferred":[],"inputValidationErrors":[],"mintedBlockIds":{"triage":"a3f1c0b2-7a44-4c1d-9d3a-2b8e5f0a1c77"},"lint":{"sources":[],"sinks":[],"orphanBlocks":[],"emptyOutgoingPorts":[],"invalidBranchPorts":[],"invalidConnectionTargets":[],"fieldIssues":[{"blockId":"agent-1","blockName":"Triage","blockType":"agent","missingRequiredFields":["systemPrompt"],"inactiveModeValues":[]}],"unresolvedReferences":[],"notes":[]},"warnings":[],"needsRedeployment":true,"dryRun":false}}]},"Workflows_WorkflowEditOperation":{"oneOf":[{"type":"object","properties":{"operation_type":{"type":"string","const":"add","description":"Create a new block."},"block_id":{"type":"string","minLength":1,"description":"Block the operation targets. For `add`, the id the new block will be given."},"params":{"type":"object","properties":{"type":{"type":"string","minLength":1,"description":"Registered block type."},"name":{"type":"string","minLength":1,"description":"Block display name."},"inputs":{"allOf":[{"type":"object","properties":{"tools":{"description":"Agent tools configuration. Applies to a `tool-input` field; other block inputs remain catalog-defined.","$ref":"#/components/schemas/Workflows_AgentToolInput"}},"additionalProperties":{"description":"One block-specific input whose accepted shape is published by the block catalog."}},{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"description":"One block-specific input whose accepted shape is published by the block catalog."}}],"description":"Block configuration keyed by sub-block id."}},"required":["type","name"],"additionalProperties":{"description":"One block-specific input or connection descriptor."},"description":"Block `type`, `name`, and optional `inputs`, `connections`, `retry`, `triggerMode`, or `advancedMode`. `inputs` maps sub-block ids directly to values, never through `subBlocks`. Keep `retry`, `triggerMode`, and `advancedMode` beside `inputs`. `connections` maps source handles to target ids, `{ block, handle }`, or arrays; `success` aliases `source`."}},"required":["operation_type","block_id","params"],"additionalProperties":false},{"type":"object","properties":{"operation_type":{"type":"string","const":"edit","description":"Change an existing block: its inputs, name, or connections."},"block_id":{"type":"string","minLength":1,"description":"Block the operation targets. For `add`, the id the new block will be given."},"params":{"allOf":[{"type":"object","properties":{"inputs":{"allOf":[{"type":"object","properties":{"tools":{"description":"Agent tools configuration. Applies to a `tool-input` field; other block inputs remain catalog-defined.","$ref":"#/components/schemas/Workflows_AgentToolInput"}},"additionalProperties":{"description":"One block-specific input whose accepted shape is published by the block catalog."}},{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"description":"One block-specific input whose accepted shape is published by the block catalog."}}],"description":"Block configuration keyed by sub-block id."}},"additionalProperties":{"description":"One operation parameter; see the description for the accepted keys."}},{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"description":"One operation parameter; see the description for the accepted keys."}}],"description":"Patch only supplied fields: `inputs`, `name`, `connections`, `removeEdges`, `nestedNodes`, `retry`, `triggerMode`, and `advancedMode`. `inputs` maps sub-block ids directly to values, never through `subBlocks`. Keep `retry`, `triggerMode`, and `advancedMode` beside `inputs`. `connections` maps source handles to target ids, `{ block, handle }`, or arrays; `success` aliases `source`. Re-sending `connections` replaces outgoing edges; use `removeEdges` to delete selected edges."}},"required":["operation_type","block_id","params"],"additionalProperties":false},{"type":"object","properties":{"operation_type":{"type":"string","const":"delete","description":"Remove a block and every edge touching it."},"block_id":{"type":"string","minLength":1,"description":"Block the operation targets. For `add`, the id the new block will be given."}},"required":["operation_type","block_id"],"additionalProperties":false},{"type":"object","properties":{"operation_type":{"type":"string","const":"insert_into_subflow","description":"Create a block inside a loop or parallel container."},"block_id":{"type":"string","minLength":1,"description":"Block the operation targets. For `add`, the id the new block will be given."},"params":{"type":"object","properties":{"subflowId":{"type":"string","minLength":1,"description":"Loop or parallel container to insert the block into."},"type":{"type":"string","minLength":1,"description":"Registered block type."},"name":{"type":"string","minLength":1,"description":"Block display name."},"inputs":{"allOf":[{"type":"object","properties":{"tools":{"description":"Agent tools configuration. Applies to a `tool-input` field; other block inputs remain catalog-defined.","$ref":"#/components/schemas/Workflows_AgentToolInput"}},"additionalProperties":{"description":"One block-specific input whose accepted shape is published by the block catalog."}},{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"description":"One block-specific input whose accepted shape is published by the block catalog."}}],"description":"Block configuration keyed by sub-block id."}},"required":["subflowId","type","name"],"additionalProperties":{"description":"One block-specific input or connection descriptor."},"description":"Container, block `type`, `name`, and the same optional fields as `add`. `inputs` maps sub-block ids directly to values, never through `subBlocks`. Keep `retry`, `triggerMode`, and `advancedMode` beside `inputs`. `connections` maps source handles to target ids, `{ block, handle }`, or arrays; `success` aliases `source`."}},"required":["operation_type","block_id","params"],"additionalProperties":false},{"type":"object","properties":{"operation_type":{"type":"string","const":"extract_from_subflow","description":"Move a block out of its loop or parallel container."},"block_id":{"type":"string","minLength":1,"description":"Block the operation targets. For `add`, the id the new block will be given."},"params":{"type":"object","properties":{"subflowId":{"type":"string","minLength":1,"description":"Loop or parallel container the block moves into or out of."}},"required":["subflowId"],"additionalProperties":{"description":"One block-specific input."},"description":"Container identifier, plus any block-specific inputs."}},"required":["operation_type","block_id","params"],"additionalProperties":false}],"title":"Workflow edit operation","description":"One semantic edit against a workflow graph."},"Workflows_AgentToolInput":{"maxItems":100,"type":"array","items":{"$ref":"#/components/schemas/Workflows_AgentTool"},"description":"The complete value stored in an Agent block’s `tools` input.","title":"Agent tools input"},"Workflows_AgentTool":{"oneOf":[{"$ref":"#/components/schemas/Workflows_AgentIntegrationTool"},{"$ref":"#/components/schemas/Workflows_AgentCustomTool"},{"$ref":"#/components/schemas/Workflows_AgentMcpTool"},{"$ref":"#/components/schemas/Workflows_AgentMcpServerAdvanced"}],"title":"Agent tool","description":"A catalog integration operation, workspace custom tool, or MCP tool available to an Agent."},"Workflows_AgentIntegrationTool":{"type":"object","properties":{"type":{"type":"string","minLength":1,"maxLength":255,"pattern":"^(?!(?:custom-tool|mcp|mcp-server-advanced)$).+$","description":"Catalog block id, such as `cloudwatch` or `slack`. Use the block id, never an underlying tool id."},"operation":{"description":"Operation ID from Get Block. Required when the block exposes multiple operations; it may differ from the tool ID.","type":"string","minLength":1,"maxLength":255},"usageControl":{"type":"string","enum":["auto","force","none"],"description":"When the Agent may call the tool: `auto` lets the model decide, `force` requires a call, and `none` disables it. Omitted means `auto`."},"params":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"description":"One tool parameter value."},"description":"Parameters fixed by the workflow author. Parameters left out remain available for the model to supply when the tool declares them."}},"required":["type"],"additionalProperties":{"description":"Forward-compatible integration tool metadata preserved by the workflow editor."},"title":"Agent integration tool","description":"A catalog integration operation the Agent may call. Resolve valid block and operation ids through the block catalog.","examples":[{"type":"cloudwatch","operation":"describe_alarm_history","usageControl":"auto","params":{}}]},"Workflows_AgentCustomTool":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","const":"custom-tool","description":"Custom-tool discriminator."},"customToolId":{"type":"string","minLength":1,"maxLength":255,"description":"Custom tool ID from List Custom Tools."},"usageControl":{"type":"string","enum":["auto","force","none"],"description":"When the Agent may call the tool: `auto` lets the model decide, `force` requires a call, and `none` disables it. Omitted means `auto`."}},"required":["type","customToolId"],"additionalProperties":{"description":"Forward-compatible custom tool metadata preserved by the workflow editor."}},{"type":"object","properties":{"type":{"type":"string","const":"custom-tool","description":"Custom-tool discriminator."},"schema":{"type":"object","properties":{"type":{"description":"Function declaration discriminator.","type":"string","const":"function"},"function":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":64,"description":"Function name presented to the model."},"description":{"description":"What the inline custom tool does.","type":"string"},"parameters":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"description":"One JSON Schema keyword on the function parameters."},"description":"JSON Schema describing the function arguments."}},"required":["name","parameters"],"additionalProperties":{"description":"Additional function declaration metadata."},"description":"OpenAI-style function definition."}},"required":["function"],"additionalProperties":{"description":"Additional custom tool declaration metadata."},"description":"Inline OpenAI-style function declaration."},"code":{"type":"string","description":"Inline tool implementation executed by the Function runtime."},"usageControl":{"type":"string","enum":["auto","force","none"],"description":"When the Agent may call the tool: `auto` lets the model decide, `force` requires a call, and `none` disables it. Omitted means `auto`."}},"required":["type","schema","code"],"additionalProperties":{"description":"Forward-compatible custom tool metadata preserved by the workflow editor."}}],"title":"Agent custom tool","description":"A workspace custom tool. Prefer `customToolId`; inline declarations are also accepted.","examples":[{"type":"custom-tool","customToolId":"cst_01J9X2ABCDEF","usageControl":"auto"}]},"Workflows_AgentMcpTool":{"type":"object","properties":{"type":{"type":"string","const":"mcp","description":"MCP-tool discriminator."},"params":{"allOf":[{"type":"object","properties":{"serverId":{"type":"string","minLength":1,"maxLength":128,"description":"MCP server id returned by `GET /api/v2/mcp-servers`."},"toolName":{"type":"string","minLength":1,"maxLength":256,"description":"Tool name returned by the MCP server’s tools endpoint."}},"required":["serverId","toolName"],"additionalProperties":{"description":"One parameter fixed by the workflow author."}},{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"description":"One parameter fixed by the workflow author."}}],"description":"MCP server and tool identity plus any tool arguments fixed by the workflow author."},"usageControl":{"type":"string","enum":["auto","force","none"],"description":"When the Agent may call the tool: `auto` lets the model decide, `force` requires a call, and `none` disables it. Omitted means `auto`."}},"required":["type","params"],"additionalProperties":{"description":"Forward-compatible MCP tool metadata preserved by the workflow editor."},"title":"Agent MCP tool","description":"One tool discovered from a workspace MCP server.","examples":[{"type":"mcp","params":{"serverId":"mcp_01J9X2ABCDEF","toolName":"search_docs"},"usageControl":"auto"}]},"Workflows_AgentMcpServerAdvanced":{"type":"object","properties":{"type":{"type":"string","const":"mcp-server-advanced","description":"Server-wide MCP binding discriminator."},"params":{"type":"object","properties":{"serverId":{"type":"string","minLength":1,"maxLength":128,"description":"Workspace MCP server ID or explicit credential-group managed MCP connection ID."}},"required":["serverId"],"additionalProperties":false,"description":"Server identity for discovering and invoking every available MCP tool."},"usageControl":{"type":"string","enum":["auto","force","none"],"description":"When the Agent may call the tool: `auto` lets the model decide, `force` requires a call, and `none` disables it. Omitted means `auto`."}},"required":["type","params"],"additionalProperties":{"description":"Forward-compatible MCP server metadata preserved by the workflow editor."},"title":"Agent MCP server (advanced)","description":"All tools available to the executing subject from one MCP server.","examples":[{"type":"mcp-server-advanced","params":{"serverId":"mcp_01J9X2ABCDEF"},"usageControl":"auto"}]},"Workflows_ApplyWorkflowOperationsRequest":{"type":"object","properties":{"operations":{"minItems":1,"maxItems":200,"type":"array","items":{"$ref":"#/components/schemas/Workflows_WorkflowEditOperation"},"description":"Edits to apply, in a single batch."},"atomic":{"default":false,"description":"Fail the whole batch when any operation is declined or any block input would be dropped. The default applies what it can and reports the rest in `skipped` and `inputValidationErrors`; `true` writes nothing and answers `409` instead.","type":"boolean"},"layout":{"default":"targeted","description":"Whether to reposition blocks the batch touched. `targeted` (default) nudges only the affected subgraph; `none` leaves every position exactly as supplied.","type":"string","enum":["targeted","none"]},"setBlockEnabled":{"description":"Blocks to enable or disable, applied after `operations`. Disabling a loop or parallel cascades to its unlocked descendants; enabling a block whose container is disabled is declined.","maxItems":200,"type":"array","items":{"type":"object","properties":{"block_id":{"type":"string","minLength":1,"description":"Block the operation targets. For `add`, the id the new block will be given."},"enabled":{"type":"boolean","description":"Whether the block should run."}},"required":["block_id","enabled"],"additionalProperties":false}}},"required":["operations"],"additionalProperties":false,"title":"Apply workflow operations request","description":"A batch of semantic edits against a workflow graph.","examples":[{"operations":[{"operation_type":"add","block_id":"agent-1","params":{"type":"agent","name":"Triage","inputs":{"tools":[{"type":"cloudwatch","operation":"describe_alarm_history","usageControl":"auto","params":{}}]}}}]}]},"Workflows_ApplyWorkflowVariablesResult":{"type":"object","properties":{"id":{"type":"string","description":"Identifier of the workflow whose variables were updated."},"variableCount":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Variables the workflow now holds."},"changed":{"type":"boolean","description":"Whether anything actually changed. A no-op batch answers `200` with `false`."}},"required":["id","variableCount","changed"],"additionalProperties":false,"title":"Apply workflow variables result","description":"Outcome of a workflow variable update."},"Workflows_ApplyWorkflowVariablesResponse":{"type":"object","properties":{"data":{"description":"Response data.","$ref":"#/components/schemas/Workflows_ApplyWorkflowVariablesResult"}},"required":["data"],"additionalProperties":false,"title":"Apply workflow variables response","description":"Outcome of a workflow variable update.","examples":[{"data":{"id":"3b1f7c92-8d4e-4a6b-9c0d-5e2f8a714b36","variableCount":3,"changed":true}}]},"Workflows_ApplyWorkflowVariablesRequest":{"type":"object","properties":{"operations":{"minItems":1,"maxItems":100,"type":"array","items":{"oneOf":[{"type":"object","properties":{"operation":{"type":"string","const":"add","description":"Create a variable with this name."},"name":{"type":"string","minLength":1,"maxLength":255,"description":"Variable name."},"type":{"type":"string","enum":["string","number","boolean","object","array","plain"],"description":"Declared variable type."},"value":{"description":"Variable value, coerced to `type`."}},"required":["operation","name","type","value"],"additionalProperties":false},{"type":"object","properties":{"operation":{"type":"string","const":"edit","description":"Replace the value, and optionally the type, of an existing variable."},"name":{"type":"string","minLength":1,"maxLength":255,"description":"Name of the variable to update."},"type":{"description":"Replacement type; the stored type is kept when omitted.","type":"string","enum":["string","number","boolean","object","array","plain"]},"value":{"description":"Replacement value, coerced to the effective type."}},"required":["operation","name","value"],"additionalProperties":false},{"type":"object","properties":{"operation":{"type":"string","const":"delete","description":"Remove the variable with this name."},"name":{"type":"string","minLength":1,"maxLength":255,"description":"Name of the variable to remove."}},"required":["operation","name"],"additionalProperties":false}],"description":"One variable change."},"description":"Variable changes to apply, in order."}},"required":["operations"],"additionalProperties":false,"title":"Apply workflow variables request","description":"Additions, edits, and deletions against a workflow’s variables."},"Workflows_DuplicateWorkflowResponse":{"type":"object","properties":{"data":{"description":"Response data.","$ref":"#/components/schemas/Workflows_WorkflowListItem"}},"required":["data"],"additionalProperties":false,"title":"Duplicate workflow response","description":"The created copy.","examples":[{"data":{"id":"3b1f7c92-8d4e-4a6b-9c0d-5e2f8a714b36","webUrl":"https://www.sim.ai/workspace/a91c4b2e-6d3f-4e8a-b5c7-0d9e2f1a8c64/w/3b1f7c92-8d4e-4a6b-9c0d-5e2f8a714b36","name":"Customer support triage (copy)","description":"Routes incoming support requests to the right team.","folderPath":"/Operations","workspaceId":"a91c4b2e-6d3f-4e8a-b5c7-0d9e2f1a8c64","isDeployed":false,"deployedAt":null,"runCount":0,"lastRunAt":null,"createdAt":"2026-05-01T09:00:00.000Z","updatedAt":"2026-08-09T18:04:11.000Z"}}]},"Workflows_DuplicateWorkflowRequest":{"type":"object","properties":{"name":{"description":"Name for the copy. Defaults to the source name, deduplicated within the folder.","type":"string","minLength":1,"maxLength":255},"folderPath":{"description":"Destination folder path. Defaults to the source workflow's folder.","$ref":"#/components/schemas/Workflows_FolderPathInput"}},"additionalProperties":false,"title":"Duplicate workflow request","description":"Optional name and destination folder for the copy."},"Workflows_RestoreWorkflowResponse":{"type":"object","properties":{"data":{"description":"Response data.","$ref":"#/components/schemas/Workflows_WorkflowListItem"}},"required":["data"],"additionalProperties":false,"title":"Restore workflow response","description":"The restored workflow.","examples":[{"data":{"id":"3b1f7c92-8d4e-4a6b-9c0d-5e2f8a714b36","webUrl":"https://www.sim.ai/workspace/a91c4b2e-6d3f-4e8a-b5c7-0d9e2f1a8c64/w/3b1f7c92-8d4e-4a6b-9c0d-5e2f8a714b36","name":"Customer support triage","description":"Routes incoming support requests to the right team.","folderPath":"/Operations","workspaceId":"a91c4b2e-6d3f-4e8a-b5c7-0d9e2f1a8c64","isDeployed":true,"deployedAt":"2026-06-12T10:30:00.000Z","runCount":42,"lastRunAt":"2026-08-09T18:04:11.000Z","createdAt":"2026-05-01T09:00:00.000Z","updatedAt":"2026-08-09T18:04:11.000Z"}}]},"Workflows_MoveWorkflowsResult":{"type":"object","properties":{"moved":{"type":"array","items":{"type":"string"},"description":"Workflows that were relocated."},"failed":{"type":"array","items":{"type":"string"},"description":"Workflows that were not relocated — absent from the workspace, archived, or locked. Best-effort by design: the rest of the batch still moved."},"folderPath":{"type":"string","title":"Folder path","description":"Canonical destination folder path.","maxLength":4096}},"required":["moved","failed","folderPath"],"additionalProperties":false,"title":"Move workflows result","description":"Which workflows moved and which did not."},"Workflows_MoveWorkflowsResponse":{"type":"object","properties":{"data":{"description":"Response data.","$ref":"#/components/schemas/Workflows_MoveWorkflowsResult"}},"required":["data"],"additionalProperties":false,"title":"Move workflows response","description":"Which workflows moved and which did not.","examples":[{"data":{"moved":["3b1f7c92-8d4e-4a6b-9c0d-5e2f8a714b36"],"failed":[],"folderPath":"/Operations"}}]},"Workflows_MoveWorkflowsRequest":{"type":"object","properties":{"workspaceId":{"type":"string","minLength":1,"maxLength":128,"description":"Workspace holding every workflow in the batch."},"workflowIds":{"minItems":1,"maxItems":100,"type":"array","items":{"type":"string","minLength":1},"description":"Workflows to move. Duplicates are collapsed."},"folderPath":{"description":"Destination folder path; `/` moves the workflows to the workspace root.","$ref":"#/components/schemas/Workflows_FolderPathInput"}},"required":["workspaceId","workflowIds","folderPath"],"additionalProperties":false,"title":"Move workflows request","description":"Workflows to relocate and the folder to relocate them into."},"Workflows_WorkflowInputField":{"type":"object","properties":{"name":{"type":"string","description":"Input field name."},"type":{"type":"string","description":"Input field type."},"description":{"description":"Optional input field description.","type":"string"}},"required":["name","type"],"additionalProperties":false,"title":"Workflow input field","description":"A deployed API trigger input exposed by a workflow."},"Workflows_WorkflowDetail":{"type":"object","properties":{"id":{"type":"string","description":"Unique workflow identifier.","examples":["3b1f7c92-8d4e-4a6b-9c0d-5e2f8a714b36"]},"webUrl":{"type":"string","format":"uri","description":"Canonical absolute URL for opening this resource in the Sim web application."},"name":{"type":"string","description":"Workflow name.","examples":["Customer support triage"]},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Workflow description, or null when none is set."},"folderPath":{"type":"string","title":"Folder path","description":"Canonical containing-folder path; `/` is the workspace root.","maxLength":4096,"examples":["/Operations"]},"workspaceId":{"type":"string","description":"Workspace that owns the workflow."},"isDeployed":{"type":"boolean","description":"Whether the workflow has an active deployment."},"deployedAt":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"ISO 8601 activation timestamp, or null when not deployed.","format":"date-time"},"runCount":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Lifetime count of successful runs, excluding failed, canceled, and paused runs. Log retention does not reduce this count; it may differ from the number returned by List Workflow Runs."},"lastRunAt":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"ISO 8601 timestamp of the latest run counted by `runCount`, or null when none has been. Stamped by the same successful-run path, so a workflow whose only runs failed reports null here.","format":"date-time"},"createdAt":{"type":"string","description":"ISO 8601 timestamp when the workflow was created.","format":"date-time"},"updatedAt":{"type":"string","description":"ISO 8601 timestamp when the workflow was last updated.","format":"date-time"},"variables":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"description":"Structured workflow variable value."},"description":"Workflow-scoped variables keyed by variable identifier."},"inputs":{"type":"array","items":{"$ref":"#/components/schemas/Workflows_WorkflowInputField"},"description":"Input fields exposed by the workflow API trigger."}},"required":["id","webUrl","name","description","folderPath","workspaceId","isDeployed","deployedAt","runCount","lastRunAt","createdAt","updatedAt","variables","inputs"],"additionalProperties":false,"title":"Workflow detail","description":"Full workflow summary with variables and API-trigger input fields."},"Workflows_WorkflowDetailResponse":{"type":"object","properties":{"data":{"description":"Response data.","$ref":"#/components/schemas/Workflows_WorkflowDetail"}},"required":["data"],"additionalProperties":false,"title":"Workflow detail response","description":"Detailed workflow metadata, variables, and trigger inputs.","examples":[{"data":{"id":"3b1f7c92-8d4e-4a6b-9c0d-5e2f8a714b36","webUrl":"https://www.sim.ai/workspace/a91c4b2e-6d3f-4e8a-b5c7-0d9e2f1a8c64/w/3b1f7c92-8d4e-4a6b-9c0d-5e2f8a714b36","name":"Customer support triage","description":"Routes incoming support requests to the right team.","folderPath":"/Operations","workspaceId":"a91c4b2e-6d3f-4e8a-b5c7-0d9e2f1a8c64","isDeployed":true,"deployedAt":"2026-06-12T10:30:00.000Z","runCount":42,"lastRunAt":"2026-08-09T18:04:11.000Z","createdAt":"2026-05-01T09:00:00.000Z","updatedAt":"2026-08-09T18:04:11.000Z","variables":{},"inputs":[]}}]},"Workflows_UpdateWorkflowResponse":{"type":"object","properties":{"data":{"description":"Response data.","$ref":"#/components/schemas/Workflows_WorkflowListItem"}},"required":["data"],"additionalProperties":false,"title":"Update workflow response","description":"The updated workflow summary.","examples":[{"data":{"id":"3b1f7c92-8d4e-4a6b-9c0d-5e2f8a714b36","webUrl":"https://www.sim.ai/workspace/a91c4b2e-6d3f-4e8a-b5c7-0d9e2f1a8c64/w/3b1f7c92-8d4e-4a6b-9c0d-5e2f8a714b36","name":"Customer support triage","description":"Routes incoming support requests to the right team.","folderPath":"/Operations","workspaceId":"a91c4b2e-6d3f-4e8a-b5c7-0d9e2f1a8c64","isDeployed":true,"deployedAt":"2026-06-12T10:30:00.000Z","runCount":42,"lastRunAt":"2026-08-09T18:04:11.000Z","createdAt":"2026-05-01T09:00:00.000Z","updatedAt":"2026-08-09T18:04:11.000Z"}}]},"Workflows_UpdateWorkflowRequest":{"type":"object","properties":{"name":{"description":"Replacement workflow name.","type":"string","minLength":1,"maxLength":255},"description":{"description":"Replacement workflow description; null clears it.","anyOf":[{"type":"string","maxLength":50000},{"type":"null"}]},"folderPath":{"description":"Destination folder path; `/` moves the workflow to the workspace root.","$ref":"#/components/schemas/Workflows_FolderPathInput"}},"additionalProperties":false,"title":"Update workflow request","description":"Fields to update on an existing workflow."},"Workflows_DeleteWorkflowResult":{"type":"object","properties":{"id":{"type":"string","description":"Identifier of the archived workflow."},"deleted":{"type":"boolean","const":true,"description":"Confirms that the workflow is no longer live."},"archived":{"type":"boolean","const":true,"description":"Whether the workflow was archived. Restore Workflow recovers it and the schedules, webhooks, MCP tools, and chats archived with it."}},"required":["id","deleted","archived"],"additionalProperties":false,"title":"Delete workflow result","description":"Confirmation that a workflow was archived."},"Workflows_DeleteWorkflowResponse":{"type":"object","properties":{"data":{"description":"Response data.","$ref":"#/components/schemas/Workflows_DeleteWorkflowResult"}},"required":["data"],"additionalProperties":false,"title":"Delete workflow response","description":"Confirmation that the workflow was archived.","examples":[{"data":{"id":"3b1f7c92-8d4e-4a6b-9c0d-5e2f8a714b36","deleted":true,"archived":true}}]},"Workflows_WorkflowVersion":{"type":"object","properties":{"id":{"type":"string","description":"Unique deployment-version identifier."},"version":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991,"description":"Monotonically increasing deployment version number."},"name":{"description":"Optional deployment-version label.","anyOf":[{"type":"string"},{"type":"null"}]},"description":{"description":"Optional deployment-version release note.","anyOf":[{"type":"string"},{"type":"null"}]},"isActive":{"type":"boolean","description":"Whether this version is currently serving executions."},"createdAt":{"type":"string","description":"ISO 8601 timestamp when this version was created.","format":"date-time"},"deployedBy":{"description":"Display name of the user who created the deployment, when available.","anyOf":[{"type":"string"},{"type":"null"}]},"latestOperationStatus":{"description":"Latest lifecycle-operation status for this version.","anyOf":[{"type":"string","enum":["preparing","activating","active","failed","superseded"]},{"type":"null"}]}},"required":["id","version","isActive","createdAt"],"additionalProperties":false,"title":"Workflow version","description":"A saved deployment version of a workflow."},"Workflows_WorkflowVersionListResponse":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Workflows_WorkflowVersion"},"description":"Items in the current page."},"nextCursor":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Opaque cursor for the next page. Send it back as `cursor`; `null` means there is nothing further to fetch. Never construct one yourself."}},"required":["data","nextCursor"],"additionalProperties":false,"title":"Workflow version list response","description":"A cursor-paginated page of deployment versions.","examples":[{"data":[{"id":"version_3","version":3,"name":"Escalation routing","description":"Adds the priority escalation branch.","isActive":true,"createdAt":"2026-06-12T10:30:00.000Z","deployedBy":"Jane Smith","latestOperationStatus":"active"}],"nextCursor":null}]},"Workflows_DeployedWorkflowState":{"title":"Deployed workflow state","description":"Workflow graph snapshot pinned by a deployment version.","type":"object","additionalProperties":true},"Workflows_WorkflowVersionDetail":{"type":"object","properties":{"id":{"type":"string","description":"Unique deployment-version identifier."},"version":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991,"description":"Monotonically increasing deployment version number."},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Version label, or null when unset."},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Version release note, or null when unset."},"isActive":{"type":"boolean","description":"Whether this version is currently serving executions."},"createdAt":{"type":"string","description":"ISO 8601 timestamp when this version was created.","format":"date-time"},"state":{"description":"Workflow graph saved with this deployment version. Sensitive values are redacted to null.","$ref":"#/components/schemas/Workflows_DeployedWorkflowState"}},"required":["id","version","name","description","isActive","createdAt","state"],"additionalProperties":false,"title":"Workflow version detail","description":"A deployment version together with the workflow state it pins."},"Workflows_WorkflowVersionDetailResponse":{"type":"object","properties":{"data":{"description":"Response data.","$ref":"#/components/schemas/Workflows_WorkflowVersionDetail"}},"required":["data"],"additionalProperties":false,"title":"Workflow version detail response","description":"The deployment version and its pinned workflow graph.","examples":[{"data":{"id":"version_3","version":3,"name":"Escalation routing","description":"Adds the priority escalation branch.","isActive":true,"createdAt":"2026-06-12T10:30:00.000Z","state":{"blocks":{},"edges":[]}}}]},"Workflows_WorkflowVersionMetadata":{"type":"object","properties":{"version":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991,"description":"Monotonically increasing deployment version number."},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Version label, or null when unset."},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Version release note, or null when unset."}},"required":["version","name","description"],"additionalProperties":false,"title":"Workflow version metadata","description":"Mutable label and release note of a deployment version."},"Workflows_UpdateWorkflowVersionResponse":{"type":"object","properties":{"data":{"description":"Response data.","$ref":"#/components/schemas/Workflows_WorkflowVersionMetadata"}},"required":["data"],"additionalProperties":false,"title":"Update workflow version response","description":"The deployment version metadata after the update.","examples":[{"data":{"version":3,"name":"Escalation routing","description":"Adds the priority escalation branch."}}]},"Workflows_UpdateWorkflowVersionRequest":{"type":"object","properties":{"name":{"description":"New label for the deployment version.","type":"string","minLength":1,"maxLength":100},"description":{"description":"New release note for the deployment version, or null to clear it.","anyOf":[{"type":"string","maxLength":50000},{"type":"null"}]}},"additionalProperties":false,"title":"Update workflow version request","description":"Merge-patch body for the mutable metadata of a deployment version.","examples":[{"name":"Escalation routing","description":"Adds the priority escalation branch."}]},"Workflows_ActiveDeploymentSummary":{"type":"object","properties":{"deploymentVersionId":{"type":"string","description":"Identifier of the active deployment version."},"version":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991,"description":"Numeric active deployment version."},"deployedAt":{"type":"string","description":"ISO 8601 timestamp when this version became active.","format":"date-time"}},"required":["deploymentVersionId","version","deployedAt"],"additionalProperties":false,"title":"Active deployment","description":"Summary of the workflow version currently serving API executions."},"Workflows_DeploymentOperationSummary":{"type":"object","properties":{"id":{"type":"string","description":"Unique deployment operation identifier."},"deploymentVersionId":{"type":"string","description":"Deployment version targeted by this operation."},"version":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991,"description":"Numeric deployment version."},"action":{"type":"string","enum":["deploy","activate"],"description":"Operation being performed on the deployment version."},"status":{"type":"string","enum":["preparing","activating","active","failed","superseded"],"description":"Current deployment lifecycle status."},"isCurrent":{"default":true,"description":"Whether this operation still describes the current deployment attempt.","type":"boolean"},"readiness":{"$ref":"#/components/schemas/Workflows_DeploymentReadiness"},"requestedAt":{"type":"string","description":"ISO 8601 timestamp when the deployment operation was requested.","format":"date-time"},"activatedAt":{"description":"ISO 8601 activation timestamp, or null before activation completes.","format":"date-time","anyOf":[{"type":"string"},{"type":"null"}]},"error":{"description":"Deployment failure details, or null when no failure occurred.","anyOf":[{"$ref":"#/components/schemas/Workflows_DeploymentOperationError"},{"type":"null"}]}},"required":["id","deploymentVersionId","version","action","status","isCurrent","readiness","requestedAt"],"additionalProperties":false,"title":"Deployment operation","description":"Lifecycle state of a deployment or version-activation attempt."},"Workflows_DeploymentReadiness":{"type":"object","properties":{"webhooks":{"type":"string","enum":["pending","ready","not_applicable"],"description":"Webhook synchronization readiness."},"schedules":{"type":"string","enum":["pending","ready","not_applicable"],"description":"Schedule synchronization readiness."},"mcp":{"type":"string","enum":["pending","ready","not_applicable"],"description":"MCP synchronization readiness."}},"required":["webhooks","schedules","mcp"],"additionalProperties":false,"title":"Deployment readiness","description":"Readiness of the side effects required to activate a deployment."},"Workflows_DeploymentOperationError":{"type":"object","properties":{"code":{"type":"string","description":"Stable deployment failure code."},"message":{"type":"string","description":"Human-readable deployment failure message."},"retryable":{"type":"boolean","description":"Whether retrying the deployment may succeed."}},"required":["code","message","retryable"],"additionalProperties":false,"title":"Deployment operation error","description":"Failure details for a deployment lifecycle operation."},"Workflows_VersionActivationResult":{"title":"Version activation result","description":"Activation attempt accepted for processing. Activation is asynchronous; inspect `isDeployed` and `latestDeploymentAttempt` for current state.","$ref":"#/components/schemas/Workflows_RollbackResult"},"Workflows_RollbackResult":{"type":"object","properties":{"id":{"type":"string","description":"Unique workflow identifier.","examples":["3b1f7c92-8d4e-4a6b-9c0d-5e2f8a714b36"]},"isDeployed":{"type":"boolean","description":"Whether a workflow version is currently live and available for API execution."},"deployedAt":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"ISO 8601 timestamp associated with the deployment, or null when unavailable.","format":"date-time","examples":["2026-06-12T10:30:00.000Z"]},"warnings":{"type":"array","items":{"type":"string"},"description":"Non-fatal synchronization warnings. Empty when there is nothing to report."},"activeDeployment":{"anyOf":[{"$ref":"#/components/schemas/Workflows_ActiveDeploymentSummary"},{"type":"null"}],"description":"Currently live deployment version, or null while no version is active."},"latestDeploymentAttempt":{"anyOf":[{"$ref":"#/components/schemas/Workflows_DeploymentOperationSummary"},{"type":"null"}],"description":"Most recent deployment lifecycle attempt, or null when none is available."},"version":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991,"description":"Deployment version selected for re-activation."}},"required":["id","isDeployed","deployedAt","warnings","activeDeployment","latestDeploymentAttempt","version"],"additionalProperties":false,"title":"Rollback result","description":"Rollback attempt accepted for processing. Activation is asynchronous; inspect `isDeployed` and `latestDeploymentAttempt` for current state."},"Workflows_ActivateWorkflowVersionResponse":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string","description":"Unique workflow identifier.","examples":["3b1f7c92-8d4e-4a6b-9c0d-5e2f8a714b36"]},"isDeployed":{"type":"boolean","description":"Whether a workflow version is currently live and available for API execution."},"deployedAt":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"ISO 8601 timestamp associated with the deployment, or null when unavailable.","format":"date-time","examples":["2026-06-12T10:30:00.000Z"]},"warnings":{"type":"array","items":{"type":"string"},"description":"Non-fatal synchronization warnings. Empty when there is nothing to report."},"activeDeployment":{"anyOf":[{"$ref":"#/components/schemas/Workflows_ActiveDeploymentSummary"},{"type":"null"}],"description":"Currently live deployment version, or null while no version is active."},"latestDeploymentAttempt":{"anyOf":[{"$ref":"#/components/schemas/Workflows_DeploymentOperationSummary"},{"type":"null"}],"description":"Most recent deployment lifecycle attempt, or null when none is available."},"version":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991,"description":"Deployment version selected for re-activation."}},"required":["id","isDeployed","deployedAt","warnings","activeDeployment","latestDeploymentAttempt","version"],"additionalProperties":false,"description":"Response data.","$ref":"#/components/schemas/Workflows_VersionActivationResult"}},"required":["data"],"additionalProperties":false,"title":"Activate workflow version response","description":"Current deployment state after accepting the activation attempt.","examples":[{"data":{"id":"3b1f7c92-8d4e-4a6b-9c0d-5e2f8a714b36","isDeployed":false,"deployedAt":null,"warnings":[],"activeDeployment":null,"latestDeploymentAttempt":{"id":"depop_01J8ZK4RX5N7Y3S0U8D6E1W2","deploymentVersionId":"depver_01J8ZK4RX5N7Y3S0U8D6E1W3","version":3,"action":"activate","status":"activating","isCurrent":true,"readiness":{"webhooks":"ready","schedules":"ready","mcp":"not_applicable"},"requestedAt":"2026-06-12T10:30:00.000Z","activatedAt":null,"error":null},"version":3}}]},"Workflows_ActivateWorkflowVersionRequest":{"default":{},"title":"Activate workflow version request","description":"No body. The version to promote is named by the request path.","examples":[{}],"type":"object","properties":{},"additionalProperties":false},"Workflows_RevertWorkflowVersionResult":{"type":"object","properties":{"id":{"type":"string","description":"Unique workflow identifier."},"version":{"anyOf":[{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},{"type":"string","const":"active"}],"description":"Deployment version loaded into the draft, or `active` for the live version."},"lastSaved":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Epoch milliseconds at which the overwritten draft was saved."}},"required":["id","version","lastSaved"],"additionalProperties":false,"title":"Revert workflow version result","description":"The draft after it was overwritten by a deployment version."},"Workflows_RevertWorkflowVersionResponse":{"type":"object","properties":{"data":{"description":"Response data.","$ref":"#/components/schemas/Workflows_RevertWorkflowVersionResult"}},"required":["data"],"additionalProperties":false,"title":"Revert workflow version response","description":"The draft after it was overwritten by the deployment version.","examples":[{"data":{"id":"3b1f7c92-8d4e-4a6b-9c0d-5e2f8a714b36","version":3,"lastSaved":1765535400000}}]},"Workflows_RevertWorkflowVersionRequest":{"default":{},"title":"Revert workflow version request","description":"No body. The version to load into the draft is named by the request path.","examples":[{}],"type":"object","properties":{},"additionalProperties":false},"Workflows_WorkflowDeployment":{"type":"object","properties":{"id":{"type":"string","description":"Unique workflow identifier.","examples":["3b1f7c92-8d4e-4a6b-9c0d-5e2f8a714b36"]},"isDeployed":{"type":"boolean","description":"Whether a workflow version is currently live and available for API execution."},"deployedAt":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"ISO 8601 timestamp associated with the deployment, or null when unavailable.","format":"date-time","examples":["2026-06-12T10:30:00.000Z"]},"warnings":{"type":"array","items":{"type":"string"},"description":"Non-fatal synchronization warnings. Empty when there is nothing to report."},"activeDeployment":{"anyOf":[{"$ref":"#/components/schemas/Workflows_ActiveDeploymentSummary"},{"type":"null"}],"description":"Currently live deployment version, or null while no version is active."},"latestDeploymentAttempt":{"anyOf":[{"$ref":"#/components/schemas/Workflows_DeploymentOperationSummary"},{"type":"null"}],"description":"Most recent deployment lifecycle attempt, or null when none is available."},"needsRedeployment":{"type":"boolean","description":"Whether the editable draft has diverged from the live deployment version. False while a deployment attempt is still preparing or activating, and false when nothing is deployed."},"isPublicApi":{"type":"boolean","description":"Whether anyone with the execution URL can run the deployed workflow and consume billed usage without an API key. Change this with Update Workflow Public API Access."}},"required":["id","isDeployed","deployedAt","warnings","activeDeployment","latestDeploymentAttempt","needsRedeployment","isPublicApi"],"additionalProperties":false,"title":"Workflow deployment","description":"Current deployment state of a workflow, including draft-versus-live drift and the most recent deployment attempt."},"Workflows_WorkflowDeploymentResponse":{"type":"object","properties":{"data":{"description":"Response data.","$ref":"#/components/schemas/Workflows_WorkflowDeployment"}},"required":["data"],"additionalProperties":false,"title":"Workflow deployment response","description":"Current deployment state, including draft-versus-live drift and whether the deployment is publicly executable.","examples":[{"data":{"id":"3b1f7c92-8d4e-4a6b-9c0d-5e2f8a714b36","isDeployed":true,"needsRedeployment":true,"isPublicApi":false,"deployedAt":"2026-06-12T10:30:00.000Z","warnings":[],"activeDeployment":{"deploymentVersionId":"depver_01J8ZK3QW4M6X2R9T7B5C0V2","version":3,"deployedAt":"2026-06-12T10:30:00.000Z"},"latestDeploymentAttempt":{"id":"depop_01J8ZK3QW4M6X2R9T7B5C0V1","deploymentVersionId":"depver_01J8ZK3QW4M6X2R9T7B5C0V2","version":3,"action":"deploy","status":"active","isCurrent":true,"readiness":{"webhooks":"ready","schedules":"ready","mcp":"not_applicable"},"requestedAt":"2026-06-12T10:29:58.000Z","activatedAt":"2026-06-12T10:30:00.000Z","error":null}}}]},"Workflows_WorkflowPublicApiSettings":{"type":"object","properties":{"id":{"type":"string","description":"Unique workflow identifier."},"isPublicApi":{"type":"boolean","description":"Whether the deployed workflow accepts unauthenticated public API execution."}},"required":["id","isPublicApi"],"additionalProperties":false,"title":"Workflow public API settings","description":"Whether a deployed workflow is executable without an API key."},"Workflows_UpdateWorkflowPublicApiResponse":{"type":"object","properties":{"data":{"description":"Response data.","$ref":"#/components/schemas/Workflows_WorkflowPublicApiSettings"}},"required":["data"],"additionalProperties":false,"title":"Update workflow public API response","description":"Public API access after the update.","examples":[{"data":{"id":"3b1f7c92-8d4e-4a6b-9c0d-5e2f8a714b36","isPublicApi":true}}]},"Workflows_UpdateWorkflowPublicApiRequest":{"type":"object","properties":{"isPublicApi":{"type":"boolean","description":"Whether the deployed workflow should accept unauthenticated public API execution."}},"required":["isPublicApi"],"additionalProperties":false,"title":"Update workflow public API request","description":"Enable or disable unauthenticated public execution of the deployed workflow.","examples":[{"isPublicApi":true}]},"Workflows_DeployResult":{"type":"object","properties":{"id":{"type":"string","description":"Unique workflow identifier.","examples":["3b1f7c92-8d4e-4a6b-9c0d-5e2f8a714b36"]},"isDeployed":{"type":"boolean","description":"Whether a workflow version is currently live and available for API execution."},"deployedAt":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"ISO 8601 timestamp associated with the deployment, or null when unavailable.","format":"date-time","examples":["2026-06-12T10:30:00.000Z"]},"warnings":{"type":"array","items":{"type":"string"},"description":"Non-fatal synchronization warnings. Empty when there is nothing to report."},"activeDeployment":{"anyOf":[{"$ref":"#/components/schemas/Workflows_ActiveDeploymentSummary"},{"type":"null"}],"description":"Currently live deployment version, or null while no version is active."},"latestDeploymentAttempt":{"anyOf":[{"$ref":"#/components/schemas/Workflows_DeploymentOperationSummary"},{"type":"null"}],"description":"Most recent deployment lifecycle attempt, or null when none is available."},"version":{"description":"Deployment version created for this attempt, when available.","type":"integer","exclusiveMinimum":0,"maximum":9007199254740991}},"required":["id","isDeployed","deployedAt","warnings","activeDeployment","latestDeploymentAttempt"],"additionalProperties":false,"title":"Deploy result","description":"Deployment attempt accepted for asynchronous activation. `latestDeploymentAttempt` identifies the attempt. Poll Get Workflow Deployment for `isDeployed` and `deployedAt`, or List Workflow Versions for `isActive`."},"Workflows_DeployWorkflowResponse":{"type":"object","properties":{"data":{"description":"Response data.","$ref":"#/components/schemas/Workflows_DeployResult"}},"required":["data"],"additionalProperties":false,"title":"Deploy workflow response","description":"Current deployment state after accepting the attempt.","examples":[{"data":{"id":"3b1f7c92-8d4e-4a6b-9c0d-5e2f8a714b36","isDeployed":false,"deployedAt":null,"warnings":[],"activeDeployment":null,"latestDeploymentAttempt":{"id":"depop_01J8ZK3QW4M6X2R9T7B5C0V1","deploymentVersionId":"depver_01J8ZK3QW4M6X2R9T7B5C0V2","version":3,"action":"deploy","status":"preparing","isCurrent":true,"readiness":{"webhooks":"pending","schedules":"ready","mcp":"not_applicable"},"requestedAt":"2026-06-12T10:30:00.000Z","activatedAt":null,"error":null},"version":3}}]},"Workflows_DeployWorkflowRequest":{"default":{},"title":"Deploy workflow request","description":"Optional metadata for the new deployment version.","examples":[{"name":"Escalation routing","description":"Adds the priority escalation branch."}],"type":"object","properties":{"name":{"description":"Optional label for the deployment version.","type":"string","minLength":1,"maxLength":100},"description":{"description":"Optional release note for the deployment version.","anyOf":[{"type":"string","maxLength":50000},{"type":"null"}]}},"additionalProperties":false},"Workflows_UndeployResult":{"type":"object","properties":{"id":{"type":"string","description":"Unique workflow identifier.","examples":["3b1f7c92-8d4e-4a6b-9c0d-5e2f8a714b36"]},"isDeployed":{"type":"boolean","description":"Whether a workflow version is currently live and available for API execution."},"deployedAt":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"ISO 8601 timestamp associated with the deployment, or null when unavailable.","format":"date-time","examples":["2026-06-12T10:30:00.000Z"]},"warnings":{"type":"array","items":{"type":"string"},"description":"Non-fatal synchronization warnings. Empty when there is nothing to report."},"activeDeployment":{"anyOf":[{"$ref":"#/components/schemas/Workflows_ActiveDeploymentSummary"},{"type":"null"}],"description":"Currently live deployment version, or null while no version is active."},"latestDeploymentAttempt":{"anyOf":[{"$ref":"#/components/schemas/Workflows_DeploymentOperationSummary"},{"type":"null"}],"description":"Most recent deployment lifecycle attempt, or null when none is available."}},"required":["id","isDeployed","deployedAt","warnings","activeDeployment","latestDeploymentAttempt"],"additionalProperties":false,"title":"Undeploy result","description":"Deployment state after a successful undeploy. `isDeployed` is false and no workflow version is active."},"Workflows_UndeployWorkflowResponse":{"type":"object","properties":{"data":{"description":"Response data.","$ref":"#/components/schemas/Workflows_UndeployResult"}},"required":["data"],"additionalProperties":false,"title":"Undeploy workflow response","description":"Deployment state after deactivating the active version.","examples":[{"data":{"id":"3b1f7c92-8d4e-4a6b-9c0d-5e2f8a714b36","isDeployed":false,"deployedAt":null,"warnings":[],"activeDeployment":null,"latestDeploymentAttempt":null}}]},"Workflows_RollbackWorkflowResponse":{"type":"object","properties":{"data":{"description":"Response data.","$ref":"#/components/schemas/Workflows_RollbackResult"}},"required":["data"],"additionalProperties":false,"title":"Rollback workflow response","description":"Current deployment state after accepting the rollback attempt.","examples":[{"data":{"id":"3b1f7c92-8d4e-4a6b-9c0d-5e2f8a714b36","isDeployed":false,"deployedAt":null,"warnings":[],"activeDeployment":null,"latestDeploymentAttempt":{"id":"depop_01J8ZK4RX5N7Y3S0U8D6E1W2","deploymentVersionId":"depver_01J8ZK4RX5N7Y3S0U8D6E1W3","version":2,"action":"activate","status":"activating","isCurrent":true,"readiness":{"webhooks":"ready","schedules":"ready","mcp":"not_applicable"},"requestedAt":"2026-06-12T10:30:00.000Z","activatedAt":null,"error":null},"version":2}}]},"Workflows_RollbackWorkflowRequest":{"default":{},"title":"Rollback workflow request","description":"Optional deployment version to reactivate.","examples":[{"version":2}],"type":"object","properties":{"version":{"description":"Deployment version to reactivate. Omit to select the previous active version.","type":"integer","minimum":1,"maximum":2147483647}},"additionalProperties":false},"Workflows_WorkflowExportPayload":{"type":"object","properties":{"version":{"type":"string","const":"1.0","description":"Workflow export format version."},"exportedAt":{"type":"string","description":"ISO 8601 timestamp when the export was created.","format":"date-time"},"workflow":{"type":"object","properties":{"id":{"type":"string","description":"Identifier of the source workflow."},"name":{"type":"string","description":"Name of the exported workflow."},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Description of the exported workflow, or null when unset."},"workspaceId":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Identifier of the source workspace, or null for legacy exports."},"folderPath":{"type":"string","title":"Folder path","description":"Canonical containing-folder path; `/` is the workspace root.","maxLength":4096}},"required":["id","name","description","workspaceId","folderPath"],"additionalProperties":false,"description":"Source workflow metadata."},"state":{"type":"object","additionalProperties":true,"description":"Secret-sanitized workflow graph, edges, loops, parallels, metadata, and variables."}},"required":["version","exportedAt","workflow","state"],"additionalProperties":false,"title":"Workflow export payload","description":"Portable, secret-sanitized workflow export. Workspace-scoped bindings must be selected again after import."},"Workflows_ExportWorkflowResponse":{"type":"object","properties":{"data":{"description":"Response data.","$ref":"#/components/schemas/Workflows_WorkflowExportPayload"}},"required":["data"],"additionalProperties":false,"title":"Export workflow response","description":"Portable, secret-sanitized workflow data.","examples":[{"data":{"version":"1.0","exportedAt":"2026-08-09T18:04:11.000Z","workflow":{"id":"3b1f7c92-8d4e-4a6b-9c0d-5e2f8a714b36","name":"Customer support triage","description":"Routes incoming support requests to the right team.","workspaceId":"a91c4b2e-6d3f-4e8a-b5c7-0d9e2f1a8c64","folderPath":"/Operations"},"state":{"blocks":{},"edges":[]}}}]},"Workflows_ImportedWorkflow":{"type":"object","properties":{"id":{"type":"string","description":"Identifier of the imported workflow."},"name":{"type":"string","description":"Imported workflow name."},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Imported workflow description."},"workspaceId":{"type":"string","description":"Workspace that owns the imported workflow."},"folderPath":{"type":"string","title":"Folder path","description":"Canonical containing-folder path.","maxLength":4096},"createdAt":{"type":"string","description":"ISO 8601 timestamp when the workflow was imported.","format":"date-time"},"updatedAt":{"type":"string","description":"ISO 8601 timestamp when the workflow was last updated.","format":"date-time"}},"required":["id","name","description","workspaceId","folderPath","createdAt","updatedAt"],"additionalProperties":false,"title":"Imported workflow","description":"Workflow created by an import operation."},"Workflows_ImportWorkflowResponse":{"type":"object","properties":{"data":{"description":"Response data.","$ref":"#/components/schemas/Workflows_ImportedWorkflow"}},"required":["data"],"additionalProperties":false,"title":"Import workflow response","description":"The workflow created by the import.","examples":[{"data":{"id":"3b1f7c92-8d4e-4a6b-9c0d-5e2f8a714b36","name":"Customer support triage","description":"Routes incoming support requests to the right team.","workspaceId":"a91c4b2e-6d3f-4e8a-b5c7-0d9e2f1a8c64","folderPath":"/Operations","createdAt":"2026-05-01T09:00:00.000Z","updatedAt":"2026-08-09T18:04:11.000Z"}}]},"Workflows_ImportWorkflowRequest":{"type":"object","properties":{"workspaceId":{"type":"string","minLength":1,"maxLength":128,"description":"Workspace in which to import the workflow."},"workflow":{"anyOf":[{"type":"string","minLength":1,"description":"JSON string containing a workflow export object or bare workflow state."},{"type":"object","additionalProperties":true,"description":"Workflow export object or bare workflow state."}],"description":"Workflow export object, bare workflow state, or JSON string containing either form."},"folderPath":{"description":"Destination folder path; omit for the workspace root.","$ref":"#/components/schemas/Workflows_FolderPathInput"},"name":{"description":"Override for the imported workflow name.","type":"string","minLength":1,"maxLength":200},"description":{"description":"Override for the imported workflow description.","type":"string","maxLength":2000}},"required":["workspaceId","workflow"],"additionalProperties":false,"title":"Import workflow request","description":"Portable workflow data and destination metadata for an import."},"Workflows_ChatDeploymentListItem":{"type":"object","properties":{"id":{"type":"string","description":"Unique chat deployment identifier."},"workflowId":{"type":"string","description":"Workflow this deployment publishes."},"workspaceId":{"type":"string","description":"Workspace the deployment belongs to, derived from its workflow."},"identifier":{"type":"string","description":"URL slug the deployed chat answers on. Unique across live deployments."},"url":{"type":"string","description":"Public URL of the deployed chat. There is no chat subdomain — the identifier is a path segment.","examples":["https://sim.ai/chat/support"]},"title":{"type":"string","description":"Title shown to visitors."},"description":{"type":"string","description":"Description shown to visitors. Empty when unset."},"isActive":{"type":"boolean","description":"Whether the deployment answers requests."},"authType":{"type":"string","enum":["public","password","email","sso"],"description":"How visitors are gated: `public` (no gate), `password`, `email`, or `sso`."},"outputConfigs":{"type":"array","items":{"$ref":"#/components/schemas/Workflows_StoredChatDeploymentOutputConfig"},"description":"Block outputs surfaced to visitors."},"includeThinking":{"type":"boolean","description":"Whether visitors may receive provider thinking events. They must also opt into the streaming protocol."},"includeToolCalls":{"type":"boolean","description":"Whether visitors may receive tool lifecycle events. They must also opt into the streaming protocol."},"createdAt":{"type":"string","description":"ISO 8601 timestamp when the deployment was created.","format":"date-time"},"updatedAt":{"type":"string","description":"ISO 8601 timestamp when the deployment was last modified.","format":"date-time"}},"required":["id","workflowId","workspaceId","identifier","url","title","description","isActive","authType","outputConfigs","includeThinking","includeToolCalls","createdAt","updatedAt"],"additionalProperties":false,"title":"Chat deployment list entry","description":"A workflow published as a hosted chat, without the fields the detail read gates."},"Workflows_StoredChatDeploymentOutputConfig":{"type":"object","properties":{"workflowId":{"description":"Child workflow containing the selected block. Omitted for the deployed workflow.","type":"string"},"blockId":{"type":"string","description":"Block whose output the chat streams."},"path":{"type":"string","description":"Path within that block output. Empty means the whole output."}},"required":["blockId","path"],"additionalProperties":false,"title":"Stored chat deployment output config","description":"One block output currently surfaced to chat visitors."},"Workflows_ChatDeploymentListResponse":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Workflows_ChatDeploymentListItem"},"description":"Items in the current page."},"nextCursor":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Opaque cursor for the next page. Send it back as `cursor`; `null` means there is nothing further to fetch. Never construct one yourself."}},"required":["data","nextCursor"],"additionalProperties":false,"title":"Chat deployment list response","description":"A cursor-paginated page of chat deployments.","examples":[{"data":[{"id":"chat_01J8ZK3QW4M6X2R9T7B5C0V2","workflowId":"3b1f7c92-8d4e-4a6b-9c0d-5e2f8a714b36","workspaceId":"9f4c2a10-3b7e-4d58-8f6a-2c1d0e5b7a94","identifier":"support","url":"https://sim.ai/chat/support","title":"Support chat","description":"Ask about billing, onboarding, or outages.","isActive":true,"authType":"public","outputConfigs":[{"blockId":"block_01J8ZK3QW4M6X2R9T7B5C0V4","path":"content"}],"includeThinking":false,"includeToolCalls":false,"createdAt":"2026-06-12T10:30:00.000Z","updatedAt":"2026-06-12T10:30:00.000Z"}],"nextCursor":null}]},"Workflows_StoredChatDeploymentCustomizations":{"type":"object","properties":{"primaryColor":{"description":"CSS color used for the chat accent.","type":"string"},"welcomeMessage":{"description":"First message shown to a visitor.","type":"string"},"imageUrl":{"description":"Avatar image shown beside assistant messages.","type":"string"}},"additionalProperties":false,"title":"Stored chat deployment customizations","description":"Presentation overrides currently stored on the deployed chat."},"Workflows_ChatDeployment":{"type":"object","properties":{"id":{"type":"string","description":"Unique chat deployment identifier."},"workflowId":{"type":"string","description":"Workflow this deployment publishes."},"workspaceId":{"type":"string","description":"Workspace the deployment belongs to, derived from its workflow."},"identifier":{"type":"string","description":"URL slug the deployed chat answers on. Unique across live deployments."},"url":{"type":"string","description":"Public URL of the deployed chat. There is no chat subdomain — the identifier is a path segment.","examples":["https://sim.ai/chat/support"]},"title":{"type":"string","description":"Title shown to visitors."},"description":{"type":"string","description":"Description shown to visitors. Empty when unset."},"isActive":{"type":"boolean","description":"Whether the deployment answers requests."},"authType":{"type":"string","enum":["public","password","email","sso"],"description":"How visitors are gated: `public` (no gate), `password`, `email`, or `sso`."},"hasPassword":{"type":"boolean","description":"Whether a password is stored. The password itself is never readable."},"allowedEmails":{"type":"array","items":{"type":"string"},"description":"Email addresses or domains admitted under `email` and `sso` gating. Empty otherwise."},"customizations":{"description":"Presentation overrides. Unset fields fall back to platform defaults.","$ref":"#/components/schemas/Workflows_StoredChatDeploymentCustomizations"},"outputConfigs":{"type":"array","items":{"$ref":"#/components/schemas/Workflows_StoredChatDeploymentOutputConfig"},"description":"Block outputs surfaced to visitors."},"includeThinking":{"type":"boolean","description":"Whether visitors may receive provider thinking events. They must also opt into the streaming protocol."},"includeToolCalls":{"type":"boolean","description":"Whether visitors may receive tool lifecycle events. They must also opt into the streaming protocol."},"createdAt":{"type":"string","description":"ISO 8601 timestamp when the deployment was created.","format":"date-time"},"updatedAt":{"type":"string","description":"ISO 8601 timestamp when the deployment was last modified.","format":"date-time"}},"required":["id","workflowId","workspaceId","identifier","url","title","description","isActive","authType","hasPassword","allowedEmails","customizations","outputConfigs","includeThinking","includeToolCalls","createdAt","updatedAt"],"additionalProperties":false,"title":"Chat deployment","description":"A workflow published as a hosted chat."},"Workflows_GetWorkflowChatDeploymentResponse":{"type":"object","properties":{"data":{"description":"Response data.","$ref":"#/components/schemas/Workflows_ChatDeployment"}},"required":["data"],"additionalProperties":false,"title":"Get workflow chat deployment response","description":"The workflow's chat deployment.","examples":[{"data":{"id":"chat_01J8ZK3QW4M6X2R9T7B5C0V2","workflowId":"3b1f7c92-8d4e-4a6b-9c0d-5e2f8a714b36","workspaceId":"9f4c2a10-3b7e-4d58-8f6a-2c1d0e5b7a94","identifier":"support","url":"https://sim.ai/chat/support","title":"Support chat","description":"Ask about billing, onboarding, or outages.","isActive":true,"authType":"public","hasPassword":false,"allowedEmails":[],"customizations":{"primaryColor":"#6F3DFA","welcomeMessage":"Hi there! How can I help?"},"outputConfigs":[{"blockId":"block_01J8ZK3QW4M6X2R9T7B5C0V4","path":"content"}],"includeThinking":false,"includeToolCalls":false,"createdAt":"2026-06-12T10:30:00.000Z","updatedAt":"2026-06-12T10:30:00.000Z"}}]},"Workflows_ReplaceWorkflowChatDeploymentResponse":{"type":"object","properties":{"data":{"description":"Response data.","$ref":"#/components/schemas/Workflows_ChatDeployment"}},"required":["data"],"additionalProperties":false,"title":"Replace workflow chat deployment response","description":"The chat deployment as stored after the replace.","examples":[{"data":{"id":"chat_01J8ZK3QW4M6X2R9T7B5C0V2","workflowId":"3b1f7c92-8d4e-4a6b-9c0d-5e2f8a714b36","workspaceId":"9f4c2a10-3b7e-4d58-8f6a-2c1d0e5b7a94","identifier":"support","url":"https://sim.ai/chat/support","title":"Support chat","description":"Ask about billing, onboarding, or outages.","isActive":true,"authType":"public","hasPassword":false,"allowedEmails":[],"customizations":{"primaryColor":"#6F3DFA","welcomeMessage":"Hi there! How can I help?"},"outputConfigs":[{"blockId":"block_01J8ZK3QW4M6X2R9T7B5C0V4","path":"content"}],"includeThinking":false,"includeToolCalls":false,"createdAt":"2026-06-12T10:30:00.000Z","updatedAt":"2026-06-12T10:30:00.000Z"}}]},"Workflows_ChatDeploymentCustomizations":{"type":"object","properties":{"primaryColor":{"description":"CSS color used for the chat accent.","type":"string","minLength":1,"maxLength":64},"welcomeMessage":{"description":"First message shown to a visitor.","type":"string","maxLength":2000},"imageUrl":{"description":"Avatar image shown beside assistant messages.","type":"string","maxLength":2048}},"additionalProperties":false,"title":"Chat deployment customizations","description":"Presentation overrides for the deployed chat."},"Workflows_ChatDeploymentOutputConfig":{"type":"object","properties":{"workflowId":{"description":"Child workflow containing the selected block. Omit for the deployed workflow.","type":"string","minLength":1},"blockId":{"type":"string","minLength":1,"description":"Block whose output the chat streams."},"path":{"type":"string","minLength":1,"description":"Path within that block output."}},"required":["blockId","path"],"additionalProperties":false,"title":"Chat deployment output config","description":"One block output surfaced to chat visitors."},"Workflows_ReplaceChatDeploymentRequest":{"type":"object","properties":{"identifier":{"type":"string","minLength":1,"maxLength":128,"pattern":"^[a-z0-9-]+$","description":"URL slug the deployed chat answers on. Must be free across live deployments."},"title":{"type":"string","minLength":1,"maxLength":200,"description":"Title shown to visitors."},"description":{"description":"Description shown to visitors. Omitted clears it.","type":"string","maxLength":2000},"customizations":{"description":"Presentation overrides. Omitted fields take platform defaults.","$ref":"#/components/schemas/Workflows_ChatDeploymentCustomizations"},"authType":{"description":"How visitors are gated. `public` leaves the chat open to anyone holding the URL.","default":"public","type":"string","enum":["public","password","email","sso"]},"password":{"description":"Write-only password. Required whenever `authType` is `password`, and rejected otherwise. Never readable back.","type":"string","minLength":1,"maxLength":1024},"allowedEmails":{"description":"Email addresses or domains admitted under `email` and `sso` gating. At least one is required for those modes.","maxItems":500,"type":"array","items":{"type":"string","minLength":1}},"outputConfigs":{"description":"Block outputs to surface to visitors. Omitted surfaces none.","maxItems":100,"type":"array","items":{"$ref":"#/components/schemas/Workflows_ChatDeploymentOutputConfig"}},"includeThinking":{"description":"Allow visitors to receive provider thinking events.","default":false,"type":"boolean"},"includeToolCalls":{"description":"Allow visitors to receive tool lifecycle events.","default":false,"type":"boolean"}},"required":["identifier","title"],"additionalProperties":false,"title":"Replace chat deployment request","description":"The complete desired state of a workflow's chat.","examples":[{"identifier":"support","title":"Support chat"}]},"Workflows_DeleteChatDeploymentResult":{"type":"object","properties":{"id":{"type":"string","description":"Identifier of the removed chat deployment."},"deleted":{"type":"boolean","const":true,"description":"Whether the deployment was removed."}},"required":["id","deleted"],"additionalProperties":false,"title":"Delete chat deployment result","description":"Chat deployment removal acknowledgement."},"Workflows_DeleteWorkflowChatDeploymentResponse":{"type":"object","properties":{"data":{"description":"Response data.","$ref":"#/components/schemas/Workflows_DeleteChatDeploymentResult"}},"required":["data"],"additionalProperties":false,"title":"Delete workflow chat deployment response","description":"Acknowledgement that the chat deployment was removed.","examples":[{"data":{"id":"chat_01J8ZK3QW4M6X2R9T7B5C0V2","deleted":true}}]},"Workflows_ExecutionError":{"type":"object","properties":{"message":{"type":"string","description":"Human-readable workflow execution failure message."},"code":{"type":"string","enum":["TIMEOUT","CANCELLED","USAGE_LIMIT_EXCEEDED","INVALID_INPUT","BLOCK_EXECUTION_FAILED","CHILD_WORKFLOW_FAILED","EXECUTION_FAILED"],"description":"Stable machine-readable execution failure code. `BLOCK_EXECUTION_FAILED` and `CHILD_WORKFLOW_FAILED` are reported only where block attribution is available; elsewhere a block-level failure is reported as `EXECUTION_FAILED`."},"blockId":{"description":"Identifier of the failing block. Present on the synchronous execute response only; the polled run resource and the resume response cannot attribute a block.","type":"string"},"blockName":{"description":"Display name of the failing block. Present on the synchronous execute response only.","type":"string"},"blockType":{"description":"Integration or block type that failed. Present on the synchronous execute response only.","type":"string"}},"required":["message","code"],"additionalProperties":false,"title":"Execution error","description":"Structured in-band failure details for a workflow run."},"Workflows_WorkflowRunResult":{"type":"object","properties":{"runId":{"type":"string","minLength":1,"maxLength":128,"pattern":"^[A-Za-z0-9._:-]+$","description":"Unique workflow run identifier.","examples":["run_8f14e45f-ceea-467f-a"]},"workflowId":{"type":"string","description":"Workflow that produced the run."},"status":{"type":"string","enum":["completed","failed","paused","cancelled"],"description":"Terminal or paused run status."},"output":{"description":"Workflow output, including partial output on failure."},"error":{"anyOf":[{"$ref":"#/components/schemas/Workflows_ExecutionError"},{"type":"null"}],"description":"Structured execution failure, or null when none occurred."},"startedAt":{"description":"ISO 8601 timestamp when execution started.","format":"date-time","type":"string"},"endedAt":{"description":"ISO 8601 timestamp when execution ended.","format":"date-time","type":"string"},"durationMs":{"description":"Execution duration in milliseconds.","type":"number","minimum":0}},"required":["runId","workflowId","status","output","error"],"additionalProperties":false,"title":"Workflow run result","description":"Synchronous workflow run output and in-band execution status. Run failures are reported in band, not as HTTP errors — a run that exceeds its execution timeout returns HTTP 200 with `status: \"failed\"` and `error.code: \"TIMEOUT\"`, so branch on `status`."},"Workflows_ExecuteWorkflowSyncResponse":{"type":"object","properties":{"data":{"description":"Response data.","$ref":"#/components/schemas/Workflows_WorkflowRunResult"}},"required":["data"],"additionalProperties":false,"title":"Synchronous workflow execution response","description":"Completed, failed, paused, or cancelled synchronous workflow run.","examples":[{"data":{"runId":"run_8f14e45f-ceea-467f-a","workflowId":"3b1f7c92-8d4e-4a6b-9c0d-5e2f8a714b36","status":"completed","output":{"result":"Ticket routed to Support"},"error":null,"startedAt":"2026-08-09T18:04:10.000Z","endedAt":"2026-08-09T18:04:11.000Z","durationMs":1000}}]},"Workflows_QueuedWorkflowRun":{"type":"object","properties":{"runId":{"type":"string","minLength":1,"maxLength":128,"pattern":"^[A-Za-z0-9._:-]+$","description":"Unique workflow run identifier.","examples":["run_8f14e45f-ceea-467f-a"]},"statusUrl":{"type":"string","format":"uri","description":"Absolute URL of the workflow run resource."}},"required":["runId","statusUrl"],"additionalProperties":false,"title":"Queued workflow run","description":"Receipt returned when a workflow run is queued."},"Workflows_ExecuteWorkflowQueuedResponse":{"type":"object","properties":{"data":{"description":"Response data.","$ref":"#/components/schemas/Workflows_QueuedWorkflowRun"}},"required":["data"],"additionalProperties":false,"title":"Queued workflow execution response","description":"Receipt returned for an asynchronous workflow run.","examples":[{"data":{"runId":"run_8f14e45f-ceea-467f-a","statusUrl":"https://www.sim.ai/api/v2/workflows/3b1f7c92-8d4e-4a6b-9c0d-5e2f8a714b36/runs/run_8f14e45f-ceea-467f-a"}}]},"Workflows_ExecuteWorkflowRequest":{"type":"object","properties":{"input":{"description":"Workflow input keyed by the selected trigger input-field name.","type":"object","propertyNames":{"type":"string"},"additionalProperties":{"description":"Value supplied for one workflow input field."}},"run":{"description":"Workflow state and entry point to execute. Omit for the active deployment. Manual execution requires OAuth or personal-key write access and supports synchronous or streamed runs only.","oneOf":[{"type":"object","properties":{"source":{"type":"string","const":"deployment","description":"Execute the active deployed workflow state."}},"required":["source"],"additionalProperties":false},{"type":"object","properties":{"source":{"type":"string","const":"manual","description":"Execute the current saved workflow state manually."},"entry":{"description":"Manual entry mode. Omit to enter through the workflow trigger; a block entry requires an exact source run.","oneOf":[{"type":"object","properties":{"type":{"type":"string","const":"trigger","description":"Enter the manual run through a runnable trigger."},"blockId":{"description":"Runnable trigger block to enter through. Omit only when the saved workflow has exactly one runnable trigger.","type":"string","minLength":1},"useMockPayload":{"description":"Use the selected trigger's server-derived mock payload. Cannot be combined with `input`.","type":"boolean"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","const":"block","description":"Resume manual execution at a block using persisted upstream state."},"blockId":{"type":"string","minLength":1,"description":"Saved workflow block at which manual execution should resume."},"sourceRunId":{"type":"string","minLength":1,"description":"Run ID supplying upstream block results when starting from a selected block."}},"required":["type","blockId","sourceRunId"],"additionalProperties":false}]}},"required":["source"],"additionalProperties":false}]},"async":{"default":false,"description":"Queue the run and return a 202 receipt when true. Requires an OAuth access token or API key, cannot be combined with `stream`, and rejects all streaming and output-shaping options (`selectedOutputs`, `includeThinking`, `includeToolCalls`, `includeFileBase64`, `base64MaxBytes`).","type":"boolean"},"executionTimeoutSeconds":{"description":"Maximum duration of an asynchronous run, in seconds, capped by the plan's execution timeout. Requires `async: true`; otherwise returns `400`.","type":"integer","minimum":1,"maximum":604800},"stream":{"default":false,"description":"Return Server-Sent Events instead of JSON when true. Cannot be combined with `async`.","type":"boolean"},"selectedOutputs":{"description":"Output references for streaming: `<blockName>.<outputPath>` or `<childWorkflowId>.<blockName>.<outputPath>`, using normalized block names. Child references apply to every invocation. Requires `stream: true` and rejects synchronous or async requests. Use `selectedOutputs` with Get Workflow Run to narrow an existing run.","maxItems":100,"type":"array","items":{"type":"string","minLength":1}},"includeThinking":{"default":false,"description":"Include model reasoning events in an agent-event stream. Requires `stream: true` and the `X-Sim-Stream-Protocol: agent-events-v1` request header, and is rejected when `async` is true.","type":"boolean"},"includeToolCalls":{"default":false,"description":"Include tool-call events in an agent-event stream. Requires `stream: true` and the `X-Sim-Stream-Protocol: agent-events-v1` request header, and is rejected when `async` is true.","type":"boolean"},"includeFileBase64":{"description":"Inline eligible output files as base64 content. Rejected when `async` is true.","type":"boolean"},"base64MaxBytes":{"description":"Maximum total bytes of file content to inline as base64, lowering but never raising the server limit of 16 MiB. Rejected when `async` is true.","type":"integer","exclusiveMinimum":0,"maximum":16777216}},"additionalProperties":false,"title":"Execute workflow request","description":"Input, workflow-state selection, and execution-mode options. Input descriptions specify compatible modes; invalid combinations return `400`.","examples":[{"input":{"ticketId":"ticket_123"}},{"input":{"ticketId":"ticket_123"},"async":true},{"input":{"ticketId":"ticket_123"},"stream":true},{"run":{"source":"manual"}},{"run":{"source":"manual","entry":{"type":"block","blockId":"block_123","sourceRunId":"run_123"}}}]},"Workflows_WorkflowRunListItem":{"type":"object","properties":{"runId":{"type":"string","minLength":1,"maxLength":128,"pattern":"^[A-Za-z0-9._:-]+$","description":"Unique workflow run identifier.","examples":["run_8f14e45f-ceea-467f-a"]},"workflowId":{"type":"string","description":"Workflow that produced the run."},"status":{"type":"string","enum":["pending","running","paused","redacting","completed","failed","cancelled"],"description":"Current or terminal run status. `redacting` is transient, reported while a finished run's output is being scrubbed. `paused` means the run is waiting to be resumed — either held at a human-in-the-loop pause point, or left paused by a resume attempt that did not complete. Only the single-run response distinguishes the two, through `paused.automaticResumeWaitingReason`."},"trigger":{"type":"string","description":"Trigger type that started the run."},"startedAt":{"type":"string","description":"ISO 8601 timestamp when the run started.","format":"date-time"},"endedAt":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"ISO 8601 timestamp when the run ended, or null while active.","format":"date-time"},"durationMs":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Run duration in milliseconds, or null while active."},"cost":{"anyOf":[{"type":"object","properties":{"total":{"type":"number","description":"Total credits consumed by the run."}},"required":["total"],"additionalProperties":false},{"type":"null"}],"description":"Credit cost, or null when unavailable."}},"required":["runId","workflowId","status","trigger","startedAt","endedAt","durationMs","cost"],"additionalProperties":false,"title":"Workflow run summary","description":"Summary of a recorded workflow run."},"Workflows_WorkflowRunListResponse":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Workflows_WorkflowRunListItem"},"description":"Items in the current page."},"nextCursor":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Opaque cursor for the next page. Send it back as `cursor`; `null` means there is nothing further to fetch. Never construct one yourself."}},"required":["data","nextCursor"],"additionalProperties":false,"title":"Workflow run list response","description":"A cursor-paginated page of workflow run summaries.","examples":[{"data":[{"runId":"run_8f14e45f-ceea-467f-a","workflowId":"3b1f7c92-8d4e-4a6b-9c0d-5e2f8a714b36","status":"completed","trigger":"api","startedAt":"2026-08-09T18:04:10.000Z","endedAt":"2026-08-09T18:04:11.000Z","durationMs":1000,"cost":{"total":12}}],"nextCursor":null}]},"Workflows_V2RunFile":{"type":"object","properties":{"id":{"type":"string","description":"Identifier to address this file by on the download endpoint."},"name":{"type":"string","description":"File name, including its extension."},"size":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"File size in bytes."},"type":{"type":"string","description":"MIME type recorded for the file."},"downloadPath":{"type":"string","description":"Path to fetch this file's bytes from, relative to the API host."},"base64":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Base64-encoded contents when `includeFileBase64` was requested and the file fits the inline ceiling, otherwise null."}},"required":["id","name","size","type","downloadPath","base64"],"additionalProperties":false,"title":"Workflow run file","description":"A file produced by a workflow run."},"Workflows_WorkflowRunStatus":{"type":"object","properties":{"runId":{"type":"string","minLength":1,"maxLength":128,"pattern":"^[A-Za-z0-9._:-]+$","description":"Unique workflow run identifier.","examples":["run_8f14e45f-ceea-467f-a"]},"workflowId":{"type":"string","description":"Workflow that produced the run."},"status":{"type":"string","enum":["pending","running","paused","redacting","completed","failed","cancelled","queued"],"description":"Current or terminal run status. `redacting` is transient, reported while a finished run's output is being scrubbed. `paused` means the run is waiting to be resumed — either held at a human-in-the-loop pause point, or left paused by a resume attempt that did not complete. Only the single-run response distinguishes the two, through `paused.automaticResumeWaitingReason`."},"trigger":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Trigger type that started the run. Backfilled as `api` for a run that is still queued, so it is populated from the first poll."},"startedAt":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"ISO 8601 start timestamp. A queued run reports the time it was enqueued, so it is populated from the first poll.","format":"date-time"},"endedAt":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"ISO 8601 end timestamp, or null while nonterminal.","format":"date-time"},"durationMs":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Run duration in milliseconds, or null while active."},"paused":{"anyOf":[{"type":"object","properties":{"contextId":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Resume context identifier, or null while every pause point is mid-resume."},"pausedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$","description":"ISO 8601 timestamp when the execution entered the paused state."},"resumeAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},{"type":"null"}],"description":"ISO 8601 scheduled automatic-resume timestamp, or null when no resume time is set."},"pauseKind":{"anyOf":[{"type":"string","enum":["time","human"]},{"type":"null"}],"description":"Whether the pause waits for time or human input, or null when unspecified."},"blockedOnBlockId":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Workflow block awaiting resume, or null when no block is identified."},"automaticResumeWaitingReason":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Why automatic resume is waiting, or null when it is not — on a paused run, null means it is waiting on human input. Recorded whenever a resume attempt fails and cleared once one succeeds. A non-retryable or exhausted failure is prefixed `Automatic resume requires manual intervention: `."},"pausePointCount":{"type":"number","description":"Number of pause points tracked for the execution."},"resumedCount":{"type":"number","description":"Number of pause points that have resumed."}},"required":["contextId","pausedAt","resumeAt","pauseKind","blockedOnBlockId","automaticResumeWaitingReason","pausePointCount","resumedCount"],"additionalProperties":false},{"type":"null"}],"description":"Current pause details, or null when the run is not paused."},"cost":{"anyOf":[{"type":"object","properties":{"total":{"type":"number","description":"Total credits consumed by the run."}},"required":["total"],"additionalProperties":false},{"type":"null"}],"description":"Credit cost, or null when unavailable."},"error":{"anyOf":[{"$ref":"#/components/schemas/Workflows_ExecutionError"},{"type":"null"}],"description":"Structured execution failure, or null when none occurred. Reclassified from the persisted error message, so `blockId`/`blockName`/`blockType` are absent and a block-level failure reports `EXECUTION_FAILED` here even when the same run reported `BLOCK_EXECUTION_FAILED` on its synchronous execute response."},"output":{"anyOf":[{"description":"Final workflow output value."},{"type":"null"}],"description":"Final workflow output when requested, otherwise null."},"blockOutputs":{"anyOf":[{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"description":"Output value produced by one workflow block."}},{"type":"null"}],"description":"Outputs of the blocks named by `selectedOutputs`, or null when none were requested. Gated by `selectedOutputs` alone — `includeOutput` governs `output` only."},"files":{"anyOf":[{"type":"array","items":{"$ref":"#/components/schemas/Workflows_V2RunFile"}},{"type":"null"}],"description":"Files this run produced, or null when `includeOutput` is false. Matches the nullability of `output`."}},"required":["runId","workflowId","status","trigger","startedAt","endedAt","durationMs","paused","cost","error","output","blockOutputs","files"],"additionalProperties":false,"title":"Workflow run status","description":"Detailed current state of a workflow run."},"Workflows_WorkflowRunStatusResponse":{"type":"object","properties":{"data":{"description":"Response data.","$ref":"#/components/schemas/Workflows_WorkflowRunStatus"}},"required":["data"],"additionalProperties":false,"title":"Workflow run status response","description":"Detailed current state of a workflow run.","examples":[{"data":{"runId":"run_8f14e45f-ceea-467f-a","workflowId":"3b1f7c92-8d4e-4a6b-9c0d-5e2f8a714b36","status":"completed","trigger":"api","startedAt":"2026-08-09T18:04:10.000Z","endedAt":"2026-08-09T18:04:11.000Z","durationMs":1000,"paused":null,"cost":{"total":12},"error":null,"output":{"result":"Ticket routed to Support"},"blockOutputs":null,"files":[{"id":"file_1a2b3c","name":"summary.pdf","size":20480,"type":"application/pdf","downloadPath":"/api/v2/workflows/3b1f7c92-8d4e-4a6b-9c0d-5e2f8a714b36/runs/run_8f14e45f-ceea-467f-a/files/file_1a2b3c","base64":null}]}}]},"Workflows_ResumeWorkflowSyncResponse":{"type":"object","properties":{"data":{"description":"Response data.","$ref":"#/components/schemas/Workflows_WorkflowRunResult"}},"required":["data"],"additionalProperties":false,"title":"Synchronous workflow resume response","description":"Completed, failed, paused, or cancelled resumed workflow run.","examples":[{"data":{"runId":"run_8f14e45f-ceea-467f-a","workflowId":"3b1f7c92-8d4e-4a6b-9c0d-5e2f8a714b36","status":"completed","output":{"result":"Ticket routed to Support"},"error":null,"startedAt":"2026-08-09T18:04:10.000Z","endedAt":"2026-08-09T18:04:11.000Z","durationMs":1000}}]},"Workflows_QueuedWorkflowResume":{"type":"object","properties":{"runId":{"type":"string","minLength":1,"maxLength":128,"pattern":"^[A-Za-z0-9._:-]+$","description":"Unique workflow run identifier.","examples":["run_8f14e45f-ceea-467f-a"]},"statusUrl":{"type":"string","format":"uri","description":"Absolute URL of the workflow run resource."},"queuePosition":{"description":"Current queue position, when available.","type":"integer","exclusiveMinimum":0,"maximum":9007199254740991}},"required":["runId","statusUrl"],"additionalProperties":false,"title":"Queued workflow resume","description":"Receipt returned when a resumed workflow attempt is queued."},"Workflows_ResumeWorkflowQueuedResponse":{"type":"object","properties":{"data":{"description":"Response data.","$ref":"#/components/schemas/Workflows_QueuedWorkflowResume"}},"required":["data"],"additionalProperties":false,"title":"Queued workflow resume response","description":"Receipt returned when a resumed workflow attempt is queued.","examples":[{"data":{"runId":"run_8f14e45f-ceea-467f-a","statusUrl":"https://www.sim.ai/api/v2/workflows/3b1f7c92-8d4e-4a6b-9c0d-5e2f8a714b36/runs/run_8f14e45f-ceea-467f-a"}}]},"Workflows_ResumeWorkflowRequest":{"type":"object","properties":{"contextId":{"type":"string","minLength":1,"description":"Human-in-the-loop pause-context identifier."},"input":{"description":"Input supplied to the paused workflow block."}},"required":["contextId"],"additionalProperties":false,"title":"Resume workflow request","description":"Pause context and optional input used to resume a workflow run.","examples":[{"contextId":"ctx_123","input":{"approved":true}}]},"Workflows_CancelWorkflowRunResult":{"type":"object","properties":{"success":{"type":"boolean","description":"Whether cancellation was accepted."},"runId":{"type":"string","minLength":1,"maxLength":128,"pattern":"^[A-Za-z0-9._:-]+$","description":"Unique workflow run identifier.","examples":["run_8f14e45f-ceea-467f-a"]},"redisAvailable":{"type":"boolean","description":"Whether the distributed cancellation channel was available."},"durablyRecorded":{"type":"boolean","description":"Whether this request durably recorded a cancellation. Always false for a run that was already terminal, where the request is satisfied but nothing was written."},"locallyAborted":{"type":"boolean","description":"Whether an in-process execution was aborted."},"pausedCancelled":{"type":"boolean","description":"Whether a paused execution was cancelled."},"reason":{"description":"Machine-readable cancellation outcome, present on every cancellation including full successes. `recorded` and `queue_cancelled` are successful cancellation values. `already_cancelled`, `already_completed`, and `already_failed` mean the run had already reached that terminal state, so nothing was cancelled and `durablyRecorded` is false. The remaining values identify a degraded or incomplete cancellation step.","type":"string","enum":["recorded","already_cancelled","already_completed","already_failed","redis_unavailable","redis_write_failed","paused_event_publish_failed","paused_database_cancel_failed","queue_cancelled","active_resume_signal_failed","cancellation_not_finalized"]}},"required":["success","runId","redisAvailable","durablyRecorded","locallyAborted","pausedCancelled"],"additionalProperties":false,"title":"Cancel workflow run result","description":"Outcome of a workflow run cancellation request. Cancellation is best-effort: a run already in a terminal state succeeds with no effect, reported as `durablyRecorded: false` with an `already_*` reason naming the state observed."},"Workflows_CancelWorkflowRunResponse":{"type":"object","properties":{"data":{"description":"Response data.","$ref":"#/components/schemas/Workflows_CancelWorkflowRunResult"}},"required":["data"],"additionalProperties":false,"title":"Cancel workflow run response","description":"Outcome of the cancellation request.","examples":[{"data":{"success":true,"runId":"run_8f14e45f-ceea-467f-a","redisAvailable":true,"durablyRecorded":true,"locallyAborted":true,"pausedCancelled":false,"reason":"recorded"}}]},"Workflows_WorkflowFolder":{"type":"object","properties":{"name":{"type":"string","description":"Folder name."},"path":{"type":"string","title":"Non-root folder path","description":"Canonical folder path used as the public folder identifier.","maxLength":4096},"parentPath":{"type":"string","title":"Folder path","description":"Canonical parent path; `/` is the root.","maxLength":4096},"createdAt":{"type":"string","description":"ISO 8601 timestamp when the folder was created.","format":"date-time"},"updatedAt":{"type":"string","description":"ISO 8601 timestamp when the folder was last updated.","format":"date-time"},"locked":{"type":"boolean","description":"Whether the folder is currently locked for mutation."}},"required":["name","path","parentPath","createdAt","updatedAt","locked"],"additionalProperties":false,"title":"Workflow folder","description":"A canonical workflow folder and its mutation lock state."},"Workflows_WorkflowFolderListResponse":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Workflows_WorkflowFolder"},"description":"Items in the current page."},"nextCursor":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Always `null` — this list has no `cursor` or `limit` param and returns its whole bounded set in one page. Present so the list can gain pages later without a shape change."}},"required":["data","nextCursor"],"additionalProperties":false,"title":"Workflow folder list response","description":"A list of canonical workflow folders.","examples":[{"data":[{"name":"Operations","path":"/Operations","parentPath":"/","createdAt":"2026-05-01T09:00:00.000Z","updatedAt":"2026-05-01T09:00:00.000Z","locked":false}],"nextCursor":null}]},"Workflows_CreateWorkflowFolderResponse":{"type":"object","properties":{"data":{"description":"Response data.","$ref":"#/components/schemas/Workflows_WorkflowFolder"}},"required":["data"],"additionalProperties":false,"title":"Create workflow folder response","description":"The created workflow folder.","examples":[{"data":{"name":"Operations","path":"/Operations","parentPath":"/","createdAt":"2026-05-01T09:00:00.000Z","updatedAt":"2026-05-01T09:00:00.000Z","locked":false}}]},"Workflows_NonRootFolderPathInput":{"title":"Non-root folder path input","description":"Non-root folder path. A missing leading slash is normalized before validation. Segments are percent-encoded, so a folder shown as \"New folder\" is `/New%20folder`: everything outside `A-Z a-z 0-9 - _ . ~` is escaped as uppercase hex, and only that exact encoding is accepted. A trailing slash, an empty segment, and a literal `.` or `..` segment are rejected. At most 64 segments and 4096 encoded bytes.","maxLength":4096,"type":"string"},"Workflows_CreateWorkflowFolderRequest":{"type":"object","properties":{"workspaceId":{"type":"string","minLength":1,"maxLength":128,"description":"Workspace in which to create the folder."},"path":{"description":"Path of the folder to create.","$ref":"#/components/schemas/Workflows_NonRootFolderPathInput"}},"required":["workspaceId","path"],"additionalProperties":false,"title":"Create workflow folder request","description":"Workspace and canonical path for a new workflow folder."},"Workflows_RelocateWorkflowFolderResponse":{"type":"object","properties":{"data":{"description":"Response data.","$ref":"#/components/schemas/Workflows_WorkflowFolder"}},"required":["data"],"additionalProperties":false,"title":"Relocate workflow folder response","description":"The relocated workflow folder.","examples":[{"data":{"name":"Support","path":"/Support","parentPath":"/","createdAt":"2026-05-01T09:00:00.000Z","updatedAt":"2026-05-01T09:00:00.000Z","locked":false}}]},"Workflows_RelocateWorkflowFolderRequest":{"type":"object","properties":{"workspaceId":{"type":"string","minLength":1,"maxLength":128,"description":"Workspace containing the folder."},"path":{"description":"Current folder path.","$ref":"#/components/schemas/Workflows_NonRootFolderPathInput"},"destinationPath":{"description":"New full path for the folder and its descendants.","$ref":"#/components/schemas/Workflows_NonRootFolderPathInput"}},"required":["workspaceId","path","destinationPath"],"additionalProperties":false,"title":"Relocate workflow folder request","description":"Current and destination paths for a workflow folder."},"Workflows_DeleteWorkflowFolderResult":{"type":"object","properties":{"path":{"type":"string","title":"Folder path","description":"Path of the deleted workflow folder.","maxLength":4096},"deleted":{"type":"boolean","const":true,"description":"Confirms that the folder was deleted."},"deletedItems":{"type":"object","properties":{"folders":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Number of folders deleted."},"workflows":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Number of workflows deleted."}},"required":["folders","workflows"],"additionalProperties":false,"description":"Resources removed by the deletion."}},"required":["path","deleted","deletedItems"],"additionalProperties":false,"title":"Delete workflow folder result","description":"Confirmation and deletion counts for a workflow folder."},"Workflows_DeleteWorkflowFolderResponse":{"type":"object","properties":{"data":{"description":"Response data.","$ref":"#/components/schemas/Workflows_DeleteWorkflowFolderResult"}},"required":["data"],"additionalProperties":false,"title":"Delete workflow folder response","description":"Confirmation and counts for the deleted folder.","examples":[{"data":{"path":"/Operations","deleted":true,"deletedItems":{"folders":1,"workflows":0}}}]},"Logs_V2ActionableForbiddenDetails":{"type":"object","properties":{"code":{"$ref":"#/components/schemas/Logs_V2ForbiddenDetailCode"}},"required":["code"],"additionalProperties":{"description":"Additional context for this refusal."},"title":"Actionable forbidden details","description":"Machine-readable cause and optional context for an actionable `403` response."},"Logs_V2ForbiddenDetailCode":{"type":"string","enum":["INSUFFICIENT_WORKSPACE_ROLE","PERSONAL_API_KEYS_DISABLED","WORKSPACE_KEY_OPERATION_NOT_PERMITTED","PRINCIPAL_KIND_NOT_PERMITTED","ORGANIZATION_MEMBERSHIP_REQUIRED","ORGANIZATION_ADMIN_REQUIRED","ENTERPRISE_PLAN_REQUIRED","ORGANIZATION_PLAN_REQUIRED","AUDIT_LOGS_DISABLED","SKILL_EDITOR_ACCESS_REQUIRED","SECRET_ADMIN_ACCESS_REQUIRED","WORKSPACE_RESOURCE_LIMIT_REACHED","PUBLIC_SHARING_NOT_ALLOWED","CREDENTIAL_ADMIN_ACCESS_REQUIRED","MCP_SERVER_URL_NOT_ALLOWED","WORKSPACE_PLAN_CAPABILITY_REQUIRED","CHAT_AUTH_MODE_NOT_PERMITTED","CONNECTOR_MANAGED_RESOURCE_READ_ONLY","PERMISSION_GROUP_CAPABILITY_BLOCKED","INTEGRATION_NOT_ALLOWED","INSUFFICIENT_SCOPE","SCIM_MANAGED_MEMBERSHIP"],"title":"Forbidden detail code","description":"Stable cause code for an actionable `403` response."},"Logs_V2Error":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","description":"Stable machine-readable error code."},"message":{"type":"string","description":"Human-readable explanation of the error."},"details":{"description":"Structured error context whose keys depend on the error. Actionable `403` responses use the `V2ActionableForbiddenDetails` shape; validation failures may return issue arrays instead.","anyOf":[{"$ref":"#/components/schemas/Logs_V2ActionableForbiddenDetails"},{"description":"Other structured context defined by the specific error."}]}},"required":["code","message"],"additionalProperties":false,"description":"Canonical error details."}},"required":["error"],"additionalProperties":false,"title":"v2 error response","description":"Canonical error envelope returned by the public v2 API.","examples":[{"error":{"code":"BAD_REQUEST","message":"The request is invalid."}}]},"Logs_V2LogListItem":{"type":"object","properties":{"kind":{"type":"string","enum":["workflow","job"],"description":"Whether the run executed a workflow or a Chat / Sim-agent job. Job runs appear only when `includeJobRuns=true`."},"runId":{"type":"string","description":"Unique run identifier."},"workflowId":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Workflow identifier, or null when unavailable."},"deploymentVersionId":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Deployment version identifier, or null when unavailable."},"status":{"type":"string","enum":["pending","running","paused","redacting","completed","failed","cancelled"],"description":"Current execution status, reported as persisted. `redacting` is transient while run output is scrubbed. `paused` is reported only when a resume attempt did not complete; a run held at a human-in-the-loop pause point reads `pending` here, and `paused` on the workflow run resources. Use those when the pause state matters."},"level":{"type":"string","description":"Log severity level."},"trigger":{"type":"string","description":"Trigger that started the run."},"startedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$","description":"ISO 8601 execution start timestamp."},"endedAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},{"type":"null"}],"description":"ISO 8601 execution end timestamp, or null while the run is active."},"totalDurationMs":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Total execution duration in milliseconds, or null while unavailable."},"cost":{"anyOf":[{"type":"object","properties":{"total":{"type":"number","description":"Total execution cost in USD."}},"required":["total"],"additionalProperties":false},{"type":"null"}],"description":"Cost charged for the run, or null when the run has neither a recorded total nor an itemized ledger."},"files":{"anyOf":[{"type":"array","items":{"$ref":"#/components/schemas/Logs_V2LogFile"}},{"type":"null"}],"description":"Files the run produced, or null when none are recorded. Only the run's own output files appear; input attachments a caller supplied are addressed through the files API instead."},"workflow":{"type":"object","properties":{"id":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Workflow identifier, or null when unavailable."},"name":{"type":"string","description":"Workflow name."},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Workflow description, or null when unset."},"deleted":{"type":"boolean","description":"Whether the workflow has been deleted."}},"required":["id","name","description","deleted"],"additionalProperties":false,"description":"Workflow summary for a full-detail result."},"finalOutput":{"description":"Final workflow output."},"traceSpans":{"type":"array","items":{"$ref":"#/components/schemas/Logs_LogTraceSpan"},"description":"Block-level execution trace spans."}},"required":["kind","runId","workflowId","deploymentVersionId","status","level","trigger","startedAt","endedAt","totalDurationMs","cost","files"],"additionalProperties":false,"title":"Execution log summary","description":"Summary information for one workflow execution log."},"Logs_V2LogFile":{"type":"object","properties":{"id":{"type":"string","description":"Identifier to address this file by on the download endpoint."},"name":{"type":"string","description":"File name, including its extension."},"size":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"File size in bytes."},"type":{"type":"string","description":"MIME type recorded for the file."},"downloadPath":{"type":"string","description":"Path to fetch this file's bytes from, relative to the API host."}},"required":["id","name","size","type","downloadPath"],"additionalProperties":false,"title":"Execution log file","description":"A file produced by the run this log records."},"Logs_LogTraceSpan":{"title":"Log trace span","description":"One recursive operation span in a workflow execution trace.","type":"object","properties":{"id":{"type":"string","description":"Trace-span identifier."},"name":{"type":"string","description":"Trace-span name."},"type":{"type":"string","description":"Trace-span category."},"duration":{"type":"number","description":"Current trace-span duration in milliseconds."},"durationMs":{"type":"number","description":"Compatibility field for span duration in milliseconds. Read `duration` for current trace spans."},"startTime":{"type":"string","description":"ISO 8601 span start timestamp."},"endTime":{"type":"string","description":"ISO 8601 span end timestamp."},"status":{"type":"string","description":"Trace-span status."},"errorHandled":{"type":"boolean","description":"Whether the recorded error was handled."},"errorType":{"type":"string","description":"Recorded error type."},"errorMessage":{"type":"string","description":"Recorded error message."},"blockId":{"type":"string","description":"Workflow block associated with the span."},"input":{"description":"Input captured for the traced operation."},"output":{"description":"Output captured for the traced operation."},"tokens":{"anyOf":[{"type":"number","description":"Total tokens attributed to the span."},{"type":"object","properties":{"total":{"type":"number","description":"Total tokens."},"input":{"type":"number","description":"Input tokens."},"output":{"type":"number","description":"Output tokens."}},"additionalProperties":false}],"description":"Token usage attributed to the span."},"cost":{"type":"object","properties":{"total":{"type":"number","description":"Total span cost in USD."},"input":{"type":"number","description":"Input-token cost in USD."},"output":{"type":"number","description":"Output-token cost in USD."},"toolCost":{"type":"number","description":"Tool cost in USD."}},"additionalProperties":false,"description":"Cost attributed to the span."},"relativeStartMs":{"type":"number","description":"Offset from the root span in milliseconds."},"toolCalls":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Tool-call identifier."},"name":{"type":"string","description":"Invoked tool name."},"arguments":{"description":"Arguments supplied to the tool call."},"result":{"description":"Value returned by the tool call."},"error":{"type":"string","description":"Tool-call error message."},"startTime":{"type":"string","description":"ISO 8601 tool-call start timestamp."},"endTime":{"type":"string","description":"ISO 8601 tool-call end timestamp."},"duration":{"type":"number","description":"Tool-call duration in milliseconds."}},"additionalProperties":{"description":"Additional provider-specific tool-call metadata."}},"description":"Tool calls recorded by the span."},"children":{"type":"array","items":{"$ref":"#/components/schemas/Logs_LogTraceSpan"},"description":"Nested child trace spans."}},"required":["id","name","type"],"additionalProperties":{"description":"Additional provider-specific trace-span metadata."}},"Logs_V2LogListResponse":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Logs_V2LogListItem"},"description":"Items in the current page."},"nextCursor":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Opaque cursor for the next page. Send it back as `cursor`; `null` means there is nothing further to fetch. Never construct one yourself."}},"required":["data","nextCursor"],"additionalProperties":false,"title":"Log list response","description":"A cursor-paginated page of workflow execution logs.","examples":[{"data":[{"kind":"workflow","runId":"e4f8d2b6-9a1c-4e3d-8b7f-5c0a2d9e6f13","workflowId":"3b1f7c92-8d4e-4a6b-9c0d-5e2f8a714b36","deploymentVersionId":"dep_2c4e6a8b0d1f","status":"completed","level":"info","trigger":"api","startedAt":"2026-01-15T10:30:00.000Z","endedAt":"2026-01-15T10:30:01.250Z","totalDurationMs":1250,"cost":{"total":0.0032},"files":[{"id":"f1c3a7d0-4b52-4a8e-9f61-2d7c8b3e5a04","name":"summary.pdf","size":18422,"type":"application/pdf","downloadPath":"/api/v2/workflows/3b1f7c92-8d4e-4a6b-9c0d-5e2f8a714b36/runs/e4f8d2b6-9a1c-4e3d-8b7f-5c0a2d9e6f13/files/f1c3a7d0-4b52-4a8e-9f61-2d7c8b3e5a04"}]}],"nextCursor":"eyJzdGFydGVkQXQiOiIyMDI2LTAxLTE1VDEwOjMwOjAwMFoifQ=="}]},"Logs_V2LogDetail":{"type":"object","properties":{"runId":{"type":"string","description":"Unique run identifier."},"workflowId":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Workflow identifier, or null when unavailable."},"deploymentVersionId":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Deployment version identifier, or null when unavailable."},"status":{"type":"string","enum":["pending","running","paused","redacting","completed","failed","cancelled"],"description":"Current execution status, reported as persisted. `redacting` is transient while run output is scrubbed. `paused` is reported only when a resume attempt did not complete; a run held at a human-in-the-loop pause point reads `pending` here, and `paused` on the workflow run resources. Use those when the pause state matters."},"level":{"type":"string","description":"Log severity level."},"trigger":{"type":"string","description":"Trigger that started the run."},"startedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$","description":"ISO 8601 execution start timestamp."},"endedAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},{"type":"null"}],"description":"ISO 8601 execution end timestamp, or null while the run is active."},"totalDurationMs":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Total execution duration in milliseconds, or null while unavailable."},"files":{"anyOf":[{"type":"array","items":{"$ref":"#/components/schemas/Logs_V2LogFile"}},{"type":"null"}],"description":"Files the run produced, or null when none are recorded. Only the run's own output files appear; input attachments a caller supplied are addressed through the files API instead."},"executedByEmail":{"anyOf":[{"type":"string","format":"email","pattern":"^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"},{"type":"null"}],"description":"Email of the identity the run executed as: the caller for an interactive or personal-API-key run, and the workspace billing account for a schedule, webhook, deployed chat, or public API call. Null when the run failed before an identity was resolved."},"workflow":{"type":"object","properties":{"id":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Workflow identifier, or null when unavailable."},"name":{"type":"string","description":"Workflow name."},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Workflow description, or null when unset."},"folderPath":{"anyOf":[{"type":"string","title":"Folder path","description":"Canonical slash-prefixed folder path. `/` is the workspace root. Segments are percent-encoded, so a folder shown as \"New folder\" is `/New%20folder`: everything outside `A-Z a-z 0-9 - _ . ~` is escaped as uppercase hex, and only that exact encoding is accepted. A trailing slash, an empty segment, and a literal `.` or `..` segment are rejected. At most 64 segments and 4096 encoded bytes.","maxLength":4096},{"type":"null"}],"description":"Canonical folder path of the workflow, in the same form `folderPaths` accepts as a filter: `/` for a workflow at the workspace root. Null only when the path cannot be resolved — the folder has been deleted, or the workflow itself no longer exists."},"ownerEmail":{"anyOf":[{"type":"string","format":"email","pattern":"^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"},{"type":"null"}],"description":"Deprecated — use the run-level `executedByEmail` instead. Email of the workflow's current owner, or null when unavailable. This is a property of the workflow as it stands today, not of the run: it changes when workflow ownership is reassigned, and the owner is not the identity a background run executes as.","deprecated":true},"workspaceId":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Owning workspace identifier, or null when unavailable."},"createdAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},{"type":"null"}],"description":"ISO 8601 workflow creation timestamp, or null when unavailable."},"updatedAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},{"type":"null"}],"description":"ISO 8601 workflow update timestamp, or null when unavailable."},"deleted":{"type":"boolean","description":"Whether the workflow has been deleted."}},"required":["id","name","description","folderPath","ownerEmail","workspaceId","createdAt","updatedAt","deleted"],"additionalProperties":false,"description":"Workflow snapshot associated with the execution."},"workflowState":{"anyOf":[{"type":"object","properties":{},"additionalProperties":{"description":"One top-level snapshot section — `blocks`, `edges`, `loops`, `parallels`, or `variables` — passed through as stored."}},{"type":"null"}],"description":"Workflow graph captured for the run, or null if unavailable. Sensitive values are redacted to null; environment-variable references may be preserved."},"traceSpans":{"type":"array","items":{"$ref":"#/components/schemas/Logs_LogTraceSpan"},"description":"Materialized block-level execution trace spans."},"finalOutput":{"anyOf":[{"description":"Materialized final workflow output value."},{"type":"null"}],"description":"Materialized final workflow output, or null when none was produced."},"cost":{"anyOf":[{"type":"object","properties":{"total":{"type":"number","description":"Total execution cost in USD."},"items":{"anyOf":[{"type":"array","items":{"type":"object","properties":{"category":{"type":"string","enum":["fixed","model","tool"],"description":"What the line is for: the run's base fee (`fixed`), one model's inference (`model`), or one metered tool or integration call (`tool`)."},"description":{"type":"string","description":"Human-readable name of the billed item, such as the model or tool id."},"cost":{"type":"number","description":"Amount billed for this line, in USD."},"inputTokens":{"description":"Input tokens attributed to this line. Absent for lines that do not bill tokens.","type":"number"},"outputTokens":{"description":"Output tokens attributed to this line. Absent for lines that do not bill tokens.","type":"number"}},"required":["category","description","cost"],"additionalProperties":false,"description":"One billed line of a run, folded across every event that billed it."}},{"type":"null"}],"description":"Billed lines reconciling to `total`, or null when no itemized ledger exists for the run."}},"required":["total","items"],"additionalProperties":false},{"type":"null"}],"description":"Cost charged for the run, or null when unavailable."},"workflowInput":{"anyOf":[{"description":"Caller-supplied trigger payload for the run."},{"type":"null"}],"description":"Input the run was triggered with, or null when the run recorded none. Credential-bearing and PII-masked values are redacted the same way `finalOutput` is."},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$","description":"ISO 8601 log creation timestamp."}},"required":["runId","workflowId","deploymentVersionId","status","level","trigger","startedAt","endedAt","totalDurationMs","files","executedByEmail","workflow","workflowState","traceSpans","finalOutput","cost","workflowInput","createdAt"],"additionalProperties":false,"title":"Execution log detail","description":"Detailed workflow execution log including state, trace, output, and cost."},"Logs_V2LogDetailResponse":{"type":"object","properties":{"data":{"description":"Response data.","$ref":"#/components/schemas/Logs_V2LogDetail"}},"required":["data"],"additionalProperties":false,"title":"Log detail response","description":"The complete diagnostic representation of a workflow run.","examples":[{"data":{"runId":"e4f8d2b6-9a1c-4e3d-8b7f-5c0a2d9e6f13","workflowId":"3b1f7c92-8d4e-4a6b-9c0d-5e2f8a714b36","deploymentVersionId":"dep_2c4e6a8b0d1f","status":"completed","level":"info","trigger":"api","startedAt":"2026-01-15T10:30:00.000Z","endedAt":"2026-01-15T10:30:01.250Z","totalDurationMs":1250,"files":null,"executedByEmail":"billing@example.com","workflow":{"id":"3b1f7c92-8d4e-4a6b-9c0d-5e2f8a714b36","name":"Customer Support Agent","description":"Routes incoming support tickets and drafts responses","folderPath":"/","ownerEmail":"jane@example.com","workspaceId":"a91c4b2e-6d3f-4e8a-b5c7-0d9e2f1a8c64","createdAt":"2025-01-10T09:00:00.000Z","updatedAt":"2025-06-18T16:45:00.000Z","deleted":false},"workflowState":{"blocks":{},"edges":[]},"traceSpans":[],"finalOutput":{"result":"Hello, world!"},"cost":{"total":0.0032,"items":[{"category":"fixed","description":"Base execution charge","cost":0.001},{"category":"model","description":"gpt-5","cost":0.0022,"inputTokens":1840,"outputTokens":260}]},"workflowInput":{"ticketId":"T-4821"},"createdAt":"2026-01-15T10:30:00.000Z"}}]},"Logs_V2WorkflowLogStats":{"type":"object","properties":{"workflowId":{"type":"string","description":"Workflow identifier, or the literal `deleted` for the single series that collects runs whose workflow no longer exists."},"workflowName":{"type":"string","description":"Workflow name, or `Deleted Workflow`."},"segments":{"type":"array","items":{"$ref":"#/components/schemas/Logs_V2LogStatsSegment"},"description":"One entry per bucket, in order, including buckets with no runs."},"totalExecutions":{"type":"number","description":"Runs for this workflow across the window."},"totalSuccessful":{"type":"number","description":"Runs for this workflow that did not error."},"overallSuccessRate":{"type":"number","description":"Percentage of runs that did not error, from 0 to 100. 100 when there were no runs."}},"required":["workflowId","workflowName","segments","totalExecutions","totalSuccessful","overallSuccessRate"],"additionalProperties":false,"title":"Per-workflow log stats","description":"Bucketed run counts and success rate for one workflow."},"Logs_V2LogStatsSegment":{"type":"object","properties":{"timestamp":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$","description":"ISO 8601 start of the bucket."},"totalExecutions":{"type":"number","description":"Runs that started inside the bucket."},"successfulExecutions":{"type":"number","description":"Runs in the bucket that did not error."},"avgDurationMs":{"type":"number","description":"Mean duration of the bucket's runs in milliseconds, weighted by run count. Zero when no run in the bucket recorded a duration."}},"required":["timestamp","totalExecutions","successfulExecutions","avgDurationMs"],"additionalProperties":false,"title":"Log stats bucket","description":"Run counts and mean latency for one time bucket."},"Logs_V2LogStats":{"type":"object","properties":{"workflows":{"type":"array","items":{"$ref":"#/components/schemas/Logs_V2WorkflowLogStats"},"description":"Per-workflow series, ordered by error rate descending then by name, capped at 200 entries."},"workflowsTruncated":{"type":"boolean","description":"Whether `workflows` was cut to 200 entries. The workspace totals and `aggregateSegments` are computed from every workflow before the cut, so they stay exact either way."},"aggregateSegments":{"type":"array","items":{"$ref":"#/components/schemas/Logs_V2LogStatsSegment"},"description":"Workspace-wide totals per bucket, in the same order as each workflow series."},"totalRuns":{"type":"number","description":"Runs in the window across the whole workspace."},"totalErrors":{"type":"number","description":"Runs in the window that errored."},"avgLatency":{"type":"number","description":"Mean run duration in milliseconds across the window, weighted by run count."},"timeBounds":{"type":"object","properties":{"start":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$","description":"ISO 8601 start of the window."},"end":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$","description":"ISO 8601 end of the window."}},"required":["start","end"],"additionalProperties":false,"description":"Actual bucket window. Supplied bounds are exact. Without `startDate`, the left edge is the oldest match, or 24 hours before the right edge when no run matches. Without `endDate`, the right edge is at least now. `startDate` alone spans through now."},"segmentMs":{"type":"number","description":"Width of one bucket in milliseconds."}},"required":["workflows","workflowsTruncated","aggregateSegments","totalRuns","totalErrors","avgLatency","timeBounds","segmentMs"],"additionalProperties":false,"title":"Execution log statistics","description":"Bucketed success rate, error count, and latency for a workspace and each of its workflows."},"Logs_V2LogStatsResponse":{"type":"object","properties":{"data":{"description":"Response data.","$ref":"#/components/schemas/Logs_V2LogStats"}},"required":["data"],"additionalProperties":false,"title":"Log statistics response","description":"Bucketed success rate, error count, and latency for a workspace and its workflows.","examples":[{"data":{"workflows":[{"workflowId":"3b1f7c92-8d4e-4a6b-9c0d-5e2f8a714b36","workflowName":"Customer Support Agent","segments":[{"timestamp":"2026-01-15T10:00:00.000Z","totalExecutions":40,"successfulExecutions":38,"avgDurationMs":1180}],"totalExecutions":40,"totalSuccessful":38,"overallSuccessRate":95}],"workflowsTruncated":false,"aggregateSegments":[{"timestamp":"2026-01-15T10:00:00.000Z","totalExecutions":40,"successfulExecutions":38,"avgDurationMs":1180}],"totalRuns":40,"totalErrors":2,"avgLatency":1180,"timeBounds":{"start":"2026-01-15T10:00:00.000Z","end":"2026-01-15T22:00:00.000Z"},"segmentMs":600000}}]},"FilesAudit_V2ActionableForbiddenDetails":{"type":"object","properties":{"code":{"$ref":"#/components/schemas/FilesAudit_V2ForbiddenDetailCode"}},"required":["code"],"additionalProperties":{"description":"Additional context for this refusal."},"title":"Actionable forbidden details","description":"Machine-readable cause and optional context for an actionable `403` response."},"FilesAudit_V2ForbiddenDetailCode":{"type":"string","enum":["INSUFFICIENT_WORKSPACE_ROLE","PERSONAL_API_KEYS_DISABLED","WORKSPACE_KEY_OPERATION_NOT_PERMITTED","PRINCIPAL_KIND_NOT_PERMITTED","ORGANIZATION_MEMBERSHIP_REQUIRED","ORGANIZATION_ADMIN_REQUIRED","ENTERPRISE_PLAN_REQUIRED","ORGANIZATION_PLAN_REQUIRED","AUDIT_LOGS_DISABLED","SKILL_EDITOR_ACCESS_REQUIRED","SECRET_ADMIN_ACCESS_REQUIRED","WORKSPACE_RESOURCE_LIMIT_REACHED","PUBLIC_SHARING_NOT_ALLOWED","CREDENTIAL_ADMIN_ACCESS_REQUIRED","MCP_SERVER_URL_NOT_ALLOWED","WORKSPACE_PLAN_CAPABILITY_REQUIRED","CHAT_AUTH_MODE_NOT_PERMITTED","CONNECTOR_MANAGED_RESOURCE_READ_ONLY","PERMISSION_GROUP_CAPABILITY_BLOCKED","INTEGRATION_NOT_ALLOWED","INSUFFICIENT_SCOPE","SCIM_MANAGED_MEMBERSHIP"],"title":"Forbidden detail code","description":"Stable cause code for an actionable `403` response."},"FilesAudit_V2Error":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","description":"Stable machine-readable error code."},"message":{"type":"string","description":"Human-readable explanation of the error."},"details":{"description":"Structured error context whose keys depend on the error. Actionable `403` responses use the `V2ActionableForbiddenDetails` shape; validation failures may return issue arrays instead.","anyOf":[{"$ref":"#/components/schemas/FilesAudit_V2ActionableForbiddenDetails"},{"description":"Other structured context defined by the specific error."}]}},"required":["code","message"],"additionalProperties":false,"description":"Canonical error details."}},"required":["error"],"additionalProperties":false,"title":"v2 error response","description":"Canonical error envelope returned by the public v2 API.","examples":[{"error":{"code":"BAD_REQUEST","message":"The request is invalid."}}]},"FilesAudit_FolderPathInput":{"title":"Folder path input","description":"Folder path. A missing leading slash is normalized before validation. Segments are percent-encoded, so a folder shown as \"New folder\" is `/New%20folder`: everything outside `A-Z a-z 0-9 - _ . ~` is escaped as uppercase hex, and only that exact encoding is accepted. A trailing slash, an empty segment, and a literal `.` or `..` segment are rejected. At most 64 segments and 4096 encoded bytes.","maxLength":4096,"type":"string"},"FilesAudit_V2File":{"type":"object","properties":{"id":{"type":"string","description":"Unique file identifier.","examples":["wf_V1StGXR8z5jdHi6BmyT91"]},"webUrl":{"type":"string","format":"uri","description":"Canonical absolute URL for opening this resource in the Sim web application."},"name":{"type":"string","description":"Original file name.","examples":["data.csv"]},"size":{"type":"number","minimum":0,"description":"Size in bytes of the stored file. For a generated document (docx, pptx, pdf, xlsx) this is the generation source, not the rendered document, so it does not predict how many bytes downloading the file returns.","examples":[1024]},"type":{"type":"string","description":"MIME type of the stored file. For a generated document (docx, pptx, pdf, xlsx) this is the generation source type, not the rendered document type a download serves.","examples":["text/csv"]},"key":{"type":"string","description":"Storage key for the file.","examples":["workspace/example/data.csv"]},"folderPath":{"type":"string","title":"Folder path","description":"Canonical containing-folder path. `/` is the workspace root.","maxLength":4096},"uploadedByEmail":{"type":"string","format":"email","pattern":"^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$","description":"Current email address of the uploader.","examples":["jane@example.com"]},"uploadedAt":{"type":"string","description":"ISO 8601 timestamp when the file was uploaded.","format":"date-time","examples":["2026-01-15T10:30:00Z"]},"updatedAt":{"type":"string","description":"ISO 8601 timestamp of the last content or metadata write.","format":"date-time","examples":["2026-01-15T10:30:00Z"]},"deletedAt":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"ISO 8601 timestamp when the file was archived by deleting it, or null while the file is active. Only an archived-scope file list returns files with a non-null value.","format":"date-time","examples":["2026-01-16T09:00:00Z"]}},"required":["id","webUrl","name","size","type","key","folderPath","uploadedByEmail","uploadedAt","updatedAt","deletedAt"],"additionalProperties":false,"title":"Workspace file","description":"A workspace file exposed by the public v2 API."},"FilesAudit_V2FileListResponse":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/FilesAudit_V2File"},"description":"Items in the current page."},"nextCursor":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Opaque cursor for the next page. Send it back as `cursor`; `null` means there is nothing further to fetch. Never construct one yourself."}},"required":["data","nextCursor"],"additionalProperties":false,"title":"File list response","description":"A cursor-paginated page of workspace files.","examples":[{"data":[{"id":"wf_V1StGXR8z5jdHi6BmyT91","webUrl":"https://www.sim.ai/workspace/a91c4b2e-6d3f-4e8a-b5c7-0d9e2f1a8c64/files/wf_V1StGXR8z5jdHi6BmyT91","name":"data.csv","size":1024,"type":"text/csv","key":"workspace/example/data.csv","folderPath":"/Engineering","uploadedByEmail":"jane@example.com","uploadedAt":"2026-01-15T10:30:00Z","updatedAt":"2026-01-15T10:30:00Z","deletedAt":null}],"nextCursor":null}]},"FilesAudit_V2FileResponse":{"type":"object","properties":{"data":{"description":"Response data.","$ref":"#/components/schemas/FilesAudit_V2File"}},"required":["data"],"additionalProperties":false,"title":"File response","description":"A single workspace file.","examples":[{"data":{"id":"wf_V1StGXR8z5jdHi6BmyT91","webUrl":"https://www.sim.ai/workspace/a91c4b2e-6d3f-4e8a-b5c7-0d9e2f1a8c64/files/wf_V1StGXR8z5jdHi6BmyT91","name":"data.csv","size":1024,"type":"text/csv","key":"workspace/example/data.csv","folderPath":"/Engineering","uploadedByEmail":"jane@example.com","uploadedAt":"2026-01-15T10:30:00Z","updatedAt":"2026-01-15T10:30:00Z","deletedAt":null}}]},"FilesAudit_CreateFileRequest":{"type":"object","properties":{"workspaceId":{"type":"string","minLength":1,"maxLength":128,"description":"Workspace in which to create the file."},"name":{"type":"string","minLength":1,"maxLength":255,"description":"File name, including its extension. Path separators and dot segments are rejected."},"contentType":{"type":"string","minLength":1,"maxLength":255,"description":"MIME type. When omitted, it is inferred from the file extension."},"folderPath":{"description":"Canonical containing-folder path. Omit for the workspace root.","$ref":"#/components/schemas/FilesAudit_FolderPathInput"},"content":{"default":"","description":"Initial file content. Omit or send an empty string for a zero-byte file. The 70,000,000-character bound guards the JSON envelope; the decoded bytes must be at most 50 MiB, and a longer base64 payload is rejected with `413`. Use an upload session for anything larger.","type":"string","maxLength":70000000},"encoding":{"default":"utf-8","description":"Encoding of the content field.","type":"string","enum":["utf-8","base64"]}},"required":["workspaceId","name"],"additionalProperties":false,"title":"Create file request","description":"Inline content and placement for a new workspace file."},"FilesAudit_V2FileUpload":{"type":"object","properties":{"id":{"type":"string","description":"Upload session identifier."},"status":{"type":"string","enum":["uploading","completing","finalizing","completed","failed","aborting","aborted","expired"],"description":"Current upload session status."},"name":{"type":"string","description":"File name supplied when the session was created."},"contentType":{"type":"string","description":"MIME type supplied when the session was created."},"size":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Expected file size in bytes."},"expiresAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$","description":"ISO 8601 time when the upload session expires."},"error":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Failure message, or null when no failure has occurred."},"file":{"anyOf":[{"$ref":"#/components/schemas/FilesAudit_V2File"},{"type":"null"}],"description":"Registered file after finalization, or null before finalization completes."}},"required":["id","status","name","contentType","size","expiresAt","error","file"],"additionalProperties":false,"title":"File upload session","description":"Current state of a resumable workspace-file upload session."},"FilesAudit_V2PutUploadTransfer":{"type":"object","properties":{"method":{"type":"string","const":"put","description":"Upload strategy discriminator."},"url":{"type":"string","format":"uri","description":"Signed URL to which the file bytes are uploaded. Upload bytes with `PUT` and exactly the supplied headers; never construct or modify the signed URL. Treat any `2xx` as success. Sim-hosted URLs return an empty `204` and v2 JSON errors. Object-storage URLs may return `200` or `201` and provider-specific errors, often XML."},"headers":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"string"},"description":"Headers that must be included with the upload request."},"expiresAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$","description":"ISO 8601 expiration time for this signed URL. This is the URL's own expiry and is normally earlier than the upload session's expiresAt: the session stays open for later part, status, completion, and abort requests, but the bytes must be uploaded before this time. Once it passes, the storage provider rejects the upload and a new upload session must be created."}},"required":["method","url","headers","expiresAt"],"additionalProperties":false,"title":"Direct upload transfer","description":"Instructions for uploading bytes to one signed URL."},"FilesAudit_V2MultipartUploadTransfer":{"type":"object","properties":{"method":{"type":"string","const":"multipart","description":"Upload strategy discriminator."},"partSize":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991,"description":"Required size of each non-final part in bytes."},"partCount":{"type":"integer","exclusiveMinimum":0,"maximum":640,"description":"Total number of upload parts."}},"required":["method","partSize","partCount"],"additionalProperties":false,"title":"Multipart upload transfer","description":"Instructions for splitting bytes into a multipart upload."},"FilesAudit_V2CreateFileUploadData":{"type":"object","properties":{"session":{"description":"New upload session.","$ref":"#/components/schemas/FilesAudit_V2FileUpload"},"uploadToken":{"type":"string","minLength":1,"description":"Signed control token required by later upload-session requests."},"transfer":{"oneOf":[{"$ref":"#/components/schemas/FilesAudit_V2PutUploadTransfer"},{"$ref":"#/components/schemas/FilesAudit_V2MultipartUploadTransfer"}],"description":"Instructions for transferring the file bytes."}},"required":["session","uploadToken","transfer"],"additionalProperties":false,"title":"Create file upload data","description":"A new file upload session, its control token, and byte-transfer instructions."},"FilesAudit_CreateFileUploadResponse":{"type":"object","properties":{"data":{"description":"Response data.","$ref":"#/components/schemas/FilesAudit_V2CreateFileUploadData"}},"required":["data"],"additionalProperties":false,"title":"Create file upload response","description":"Upload session, signed control token, and transfer strategy."},"FilesAudit_CreateFileUploadRequest":{"type":"object","properties":{"workspaceId":{"type":"string","minLength":1,"maxLength":128,"description":"Workspace in which the file will be registered."},"name":{"type":"string","minLength":1,"maxLength":255,"description":"File name, including its extension."},"contentType":{"type":"string","minLength":1,"maxLength":255,"description":"MIME type of the uploaded file."},"size":{"type":"integer","minimum":0,"maximum":5368709120,"description":"Exact file size in bytes."},"folderPath":{"description":"Canonical destination folder path. Omit for the workspace root.","$ref":"#/components/schemas/FilesAudit_FolderPathInput"}},"required":["workspaceId","name","contentType","size"],"additionalProperties":false,"title":"Create file upload request","description":"File metadata required to create an upload session."},"FilesAudit_FileUploadResponse":{"type":"object","properties":{"data":{"description":"Response data.","$ref":"#/components/schemas/FilesAudit_V2FileUpload"}},"required":["data"],"additionalProperties":false,"title":"File upload response","description":"Current upload-session state."},"FilesAudit_V2UploadPartUrl":{"type":"object","properties":{"partNumber":{"type":"integer","minimum":1,"maximum":9007199254740991,"description":"Multipart part number."},"url":{"type":"string","format":"uri","description":"Signed URL for this upload part. Upload bytes with `PUT` and exactly the supplied headers; never construct or modify the signed URL. Treat any `2xx` as success. Sim-hosted URLs return an empty `204` and v2 JSON errors. Object-storage URLs may return `200` or `201` and provider-specific errors, often XML. Do not retain part `ETag` values; after every part succeeds, call the completion endpoint without a request body."},"headers":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"string"},"description":"Headers that must be included with the part upload."},"expiresAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$","description":"ISO 8601 expiration time for the signed URL."}},"required":["partNumber","url","headers","expiresAt"],"additionalProperties":false,"title":"Upload part URL","description":"A signed URL and required headers for one multipart upload part."},"FilesAudit_V2PartUrlsData":{"type":"object","properties":{"parts":{"maxItems":100,"type":"array","items":{"$ref":"#/components/schemas/FilesAudit_V2UploadPartUrl"},"description":"Signed URLs for requested parts."}},"required":["parts"],"additionalProperties":false,"title":"Upload part URLs","description":"Signed transfer URLs for the requested multipart upload parts."},"FilesAudit_CreateFileUploadPartUrlsResponse":{"type":"object","properties":{"data":{"description":"Response data.","$ref":"#/components/schemas/FilesAudit_V2PartUrlsData"}},"required":["data"],"additionalProperties":false,"title":"Create upload part URLs response","description":"Signed multipart upload URLs."},"FilesAudit_CreateFileUploadPartUrlsRequest":{"type":"object","properties":{"partNumbers":{"minItems":1,"maxItems":100,"type":"array","items":{"type":"integer","minimum":1,"maximum":9007199254740991},"description":"Multipart part numbers for which signed URLs should be created."}},"required":["partNumbers"],"additionalProperties":false,"title":"Create upload part URLs request","description":"Multipart part numbers requiring signed URLs.","examples":[{"partNumbers":[1,2]}]},"FilesAudit_V2FileText":{"type":"object","properties":{"fileId":{"type":"string","minLength":1,"maxLength":128,"pattern":"^[A-Za-z0-9_-]+$","description":"File the text was extracted from."},"name":{"type":"string","description":"File name, including its extension."},"type":{"type":"string","description":"Stored MIME type of the source file."},"text":{"type":"string","description":"Extracted text."},"truncated":{"type":"boolean","description":"True when a parser limit stopped extraction before the input was exhausted."},"degraded":{"type":"boolean","description":"True when text extraction did not fully succeed and `text` may be incomplete or synthesized from the raw bytes rather than read from the document. Never treat degraded text as authoritative content."},"degradedReason":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Why extraction degraded, or null when it did not."},"charCount":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Length of `text` in characters."},"byteCount":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Source bytes read from storage before extraction."},"lineRange":{"description":"Present when `offset` or `limit` narrowed the response. `totalLines` is what separates a file that ended from a window that stopped early.","type":"object","properties":{"offset":{"type":"integer","minimum":1,"maximum":9007199254740991,"description":"First line returned, 1-based."},"lineCount":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Lines returned."},"totalLines":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Lines the whole file holds."},"totalLinesExact":{"type":"boolean","description":"False when text extraction was truncated, so `totalLines` counts only the extracted prefix and is not the end of the file."}},"required":["offset","lineCount","totalLines","totalLinesExact"],"additionalProperties":false}},"required":["fileId","name","type","text","truncated","degraded","degradedReason","charCount","byteCount"],"additionalProperties":false,"title":"Extracted file text","description":"Text extracted from a workspace file, with extraction-quality flags."},"FilesAudit_FileTextResponse":{"type":"object","properties":{"data":{"description":"Response data.","$ref":"#/components/schemas/FilesAudit_V2FileText"}},"required":["data"],"additionalProperties":false,"title":"File text response","description":"Text extracted from a workspace file."},"FilesAudit_V2FileUnzipResult":{"type":"object","properties":{"folderPath":{"type":"string","title":"Folder path","description":"Canonical path of the folder the archive was unpacked into. May differ from the archive name when a sibling folder already claimed it.","maxLength":4096},"extractedFileCount":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Number of files written into the destination folder."},"skippedFileCount":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Number of archive entries skipped as unsafe, empty, or noise."}},"required":["folderPath","extractedFileCount","skippedFileCount"],"additionalProperties":false,"title":"Unzip result","description":"Outcome of unzipping a workspace archive into a folder."},"FilesAudit_FileUnzipResponse":{"type":"object","properties":{"data":{"description":"Response data.","$ref":"#/components/schemas/FilesAudit_V2FileUnzipResult"}},"required":["data"],"additionalProperties":false,"title":"Unzip file response","description":"Counts and destination folder for the unpacked archive."},"FilesAudit_UnzipFileBody":{"type":"object","properties":{"workspaceId":{"type":"string","minLength":1,"maxLength":128,"description":"Workspace that owns the archive."}},"required":["workspaceId"],"additionalProperties":false,"title":"Unzip file body","description":"Workspace scope for the archive."},"FilesAudit_V2DeleteFileResult":{"type":"object","properties":{"id":{"type":"string","description":"Identifier of the deleted file."},"deleted":{"type":"boolean","const":true,"description":"Confirms that the file was deleted."}},"required":["id","deleted"],"additionalProperties":false,"title":"Delete file result","description":"File deletion acknowledgement."},"FilesAudit_V2DeleteFileResponse":{"type":"object","properties":{"data":{"description":"Response data.","$ref":"#/components/schemas/FilesAudit_V2DeleteFileResult"}},"required":["data"],"additionalProperties":false,"title":"Delete file response","description":"Deletion confirmation for one file."},"FilesAudit_RenameFileRequest":{"type":"object","properties":{"workspaceId":{"type":"string","minLength":1,"maxLength":128,"description":"Workspace that owns the file."},"name":{"type":"string","minLength":1,"maxLength":255,"description":"New file name, including its extension."}},"required":["workspaceId","name"],"additionalProperties":false,"title":"Rename file request","description":"Workspace scope and new file name.","examples":[{"workspaceId":"a91c4b2e-6d3f-4e8a-b5c7-0d9e2f1a8c64","name":"renamed.csv"}]},"FilesAudit_V2RestoreFileResponse":{"type":"object","properties":{"data":{"description":"Response data.","$ref":"#/components/schemas/FilesAudit_V2File"}},"required":["data"],"additionalProperties":false,"title":"Restore file response","description":"The restored workspace file, at the root and under its post-restore name.","examples":[{"data":{"id":"wf_V1StGXR8z5jdHi6BmyT91","webUrl":"https://www.sim.ai/workspace/a91c4b2e-6d3f-4e8a-b5c7-0d9e2f1a8c64/files/wf_V1StGXR8z5jdHi6BmyT91","name":"data_restored.csv","size":1024,"type":"text/csv","key":"workspace/example/data.csv","folderPath":"/","uploadedByEmail":"jane@example.com","uploadedAt":"2026-01-15T10:30:00Z","updatedAt":"2026-01-15T10:30:00Z","deletedAt":null}}]},"FilesAudit_RestoreFileRequest":{"type":"object","properties":{"workspaceId":{"type":"string","minLength":1,"maxLength":128,"description":"Workspace that owns the archived file."}},"required":["workspaceId"],"additionalProperties":false,"title":"Restore file request","description":"Workspace scope for the archived file.","examples":[{"workspaceId":"a91c4b2e-6d3f-4e8a-b5c7-0d9e2f1a8c64"}]},"FilesAudit_V2FileShare":{"type":"object","properties":{"id":{"type":"string","description":"Unique share identifier."},"token":{"type":"string","description":"Server-generated token embedded in the public share URL."},"url":{"type":"string","format":"uri","description":"Public share URL.","examples":["https://www.sim.ai/f/share-token-example"]},"isActive":{"type":"boolean","description":"Whether the public share currently resolves."},"resourceType":{"type":"string","enum":["file","folder"],"description":"Kind of resource being shared."},"resourceId":{"type":"string","description":"Identifier of the shared resource."},"authType":{"type":"string","enum":["public","password","email","sso"],"description":"How access to the share is gated."},"hasPassword":{"type":"boolean","description":"Whether a password is stored for this share."},"allowedEmails":{"type":"array","items":{"type":"string","minLength":1,"maxLength":320},"description":"Allowed addresses or @domain patterns for email and SSO shares."}},"required":["id","token","url","isActive","resourceType","resourceId","authType","hasPassword","allowedEmails"],"additionalProperties":false,"title":"File share","description":"Public-safe share configuration for a workspace file."},"FilesAudit_V2FileMetadata":{"type":"object","properties":{"id":{"type":"string","description":"Unique file identifier.","examples":["wf_V1StGXR8z5jdHi6BmyT91"]},"webUrl":{"type":"string","format":"uri","description":"Canonical absolute URL for opening this resource in the Sim web application."},"name":{"type":"string","description":"Original file name.","examples":["data.csv"]},"size":{"type":"number","minimum":0,"description":"Size in bytes of the stored file. For a generated document (docx, pptx, pdf, xlsx) this is the generation source, not the rendered document, so it does not predict how many bytes downloading the file returns.","examples":[1024]},"type":{"type":"string","description":"MIME type of the stored file. For a generated document (docx, pptx, pdf, xlsx) this is the generation source type, not the rendered document type a download serves.","examples":["text/csv"]},"key":{"type":"string","description":"Storage key for the file.","examples":["workspace/example/data.csv"]},"folderPath":{"type":"string","title":"Folder path","description":"Canonical containing-folder path. `/` is the workspace root.","maxLength":4096},"uploadedByEmail":{"type":"string","format":"email","pattern":"^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$","description":"Current email address of the uploader.","examples":["jane@example.com"]},"uploadedAt":{"type":"string","description":"ISO 8601 timestamp when the file was uploaded.","format":"date-time","examples":["2026-01-15T10:30:00Z"]},"updatedAt":{"type":"string","description":"ISO 8601 timestamp of the last content or metadata write.","format":"date-time","examples":["2026-01-15T10:30:00Z"]},"deletedAt":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"ISO 8601 timestamp when the file was archived by deleting it, or null while the file is active. Only an archived-scope file list returns files with a non-null value.","format":"date-time","examples":["2026-01-16T09:00:00Z"]},"share":{"anyOf":[{"$ref":"#/components/schemas/FilesAudit_V2FileShare"},{"type":"null"}],"description":"Current public-share state, or null when the file has never been shared."}},"required":["id","webUrl","name","size","type","key","folderPath","uploadedByEmail","uploadedAt","updatedAt","deletedAt","share"],"additionalProperties":false,"title":"File metadata","description":"Workspace file metadata and current public-share configuration."},"FilesAudit_V2FileMetadataResponse":{"type":"object","properties":{"data":{"description":"Response data.","$ref":"#/components/schemas/FilesAudit_V2FileMetadata"}},"required":["data"],"additionalProperties":false,"title":"File metadata response","description":"File metadata enriched with its current nullable public-share state.","examples":[{"data":{"id":"wf_V1StGXR8z5jdHi6BmyT91","webUrl":"https://www.sim.ai/workspace/a91c4b2e-6d3f-4e8a-b5c7-0d9e2f1a8c64/files/wf_V1StGXR8z5jdHi6BmyT91","name":"data.csv","size":1024,"type":"text/csv","key":"workspace/example/data.csv","folderPath":"/Engineering","uploadedByEmail":"jane@example.com","uploadedAt":"2026-01-15T10:30:00Z","updatedAt":"2026-01-15T10:30:00Z","deletedAt":null,"share":null}},{"data":{"id":"wf_V1StGXR8z5jdHi6BmyT91","webUrl":"https://www.sim.ai/workspace/a91c4b2e-6d3f-4e8a-b5c7-0d9e2f1a8c64/files/wf_V1StGXR8z5jdHi6BmyT91","name":"data.csv","size":1024,"type":"text/csv","key":"workspace/example/data.csv","folderPath":"/Engineering","uploadedByEmail":"jane@example.com","uploadedAt":"2026-01-15T10:30:00Z","updatedAt":"2026-01-15T10:30:00Z","deletedAt":null,"share":{"id":"shr_8Hf3kL9wQ2mNpXr6Tz1Vb","token":"share-token-example","url":"https://www.sim.ai/f/share-token-example","isActive":true,"resourceType":"file","resourceId":"wf_V1StGXR8z5jdHi6BmyT91","authType":"public","hasPassword":false,"allowedEmails":[]}}}]},"FilesAudit_V2AuditLogEntry":{"type":"object","properties":{"id":{"type":"string","description":"Unique audit-log entry identifier.","examples":["audit_2c3d4e5f6g"]},"workspaceId":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Workspace where the action occurred, or null for organization-level actions."},"actorName":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Display name of the person who performed the action."},"actorEmail":{"anyOf":[{"type":"string","format":"email","pattern":"^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"},{"type":"null"}],"description":"Email address of the person who performed the action."},"action":{"type":"string","description":"Action that was performed.","examples":["file.uploaded"]},"resourceType":{"type":"string","description":"Type of resource affected by the action.","examples":["file"]},"resourceId":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Affected resource ID. Null for folder events, which identify folders by path."},"resourceName":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Display name of the affected resource."},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Human-readable description of the action."},"metadata":{"description":"Additional JSON details specific to the action."},"createdAt":{"type":"string","description":"ISO 8601 timestamp when the action occurred.","format":"date-time","examples":["2026-01-15T10:30:00Z"]}},"required":["id","workspaceId","actorName","actorEmail","action","resourceType","resourceId","resourceName","description","metadata","createdAt"],"additionalProperties":false,"title":"Audit-log entry","description":"Public enterprise audit-log entry with privacy-sensitive request data omitted."},"FilesAudit_V2AuditLogListResponse":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/FilesAudit_V2AuditLogEntry"},"description":"Items in the current page."},"nextCursor":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Opaque cursor for the next page. Send it back as `cursor`; `null` means there is nothing further to fetch. Never construct one yourself."}},"required":["data","nextCursor"],"additionalProperties":false,"title":"Audit-log list response","description":"A cursor-paginated page of audit-log entries.","examples":[{"data":[{"id":"audit_2c3d4e5f6g","workspaceId":"a91c4b2e-6d3f-4e8a-b5c7-0d9e2f1a8c64","actorName":"Jane Smith","actorEmail":"jane@example.com","action":"file.uploaded","resourceType":"file","resourceId":"wf_V1StGXR8z5jdHi6BmyT91","resourceName":"data.csv","description":"Uploaded file \"data.csv\" via API","metadata":{"fileSize":1024,"fileType":"text/csv"},"createdAt":"2026-01-15T10:30:00Z"}],"nextCursor":null}]},"FilesAudit_V2AuditLogResponse":{"type":"object","properties":{"data":{"description":"Response data.","$ref":"#/components/schemas/FilesAudit_V2AuditLogEntry"}},"required":["data"],"additionalProperties":false,"title":"Audit-log response","description":"A single audit-log entry.","examples":[{"data":{"id":"audit_2c3d4e5f6g","workspaceId":"a91c4b2e-6d3f-4e8a-b5c7-0d9e2f1a8c64","actorName":"Jane Smith","actorEmail":"jane@example.com","action":"file.uploaded","resourceType":"file","resourceId":"wf_V1StGXR8z5jdHi6BmyT91","resourceName":"data.csv","description":"Uploaded file \"data.csv\" via API","metadata":{"fileSize":1024,"fileType":"text/csv"},"createdAt":"2026-01-15T10:30:00Z"}}]},"FilesAudit_V2MoveFileItemsResult":{"type":"object","properties":{"movedItems":{"type":"object","properties":{"files":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Number of files moved."}},"required":["files"],"additionalProperties":false,"description":"Counts of file items moved by the request."}},"required":["movedItems"],"additionalProperties":false,"title":"Move file items result","description":"Counts of workspace file items moved by the request."},"FilesAudit_V2MoveFileItemsResponse":{"type":"object","properties":{"data":{"description":"Response data.","$ref":"#/components/schemas/FilesAudit_V2MoveFileItemsResult"}},"required":["data"],"additionalProperties":false,"title":"Move files response","description":"Count of files moved by the operation.","examples":[{"data":{"movedItems":{"files":1}}}]},"FilesAudit_MoveFileItemsRequest":{"type":"object","properties":{"workspaceId":{"type":"string","minLength":1,"maxLength":128,"description":"Workspace containing the files."},"fileIds":{"minItems":1,"maxItems":1000,"type":"array","items":{"type":"string","minLength":1},"description":"File identifiers to update."},"targetFolderPath":{"description":"Destination folder path. Omit to move files to the workspace root.","$ref":"#/components/schemas/FilesAudit_FolderPathInput"}},"required":["workspaceId","fileIds"],"additionalProperties":false,"title":"Move files request","description":"Files and destination selected for a bulk move."},"FilesAudit_V2GetFileShareResponse":{"type":"object","properties":{"data":{"anyOf":[{"$ref":"#/components/schemas/FilesAudit_V2FileShare"},{"type":"null"}],"description":"Response data."}},"required":["data"],"additionalProperties":false,"title":"Get file share response","description":"Current public-share state for a file.","examples":[{"data":{"id":"shr_8Hf3kL9wQ2mNpXr6Tz1Vb","token":"share-token-example","url":"https://www.sim.ai/f/share-token-example","isActive":true,"resourceType":"file","resourceId":"wf_V1StGXR8z5jdHi6BmyT91","authType":"public","hasPassword":false,"allowedEmails":[]}},{"data":null}]},"FilesAudit_V2UpsertFileShareResponse":{"type":"object","properties":{"data":{"description":"Response data.","$ref":"#/components/schemas/FilesAudit_V2FileShare"}},"required":["data"],"additionalProperties":false,"title":"Upsert file share response","description":"Updated public-share state for a file.","examples":[{"data":{"id":"shr_8Hf3kL9wQ2mNpXr6Tz1Vb","token":"share-token-example","url":"https://www.sim.ai/f/share-token-example","isActive":true,"resourceType":"file","resourceId":"wf_V1StGXR8z5jdHi6BmyT91","authType":"public","hasPassword":false,"allowedEmails":[]}}]},"FilesAudit_UpsertFileShareRequest":{"type":"object","properties":{"workspaceId":{"type":"string","minLength":1,"maxLength":128,"description":"Workspace that owns the file."},"isActive":{"type":"boolean","description":"Whether the share should resolve. Disabling preserves the token and the whole access configuration, so re-enabling restores the share as it was; enabling rewrites the credentials the resulting mode does not use."},"authType":{"description":"How access to the share is gated. The stored mode is kept when omitted. Enabling `public` clears the stored password and empties `allowedEmails`; `password` empties `allowedEmails`; `email` and `sso` clear the stored password.","type":"string","enum":["public","password","email","sso"]},"password":{"description":"Password for a password-gated share. Kept when omitted; enabling `password` with neither a supplied nor a stored password is a 400.","type":"string","minLength":15,"maxLength":1024},"allowedEmails":{"description":"Allowed addresses or `@domain` patterns for email and SSO shares. Kept when omitted; enabling `email` or `sso` with an empty resulting list is a 400.","maxItems":200,"type":"array","items":{"type":"string","minLength":1,"maxLength":320}}},"required":["workspaceId","isActive"],"additionalProperties":false,"title":"Upsert file share request","description":"Desired public-share state and access policy.","examples":[{"workspaceId":"a91c4b2e-6d3f-4e8a-b5c7-0d9e2f1a8c64","isActive":true,"authType":"public"},{"workspaceId":"a91c4b2e-6d3f-4e8a-b5c7-0d9e2f1a8c64","isActive":false}]},"FilesAudit_V2EditedFile":{"type":"object","properties":{"file":{"description":"The file after the edit.","$ref":"#/components/schemas/FilesAudit_V2File"},"lineCount":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Lines the file holds after the edit."}},"required":["file","lineCount"],"additionalProperties":false,"title":"Edited file","description":"A workspace file after an in-place content edit."},"FilesAudit_V2EditedFileResponse":{"type":"object","properties":{"data":{"description":"Response data.","$ref":"#/components/schemas/FilesAudit_V2EditedFile"}},"required":["data"],"additionalProperties":false,"title":"Edited file response","description":"A workspace file after an in-place content edit.","examples":[{"data":{"file":{"id":"wf_V1StGXR8z5jdHi6BmyT91","webUrl":"https://www.sim.ai/workspace/a91c4b2e-6d3f-4e8a-b5c7-0d9e2f1a8c64/files/wf_V1StGXR8z5jdHi6BmyT91","name":"data.csv","size":1024,"type":"text/csv","key":"workspace/example/data.csv","folderPath":"/Engineering","uploadedByEmail":"jane@example.com","uploadedAt":"2026-01-15T10:30:00Z","updatedAt":"2026-01-15T10:30:00Z","deletedAt":null},"lineCount":5}}]},"FilesAudit_EditFileContentRequest":{"type":"object","properties":{"workspaceId":{"type":"string","minLength":1,"maxLength":128,"description":"Workspace that owns the file."},"edit":{"oneOf":[{"type":"object","properties":{"mode":{"type":"string","const":"search_replace","description":"Replace exact text."},"search":{"type":"string","minLength":1,"description":"Exact text to replace, matched verbatim. It must appear once unless replaceAll is true."},"content":{"type":"string","description":"Text to put in its place. An empty string deletes the matched text."},"replaceAll":{"description":"Replace every non-overlapping match. Defaults to false.","type":"boolean"}},"required":["mode","search","content"],"additionalProperties":false},{"type":"object","properties":{"mode":{"type":"string","const":"replace_between","description":"Replace content between two complete-line anchors."},"beforeAnchor":{"type":"string","minLength":1,"description":"Boundary line before the replaced content. This line remains."},"afterAnchor":{"type":"string","minLength":1,"description":"Boundary line after the replaced content. This line remains."},"content":{"type":"string","description":"Replacement text. An empty string clears the interior."},"occurrence":{"description":"Matching anchor occurrence, starting at 1. Defaults to 1.","type":"integer","minimum":1,"maximum":9007199254740991}},"required":["mode","beforeAnchor","afterAnchor","content"],"additionalProperties":false},{"type":"object","properties":{"mode":{"type":"string","const":"insert_after","description":"Insert content after a complete-line anchor."},"anchor":{"type":"string","minLength":1,"description":"Complete line after which content is inserted."},"content":{"type":"string","minLength":1,"description":"Text to insert."},"occurrence":{"description":"Matching anchor occurrence, starting at 1. Defaults to 1.","type":"integer","minimum":1,"maximum":9007199254740991}},"required":["mode","anchor","content"],"additionalProperties":false},{"type":"object","properties":{"mode":{"type":"string","const":"delete_between","description":"Delete from one complete-line anchor to another."},"startAnchor":{"type":"string","minLength":1,"description":"First line to delete. This start anchor is removed."},"endAnchor":{"type":"string","minLength":1,"description":"Ending boundary line. This end anchor remains."},"occurrence":{"description":"Matching anchor occurrence, starting at 1. Defaults to 1.","type":"integer","minimum":1,"maximum":9007199254740991}},"required":["mode","startAnchor","endAnchor"],"additionalProperties":false}],"description":"One exact or anchor-based edit: search_replace, replace_between, insert_after, or delete_between."}},"required":["workspaceId","edit"],"additionalProperties":false,"title":"Edit file content request","description":"Workspace scope and the change to apply.","examples":[{"workspaceId":"a91c4b2e-6d3f-4e8a-b5c7-0d9e2f1a8c64","edit":{"mode":"search_replace","search":"- based in NYC","content":"- based in SF"}},{"workspaceId":"a91c4b2e-6d3f-4e8a-b5c7-0d9e2f1a8c64","edit":{"mode":"insert_after","anchor":"## Preferences","content":"- prefers async updates"}}]},"FilesAudit_V2FileSearchResults":{"type":"object","properties":{"results":{"type":"array","items":{"type":"object","properties":{"fileId":{"type":"string","minLength":1,"maxLength":128,"pattern":"^[A-Za-z0-9_-]+$","description":"File the line belongs to."},"lineNumber":{"type":"integer","minimum":1,"maximum":9007199254740991,"description":"1-based line the match sits on."},"text":{"type":"string","description":"The matching line."}},"required":["fileId","lineNumber","text"],"additionalProperties":false},"description":"Matching lines, one entry per line."},"count":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Number of results returned."},"truncated":{"type":"boolean","description":"True when more matches exist beyond `maxResults`."},"complete":{"type":"boolean","description":"True when no files in the searched scope have pending or failed indexing. Missing matches remain inconclusive unless this is true and both `indexStatus.skippedFiles` and `indexStatus.partialFiles` are zero."},"indexStatus":{"type":"object","properties":{"readyFiles":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Files whose current revision is indexed and searchable."},"pendingFiles":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Files not yet indexed at their current revision. Their content was not searched."},"failedFiles":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Files whose indexing failed. Their content was not searched."},"skippedFiles":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Files deliberately not indexed, such as binaries and files above the size ceiling."},"partialFiles":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Files indexed only in part, so matches beyond the indexed portion are not found."}},"required":["readyFiles","pendingFiles","failedFiles","skippedFiles","partialFiles"],"additionalProperties":false,"description":"Index coverage across the searched scope."}},"required":["results","count","truncated","complete","indexStatus"],"additionalProperties":false,"title":"File search results","description":"Matching lines from indexed workspace file content, with index coverage."},"FilesAudit_V2FileSearchResultsResponse":{"type":"object","properties":{"data":{"description":"Response data.","$ref":"#/components/schemas/FilesAudit_V2FileSearchResults"}},"required":["data"],"additionalProperties":false,"title":"File search results response","description":"Matching lines from indexed workspace file content.","examples":[{"data":{"results":[{"fileId":"wf_V1StGXR8z5jdHi6BmyT91","lineNumber":4,"text":"- based in NYC"}],"count":1,"truncated":false,"complete":true,"indexStatus":{"readyFiles":12,"pendingFiles":0,"failedFiles":0,"skippedFiles":0,"partialFiles":0}}}]},"FilesAudit_UpdateFileContentRequest":{"type":"object","properties":{"workspaceId":{"type":"string","minLength":1,"maxLength":128,"description":"Workspace that owns the file."},"content":{"type":"string","maxLength":70000000,"description":"Complete replacement content for the file. The 70,000,000-character bound guards the JSON envelope; the decoded bytes must be at most 50 MiB, and a longer base64 payload is rejected with `413`."},"encoding":{"default":"utf-8","description":"Encoding of the content field.","type":"string","enum":["utf-8","base64"]}},"required":["workspaceId","content"],"additionalProperties":false,"title":"Update file content request","description":"Workspace scope and complete replacement content.","examples":[{"workspaceId":"a91c4b2e-6d3f-4e8a-b5c7-0d9e2f1a8c64","content":"replacement text"}]},"FilesAudit_V2BulkDeleteFilesResult":{"type":"object","properties":{"deletedItems":{"type":"object","properties":{"files":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Number of files deleted."}},"required":["files"],"additionalProperties":false,"description":"Counts of file items deleted by the request."}},"required":["deletedItems"],"additionalProperties":false,"title":"Bulk delete files result","description":"Counts of workspace files deleted by the request."},"FilesAudit_BulkDeleteFilesResponse":{"type":"object","properties":{"data":{"description":"Response data.","$ref":"#/components/schemas/FilesAudit_V2BulkDeleteFilesResult"}},"required":["data"],"additionalProperties":false,"title":"Bulk delete files response","description":"Count of files deleted by the operation.","examples":[{"data":{"deletedItems":{"files":1}}}]},"FilesAudit_BulkDeleteFilesRequest":{"type":"object","properties":{"workspaceId":{"type":"string","minLength":1,"maxLength":128,"description":"Workspace containing the files."},"fileIds":{"minItems":1,"maxItems":1000,"type":"array","items":{"type":"string","minLength":1},"description":"File identifiers to update."}},"required":["workspaceId","fileIds"],"additionalProperties":false,"title":"Bulk delete files request","description":"Workspace and files selected for deletion.","examples":[{"workspaceId":"a91c4b2e-6d3f-4e8a-b5c7-0d9e2f1a8c64","fileIds":["wf_V1StGXR8z5jdHi6BmyT91"]}]},"FilesAudit_V2Folder":{"type":"object","properties":{"name":{"type":"string","description":"Folder name."},"path":{"type":"string","title":"Non-root folder path","description":"Canonical folder path used as the public folder identifier.","maxLength":4096},"parentPath":{"type":"string","title":"Folder path","description":"Canonical parent path; `/` is the root.","maxLength":4096},"createdAt":{"type":"string","description":"ISO 8601 timestamp when the folder was created.","format":"date-time"},"updatedAt":{"type":"string","description":"ISO 8601 timestamp when the folder was last updated.","format":"date-time"}},"required":["name","path","parentPath","createdAt","updatedAt"],"additionalProperties":false,"title":"Folder","description":"A canonical workspace folder."},"FilesAudit_FileFolderListResponse":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/FilesAudit_V2Folder"},"description":"Items in the current page."},"nextCursor":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Always `null` — this list has no `cursor` or `limit` param and returns its whole bounded set in one page. Present so the list can gain pages later without a shape change."}},"required":["data","nextCursor"],"additionalProperties":false,"title":"File folder list response","description":"Workspace file folders in the current page."},"FilesAudit_V2FileFolderRestore":{"type":"object","properties":{"folder":{"description":"The restored folder.","$ref":"#/components/schemas/FilesAudit_V2Folder"},"restoredItems":{"type":"object","properties":{"files":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Files restored inside the folder tree."},"folders":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Folders restored, including the one addressed."}},"required":["files","folders"],"additionalProperties":false,"description":"What the restore brought back."}},"required":["folder","restoredItems"],"additionalProperties":false,"title":"Folder restore result","description":"The restored folder and the counts of items it brought back."},"FilesAudit_FileFolderRestoreResponse":{"type":"object","properties":{"data":{"description":"Response data.","$ref":"#/components/schemas/FilesAudit_V2FileFolderRestore"}},"required":["data"],"additionalProperties":false,"title":"Folder restore response","description":"The restored folder and the counts of items it brought back."},"FilesAudit_NonRootFolderPathInput":{"title":"Non-root folder path input","description":"Non-root folder path. A missing leading slash is normalized before validation. Segments are percent-encoded, so a folder shown as \"New folder\" is `/New%20folder`: everything outside `A-Z a-z 0-9 - _ . ~` is escaped as uppercase hex, and only that exact encoding is accepted. A trailing slash, an empty segment, and a literal `.` or `..` segment are rejected. At most 64 segments and 4096 encoded bytes.","maxLength":4096,"type":"string"},"FilesAudit_RestoreFileFolderRequest":{"type":"object","properties":{"workspaceId":{"type":"string","minLength":1,"maxLength":128,"description":"Workspace that owns the archived folder."},"path":{"description":"Path of the archived folder to restore, as reported by an archived-scope folder list.","$ref":"#/components/schemas/FilesAudit_NonRootFolderPathInput"}},"required":["workspaceId","path"],"additionalProperties":false,"title":"Restore file folder request","description":"Workspace scope and archived folder path."},"FilesAudit_FileFolderResponse":{"type":"object","properties":{"data":{"description":"Response data.","$ref":"#/components/schemas/FilesAudit_V2Folder"}},"required":["data"],"additionalProperties":false,"title":"File folder response","description":"A single workspace file folder."},"FilesAudit_CreateFileFolderRequest":{"type":"object","properties":{"workspaceId":{"type":"string","minLength":1,"maxLength":128,"description":"Workspace in which to create the folder."},"path":{"description":"Path of the folder to create.","$ref":"#/components/schemas/FilesAudit_NonRootFolderPathInput"}},"required":["workspaceId","path"],"additionalProperties":false,"title":"Create file folder request","description":"Workspace and canonical path for a new folder."},"FilesAudit_RelocateFileFolderRequest":{"type":"object","properties":{"workspaceId":{"type":"string","minLength":1,"maxLength":128,"description":"Workspace containing the folder."},"path":{"description":"Current folder path.","$ref":"#/components/schemas/FilesAudit_NonRootFolderPathInput"},"destinationPath":{"description":"New full path for the folder and its descendants.","$ref":"#/components/schemas/FilesAudit_NonRootFolderPathInput"}},"required":["workspaceId","path","destinationPath"],"additionalProperties":false,"title":"Relocate file folder request","description":"Current and destination canonical paths for a folder."},"FilesAudit_V2DeleteFileFolderData":{"type":"object","properties":{"path":{"type":"string","title":"Folder path","description":"Deleted folder path.","maxLength":4096},"deleted":{"type":"boolean","const":true,"description":"Confirms that the folder was deleted."},"deletedItems":{"type":"object","properties":{"folders":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Number of folders deleted."},"files":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Number of files deleted."}},"required":["folders","files"],"additionalProperties":false,"description":"Counts of folders and files deleted by the request."}},"required":["path","deleted","deletedItems"],"additionalProperties":false,"title":"Delete file folder data","description":"File-folder deletion acknowledgement and deletion counts."},"FilesAudit_DeleteFileFolderResponse":{"type":"object","properties":{"data":{"description":"Response data.","$ref":"#/components/schemas/FilesAudit_V2DeleteFileFolderData"}},"required":["data"],"additionalProperties":false,"title":"Delete file folder response","description":"Folder deletion confirmation and deleted item counts."},"Tables_V2ActionableForbiddenDetails":{"type":"object","properties":{"code":{"$ref":"#/components/schemas/Tables_V2ForbiddenDetailCode"}},"required":["code"],"additionalProperties":{"description":"Additional context for this refusal."},"title":"Actionable forbidden details","description":"Machine-readable cause and optional context for an actionable `403` response."},"Tables_V2ForbiddenDetailCode":{"type":"string","enum":["INSUFFICIENT_WORKSPACE_ROLE","PERSONAL_API_KEYS_DISABLED","WORKSPACE_KEY_OPERATION_NOT_PERMITTED","PRINCIPAL_KIND_NOT_PERMITTED","ORGANIZATION_MEMBERSHIP_REQUIRED","ORGANIZATION_ADMIN_REQUIRED","ENTERPRISE_PLAN_REQUIRED","ORGANIZATION_PLAN_REQUIRED","AUDIT_LOGS_DISABLED","SKILL_EDITOR_ACCESS_REQUIRED","SECRET_ADMIN_ACCESS_REQUIRED","WORKSPACE_RESOURCE_LIMIT_REACHED","PUBLIC_SHARING_NOT_ALLOWED","CREDENTIAL_ADMIN_ACCESS_REQUIRED","MCP_SERVER_URL_NOT_ALLOWED","WORKSPACE_PLAN_CAPABILITY_REQUIRED","CHAT_AUTH_MODE_NOT_PERMITTED","CONNECTOR_MANAGED_RESOURCE_READ_ONLY","PERMISSION_GROUP_CAPABILITY_BLOCKED","INTEGRATION_NOT_ALLOWED","INSUFFICIENT_SCOPE","SCIM_MANAGED_MEMBERSHIP"],"title":"Forbidden detail code","description":"Stable cause code for an actionable `403` response."},"Tables_V2Error":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","description":"Stable machine-readable error code."},"message":{"type":"string","description":"Human-readable explanation of the error."},"details":{"description":"Structured error context whose keys depend on the error. Actionable `403` responses use the `V2ActionableForbiddenDetails` shape; validation failures may return issue arrays instead.","anyOf":[{"$ref":"#/components/schemas/Tables_V2ActionableForbiddenDetails"},{"description":"Other structured context defined by the specific error."}]}},"required":["code","message"],"additionalProperties":false,"description":"Canonical error details."}},"required":["error"],"additionalProperties":false,"title":"v2 error response","description":"Canonical error envelope returned by the public v2 API.","examples":[{"error":{"code":"BAD_REQUEST","message":"The request is invalid."}}]},"Tables_FolderPathInput":{"title":"Folder path input","description":"Folder path. A missing leading slash is normalized before validation. Segments are percent-encoded, so a folder shown as \"New folder\" is `/New%20folder`: everything outside `A-Z a-z 0-9 - _ . ~` is escaped as uppercase hex, and only that exact encoding is accepted. A trailing slash, an empty segment, and a literal `.` or `..` segment are rejected. At most 64 segments and 4096 encoded bytes.","maxLength":4096,"type":"string"},"Tables_V2ApiTable":{"type":"object","properties":{"id":{"type":"string","description":"Unique table identifier."},"webUrl":{"type":"string","format":"uri","description":"Canonical absolute URL for opening this resource in the Sim web application."},"name":{"type":"string","description":"Table name."},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Table description, or null when none is set."},"ownerEmail":{"type":"string","format":"email","pattern":"^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$","description":"Current email address of the table owner.","examples":["owner@example.com"]},"schema":{"type":"object","properties":{"columns":{"type":"array","items":{"type":"object","properties":{"id":{"description":"Stable server-assigned column identifier.","type":"string"},"name":{"type":"string","minLength":1,"maxLength":50,"pattern":"^[A-Za-z_][A-Za-z0-9_]*$","description":"Column name used as the public row-data key."},"type":{"type":"string","enum":["string","number","currency","boolean","date","json","select"],"description":"Data type of values stored in the column."},"required":{"default":false,"description":"Whether inserts require a value for this column.","type":"boolean"},"unique":{"default":false,"description":"Whether values must be unique across table rows.","type":"boolean"},"workflowGroupId":{"description":"Workflow group whose output populates this column.","type":"string"},"options":{"description":"Options declared for a select column.","maxItems":100,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","minLength":1,"description":"Stable select-option identifier."},"name":{"type":"string","minLength":1,"maxLength":100,"description":"Display name of the select option."}},"required":["id","name"],"additionalProperties":false}},"multiple":{"description":"Whether a select column accepts multiple options.","type":"boolean"},"currencyCode":{"description":"ISO 4217 code for a currency column, normalized to uppercase.","type":"string","pattern":"^[A-Za-z]{3}$"}},"required":["name","type","required","unique"],"additionalProperties":false,"description":"A typed column in a table schema."},"description":"Table column definitions."}},"required":["columns"],"additionalProperties":false,"description":"Typed table schema."},"rowCount":{"type":"number","description":"Current number of rows in the table."},"maxRows":{"type":"number","description":"Maximum rows allowed by the workspace plan."},"folderPath":{"type":"string","title":"Folder path","description":"Canonical slash-prefixed folder path. `/` is the workspace root. Segments are percent-encoded, so a folder shown as \"New folder\" is `/New%20folder`: everything outside `A-Z a-z 0-9 - _ . ~` is escaped as uppercase hex, and only that exact encoding is accepted. A trailing slash, an empty segment, and a literal `.` or `..` segment are rejected. At most 64 segments and 4096 encoded bytes.","maxLength":4096},"locks":{"type":"object","properties":{"schemaLocked":{"type":"boolean","description":"Whether column-schema changes are locked."},"insertLocked":{"type":"boolean","description":"Whether row insertion is locked."},"updateLocked":{"type":"boolean","description":"Whether row updates are locked."},"deleteLocked":{"type":"boolean","description":"Whether row and table deletion is locked."}},"required":["schemaLocked","insertLocked","updateLocked","deleteLocked"],"additionalProperties":false,"description":"Read-only table governance locks."},"job":{"anyOf":[{"$ref":"#/components/schemas/Tables_V2TableJobState"},{"type":"null"}],"description":"Current background job, or null when idle."},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$","description":"ISO 8601 timestamp when the table was created."},"updatedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$","description":"ISO 8601 timestamp when the table was last modified."}},"required":["id","webUrl","name","description","ownerEmail","schema","rowCount","maxRows","folderPath","locks","job","createdAt","updatedAt"],"additionalProperties":false,"title":"Table","description":"A user-defined table with typed columns and governance state."},"Tables_V2TableJobState":{"type":"object","properties":{"id":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Background job identifier, or null when unavailable."},"type":{"anyOf":[{"type":"string","enum":["import","delete","export","backfill","update"]},{"type":"null"}],"description":"Kind of background table work."},"status":{"type":"string","enum":["running","ready","failed","canceled"],"description":"Current background job state."},"rowsProcessed":{"type":"number","description":"Number of rows processed by the job."},"error":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Failure reason, or null when the job has not failed."}},"required":["id","type","status","rowsProcessed","error"],"additionalProperties":false,"title":"Table job state","description":"Current background work associated with a table."},"Tables_V2TableListResponse":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Tables_V2ApiTable"},"description":"Items in the current page."},"nextCursor":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Opaque cursor for the next page. Send it back as `cursor`; `null` means there is nothing further to fetch. Never construct one yourself."}},"required":["data","nextCursor"],"additionalProperties":false,"title":"Table list response","description":"A cursor-paginated page of tables."},"Tables_V2CreateTableResponse":{"type":"object","properties":{"data":{"description":"Response data.","$ref":"#/components/schemas/Tables_V2ApiTable"}},"required":["data"],"additionalProperties":false,"title":"Create table response","description":"The created table."},"Tables_CreateTableRequest":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":128,"pattern":"^[A-Za-z_][A-Za-z0-9_]*$","description":"Table name."},"description":{"description":"Optional table description.","type":"string","maxLength":500},"workspaceId":{"type":"string","minLength":1,"maxLength":128,"description":"Unique workspace identifier."},"schema":{"type":"object","properties":{"columns":{"minItems":1,"maxItems":1000,"type":"array","items":{"type":"object","properties":{"id":{"description":"Optional client-provided column identifier.","type":"string"},"name":{"type":"string","minLength":1,"maxLength":50,"pattern":"^[A-Za-z_][A-Za-z0-9_]*$","description":"Column name."},"type":{"type":"string","enum":["string","number","currency","boolean","date","json","select"],"description":"Column data type."},"required":{"description":"Whether inserts must supply a value for this column.","type":"boolean"},"unique":{"description":"Whether values in the column must be unique.","type":"boolean"},"options":{"description":"Select options for select-type columns.","maxItems":100,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","minLength":1,"description":"Stable select-option identifier."},"name":{"type":"string","minLength":1,"maxLength":100,"description":"Display name of the select option."}},"required":["id","name"]}},"multiple":{"description":"Whether a select column accepts multiple values.","type":"boolean"},"currencyCode":{"description":"ISO 4217 code for currency columns.","type":"string","pattern":"^[A-Za-z]{3}$"}},"required":["name","type"],"additionalProperties":false},"description":"Initial table columns."}},"required":["columns"],"additionalProperties":false,"description":"Initial table column definitions."},"folderPath":{"description":"Folder in which to create the table.","$ref":"#/components/schemas/Tables_FolderPathInput"}},"required":["name","workspaceId","schema"],"additionalProperties":false,"title":"Create table request","description":"Workspace, table metadata, folder placement, and typed columns."},"Tables_V2TableResponse":{"type":"object","properties":{"data":{"description":"Response data.","$ref":"#/components/schemas/Tables_V2ApiTable"}},"required":["data"],"additionalProperties":false,"title":"Table response","description":"A single table."},"Tables_V2DeleteTableData":{"type":"object","properties":{"id":{"type":"string","description":"Identifier of the deleted table."},"deleted":{"type":"boolean","const":true,"description":"Confirms that the table was deleted."}},"required":["id","deleted"],"additionalProperties":false,"title":"Delete table data","description":"Table deletion acknowledgement."},"Tables_V2DeleteTableResponse":{"type":"object","properties":{"data":{"description":"Response data.","$ref":"#/components/schemas/Tables_V2DeleteTableData"}},"required":["data"],"additionalProperties":false,"title":"Delete table response","description":"Table deletion acknowledgement."},"Tables_V2UpdateTableResponse":{"type":"object","properties":{"data":{"description":"Response data.","$ref":"#/components/schemas/Tables_V2ApiTable"}},"required":["data"],"additionalProperties":false,"title":"Update table response","description":"The updated table."},"Tables_UpdateTableRequest":{"type":"object","properties":{"workspaceId":{"type":"string","minLength":1,"maxLength":128,"description":"Unique workspace identifier."},"name":{"description":"Replacement table name.","type":"string","minLength":1,"maxLength":128,"pattern":"^[A-Za-z_][A-Za-z0-9_]*$"},"description":{"anyOf":[{"description":"Optional table description.","type":"string","maxLength":500},{"type":"null"}],"description":"Replacement table description, or null to clear it."},"folderPath":{"$ref":"#/components/schemas/Tables_FolderPathInput"}},"required":["workspaceId"],"additionalProperties":false,"title":"Update table request","description":"Workspace scope and one or more table metadata or placement changes."},"Tables_V2TableColumnsData":{"type":"object","properties":{"columns":{"type":"array","items":{"type":"object","properties":{"id":{"description":"Stable server-assigned column identifier.","type":"string"},"name":{"type":"string","minLength":1,"maxLength":50,"pattern":"^[A-Za-z_][A-Za-z0-9_]*$","description":"Column name used as the public row-data key."},"type":{"type":"string","enum":["string","number","currency","boolean","date","json","select"],"description":"Data type of values stored in the column."},"required":{"default":false,"description":"Whether inserts require a value for this column.","type":"boolean"},"unique":{"default":false,"description":"Whether values must be unique across table rows.","type":"boolean"},"workflowGroupId":{"description":"Workflow group whose output populates this column.","type":"string"},"options":{"description":"Options declared for a select column.","maxItems":100,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","minLength":1,"description":"Stable select-option identifier."},"name":{"type":"string","minLength":1,"maxLength":100,"description":"Display name of the select option."}},"required":["id","name"],"additionalProperties":false}},"multiple":{"description":"Whether a select column accepts multiple options.","type":"boolean"},"currencyCode":{"description":"ISO 4217 code for a currency column, normalized to uppercase.","type":"string","pattern":"^[A-Za-z]{3}$"}},"required":["name","type","required","unique"],"additionalProperties":false,"description":"A typed column in a table schema."},"description":"Current table columns."}},"required":["columns"],"additionalProperties":false,"title":"Table columns data","description":"The table column list after a schema mutation."},"Tables_V2TableColumnsResponse":{"type":"object","properties":{"data":{"description":"Response data.","$ref":"#/components/schemas/Tables_V2TableColumnsData"}},"required":["data"],"additionalProperties":false,"title":"Table columns response","description":"The table column list after a schema mutation."},"Tables_AddTableColumnRequest":{"type":"object","properties":{"workspaceId":{"type":"string","minLength":1,"maxLength":128,"description":"Workspace that owns the table."},"column":{"type":"object","properties":{"id":{"description":"Optional client-provided column identifier.","type":"string"},"name":{"type":"string","minLength":1,"maxLength":50,"pattern":"^[A-Za-z_][A-Za-z0-9_]*$","description":"Column name."},"type":{"type":"string","enum":["string","number","currency","boolean","date","json","select"],"description":"Column data type."},"required":{"description":"Whether inserts must supply a value for this column.","type":"boolean"},"unique":{"description":"Whether values in the column must be unique.","type":"boolean"},"options":{"description":"Select options for select-type columns.","maxItems":100,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","minLength":1,"description":"Stable select-option identifier."},"name":{"type":"string","minLength":1,"maxLength":100,"description":"Display name of the select option."}},"required":["id","name"]}},"multiple":{"description":"Whether a select column accepts multiple values.","type":"boolean"},"currencyCode":{"description":"ISO 4217 code for currency columns.","type":"string","pattern":"^[A-Za-z]{3}$"},"position":{"description":"Zero-based insertion position for the column.","type":"integer","minimum":0,"maximum":9007199254740991}},"required":["name","type"],"additionalProperties":false,"description":"Column definition to add."}},"required":["workspaceId","column"],"additionalProperties":false,"title":"Add table column request","description":"Workspace scope and the typed column to add.","examples":[{"workspaceId":"a91c4b2e-6d3f-4e8a-b5c7-0d9e2f1a8c64","column":{"name":"plan","type":"string"}}]},"Tables_UpdateTableColumnRequest":{"type":"object","properties":{"workspaceId":{"type":"string","minLength":1,"maxLength":128,"description":"Workspace that owns the table."},"columnName":{"type":"string","minLength":1,"maxLength":50,"pattern":"^[A-Za-z_][A-Za-z0-9_]*$","description":"Current name of the column to update."},"updates":{"type":"object","properties":{"name":{"description":"Replacement column name.","type":"string","minLength":1,"maxLength":50,"pattern":"^[A-Za-z_][A-Za-z0-9_]*$"},"type":{"description":"Replacement column data type.","type":"string","enum":["string","number","currency","boolean","date","json","select"]},"required":{"description":"Whether inserts must supply a value for this column.","type":"boolean"},"unique":{"description":"Whether values in the column must be unique.","type":"boolean"},"options":{"description":"Replacement select options for select-type columns.","maxItems":100,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","minLength":1,"description":"Stable select-option identifier."},"name":{"type":"string","minLength":1,"maxLength":100,"description":"Display name of the select option."}},"required":["id","name"]}},"multiple":{"description":"Whether a select column accepts multiple values.","type":"boolean"},"currencyCode":{"description":"Replacement ISO 4217 code for a currency column.","type":"string","pattern":"^[A-Za-z]{3}$"}},"additionalProperties":false,"description":"Mutable column fields."}},"required":["workspaceId","columnName","updates"],"additionalProperties":false,"title":"Update table column request","description":"Workspace scope, current column name, and fields to update.","examples":[{"workspaceId":"a91c4b2e-6d3f-4e8a-b5c7-0d9e2f1a8c64","columnName":"plan","updates":{"name":"subscriptionPlan"}}]},"Tables_DeleteTableColumnRequest":{"type":"object","properties":{"workspaceId":{"type":"string","minLength":1,"maxLength":128,"description":"Unique workspace identifier."},"columnName":{"type":"string","minLength":1,"maxLength":50,"pattern":"^[A-Za-z_][A-Za-z0-9_]*$","description":"Name of the column to delete."}},"required":["workspaceId","columnName"],"additionalProperties":false,"title":"Delete table column request","description":"Workspace scope and column name to delete.","examples":[{"workspaceId":"a91c4b2e-6d3f-4e8a-b5c7-0d9e2f1a8c64","columnName":"legacyStatus"}]},"Tables_V2ApiTableRow":{"type":"object","properties":{"id":{"type":"string","description":"Unique row identifier."},"data":{"description":"Row cells keyed by column name.","$ref":"#/components/schemas/Tables_V2TableRowData"},"runState":{"description":"Per-workflow-group run state keyed by group identifier. Present only when the read requested `includeRunState`.","type":"object","propertyNames":{"type":"string"},"additionalProperties":{"$ref":"#/components/schemas/Tables_V2TableRowRunState"}},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$","description":"ISO 8601 timestamp when the row was created."},"updatedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$","description":"ISO 8601 timestamp when the row was last modified."}},"required":["id","data","createdAt","updatedAt"],"additionalProperties":false,"title":"Table row","description":"A table row with user-defined cell values."},"Tables_V2TableRowData":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"description":"User-defined cell value interpreted by its column definition."},"description":"User-defined row cells keyed by column name.","title":"Table row data","examples":[{"email":"jane@example.com","name":"Jane Doe","age":30}]},"Tables_V2TableRowRunState":{"type":"object","properties":{"status":{"type":"string","description":"Lifecycle state of the most recent run for this cell: `pending`, `queued`, `running`, `completed`, `error`, or `canceled`."},"executionId":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Workflow execution identifier, or null before a worker claimed the cell."},"workflowId":{"type":"string","description":"Workflow the group runs for this cell."},"error":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Failure reason, or null when the run did not fail."},"runningBlockIds":{"type":"array","items":{"type":"string"},"description":"Block identifiers currently mid-execution."},"blockErrors":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"string"},"description":"Per-block failure messages keyed by block identifier."},"canceledAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},{"type":"null"}],"description":"ISO 8601 timestamp when the cell was canceled, or null."}},"required":["status","executionId","workflowId","error","runningBlockIds","blockErrors","canceledAt"],"additionalProperties":false,"title":"Table row run state","description":"Run outcome for one workflow group on one row."},"Tables_V2TableRowListResponse":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Tables_V2ApiTableRow"},"description":"Items in the current page."},"nextCursor":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Opaque cursor for the next page. Send it back as `cursor`; `null` means there is nothing further to fetch. Never construct one yourself."}},"required":["data","nextCursor"],"additionalProperties":false,"title":"Table row list response","description":"A cursor-paginated page of table rows."},"Tables_V2CreateSingleTableRowResponse":{"type":"object","properties":{"data":{"description":"Response data.","$ref":"#/components/schemas/Tables_V2ApiTableRow"}},"required":["data"],"additionalProperties":false,"title":"Create single table row response","description":"Response returned after inserting one table row."},"Tables_V2CreateBatchTableRowsResponse":{"type":"object","properties":{"data":{"description":"Response data.","$ref":"#/components/schemas/Tables_V2BatchInsertRowsData"}},"required":["data"],"additionalProperties":false,"title":"Create batch table rows response","description":"Response returned after inserting a batch of table rows."},"Tables_V2BatchInsertRowsData":{"type":"object","properties":{"rows":{"type":"array","items":{"$ref":"#/components/schemas/Tables_V2ApiTableRow"},"description":"Inserted table rows."},"insertedCount":{"type":"number","description":"Number of inserted rows."}},"required":["rows","insertedCount"],"additionalProperties":false,"title":"Batch insert rows data","description":"Rows created by a batch insert."},"Tables_V2CreateTableRowsResponse":{"anyOf":[{"$ref":"#/components/schemas/Tables_V2CreateSingleTableRowResponse"},{"$ref":"#/components/schemas/Tables_V2CreateBatchTableRowsResponse"}],"title":"Create table rows response","description":"The inserted single row or inserted batch result."},"Tables_CreateTableRowsRequest":{"anyOf":[{"type":"object","properties":{"workspaceId":{"type":"string","minLength":1,"maxLength":128,"description":"Unique workspace identifier."},"rows":{"minItems":1,"maxItems":1000,"type":"array","items":{"$ref":"#/components/schemas/Tables_V2TableRowData"},"description":"Rows to insert, with cells keyed by column name."}},"required":["workspaceId","rows"],"additionalProperties":false},{"type":"object","properties":{"workspaceId":{"type":"string","minLength":1,"maxLength":128,"description":"Unique workspace identifier."},"data":{"description":"Row cells keyed by column name.","$ref":"#/components/schemas/Tables_V2TableRowData"},"afterRowId":{"description":"Row after which to insert the new row.","type":"string","minLength":1},"beforeRowId":{"description":"Row before which to insert the new row.","type":"string","minLength":1}},"required":["workspaceId","data"],"additionalProperties":false}],"title":"Create table rows request","description":"A single row or bounded row batch keyed by column name.","examples":[{"workspaceId":"a91c4b2e-6d3f-4e8a-b5c7-0d9e2f1a8c64","data":{"email":"jane@example.com","status":"active"}}]},"Tables_V2UpdateRowsData":{"type":"object","properties":{"updatedCount":{"type":"number","description":"Number of updated rows."},"updatedRowIds":{"type":"array","items":{"type":"string"},"description":"Identifiers of updated rows."}},"required":["updatedCount","updatedRowIds"],"additionalProperties":false,"title":"Update rows data","description":"Result of a bulk row update."},"Tables_V2UpdateTableRowsResponse":{"type":"object","properties":{"data":{"description":"Response data.","$ref":"#/components/schemas/Tables_V2UpdateRowsData"}},"required":["data"],"additionalProperties":false,"title":"Update table rows response","description":"Updated row count and identifiers."},"Tables_TablePredicate":{"title":"Table predicate","description":"Recursive non-empty `all`/`any` groups containing groups or conditions; the root cannot be a condition. Limits: 100 members per group, 10 levels, and 500 nodes. The negating operators include nulls and absent cells, multi-select included; combine with `isNotNull` or `isNotEmpty` to exclude them. Pattern operators use `*` as the only wildcard; `%`, `_`, and backslash are literal. Select operators: single-select uses `eq`/`ne`/`in`/`nin`; multi-select uses `contains`/`ncontains`; option names resolve to IDs. Full operand rules are documented on `op`.","type":"object","oneOf":[{"type":"object","description":"Matches a row when every member matches.","properties":{"all":{"type":"array","minItems":1,"maxItems":100,"description":"Members combined with AND. An empty group is rejected, because it would compile to no filter at all.","items":{"description":"A nested group, or a single condition.","anyOf":[{"$ref":"#/components/schemas/Tables_TablePredicate"},{"type":"object","title":"Predicate condition","description":"One column comparison.","properties":{"field":{"type":"string","minLength":1,"maxLength":128,"description":"Column name to compare, or one of the system fields `id`, `createdAt`, `updatedAt`."},"op":{"type":"string","enum":["eq","ne","gt","gte","lt","lte","in","nin","contains","ncontains","startsWith","endsWith","like","ilike","nlike","nilike","isEmpty","isNotEmpty","isNull","isNotNull"],"description":"Operators: `eq`, `ne`, `gt`, `gte`, `lt`, `lte`; `in`/`nin` take arrays; `isEmpty`, `isNotEmpty`, `isNull`, and `isNotNull` take no operand. Text operators are `contains`, `ncontains`, `startsWith`, `endsWith`, `like`, `nlike`, `ilike`, and `nilike`. Contains variants are case-insensitive and literal; `like`/`nlike` are case-sensitive, while `ilike`/`nilike` are case-insensitive. `*` is the only wildcard; `%`, `_`, and backslash are literal. For `select` columns, single-select accepts `eq`, `ne`, `in`, `nin`; multi-select accepts `contains`, `ncontains`. Option names resolve to IDs."},"value":{"description":"Operand. A scalar for the comparison operators, an array of at most 1000 entries for `in`/`nin`, a pattern for the matching operators, and omitted for `isEmpty`/`isNotEmpty`/`isNull`/`isNotNull`."}},"required":["field","op"],"additionalProperties":false}]}}},"required":["all"],"additionalProperties":false},{"type":"object","description":"Matches a row when at least one member matches.","properties":{"any":{"type":"array","minItems":1,"maxItems":100,"description":"Members combined with OR. An empty group is rejected, because it would compile to no filter at all.","items":{"description":"A nested group, or a single condition.","anyOf":[{"$ref":"#/components/schemas/Tables_TablePredicate"},{"type":"object","title":"Predicate condition","description":"One column comparison.","properties":{"field":{"type":"string","minLength":1,"maxLength":128,"description":"Column name to compare, or one of the system fields `id`, `createdAt`, `updatedAt`."},"op":{"type":"string","enum":["eq","ne","gt","gte","lt","lte","in","nin","contains","ncontains","startsWith","endsWith","like","ilike","nlike","nilike","isEmpty","isNotEmpty","isNull","isNotNull"],"description":"Operators: `eq`, `ne`, `gt`, `gte`, `lt`, `lte`; `in`/`nin` take arrays; `isEmpty`, `isNotEmpty`, `isNull`, and `isNotNull` take no operand. Text operators are `contains`, `ncontains`, `startsWith`, `endsWith`, `like`, `nlike`, `ilike`, and `nilike`. Contains variants are case-insensitive and literal; `like`/`nlike` are case-sensitive, while `ilike`/`nilike` are case-insensitive. `*` is the only wildcard; `%`, `_`, and backslash are literal. For `select` columns, single-select accepts `eq`, `ne`, `in`, `nin`; multi-select accepts `contains`, `ncontains`. Option names resolve to IDs."},"value":{"description":"Operand. A scalar for the comparison operators, an array of at most 1000 entries for `in`/`nin`, a pattern for the matching operators, and omitted for `isEmpty`/`isNotEmpty`/`isNull`/`isNotNull`."}},"required":["field","op"],"additionalProperties":false}]}}},"required":["any"],"additionalProperties":false}]},"Tables_UpdateTableRowsRequest":{"type":"object","properties":{"workspaceId":{"type":"string","minLength":1,"maxLength":128,"description":"Unique workspace identifier."},"filter":{"$ref":"#/components/schemas/Tables_TablePredicate"},"data":{"description":"Row-data patch applied to every matching row.","$ref":"#/components/schemas/Tables_V2TableRowData"},"limit":{"description":"Maximum matching rows to update.","type":"integer","minimum":1,"maximum":1000}},"required":["workspaceId","filter","data"],"additionalProperties":false,"title":"Update table rows request","description":"Workspace scope, typed predicate, and row-data patch."},"Tables_V2DeleteRowsData":{"type":"object","properties":{"deletedCount":{"type":"number","description":"Number of deleted rows."},"deletedRowIds":{"type":"array","items":{"type":"string"},"description":"Identifiers of deleted rows."},"requestedCount":{"description":"Number of row identifiers requested.","type":"number"},"missingRowIds":{"description":"Requested row identifiers not found.","type":"array","items":{"type":"string"}}},"required":["deletedCount","deletedRowIds"],"additionalProperties":false,"title":"Delete rows data","description":"Result of a bulk row deletion."},"Tables_V2DeleteTableRowsResponse":{"type":"object","properties":{"data":{"description":"Response data.","$ref":"#/components/schemas/Tables_V2DeleteRowsData"}},"required":["data"],"additionalProperties":false,"title":"Delete table rows response","description":"Deleted row counts, identifiers, and optional missing identifiers."},"Tables_DeleteTableRowsRequest":{"type":"object","properties":{"workspaceId":{"type":"string","minLength":1,"maxLength":128,"description":"Unique workspace identifier."},"filter":{"$ref":"#/components/schemas/Tables_TablePredicate"},"limit":{"description":"Maximum matching rows to delete.","type":"integer","minimum":1,"maximum":1000},"rowIds":{"description":"Explicit row identifiers to delete.","minItems":1,"maxItems":1000,"type":"array","items":{"type":"string","minLength":1}}},"required":["workspaceId"],"additionalProperties":false,"title":"Delete table rows request","description":"Workspace scope and exactly one of a predicate or row identifier list.","examples":[{"workspaceId":"a91c4b2e-6d3f-4e8a-b5c7-0d9e2f1a8c64","rowIds":["row_1f3e5d7c9b8a4c2d806e4a6b8d0f2e93"]}]},"Tables_V2TableRowResponse":{"type":"object","properties":{"data":{"description":"Response data.","$ref":"#/components/schemas/Tables_V2ApiTableRow"}},"required":["data"],"additionalProperties":false,"title":"Table row response","description":"A single table row."},"Tables_UpdateTableRowRequest":{"type":"object","properties":{"workspaceId":{"type":"string","minLength":1,"maxLength":128,"description":"Unique workspace identifier."},"data":{"description":"Partial row-data patch keyed by column name.","$ref":"#/components/schemas/Tables_V2TableRowData"}},"required":["workspaceId","data"],"additionalProperties":false,"title":"Update table row request","description":"Workspace scope and row-data patch keyed by column name.","examples":[{"workspaceId":"a91c4b2e-6d3f-4e8a-b5c7-0d9e2f1a8c64","data":{"status":"active"}}]},"Tables_V2DeleteRowData":{"type":"object","properties":{"id":{"type":"string","description":"Identifier of the deleted row."},"deleted":{"type":"boolean","const":true,"description":"Confirms that the row was deleted."}},"required":["id","deleted"],"additionalProperties":false,"title":"Delete row data","description":"Row deletion acknowledgement."},"Tables_V2DeleteTableRowResponse":{"type":"object","properties":{"data":{"description":"Response data.","$ref":"#/components/schemas/Tables_V2DeleteRowData"}},"required":["data"],"additionalProperties":false,"title":"Delete table row response","description":"Row deletion acknowledgement."},"Tables_V2UpsertRowData":{"type":"object","properties":{"row":{"description":"The inserted or updated table row.","$ref":"#/components/schemas/Tables_V2ApiTableRow"},"operation":{"type":"string","enum":["insert","update"],"description":"Whether the row was inserted or updated."}},"required":["row","operation"],"additionalProperties":false,"title":"Upsert row data","description":"Row returned by an upsert and the operation performed."},"Tables_V2UpsertTableRowResponse":{"type":"object","properties":{"data":{"description":"Response data.","$ref":"#/components/schemas/Tables_V2UpsertRowData"}},"required":["data"],"additionalProperties":false,"title":"Upsert table row response","description":"The resulting row and whether it was inserted or updated."},"Tables_UpsertTableRowRequest":{"type":"object","properties":{"workspaceId":{"type":"string","minLength":1,"maxLength":128,"description":"Unique workspace identifier."},"data":{"description":"Complete set of row cells keyed by column name. On the update branch this REPLACES the matched row: any column not present here is cleared, unlike a single-row update, which merges.","$ref":"#/components/schemas/Tables_V2TableRowData"},"conflictTarget":{"description":"Unique column used to detect a conflict.","type":"string","minLength":1}},"required":["workspaceId","data"],"additionalProperties":false,"title":"Upsert table row request","description":"Workspace scope, row data, and optional unique-column conflict target.","examples":[{"workspaceId":"a91c4b2e-6d3f-4e8a-b5c7-0d9e2f1a8c64","data":{"email":"jane@example.com","status":"active"},"conflictTarget":"email"}]},"Tables_V2QueryTableRowsResponse":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Tables_V2ApiTableRow"},"description":"Items in the current page."},"nextCursor":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Opaque cursor for the next page. Send it back as `cursor`; `null` means there is nothing further to fetch. Never construct one yourself."}},"required":["data","nextCursor"],"additionalProperties":false,"title":"Query table rows response","description":"A cursor-paginated page of matching table rows."},"Tables_TablePredicateInput":{"title":"Table predicate input","description":"One condition or a recursive `all`/`any` group, normalized to a grouped predicate. Limits: 100 members per group, 10 levels, and 500 nodes. The negating operators include nulls and absent cells, multi-select included; combine with `isNotNull` or `isNotEmpty` to exclude them. Pattern operators use `*` as the only wildcard; `%`, `_`, and backslash are literal. Select operators: single-select uses `eq`/`ne`/`in`/`nin`; multi-select uses `contains`/`ncontains`; option names resolve to IDs. Full operand rules are documented on `op`.","oneOf":[{"type":"object","description":"Matches a row when every member matches.","properties":{"all":{"type":"array","minItems":1,"maxItems":100,"description":"Members combined with AND. An empty group is rejected, because it would compile to no filter at all.","items":{"description":"A nested group, or a single condition.","anyOf":[{"$ref":"#/components/schemas/Tables_TablePredicateInput"},{"type":"object","title":"Predicate condition","description":"One column comparison.","properties":{"field":{"type":"string","minLength":1,"maxLength":128,"description":"Column name to compare, or one of the system fields `id`, `createdAt`, `updatedAt`."},"op":{"type":"string","enum":["eq","ne","gt","gte","lt","lte","in","nin","contains","ncontains","startsWith","endsWith","like","ilike","nlike","nilike","isEmpty","isNotEmpty","isNull","isNotNull"],"description":"Operators: `eq`, `ne`, `gt`, `gte`, `lt`, `lte`; `in`/`nin` take arrays; `isEmpty`, `isNotEmpty`, `isNull`, and `isNotNull` take no operand. Text operators are `contains`, `ncontains`, `startsWith`, `endsWith`, `like`, `nlike`, `ilike`, and `nilike`. Contains variants are case-insensitive and literal; `like`/`nlike` are case-sensitive, while `ilike`/`nilike` are case-insensitive. `*` is the only wildcard; `%`, `_`, and backslash are literal. For `select` columns, single-select accepts `eq`, `ne`, `in`, `nin`; multi-select accepts `contains`, `ncontains`. Option names resolve to IDs."},"value":{"description":"Operand. A scalar for the comparison operators, an array of at most 1000 entries for `in`/`nin`, a pattern for the matching operators, and omitted for `isEmpty`/`isNotEmpty`/`isNull`/`isNotNull`."}},"required":["field","op"],"additionalProperties":false}]}}},"required":["all"],"additionalProperties":false},{"type":"object","description":"Matches a row when at least one member matches.","properties":{"any":{"type":"array","minItems":1,"maxItems":100,"description":"Members combined with OR. An empty group is rejected, because it would compile to no filter at all.","items":{"description":"A nested group, or a single condition.","anyOf":[{"$ref":"#/components/schemas/Tables_TablePredicateInput"},{"type":"object","title":"Predicate condition","description":"One column comparison.","properties":{"field":{"type":"string","minLength":1,"maxLength":128,"description":"Column name to compare, or one of the system fields `id`, `createdAt`, `updatedAt`."},"op":{"type":"string","enum":["eq","ne","gt","gte","lt","lte","in","nin","contains","ncontains","startsWith","endsWith","like","ilike","nlike","nilike","isEmpty","isNotEmpty","isNull","isNotNull"],"description":"Operators: `eq`, `ne`, `gt`, `gte`, `lt`, `lte`; `in`/`nin` take arrays; `isEmpty`, `isNotEmpty`, `isNull`, and `isNotNull` take no operand. Text operators are `contains`, `ncontains`, `startsWith`, `endsWith`, `like`, `nlike`, `ilike`, and `nilike`. Contains variants are case-insensitive and literal; `like`/`nlike` are case-sensitive, while `ilike`/`nilike` are case-insensitive. `*` is the only wildcard; `%`, `_`, and backslash are literal. For `select` columns, single-select accepts `eq`, `ne`, `in`, `nin`; multi-select accepts `contains`, `ncontains`. Option names resolve to IDs."},"value":{"description":"Operand. A scalar for the comparison operators, an array of at most 1000 entries for `in`/`nin`, a pattern for the matching operators, and omitted for `isEmpty`/`isNotEmpty`/`isNull`/`isNotNull`."}},"required":["field","op"],"additionalProperties":false}]}}},"required":["any"],"additionalProperties":false},{"type":"object","title":"Predicate condition","description":"One column comparison.","properties":{"field":{"type":"string","minLength":1,"maxLength":128,"description":"Column name to compare, or one of the system fields `id`, `createdAt`, `updatedAt`."},"op":{"type":"string","enum":["eq","ne","gt","gte","lt","lte","in","nin","contains","ncontains","startsWith","endsWith","like","ilike","nlike","nilike","isEmpty","isNotEmpty","isNull","isNotNull"],"description":"Operators: `eq`, `ne`, `gt`, `gte`, `lt`, `lte`; `in`/`nin` take arrays; `isEmpty`, `isNotEmpty`, `isNull`, and `isNotNull` take no operand. Text operators are `contains`, `ncontains`, `startsWith`, `endsWith`, `like`, `nlike`, `ilike`, and `nilike`. Contains variants are case-insensitive and literal; `like`/`nlike` are case-sensitive, while `ilike`/`nilike` are case-insensitive. `*` is the only wildcard; `%`, `_`, and backslash are literal. For `select` columns, single-select accepts `eq`, `ne`, `in`, `nin`; multi-select accepts `contains`, `ncontains`. Option names resolve to IDs."},"value":{"description":"Operand. A scalar for the comparison operators, an array of at most 1000 entries for `in`/`nin`, a pattern for the matching operators, and omitted for `isEmpty`/`isNotEmpty`/`isNull`/`isNotNull`."}},"required":["field","op"],"additionalProperties":false}]},"Tables_QueryTableRowsRequest":{"type":"object","properties":{"workspaceId":{"type":"string","minLength":1,"maxLength":128,"description":"Unique workspace identifier."},"predicate":{"$ref":"#/components/schemas/Tables_TablePredicateInput"},"sort":{"description":"Ordered table-row sort specification.","maxItems":16,"type":"array","items":{"type":"object","properties":{"field":{"type":"string","minLength":1,"maxLength":128,"description":"Column name to sort by."},"direction":{"type":"string","enum":["asc","desc"],"description":"Sort direction for this column."}},"required":["field","direction"],"additionalProperties":false}},"limit":{"description":"Maximum rows to return; zero requests an unbounded result.","type":"integer","minimum":0,"maximum":1000},"cursor":{"description":"Opaque cursor returned by the previous query page.","type":"string","minLength":1},"includeRunState":{"default":false,"description":"Include per-workflow-group run state on every returned row. Off by default: run state is a separate sidecar read and its `blockErrors` are unbounded, so a full page carries it only when asked. Incompatible with `limit: 0`, and caps `limit` at 200.","type":"boolean"}},"required":["workspaceId"],"additionalProperties":false,"title":"Query table rows request","description":"Workspace scope, optional predicate and sort, and cursor pagination controls. The predicate may be one condition or an `all`/`any` group; omitting it matches every row."},"Tables_V2QueryRowsCountData":{"type":"object","properties":{"totalCount":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Number of rows matching the predicate across the entire table."}},"required":["totalCount"],"additionalProperties":false,"title":"Query rows count data","description":"Total number of table rows matching a predicate."},"Tables_V2CountTableRowsResponse":{"type":"object","properties":{"data":{"description":"Response data.","$ref":"#/components/schemas/Tables_V2QueryRowsCountData"}},"required":["data"],"additionalProperties":false,"title":"Count table rows response","description":"The total number of table rows matching the predicate."},"Tables_CountTableRowsRequest":{"type":"object","properties":{"workspaceId":{"type":"string","minLength":1,"maxLength":128,"description":"Unique workspace identifier."},"predicate":{"$ref":"#/components/schemas/Tables_TablePredicateInput"}},"required":["workspaceId"],"additionalProperties":false,"title":"Count table rows request","description":"Workspace scope and the optional condition or `all`/`any` predicate group whose matches are counted."},"Tables_V2ApiTableView":{"type":"object","properties":{"id":{"type":"string","description":"Unique saved-view identifier."},"tableId":{"type":"string","description":"Table to which the view belongs."},"name":{"type":"string","description":"Saved-view display name."},"config":{"description":"Saved filter, sort, and column-layout configuration.","$ref":"#/components/schemas/Tables_V2TableViewConfig"},"isDefault":{"type":"boolean","description":"Whether this is the table default view."},"createdByEmail":{"anyOf":[{"type":"string","format":"email","pattern":"^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"},{"type":"null"}],"description":"Current author email, or null when removed."},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$","description":"ISO 8601 timestamp when the view was created."},"updatedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$","description":"ISO 8601 timestamp when the view was last modified."}},"required":["id","tableId","name","config","isDefault","createdByEmail","createdAt","updatedAt"],"additionalProperties":false,"title":"Table view","description":"A named saved presentation of table rows and columns."},"Tables_V2TableViewConfig":{"type":"object","properties":{"columnWidths":{"description":"Column widths keyed by column name.","type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"number","exclusiveMinimum":0}},"columnOrder":{"description":"Column names in display order.","type":"array","items":{"type":"string"}},"pinnedColumns":{"description":"Names of pinned columns.","type":"array","items":{"type":"string"}},"hiddenColumns":{"description":"Names of hidden columns.","type":"array","items":{"type":"string"}},"filter":{"description":"Saved row predicate, or null when the view is unfiltered.","anyOf":[{"description":"Recursive saved predicate tree. Runtime validation uses the canonical predicate schema."},{"type":"null"}]},"sort":{"description":"Saved ordered sort specification, or null for default ordering.","anyOf":[{"maxItems":16,"type":"array","items":{"type":"object","properties":{"field":{"type":"string","minLength":1,"maxLength":128,"description":"Column name to sort by."},"direction":{"type":"string","enum":["asc","desc"],"description":"Sort direction for this column."}},"required":["field","direction"],"additionalProperties":false}},{"type":"null"}]}},"additionalProperties":false,"title":"Table view configuration","description":"Saved filter, sort, and column-layout settings for a table view."},"Tables_V2TableViewListResponse":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Tables_V2ApiTableView"},"description":"Items in the current page."},"nextCursor":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Always `null` — this list has no `cursor` or `limit` param and returns its whole bounded set in one page. Present so the list can gain pages later without a shape change."}},"required":["data","nextCursor"],"additionalProperties":false,"title":"Table view list response","description":"A cursor envelope containing the saved views."},"Tables_V2CreateTableViewResponse":{"type":"object","properties":{"data":{"description":"Response data.","$ref":"#/components/schemas/Tables_V2ApiTableView"}},"required":["data"],"additionalProperties":false,"title":"Create table view response","description":"The created saved view."},"Tables_CreateTableViewRequest":{"type":"object","properties":{"workspaceId":{"type":"string","minLength":1,"description":"Workspace that owns the table."},"name":{"type":"string","minLength":1,"description":"Saved-view display name."},"config":{"type":"object","properties":{"columnWidths":{"description":"Column widths keyed by column name or stable column identifier.","type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"number","exclusiveMinimum":0}},"columnOrder":{"description":"Columns in display order, by name or stable identifier.","type":"array","items":{"type":"string"}},"pinnedColumns":{"description":"Pinned columns, by name or stable identifier.","type":"array","items":{"type":"string"}},"hiddenColumns":{"description":"Hidden columns, by name or stable identifier.","type":"array","items":{"type":"string"}},"filter":{"description":"Saved row predicate, or null when the view is unfiltered.","anyOf":[{"$ref":"#/components/schemas/Tables_TablePredicateInput"},{"type":"null"}]},"sort":{"description":"Saved ordered sort specification, or null for default ordering.","anyOf":[{"maxItems":16,"type":"array","items":{"type":"object","properties":{"field":{"type":"string","minLength":1,"maxLength":128,"description":"Column name to sort by."},"direction":{"type":"string","enum":["asc","desc"],"description":"Sort direction for this column."}},"required":["field","direction"],"additionalProperties":false}},{"type":"null"}]}},"additionalProperties":false,"description":"Saved filter, sort, and column-layout configuration."}},"required":["workspaceId","name","config"],"additionalProperties":false,"title":"Create table view request","description":"Workspace scope, name, and saved filter, sort, and layout configuration."},"Tables_V2TableViewResponse":{"type":"object","properties":{"data":{"description":"Response data.","$ref":"#/components/schemas/Tables_V2ApiTableView"}},"required":["data"],"additionalProperties":false,"title":"Table view response","description":"A single saved table view."},"Tables_UpdateTableViewRequest":{"type":"object","properties":{"workspaceId":{"type":"string","minLength":1,"description":"Workspace that owns the table."},"name":{"description":"Replacement saved-view display name.","type":"string","minLength":1},"config":{"description":"Complete replacement saved-view configuration.","type":"object","properties":{"columnWidths":{"description":"Column widths keyed by column name or stable column identifier.","type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"number","exclusiveMinimum":0}},"columnOrder":{"description":"Columns in display order, by name or stable identifier.","type":"array","items":{"type":"string"}},"pinnedColumns":{"description":"Pinned columns, by name or stable identifier.","type":"array","items":{"type":"string"}},"hiddenColumns":{"description":"Hidden columns, by name or stable identifier.","type":"array","items":{"type":"string"}},"filter":{"description":"Saved row predicate, or null when the view is unfiltered.","anyOf":[{"$ref":"#/components/schemas/Tables_TablePredicateInput"},{"type":"null"}]},"sort":{"description":"Saved ordered sort specification, or null for default ordering.","anyOf":[{"maxItems":16,"type":"array","items":{"type":"object","properties":{"field":{"type":"string","minLength":1,"maxLength":128,"description":"Column name to sort by."},"direction":{"type":"string","enum":["asc","desc"],"description":"Sort direction for this column."}},"required":["field","direction"],"additionalProperties":false}},{"type":"null"}]}},"additionalProperties":false},"configPatch":{"description":"Saved-view configuration fields to shallow-merge.","type":"object","properties":{"columnWidths":{"description":"Column widths keyed by column name or stable column identifier.","type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"number","exclusiveMinimum":0}},"columnOrder":{"description":"Columns in display order, by name or stable identifier.","type":"array","items":{"type":"string"}},"pinnedColumns":{"description":"Pinned columns, by name or stable identifier.","type":"array","items":{"type":"string"}},"hiddenColumns":{"description":"Hidden columns, by name or stable identifier.","type":"array","items":{"type":"string"}},"filter":{"description":"Saved row predicate, or null when the view is unfiltered.","anyOf":[{"$ref":"#/components/schemas/Tables_TablePredicateInput"},{"type":"null"}]},"sort":{"description":"Saved ordered sort specification, or null for default ordering.","anyOf":[{"maxItems":16,"type":"array","items":{"type":"object","properties":{"field":{"type":"string","minLength":1,"maxLength":128,"description":"Column name to sort by."},"direction":{"type":"string","enum":["asc","desc"],"description":"Sort direction for this column."}},"required":["field","direction"],"additionalProperties":false}},{"type":"null"}]}},"additionalProperties":false},"isDefault":{"description":"Whether to promote this view to the table default.","type":"boolean"}},"required":["workspaceId"],"additionalProperties":false,"title":"Update table view request","description":"Workspace scope and one or more saved-view changes."},"Tables_V2DeleteTableViewData":{"type":"object","properties":{"id":{"type":"string","description":"Identifier of the deleted view."},"deleted":{"type":"boolean","const":true,"description":"Confirms that the view was deleted."}},"required":["id","deleted"],"additionalProperties":false,"title":"Delete table view data","description":"Saved-view deletion acknowledgement."},"Tables_V2DeleteTableViewResponse":{"type":"object","properties":{"data":{"description":"Response data.","$ref":"#/components/schemas/Tables_V2DeleteTableViewData"}},"required":["data"],"additionalProperties":false,"title":"Delete table view response","description":"Saved-view deletion acknowledgement."},"Tables_V2TableWorkflowGroup":{"type":"object","properties":{"id":{"type":"string","description":"Unique workflow-group identifier."},"workflowId":{"type":"string","description":"Backing workflow identifier for a manual group."},"enrichmentId":{"description":"Registry enrichment identifier.","type":"string"},"name":{"description":"Workflow-group display name.","type":"string"},"type":{"description":"Producer type.","type":"string","enum":["manual","enrichment"]},"dependencies":{"description":"Input column dependencies.","type":"object","properties":{"columns":{"description":"Columns required as producer inputs.","type":"array","items":{"type":"string"}}},"additionalProperties":false},"outputs":{"type":"array","items":{"type":"object","properties":{"blockId":{"type":"string","description":"Workflow block producing this output."},"path":{"type":"string","description":"Path to the value in the workflow block output."},"outputId":{"description":"Registry enrichment output identifier.","type":"string"},"columnName":{"type":"string","description":"Name of the table column receiving the output."}},"required":["blockId","path","columnName"],"additionalProperties":false},"description":"Workflow outputs mapped to table columns."},"inputMappings":{"description":"Workflow inputs mapped from table columns.","type":"array","items":{"type":"object","properties":{"inputName":{"type":"string","description":"Workflow input name."},"columnName":{"type":"string","description":"Name of the source table column."}},"required":["inputName","columnName"],"additionalProperties":false}},"deploymentMode":{"description":"Workflow execution mode.","type":"string","enum":["live","deployed"]},"autoRun":{"description":"Whether the group automatically runs for new rows.","type":"boolean"}},"required":["id","workflowId","outputs"],"additionalProperties":false,"title":"Table workflow group","description":"A workflow or enrichment producer and the columns it populates."},"Tables_V2TableWorkflowGroupListResponse":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Tables_V2TableWorkflowGroup"},"description":"Items in the current page."},"nextCursor":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Always `null` — this list has no `cursor` or `limit` param and returns its whole bounded set in one page. Present so the list can gain pages later without a shape change."}},"required":["data","nextCursor"],"additionalProperties":false,"title":"Table workflow group list response","description":"A cursor envelope containing the table workflow groups."},"Tables_V2WorkflowGroupData":{"type":"object","properties":{"group":{"description":"The created or updated workflow group.","$ref":"#/components/schemas/Tables_V2TableWorkflowGroup"},"columns":{"type":"array","items":{"type":"object","properties":{"id":{"description":"Stable server-assigned column identifier.","type":"string"},"name":{"type":"string","minLength":1,"maxLength":50,"pattern":"^[A-Za-z_][A-Za-z0-9_]*$","description":"Column name used as the public row-data key."},"type":{"type":"string","enum":["string","number","currency","boolean","date","json","select"],"description":"Data type of values stored in the column."},"required":{"default":false,"description":"Whether inserts require a value for this column.","type":"boolean"},"unique":{"default":false,"description":"Whether values must be unique across table rows.","type":"boolean"},"workflowGroupId":{"description":"Workflow group whose output populates this column.","type":"string"},"options":{"description":"Options declared for a select column.","maxItems":100,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","minLength":1,"description":"Stable select-option identifier."},"name":{"type":"string","minLength":1,"maxLength":100,"description":"Display name of the select option."}},"required":["id","name"],"additionalProperties":false}},"multiple":{"description":"Whether a select column accepts multiple options.","type":"boolean"},"currencyCode":{"description":"ISO 4217 code for a currency column, normalized to uppercase.","type":"string","pattern":"^[A-Za-z]{3}$"}},"required":["name","type","required","unique"],"additionalProperties":false,"description":"A typed column in a table schema."},"description":"Current table columns after the mutation."}},"required":["group","columns"],"additionalProperties":false,"title":"Workflow group data","description":"A workflow group and the resulting table columns."},"Tables_V2AddTableWorkflowGroupResponse":{"type":"object","properties":{"data":{"description":"Response data.","$ref":"#/components/schemas/Tables_V2WorkflowGroupData"}},"required":["data"],"additionalProperties":false,"title":"Add table workflow group response","description":"The workflow group and complete resulting table columns."},"Tables_AddTableWorkflowGroupRequest":{"type":"object","properties":{"workspaceId":{"type":"string","minLength":1,"maxLength":128,"description":"Unique workspace identifier."},"group":{"type":"object","properties":{"id":{"description":"Optional client-provided workflow-group identifier.","type":"string","minLength":1},"workflowId":{"description":"Backing workflow identifier. Required when `type` is `manual` (which is also the default when `type` is omitted); omit it for an `enrichment` group.","type":"string","minLength":1},"enrichmentId":{"description":"Registry enrichment identifier.","type":"string","minLength":1},"name":{"description":"Workflow-group display name.","type":"string"},"type":{"description":"Workflow-group producer type.","type":"string","enum":["manual","enrichment"]},"dependencies":{"description":"Producer input dependencies.","type":"object","properties":{"columns":{"description":"Columns required as producer inputs.","type":"array","items":{"type":"string"}}}},"outputs":{"minItems":1,"type":"array","items":{"type":"object","properties":{"blockId":{"default":"","description":"Workflow block producing this output.","type":"string"},"path":{"default":"","description":"Path to the value in the workflow block output.","type":"string"},"outputId":{"description":"Registry enrichment output identifier.","type":"string"},"columnName":{"type":"string","minLength":1,"description":"Table column receiving the output."}},"required":["columnName"]},"description":"Producer outputs mapped to columns."},"inputMappings":{"description":"Workflow inputs mapped from table columns.","type":"array","items":{"type":"object","properties":{"inputName":{"type":"string","minLength":1,"description":"Workflow input name."},"columnName":{"type":"string","minLength":1,"description":"Source table column name."}},"required":["inputName","columnName"]}},"deploymentMode":{"description":"Workflow state used for cell runs.","type":"string","enum":["live","deployed"]},"autoRun":{"description":"Whether this group automatically runs for new rows.","type":"boolean"}},"required":["outputs"],"description":"Workflow or enrichment producer definition."},"outputColumns":{"minItems":1,"type":"array","items":{"type":"object","properties":{"name":{"type":"string","minLength":1,"description":"Output column name."},"type":{"type":"string","enum":["string","number","currency","boolean","date","json","select"],"description":"Output column data type."},"required":{"description":"Whether the output column is required.","type":"boolean"},"unique":{"description":"Whether the output column must be unique.","type":"boolean"}},"required":["name","type"],"additionalProperties":false},"description":"Columns created for producer outputs."},"autoRun":{"default":false,"description":"Whether to schedule existing rows after group creation.","type":"boolean"}},"required":["workspaceId","group","outputColumns"],"additionalProperties":false,"title":"Add table workflow group request","description":"Workspace scope, producer definition, and output columns.","examples":[{"workspaceId":"a91c4b2e-6d3f-4e8a-b5c7-0d9e2f1a8c64","group":{"workflowId":"3b1f7c92-8d4e-4a6b-9c0d-5e2f8a714b36","name":"Enrich company","outputs":[{"blockId":"block_lookup","path":"output.revenue","columnName":"revenue"}]},"outputColumns":[{"name":"revenue","type":"number"}]}]},"Tables_V2UpdateTableWorkflowGroupResponse":{"type":"object","properties":{"data":{"description":"Response data.","$ref":"#/components/schemas/Tables_V2WorkflowGroupData"}},"required":["data"],"additionalProperties":false,"title":"Update table workflow group response","description":"The workflow group and complete resulting table columns."},"Tables_UpdateTableWorkflowGroupRequest":{"type":"object","properties":{"workspaceId":{"type":"string","minLength":1,"maxLength":128,"description":"Unique workspace identifier."},"groupId":{"type":"string","minLength":1,"description":"Workflow group to update."},"workflowId":{"description":"Replacement backing workflow identifier.","type":"string","minLength":1},"name":{"description":"Replacement workflow-group display name.","type":"string"},"dependencies":{"description":"Replacement input dependencies.","type":"object","properties":{"columns":{"description":"Columns required as producer inputs.","type":"array","items":{"type":"string"}}}},"outputs":{"description":"Replacement producer outputs.","type":"array","items":{"type":"object","properties":{"blockId":{"default":"","description":"Workflow block producing this output.","type":"string"},"path":{"default":"","description":"Path to the value in the workflow block output.","type":"string"},"outputId":{"description":"Registry enrichment output identifier.","type":"string"},"columnName":{"type":"string","minLength":1,"description":"Table column receiving the output."}},"required":["columnName"]}},"newOutputColumns":{"description":"Columns to add for new outputs.","type":"array","items":{"type":"object","properties":{"name":{"type":"string","minLength":1,"description":"Output column name."},"type":{"type":"string","enum":["string","number","currency","boolean","date","json","select"],"description":"Output column data type."},"required":{"description":"Whether the output column is required.","type":"boolean"},"unique":{"description":"Whether the output column must be unique.","type":"boolean"}},"required":["name","type"],"additionalProperties":false}},"mappingUpdates":{"description":"Existing output-column mapping changes.","type":"array","items":{"type":"object","properties":{"columnName":{"type":"string","minLength":1,"description":"Existing output column to remap."},"blockId":{"type":"string","minLength":1,"description":"New workflow block producing the value."},"path":{"type":"string","minLength":1,"description":"New path to the workflow output value."}},"required":["columnName","blockId","path"]}},"inputMappings":{"description":"Replacement workflow input mappings.","type":"array","items":{"type":"object","properties":{"inputName":{"type":"string","minLength":1,"description":"Workflow input name."},"columnName":{"type":"string","minLength":1,"description":"Source table column name."}},"required":["inputName","columnName"]}},"deploymentMode":{"description":"Replacement workflow execution mode.","type":"string","enum":["live","deployed"]},"type":{"description":"Workflow-group producer type. Must match the group's stored type — a group's producer cannot be changed after creation.","type":"string","enum":["manual","enrichment"]},"autoRun":{"description":"Replacement automatic-run setting.","type":"boolean"}},"required":["workspaceId","groupId"],"additionalProperties":false,"title":"Update table workflow group request","description":"Workspace scope, workflow group identifier, and producer changes.","examples":[{"workspaceId":"a91c4b2e-6d3f-4e8a-b5c7-0d9e2f1a8c64","groupId":"grp_5d8b2f0a6c1e4739a8b3d5f7e9c1a204","name":"Company profile enrichment"}]},"Tables_V2DeleteWorkflowGroupData":{"type":"object","properties":{"id":{"type":"string","description":"Identifier of the deleted workflow group."},"deleted":{"type":"boolean","const":true,"description":"Confirms that the workflow group was deleted."},"columns":{"type":"array","items":{"type":"object","properties":{"id":{"description":"Stable server-assigned column identifier.","type":"string"},"name":{"type":"string","minLength":1,"maxLength":50,"pattern":"^[A-Za-z_][A-Za-z0-9_]*$","description":"Column name used as the public row-data key."},"type":{"type":"string","enum":["string","number","currency","boolean","date","json","select"],"description":"Data type of values stored in the column."},"required":{"default":false,"description":"Whether inserts require a value for this column.","type":"boolean"},"unique":{"default":false,"description":"Whether values must be unique across table rows.","type":"boolean"},"workflowGroupId":{"description":"Workflow group whose output populates this column.","type":"string"},"options":{"description":"Options declared for a select column.","maxItems":100,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","minLength":1,"description":"Stable select-option identifier."},"name":{"type":"string","minLength":1,"maxLength":100,"description":"Display name of the select option."}},"required":["id","name"],"additionalProperties":false}},"multiple":{"description":"Whether a select column accepts multiple options.","type":"boolean"},"currencyCode":{"description":"ISO 4217 code for a currency column, normalized to uppercase.","type":"string","pattern":"^[A-Za-z]{3}$"}},"required":["name","type","required","unique"],"additionalProperties":false,"description":"A typed column in a table schema."},"description":"Surviving table columns."}},"required":["id","deleted","columns"],"additionalProperties":false,"title":"Delete workflow group data","description":"Workflow-group deletion acknowledgement and surviving columns."},"Tables_V2DeleteTableWorkflowGroupResponse":{"type":"object","properties":{"data":{"description":"Response data.","$ref":"#/components/schemas/Tables_V2DeleteWorkflowGroupData"}},"required":["data"],"additionalProperties":false,"title":"Delete table workflow group response","description":"Deletion acknowledgement and surviving table columns."},"Tables_DeleteTableWorkflowGroupRequest":{"type":"object","properties":{"workspaceId":{"type":"string","minLength":1,"maxLength":128,"description":"Unique workspace identifier."},"groupId":{"type":"string","minLength":1,"description":"Workflow group to delete."}},"required":["workspaceId","groupId"],"additionalProperties":false,"title":"Delete table workflow group request","description":"Workspace scope and workflow group identifier.","examples":[{"workspaceId":"a91c4b2e-6d3f-4e8a-b5c7-0d9e2f1a8c64","groupId":"grp_5d8b2f0a6c1e4739a8b3d5f7e9c1a204"}]},"Tables_V2RunColumnData":{"type":"object","properties":{"dispatchId":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Run dispatch ID, or null when no dispatch is available to poll. Use row reads with `includeRunState` to check cell outcomes."}},"required":["dispatchId"],"additionalProperties":false,"title":"Run column data","description":"Acknowledgement for a table column run."},"Tables_V2CreateTableDispatchResponse":{"type":"object","properties":{"data":{"description":"Response data.","$ref":"#/components/schemas/Tables_V2RunColumnData"}},"required":["data"],"additionalProperties":false,"title":"Create table dispatch response","description":"Accepted background dispatch identifier."},"Tables_CreateTableDispatchRequest":{"type":"object","properties":{"workspaceId":{"type":"string","minLength":1,"maxLength":128,"description":"Unique workspace identifier."},"groupIds":{"minItems":1,"type":"array","items":{"type":"string","minLength":1},"description":"Workflow or enrichment groups to run."},"runMode":{"default":"all","description":"Whether to run all or only incomplete cells.","type":"string","enum":["all","incomplete"]},"rowIds":{"description":"Explicit row subset to run.","minItems":1,"maxItems":1000000,"type":"array","items":{"type":"string","minLength":1}},"filter":{"$ref":"#/components/schemas/Tables_TablePredicate"},"excludeRowIds":{"description":"Rows excluded from a select-all run scope.","maxItems":10000,"type":"array","items":{"type":"string","minLength":1}},"limit":{"description":"Optional cap on eligible rows to run.","type":"object","properties":{"type":{"type":"string","const":"rows","description":"Unit constrained by the run cap."},"max":{"type":"integer","minimum":1,"maximum":1000000,"description":"Maximum eligible rows to run."}},"required":["type","max"]}},"required":["workspaceId","groupIds"],"additionalProperties":false,"title":"Create table dispatch request","description":"Workspace scope, producer groups, execution mode, and optional row scope.","examples":[{"workspaceId":"a91c4b2e-6d3f-4e8a-b5c7-0d9e2f1a8c64","groupIds":["grp_5d8b2f0a6c1e4739a8b3d5f7e9c1a204"]}]},"Tables_V2RunRowEnrichmentResponse":{"type":"object","properties":{"data":{"description":"Response data.","$ref":"#/components/schemas/Tables_V2RunColumnData"}},"required":["data"],"additionalProperties":false,"title":"Run row enrichment response","description":"Accepted background dispatch identifier."},"Tables_RunRowEnrichmentRequest":{"type":"object","properties":{"workspaceId":{"type":"string","minLength":1,"maxLength":128,"description":"Unique workspace identifier."}},"required":["workspaceId"],"additionalProperties":false,"title":"Run row enrichment request","description":"Workspace scope for the row enrichment.","examples":[{"workspaceId":"a91c4b2e-6d3f-4e8a-b5c7-0d9e2f1a8c64"}]},"Tables_V2TableRowMatch":{"type":"object","properties":{"ordinal":{"type":"number","description":"Zero-based row index in the filtered and sorted view."},"rowId":{"type":"string","description":"Identifier of the matching row."},"column":{"type":"string","description":"Column name containing the match."}},"required":["ordinal","rowId","column"],"additionalProperties":false,"title":"Table row match","description":"One matching cell returned by a table row search."},"Tables_V2SearchRowsData":{"type":"object","properties":{"matches":{"maxItems":1000,"type":"array","items":{"$ref":"#/components/schemas/Tables_V2TableRowMatch"},"description":"Matching table cells, at most 1000."},"truncated":{"type":"boolean","description":"Whether more than 1000 cells matched, so the list was cut."}},"required":["matches","truncated"],"additionalProperties":false,"title":"Search rows data","description":"Matching table cells and truncation state."},"Tables_V2SearchTableRowsResponse":{"type":"object","properties":{"data":{"description":"Response data.","$ref":"#/components/schemas/Tables_V2SearchRowsData"}},"required":["data"],"additionalProperties":false,"title":"Search table rows response","description":"Matching table cells and truncation state."},"Tables_SearchTableRowsRequest":{"type":"object","properties":{"workspaceId":{"type":"string","minLength":1,"maxLength":128,"description":"Unique workspace identifier."},"q":{"type":"string","minLength":1,"maxLength":200,"description":"Case-insensitive cell substring to find."},"predicate":{"$ref":"#/components/schemas/Tables_TablePredicate"},"sort":{"description":"Ordered table-row sort specification.","maxItems":16,"type":"array","items":{"type":"object","properties":{"field":{"type":"string","minLength":1,"maxLength":128,"description":"Column name to sort by."},"direction":{"type":"string","enum":["asc","desc"],"description":"Sort direction for this column."}},"required":["field","direction"],"additionalProperties":false}}},"required":["workspaceId","q"],"additionalProperties":false,"title":"Search table rows request","description":"Workspace scope, substring query, and optional predicate and sort.","examples":[{"workspaceId":"a91c4b2e-6d3f-4e8a-b5c7-0d9e2f1a8c64","q":"acme","predicate":{"all":[{"field":"status","op":"eq","value":"active"}]}}]},"Tables_V2TableUploadImportSource":{"type":"object","properties":{"type":{"type":"string","const":"upload","description":"Upload-backed import discriminator."},"name":{"type":"string","minLength":1,"maxLength":255,"description":"CSV filename."},"contentType":{"type":"string","minLength":1,"maxLength":255,"description":"CSV MIME type."},"size":{"type":"integer","minimum":1,"maximum":5368709120,"description":"Exact CSV file size in bytes."}},"required":["type","name","contentType","size"],"additionalProperties":false,"title":"Upload table import source","description":"CSV file uploaded through signed transfer instructions."},"Tables_V2TableImportRejectedSample":{"type":"object","properties":{"code":{"type":"string","description":"CSV parser error code, e.g. CSV_QUOTE_NOT_CLOSED."},"line":{"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}],"description":"1-based source line the parser had reached when it gave up, or null."},"message":{"type":"string","description":"Parser message for the dropped record."}},"required":["code","line","message"],"additionalProperties":false,"title":"Rejected import record","description":"One source record a table import could not read."},"Tables_V2UploadBackedTableImport":{"type":"object","properties":{"id":{"type":"string","description":"Unique table-import identifier."},"workspaceId":{"type":"string","description":"Workspace that owns the import."},"status":{"type":"string","enum":["uploading","processing","completed","failed","canceled","expired"],"description":"Current import lifecycle state."},"source":{"description":"Uploaded CSV source for this import.","$ref":"#/components/schemas/Tables_V2TableUploadImportSource"},"target":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","const":"new","description":"Create-new-table target discriminator."},"name":{"type":"string","minLength":1,"maxLength":128,"pattern":"^[A-Za-z_][A-Za-z0-9_]*$","description":"Name of the table to create."},"folderPath":{"$ref":"#/components/schemas/Tables_FolderPathInput"}},"required":["type","name"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","const":"existing","description":"Existing-table target discriminator."},"tableId":{"type":"string","minLength":1,"description":"Existing target table identifier."},"mode":{"type":"string","enum":["append","replace"],"description":"Whether to append rows or replace existing rows."}},"required":["type","tableId","mode"],"additionalProperties":false}],"description":"New or existing table import target."},"tableId":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Resulting or target table identifier."},"rowsProcessed":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Rows processed so far."},"rowsRejected":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Minimum number of source records dropped by parser failures. One failure can discard multiple records, such as an unterminated quote consuming the rest of the file. A non-zero value means partial import even with `completed` status; zero does not guarantee no loss."},"cellsRejected":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Non-empty cell values the target column type could not represent. Their rows were imported with the cell left blank."},"rejectedSamples":{"type":"array","items":{"$ref":"#/components/schemas/Tables_V2TableImportRejectedSample"},"description":"Bounded sample of the dropped records, for locating them in the source file."},"error":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Terminal failure reason, or null."},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$","description":"ISO 8601 creation timestamp."},"updatedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$","description":"ISO 8601 last-update timestamp."},"completedAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},{"type":"null"}],"description":"ISO 8601 completion timestamp, or null."}},"required":["id","workspaceId","status","source","target","tableId","rowsProcessed","rowsRejected","cellsRejected","rejectedSamples","error","createdAt","updatedAt","completedAt"],"additionalProperties":false,"title":"Upload-backed table import","description":"Table import whose CSV source is uploaded through signed transfer instructions."},"Tables_V2PutUploadTransfer":{"type":"object","properties":{"method":{"type":"string","const":"put","description":"Upload strategy discriminator."},"url":{"type":"string","format":"uri","description":"Signed URL to which the file bytes are uploaded. Upload bytes with `PUT` and exactly the supplied headers; never construct or modify the signed URL. Treat any `2xx` as success. Sim-hosted URLs return an empty `204` and v2 JSON errors. Object-storage URLs may return `200` or `201` and provider-specific errors, often XML."},"headers":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"string"},"description":"Headers that must be included with the upload request."},"expiresAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$","description":"ISO 8601 expiration time for this signed URL. This is the URL's own expiry and is normally earlier than the upload session's expiresAt: the session stays open for later part, status, completion, and abort requests, but the bytes must be uploaded before this time. Once it passes, the storage provider rejects the upload and a new upload session must be created."}},"required":["method","url","headers","expiresAt"],"additionalProperties":false,"title":"Direct upload transfer","description":"Instructions for uploading bytes to one signed URL."},"Tables_V2MultipartUploadTransfer":{"type":"object","properties":{"method":{"type":"string","const":"multipart","description":"Upload strategy discriminator."},"partSize":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991,"description":"Required size of each non-final part in bytes."},"partCount":{"type":"integer","exclusiveMinimum":0,"maximum":640,"description":"Total number of upload parts."}},"required":["method","partSize","partCount"],"additionalProperties":false,"title":"Multipart upload transfer","description":"Instructions for splitting bytes into a multipart upload."},"Tables_V2TableWorkspaceFileImportSource":{"type":"object","properties":{"type":{"type":"string","const":"workspace_file","description":"Workspace-file source discriminator."},"fileId":{"type":"string","minLength":1,"description":"Existing workspace file identifier."}},"required":["type","fileId"],"additionalProperties":false,"title":"Workspace file table import source","description":"Existing workspace file used as a CSV import source."},"Tables_V2WorkspaceFileTableImport":{"type":"object","properties":{"id":{"type":"string","description":"Unique table-import identifier."},"workspaceId":{"type":"string","description":"Workspace that owns the import."},"status":{"type":"string","enum":["uploading","processing","completed","failed","canceled","expired"],"description":"Current import lifecycle state."},"source":{"description":"Workspace-file CSV source for this import.","$ref":"#/components/schemas/Tables_V2TableWorkspaceFileImportSource"},"target":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","const":"new","description":"Create-new-table target discriminator."},"name":{"type":"string","minLength":1,"maxLength":128,"pattern":"^[A-Za-z_][A-Za-z0-9_]*$","description":"Name of the table to create."},"folderPath":{"$ref":"#/components/schemas/Tables_FolderPathInput"}},"required":["type","name"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","const":"existing","description":"Existing-table target discriminator."},"tableId":{"type":"string","minLength":1,"description":"Existing target table identifier."},"mode":{"type":"string","enum":["append","replace"],"description":"Whether to append rows or replace existing rows."}},"required":["type","tableId","mode"],"additionalProperties":false}],"description":"New or existing table import target."},"tableId":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Resulting or target table identifier."},"rowsProcessed":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Rows processed so far."},"rowsRejected":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Minimum number of source records dropped by parser failures. One failure can discard multiple records, such as an unterminated quote consuming the rest of the file. A non-zero value means partial import even with `completed` status; zero does not guarantee no loss."},"cellsRejected":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Non-empty cell values the target column type could not represent. Their rows were imported with the cell left blank."},"rejectedSamples":{"type":"array","items":{"$ref":"#/components/schemas/Tables_V2TableImportRejectedSample"},"description":"Bounded sample of the dropped records, for locating them in the source file."},"error":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Terminal failure reason, or null."},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$","description":"ISO 8601 creation timestamp."},"updatedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$","description":"ISO 8601 last-update timestamp."},"completedAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},{"type":"null"}],"description":"ISO 8601 completion timestamp, or null."}},"required":["id","workspaceId","status","source","target","tableId","rowsProcessed","rowsRejected","cellsRejected","rejectedSamples","error","createdAt","updatedAt","completedAt"],"additionalProperties":false,"title":"Workspace-file table import","description":"Table import whose CSV source is an existing workspace file."},"Tables_V2CreateTableImportData":{"anyOf":[{"type":"object","properties":{"session":{"description":"Created upload-backed import session.","$ref":"#/components/schemas/Tables_V2UploadBackedTableImport"},"uploadToken":{"type":"string","minLength":1,"description":"Signed token for upload control requests."},"transfer":{"oneOf":[{"$ref":"#/components/schemas/Tables_V2PutUploadTransfer"},{"$ref":"#/components/schemas/Tables_V2MultipartUploadTransfer"}],"description":"Signed CSV upload instructions."}},"required":["session","uploadToken","transfer"],"additionalProperties":false},{"type":"object","properties":{"session":{"description":"Created workspace-file import session.","$ref":"#/components/schemas/Tables_V2WorkspaceFileTableImport"},"uploadToken":{"type":"null","description":"Always null; a workspace-file import has no upload to authorize."},"transfer":{"type":"null","description":"Always null; a workspace-file import has no bytes to transfer."}},"required":["session","uploadToken","transfer"],"additionalProperties":false}],"title":"Create table import data","description":"Created import session and upload instructions when the source needs transfer."},"Tables_V2CreateTableImportResponse":{"type":"object","properties":{"data":{"description":"Response data.","$ref":"#/components/schemas/Tables_V2CreateTableImportData"}},"required":["data"],"additionalProperties":false,"title":"Create table import response","description":"The import session and upload instructions when transfer is required."},"Tables_CreateTableImportRequest":{"type":"object","properties":{"workspaceId":{"type":"string","minLength":1,"maxLength":128,"description":"Unique workspace identifier."},"source":{"oneOf":[{"$ref":"#/components/schemas/Tables_V2TableUploadImportSource"},{"$ref":"#/components/schemas/Tables_V2TableWorkspaceFileImportSource"}],"description":"CSV source for the import."},"target":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","const":"new","description":"Create-new-table target discriminator."},"name":{"type":"string","minLength":1,"maxLength":128,"pattern":"^[A-Za-z_][A-Za-z0-9_]*$","description":"Name of the table to create."},"folderPath":{"$ref":"#/components/schemas/Tables_FolderPathInput"}},"required":["type","name"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","const":"existing","description":"Existing-table target discriminator."},"tableId":{"type":"string","minLength":1,"description":"Existing target table identifier."},"mode":{"type":"string","enum":["append","replace"],"description":"Whether to append rows or replace existing rows."}},"required":["type","tableId","mode"],"additionalProperties":false}],"description":"New or existing table import target."},"mapping":{"description":"CSV headers mapped to existing table columns.","type":"object","propertyNames":{"type":"string","minLength":1,"maxLength":50},"additionalProperties":{"anyOf":[{"type":"string","minLength":1,"maxLength":50},{"type":"null"}]}},"createColumns":{"description":"CSV headers for which new columns should be created.","maxItems":1000,"type":"array","items":{"type":"string","minLength":1,"maxLength":50}},"timezone":{"description":"IANA timezone used to interpret local date values.","type":"string"}},"required":["workspaceId","source","target"],"additionalProperties":false,"title":"Create table import request","description":"Workspace, CSV source, target table, optional mapping, and timezone."},"Tables_V2TableImport":{"type":"object","properties":{"id":{"type":"string","description":"Unique table-import identifier."},"workspaceId":{"type":"string","description":"Workspace that owns the import."},"status":{"type":"string","enum":["uploading","processing","completed","failed","canceled","expired"],"description":"Current import lifecycle state."},"source":{"oneOf":[{"$ref":"#/components/schemas/Tables_V2TableUploadImportSource"},{"$ref":"#/components/schemas/Tables_V2TableWorkspaceFileImportSource"}],"description":"CSV source for the import."},"target":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","const":"new","description":"Create-new-table target discriminator."},"name":{"type":"string","minLength":1,"maxLength":128,"pattern":"^[A-Za-z_][A-Za-z0-9_]*$","description":"Name of the table to create."},"folderPath":{"$ref":"#/components/schemas/Tables_FolderPathInput"}},"required":["type","name"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","const":"existing","description":"Existing-table target discriminator."},"tableId":{"type":"string","minLength":1,"description":"Existing target table identifier."},"mode":{"type":"string","enum":["append","replace"],"description":"Whether to append rows or replace existing rows."}},"required":["type","tableId","mode"],"additionalProperties":false}],"description":"New or existing table import target."},"tableId":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Resulting or target table identifier."},"rowsProcessed":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Rows processed so far."},"rowsRejected":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Minimum number of source records dropped by parser failures. One failure can discard multiple records, such as an unterminated quote consuming the rest of the file. A non-zero value means partial import even with `completed` status; zero does not guarantee no loss."},"cellsRejected":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Non-empty cell values the target column type could not represent. Their rows were imported with the cell left blank."},"rejectedSamples":{"type":"array","items":{"$ref":"#/components/schemas/Tables_V2TableImportRejectedSample"},"description":"Bounded sample of the dropped records, for locating them in the source file."},"error":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Terminal failure reason, or null."},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$","description":"ISO 8601 creation timestamp."},"updatedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$","description":"ISO 8601 last-update timestamp."},"completedAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},{"type":"null"}],"description":"ISO 8601 completion timestamp, or null."}},"required":["id","workspaceId","status","source","target","tableId","rowsProcessed","rowsRejected","cellsRejected","rejectedSamples","error","createdAt","updatedAt","completedAt"],"additionalProperties":false,"title":"Table import","description":"Durable CSV table-import lifecycle resource."},"Tables_V2TableImportResponse":{"type":"object","properties":{"data":{"description":"Response data.","$ref":"#/components/schemas/Tables_V2TableImport"}},"required":["data"],"additionalProperties":false,"title":"Table import response","description":"A durable table-import lifecycle resource."},"Tables_V2CancelTableImportResponse":{"type":"object","properties":{"data":{"description":"Response data.","$ref":"#/components/schemas/Tables_V2TableImport"}},"required":["data"],"additionalProperties":false,"title":"Cancel table import response","description":"The canceled table-import lifecycle resource."},"Tables_V2UploadPartUrl":{"type":"object","properties":{"partNumber":{"type":"integer","minimum":1,"maximum":9007199254740991,"description":"Multipart part number."},"url":{"type":"string","format":"uri","description":"Signed URL for this upload part. Upload bytes with `PUT` and exactly the supplied headers; never construct or modify the signed URL. Treat any `2xx` as success. Sim-hosted URLs return an empty `204` and v2 JSON errors. Object-storage URLs may return `200` or `201` and provider-specific errors, often XML. Do not retain part `ETag` values; after every part succeeds, call the completion endpoint without a request body."},"headers":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"string"},"description":"Headers that must be included with the part upload."},"expiresAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$","description":"ISO 8601 expiration time for the signed URL."}},"required":["partNumber","url","headers","expiresAt"],"additionalProperties":false,"title":"Upload part URL","description":"A signed URL and required headers for one multipart upload part."},"Tables_V2PartUrlsData":{"type":"object","properties":{"parts":{"maxItems":100,"type":"array","items":{"$ref":"#/components/schemas/Tables_V2UploadPartUrl"},"description":"Signed URLs for requested parts."}},"required":["parts"],"additionalProperties":false,"title":"Upload part URLs","description":"Signed transfer URLs for the requested multipart upload parts."},"Tables_V2CreateTableImportPartUrlsResponse":{"type":"object","properties":{"data":{"description":"Response data.","$ref":"#/components/schemas/Tables_V2PartUrlsData"}},"required":["data"],"additionalProperties":false,"title":"Create table import part URLs response","description":"Signed URLs and required headers for each requested upload part."},"Tables_CreateTableImportPartUrlsRequest":{"type":"object","properties":{"partNumbers":{"minItems":1,"maxItems":100,"type":"array","items":{"type":"integer","minimum":1,"maximum":9007199254740991},"description":"Multipart part numbers for which signed URLs should be created."}},"required":["partNumbers"],"additionalProperties":false,"title":"Create table import part URLs request","description":"Multipart part numbers for which signed URLs should be created.","examples":[{"partNumbers":[1,2,3]}]},"Tables_V2CompleteTableImportUploadResponse":{"type":"object","properties":{"data":{"description":"Response data.","$ref":"#/components/schemas/Tables_V2TableImport"}},"required":["data"],"additionalProperties":false,"title":"Complete table import upload response","description":"The import lifecycle resource after processing is queued."},"Tables_V2TableExport":{"type":"object","properties":{"id":{"type":"string","description":"Unique table-export identifier."},"tableId":{"type":"string","description":"Exported table identifier."},"workspaceId":{"type":"string","description":"Workspace that owns the export."},"format":{"type":"string","enum":["csv","json"],"description":"Export file format."},"status":{"type":"string","enum":["queued","processing","completed","failed","canceled"],"description":"Current export lifecycle state."},"rowsProcessed":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Rows exported so far."},"error":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Terminal failure reason, or null."},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$","description":"ISO 8601 creation timestamp."},"updatedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$","description":"ISO 8601 last-update timestamp."},"completedAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},{"type":"null"}],"description":"ISO 8601 completion timestamp, or null."}},"required":["id","tableId","workspaceId","format","status","rowsProcessed","error","createdAt","updatedAt","completedAt"],"additionalProperties":false,"title":"Table export","description":"Durable asynchronous table-export lifecycle resource."},"Tables_V2CreateTableExportResponse":{"type":"object","properties":{"data":{"description":"Response data.","$ref":"#/components/schemas/Tables_V2TableExport"}},"required":["data"],"additionalProperties":false,"title":"Create table export response","description":"The created durable table-export lifecycle resource."},"Tables_CreateTableExportRequest":{"type":"object","properties":{"workspaceId":{"type":"string","minLength":1,"maxLength":128,"description":"Unique workspace identifier."},"format":{"default":"csv","description":"Export file format.","type":"string","enum":["csv","json"]}},"required":["workspaceId"],"additionalProperties":false,"title":"Create table export request","description":"Workspace scope and export format.","examples":[{"workspaceId":"a91c4b2e-6d3f-4e8a-b5c7-0d9e2f1a8c64","format":"csv"}]},"Tables_V2TableExportResponse":{"type":"object","properties":{"data":{"description":"Response data.","$ref":"#/components/schemas/Tables_V2TableExport"}},"required":["data"],"additionalProperties":false,"title":"Table export response","description":"A durable table-export lifecycle resource."},"Tables_V2CancelTableExportResponse":{"type":"object","properties":{"data":{"description":"Response data.","$ref":"#/components/schemas/Tables_V2TableExport"}},"required":["data"],"additionalProperties":false,"title":"Cancel table export response","description":"The canceled durable table-export lifecycle resource."},"Tables_V2TableExportDownloadData":{"type":"object","properties":{"url":{"type":"string","format":"uri","description":"Short-lived signed download URL."},"fileName":{"type":"string","description":"Suggested export filename."},"expiresAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$","description":"ISO 8601 URL expiration timestamp."}},"required":["url","fileName","expiresAt"],"additionalProperties":false,"title":"Table export download data","description":"Signed URL and filename for a completed table export."},"Tables_V2DownloadTableExportResponse":{"type":"object","properties":{"data":{"description":"Response data.","$ref":"#/components/schemas/Tables_V2TableExportDownloadData"}},"required":["data"],"additionalProperties":false,"title":"Download table export response","description":"Short-lived signed URL, filename, and expiration timestamp."},"Tables_V2CancelTableRunsData":{"type":"object","properties":{"cancelled":{"type":"number","description":"Number of cell runs canceled."}},"required":["cancelled"],"additionalProperties":false,"title":"Cancel table runs data","description":"Result of canceling in-flight table cell runs."},"Tables_V2CancelTableRunsResponse":{"type":"object","properties":{"data":{"description":"Response data.","$ref":"#/components/schemas/Tables_V2CancelTableRunsData"}},"required":["data"],"additionalProperties":false,"title":"Cancel table runs response","description":"Count of canceled table cell runs."},"Tables_CancelTableRunsRequest":{"type":"object","properties":{"workspaceId":{"type":"string","minLength":1,"maxLength":128,"description":"Unique workspace identifier."},"scope":{"type":"string","enum":["all","row"],"description":"Whether to cancel across the table or one row."},"rowId":{"description":"Row whose runs should be canceled for row scope.","type":"string","minLength":1},"filter":{"$ref":"#/components/schemas/Tables_TablePredicate"},"excludeRowIds":{"description":"Rows excluded from an all-scope cancellation.","maxItems":10000,"type":"array","items":{"type":"string","minLength":1}}},"required":["workspaceId","scope"],"additionalProperties":false,"title":"Cancel table runs request","description":"Workspace scope, cancellation scope, and optional predicate or producer groups.","examples":[{"workspaceId":"a91c4b2e-6d3f-4e8a-b5c7-0d9e2f1a8c64","scope":"row","rowId":"row_1f3e5d7c9b8a4c2d806e4a6b8d0f2e93"}]},"Tables_V2Folder":{"type":"object","properties":{"name":{"type":"string","description":"Folder name."},"path":{"type":"string","title":"Non-root folder path","description":"Canonical folder path used as the public folder identifier.","maxLength":4096},"parentPath":{"type":"string","title":"Folder path","description":"Canonical parent path; `/` is the root.","maxLength":4096},"createdAt":{"type":"string","description":"ISO 8601 timestamp when the folder was created.","format":"date-time"},"updatedAt":{"type":"string","description":"ISO 8601 timestamp when the folder was last updated.","format":"date-time"}},"required":["name","path","parentPath","createdAt","updatedAt"],"additionalProperties":false,"title":"Folder","description":"A canonical workspace folder."},"Tables_V2TableFolderListResponse":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Tables_V2Folder"},"description":"Items in the current page."},"nextCursor":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Always `null` — this list has no `cursor` or `limit` param and returns its whole bounded set in one page. Present so the list can gain pages later without a shape change."}},"required":["data","nextCursor"],"additionalProperties":false,"title":"Table folder list response","description":"A cursor envelope containing table folders."},"Tables_V2CreateTableFolderResponse":{"type":"object","properties":{"data":{"description":"Response data.","$ref":"#/components/schemas/Tables_V2Folder"}},"required":["data"],"additionalProperties":false,"title":"Create table folder response","description":"The created table folder."},"Tables_NonRootFolderPathInput":{"title":"Non-root folder path input","description":"Non-root folder path. A missing leading slash is normalized before validation. Segments are percent-encoded, so a folder shown as \"New folder\" is `/New%20folder`: everything outside `A-Z a-z 0-9 - _ . ~` is escaped as uppercase hex, and only that exact encoding is accepted. A trailing slash, an empty segment, and a literal `.` or `..` segment are rejected. At most 64 segments and 4096 encoded bytes.","maxLength":4096,"type":"string"},"Tables_CreateTableFolderRequest":{"type":"object","properties":{"workspaceId":{"type":"string","minLength":1,"maxLength":128,"description":"Workspace in which to create the folder."},"path":{"description":"Path of the folder to create.","$ref":"#/components/schemas/Tables_NonRootFolderPathInput"}},"required":["workspaceId","path"],"additionalProperties":false,"title":"Create table folder request","description":"Workspace scope and canonical folder path to create."},"Tables_V2RelocateTableFolderResponse":{"type":"object","properties":{"data":{"description":"Response data.","$ref":"#/components/schemas/Tables_V2Folder"}},"required":["data"],"additionalProperties":false,"title":"Relocate table folder response","description":"The relocated table folder."},"Tables_RelocateTableFolderRequest":{"type":"object","properties":{"workspaceId":{"type":"string","minLength":1,"maxLength":128,"description":"Workspace containing the folder."},"path":{"description":"Current folder path.","$ref":"#/components/schemas/Tables_NonRootFolderPathInput"},"destinationPath":{"description":"New full path for the folder and its descendants.","$ref":"#/components/schemas/Tables_NonRootFolderPathInput"}},"required":["workspaceId","path","destinationPath"],"additionalProperties":false,"title":"Relocate table folder request","description":"Workspace scope, current canonical path, and destination path."},"Tables_V2DeleteTableFolderData":{"type":"object","properties":{"path":{"type":"string","title":"Folder path","description":"Canonical path of the deleted folder.","maxLength":4096},"deleted":{"type":"boolean","const":true,"description":"Confirms that the folder was deleted."},"deletedItems":{"type":"object","properties":{"folders":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Number of deleted folders."},"tables":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Number of deleted tables."}},"required":["folders","tables"],"additionalProperties":false,"description":"Deleted resource counts."}},"required":["path","deleted","deletedItems"],"additionalProperties":false,"title":"Delete table folder data","description":"Folder deletion acknowledgement and deleted-resource counts."},"Tables_V2DeleteTableFolderResponse":{"type":"object","properties":{"data":{"description":"Response data.","$ref":"#/components/schemas/Tables_V2DeleteTableFolderData"}},"required":["data"],"additionalProperties":false,"title":"Delete table folder response","description":"Folder deletion acknowledgement and deleted resource counts."},"Tables_V2TableFolderRestore":{"type":"object","properties":{"folder":{"description":"The restored folder, at the path it actually landed on — which is not always the path requested.","$ref":"#/components/schemas/Tables_V2Folder"},"restoredItems":{"type":"object","properties":{"folders":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Folders restored, including the one addressed."},"tables":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Tables restored inside the folder tree."}},"required":["folders","tables"],"additionalProperties":false,"description":"What the restore brought back."}},"required":["folder","restoredItems"],"additionalProperties":false,"title":"Table folder restore result","description":"The restored folder and the counts of items it brought back."},"Tables_V2RestoreTableFolderResponse":{"type":"object","properties":{"data":{"description":"Response data.","$ref":"#/components/schemas/Tables_V2TableFolderRestore"}},"required":["data"],"additionalProperties":false,"title":"Restore table folder response","description":"The restored table folder and the counts of items it brought back."},"Tables_RestoreTableFolderRequest":{"type":"object","properties":{"workspaceId":{"type":"string","minLength":1,"maxLength":128,"description":"Workspace that owns the archived folder."},"path":{"description":"Path the folder held when a folder delete archived it.","$ref":"#/components/schemas/Tables_NonRootFolderPathInput"}},"required":["workspaceId","path"],"additionalProperties":false,"title":"Restore table folder request","description":"Workspace scope and the canonical path the archived folder held."},"Tables_V2RestoreTableResponse":{"type":"object","properties":{"data":{"description":"Response data.","$ref":"#/components/schemas/Tables_V2ApiTable"}},"required":["data"],"additionalProperties":false,"title":"Restore table response","description":"The restored table."},"Tables_RestoreTableRequest":{"type":"object","properties":{"workspaceId":{"type":"string","minLength":1,"maxLength":128,"description":"Unique workspace identifier."}},"required":["workspaceId"],"additionalProperties":false,"title":"Restore table request","description":"Workspace scope for the archived table.","examples":[{"workspaceId":"a91c4b2e-6d3f-4e8a-b5c7-0d9e2f1a8c64"}]},"Tables_V2BulkUpdateRowsData":{"type":"object","properties":{"updatedCount":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Number of rows the batch updated."},"updatedRowIds":{"type":"array","items":{"type":"string"},"description":"Identifiers of the rows the batch updated."}},"required":["updatedCount","updatedRowIds"],"additionalProperties":false,"title":"Bulk update rows data","description":"Rows affected by a heterogeneous bulk update."},"Tables_V2BulkUpdateTableRowsResponse":{"type":"object","properties":{"data":{"description":"Response data.","$ref":"#/components/schemas/Tables_V2BulkUpdateRowsData"}},"required":["data"],"additionalProperties":false,"title":"Bulk update table rows response","description":"Updated row count and identifiers."},"Tables_BulkUpdateTableRowsRequest":{"type":"object","properties":{"workspaceId":{"type":"string","minLength":1,"maxLength":128,"description":"Workspace that owns the table."},"updates":{"minItems":1,"maxItems":1000,"type":"array","items":{"type":"object","properties":{"rowId":{"type":"string","minLength":1,"description":"Identifier of the row this patch applies to."},"data":{"description":"Cells to merge into this row, keyed by column name.","$ref":"#/components/schemas/Tables_V2TableRowData"}},"required":["rowId","data"],"additionalProperties":false},"description":"One merge patch per row. Each row identifier may appear at most once."}},"required":["workspaceId","updates"],"additionalProperties":false,"title":"Bulk update table rows request","description":"Workspace scope and one merge patch per row.","examples":[{"workspaceId":"a91c4b2e-6d3f-4e8a-b5c7-0d9e2f1a8c64","updates":[{"rowId":"row_1f3e5d7c9b8a4c2d806e4a6b8d0f2e93","data":{"status":"active"}},{"rowId":"row_2b4d6f8a0c1e3759b8d0f2a4c6e80193","data":{"status":"churned"}}]}]},"Tables_V2EnrichmentRunDetail":{"type":"object","properties":{"startedAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},{"type":"null"}],"description":"ISO 8601 timestamp when the cascade started, or null when not recorded."},"completedAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},{"type":"null"}],"description":"ISO 8601 timestamp when the cascade finished, or null when not recorded."},"durationMs":{"type":"number","description":"Wall-clock milliseconds across the whole cascade; zero when not recorded."},"totalCost":{"type":"number","description":"Sum of per-provider hosted-key cost in USD; zero when not recorded."},"matchedProvider":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Provider that produced the match, or null when none did."},"aborted":{"type":"boolean","description":"True when the run was canceled before it settled."},"providers":{"type":"array","items":{"$ref":"#/components/schemas/Tables_V2EnrichmentProviderOutcome"},"description":"Every configured provider, in cascade order, including those that never ran."}},"required":["startedAt","completedAt","durationMs","totalCost","matchedProvider","aborted","providers"],"additionalProperties":false,"title":"Enrichment run detail","description":"Provider cascade, cost, and timing for one enrichment cell."},"Tables_V2EnrichmentProviderOutcome":{"type":"object","properties":{"id":{"type":"string","description":"Provider identifier, e.g. `hunter`."},"label":{"type":"string","description":"Human-readable provider name."},"toolId":{"type":"string","description":"Sim tool identifier the provider ran."},"status":{"type":"string","description":"Provider outcome: `matched`, `no_match`, `skipped`, `error`, or `not_run`. Handle unrecognized values, since additional statuses may be returned."},"cost":{"type":"number","description":"Hosted-key cost in USD this provider incurred; zero when Sim did not bill it."},"durationMs":{"type":"number","description":"Wall-clock milliseconds this provider took; zero if skipped."},"error":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Failure reason when `status` is `error`, else null."}},"required":["id","label","toolId","status","cost","durationMs","error"],"additionalProperties":false,"title":"Enrichment provider outcome","description":"One provider's result within an enrichment cascade."},"Tables_V2RowEnrichmentResponse":{"type":"object","properties":{"data":{"anyOf":[{"$ref":"#/components/schemas/Tables_V2EnrichmentRunDetail"},{"type":"null"}],"description":"Response data."}},"required":["data"],"additionalProperties":false,"title":"Row enrichment response","description":"Provider cascade, cost, and timing for one enrichment cell."},"Tables_V2TableRunDispatch":{"type":"object","properties":{"id":{"type":"string","description":"Unique dispatch identifier."},"tableId":{"type":"string","description":"Table the dispatch runs against."},"workspaceId":{"type":"string","description":"Workspace that owns the dispatch."},"status":{"type":"string","enum":["pending","dispatching","complete","canceled"],"description":"Current dispatch lifecycle state."},"mode":{"type":"string","enum":["all","incomplete","new"],"description":"Which cells the dispatch targets: `all` re-runs settled cells, `incomplete` skips them, `new` covers only cells that have never run."},"scope":{"type":"object","properties":{"groupIds":{"type":"array","items":{"type":"string"},"description":"Workflow groups the dispatch runs."},"rowIds":{"description":"Explicit rows the dispatch targets. Absent means it was given no row list and walks every eligible row, narrowed by `filtered` and `excludeRowIds` when either is present.","type":"array","items":{"type":"string"}},"filtered":{"description":"Present and true when a stored filter narrows which rows run. The filter itself is not published: it is held compiled, in a different grammar from the predicate the request was written in. Absent means no filter narrows the dispatch — which, with no `rowIds` and no `excludeRowIds`, is what means every eligible row.","type":"boolean"},"excludeRowIds":{"description":"Rows the walk skips. Independent of `filtered`: a dispatch may exclude rows from a filtered set or from every eligible row. Never present alongside `rowIds`, which the run rejects and the walk would ignore.","type":"array","items":{"type":"string"}}},"required":["groupIds"],"additionalProperties":false,"description":"What the dispatch was asked to run."},"limit":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","const":"rows","description":"Unit the cap counts."},"max":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991,"description":"Hard ceiling in units of `type`."}},"required":["type","max"],"additionalProperties":false},{"type":"null"}],"description":"Cap on how much work the dispatch does, or null when unbounded."},"processedCount":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Units of `limit.type` consumed so far."},"isManualRun":{"type":"boolean","description":"True when a caller started the run, false for an automatic re-fire."},"requestedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$","description":"ISO 8601 timestamp when the dispatch was created."},"completedAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},{"type":"null"}],"description":"ISO 8601 timestamp when the dispatch completed, or null."},"canceledAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},{"type":"null"}],"description":"ISO 8601 timestamp when the dispatch was canceled, or null."}},"required":["id","tableId","workspaceId","status","mode","scope","limit","processedCount","isManualRun","requestedAt","completedAt","canceledAt"],"additionalProperties":false,"title":"Table run dispatch","description":"Lifecycle state of one table workflow-column run dispatch."},"Tables_V2TableRunDispatchResponse":{"type":"object","properties":{"data":{"description":"Response data.","$ref":"#/components/schemas/Tables_V2TableRunDispatch"}},"required":["data"],"additionalProperties":false,"title":"Table run dispatch response","description":"A single table run dispatch."},"Tables_V2CancelTableDispatchResponse":{"type":"object","properties":{"data":{"description":"Response data.","$ref":"#/components/schemas/Tables_V2TableRunDispatch"}},"required":["data"],"additionalProperties":false,"title":"Cancel table dispatch response","description":"The dispatch in its post-cancellation state."},"Tables_V2TableRunDispatchListResponse":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Tables_V2TableRunDispatch"},"description":"Items in the current page."},"nextCursor":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Always `null` — this list has no `cursor` or `limit` param and returns its whole bounded set in one page. Present so the list can gain pages later without a shape change."}},"required":["data","nextCursor"],"additionalProperties":false,"title":"Table run dispatch list response","description":"The table's active run dispatches."},"Tables_V2MoveTablesData":{"type":"object","properties":{"moved":{"type":"array","items":{"type":"object","properties":{"kind":{"type":"string","enum":["table","folder"],"description":"Which kind of item this entry names."},"id":{"type":"string","description":"Table identifier, or the folder path for a folder."},"name":{"type":"string","description":"Table name, or the folder path for a folder."}},"required":["kind","id","name"],"additionalProperties":false},"description":"Items the batch moved."},"skipped":{"type":"array","items":{"type":"object","properties":{"kind":{"type":"string","enum":["table","folder"],"description":"Which kind of item this entry names."},"id":{"type":"string","description":"Table identifier, or the folder path for a folder."},"name":{"type":"string","description":"Table name, or the folder path for a folder."}},"required":["kind","id","name"],"additionalProperties":false},"description":"Items dropped because a selected folder already carries them."},"notFound":{"type":"array","items":{"type":"object","properties":{"kind":{"type":"string","enum":["table","folder"],"description":"Which kind of item this entry names."},"id":{"type":"string","description":"Table identifier, or the folder path for a folder."}},"required":["kind","id"],"additionalProperties":false},"description":"Entries nothing active resolved to."},"failed":{"type":"array","items":{"type":"object","properties":{"kind":{"type":"string","enum":["table","folder"],"description":"Which kind of item this entry names."},"id":{"type":"string","description":"Table identifier, or the folder path for a folder."},"name":{"type":"string","description":"Table name, or the folder path for a folder."},"reason":{"type":"string","description":"Why this item could not be acted on."}},"required":["kind","id","name","reason"],"additionalProperties":false},"description":"Items the batch could not move."}},"required":["moved","skipped","notFound","failed"],"additionalProperties":false,"title":"Bulk move tables data","description":"Per-item outcome of a bulk table and folder move."},"Tables_V2MoveTablesResponse":{"type":"object","properties":{"data":{"description":"Response data.","$ref":"#/components/schemas/Tables_V2MoveTablesData"}},"required":["data"],"additionalProperties":false,"title":"Bulk move tables response","description":"Per-item outcome of a bulk table and folder move."},"Tables_BulkMoveTablesRequest":{"type":"object","properties":{"workspaceId":{"type":"string","minLength":1,"maxLength":128,"description":"Workspace that owns every selected item."},"tableIds":{"default":[],"description":"Tables to move, by identifier.","maxItems":100,"type":"array","items":{"type":"string","minLength":1}},"folderPaths":{"description":"Table folders to re-parent, by canonical path.","maxItems":100,"type":"array","items":{"$ref":"#/components/schemas/Tables_FolderPathInput"}},"targetFolderPath":{"description":"Destination folder path. Omit to move the selection to the workspace root.","$ref":"#/components/schemas/Tables_FolderPathInput"}},"required":["workspaceId"],"additionalProperties":false,"title":"Bulk move tables request","description":"Workspace scope, the tables and folder paths to move, and the destination folder path."},"Tables_V2BulkDeleteTablesData":{"type":"object","properties":{"deleted":{"type":"array","items":{"type":"object","properties":{"kind":{"type":"string","enum":["table","folder"],"description":"Which kind of item this entry names."},"id":{"type":"string","description":"Table identifier, or the folder path for a folder."},"name":{"type":"string","description":"Table name, or the folder path for a folder."}},"required":["kind","id","name"],"additionalProperties":false},"description":"Items the batch archived or deleted."},"skipped":{"type":"array","items":{"type":"object","properties":{"kind":{"type":"string","enum":["table","folder"],"description":"Which kind of item this entry names."},"id":{"type":"string","description":"Table identifier, or the folder path for a folder."},"name":{"type":"string","description":"Table name, or the folder path for a folder."}},"required":["kind","id","name"],"additionalProperties":false},"description":"Items dropped because a selected folder already carries them."},"notFound":{"type":"array","items":{"type":"object","properties":{"kind":{"type":"string","enum":["table","folder"],"description":"Which kind of item this entry names."},"id":{"type":"string","description":"Table identifier, or the folder path for a folder."}},"required":["kind","id"],"additionalProperties":false},"description":"Entries nothing active resolved to."},"failed":{"type":"array","items":{"type":"object","properties":{"kind":{"type":"string","enum":["table","folder"],"description":"Which kind of item this entry names."},"id":{"type":"string","description":"Table identifier, or the folder path for a folder."},"name":{"type":"string","description":"Table name, or the folder path for a folder."},"reason":{"type":"string","description":"Why this item could not be acted on."}},"required":["kind","id","name","reason"],"additionalProperties":false},"description":"Items the batch could not delete."},"deletedItems":{"type":"object","properties":{"tables":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Tables archived, including folder cascades."},"folders":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Folders deleted, including nested folders."}},"required":["tables","folders"],"additionalProperties":false,"description":"Totals across the explicit archives and every folder cascade they triggered."}},"required":["deleted","skipped","notFound","failed","deletedItems"],"additionalProperties":false,"title":"Bulk delete tables data","description":"Per-item outcome of a bulk table and folder delete."},"Tables_V2BulkDeleteTablesResponse":{"type":"object","properties":{"data":{"description":"Response data.","$ref":"#/components/schemas/Tables_V2BulkDeleteTablesData"}},"required":["data"],"additionalProperties":false,"title":"Bulk delete tables response","description":"Per-item outcome of a bulk table and folder delete.","examples":[{"data":{"deleted":[{"kind":"table","id":"tbl_7c9e6679742540de944be07fc1f90ae7","name":"Leads"},{"kind":"folder","id":"/Sales/Archive","name":"/Sales/Archive"}],"skipped":[],"notFound":[],"failed":[],"deletedItems":{"tables":1,"folders":1}}}]},"Tables_BulkDeleteTablesRequest":{"type":"object","properties":{"workspaceId":{"type":"string","minLength":1,"maxLength":128,"description":"Workspace that owns every selected item."},"tableIds":{"default":[],"description":"Tables to archive, by identifier.","maxItems":100,"type":"array","items":{"type":"string","minLength":1}},"folderPaths":{"description":"Table folders to delete, by canonical path. Each cascades to everything inside it.","maxItems":100,"type":"array","items":{"$ref":"#/components/schemas/Tables_FolderPathInput"}}},"required":["workspaceId"],"additionalProperties":false,"title":"Bulk delete tables request","description":"Workspace scope, and the tables and folder paths to delete."},"Knowledge_V2ActionableForbiddenDetails":{"type":"object","properties":{"code":{"$ref":"#/components/schemas/Knowledge_V2ForbiddenDetailCode"}},"required":["code"],"additionalProperties":{"description":"Additional context for this refusal."},"title":"Actionable forbidden details","description":"Machine-readable cause and optional context for an actionable `403` response."},"Knowledge_V2ForbiddenDetailCode":{"type":"string","enum":["INSUFFICIENT_WORKSPACE_ROLE","PERSONAL_API_KEYS_DISABLED","WORKSPACE_KEY_OPERATION_NOT_PERMITTED","PRINCIPAL_KIND_NOT_PERMITTED","ORGANIZATION_MEMBERSHIP_REQUIRED","ORGANIZATION_ADMIN_REQUIRED","ENTERPRISE_PLAN_REQUIRED","ORGANIZATION_PLAN_REQUIRED","AUDIT_LOGS_DISABLED","SKILL_EDITOR_ACCESS_REQUIRED","SECRET_ADMIN_ACCESS_REQUIRED","WORKSPACE_RESOURCE_LIMIT_REACHED","PUBLIC_SHARING_NOT_ALLOWED","CREDENTIAL_ADMIN_ACCESS_REQUIRED","MCP_SERVER_URL_NOT_ALLOWED","WORKSPACE_PLAN_CAPABILITY_REQUIRED","CHAT_AUTH_MODE_NOT_PERMITTED","CONNECTOR_MANAGED_RESOURCE_READ_ONLY","PERMISSION_GROUP_CAPABILITY_BLOCKED","INTEGRATION_NOT_ALLOWED","INSUFFICIENT_SCOPE","SCIM_MANAGED_MEMBERSHIP"],"title":"Forbidden detail code","description":"Stable cause code for an actionable `403` response."},"Knowledge_V2Error":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","description":"Stable machine-readable error code."},"message":{"type":"string","description":"Human-readable explanation of the error."},"details":{"description":"Structured error context whose keys depend on the error. Actionable `403` responses use the `V2ActionableForbiddenDetails` shape; validation failures may return issue arrays instead.","anyOf":[{"$ref":"#/components/schemas/Knowledge_V2ActionableForbiddenDetails"},{"description":"Other structured context defined by the specific error."}]}},"required":["code","message"],"additionalProperties":false,"description":"Canonical error details."}},"required":["error"],"additionalProperties":false,"title":"v2 error response","description":"Canonical error envelope returned by the public v2 API.","examples":[{"error":{"code":"BAD_REQUEST","message":"The request is invalid."}}]},"Knowledge_FolderPathInput":{"title":"Folder path input","description":"Folder path. A missing leading slash is normalized before validation. Segments are percent-encoded, so a folder shown as \"New folder\" is `/New%20folder`: everything outside `A-Z a-z 0-9 - _ . ~` is escaped as uppercase hex, and only that exact encoding is accepted. A trailing slash, an empty segment, and a literal `.` or `..` segment are rejected. At most 64 segments and 4096 encoded bytes.","maxLength":4096,"type":"string"},"Knowledge_V2KnowledgeBase":{"type":"object","properties":{"id":{"type":"string","description":"Unique knowledge base identifier.","examples":["7c9e6679-7425-40de-944b-e07fc1f90ae7"]},"name":{"type":"string","description":"Human-readable knowledge base name.","examples":["Product Documentation"]},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Knowledge base description, or null when none is set.","examples":["All product documentation and guides"]},"tokenCount":{"type":"number","description":"Total tokens across indexed documents.","examples":[48213]},"embeddingModel":{"type":"string","description":"Embedding model used to index documents.","examples":["text-embedding-3-small"]},"embeddingDimension":{"type":"number","description":"Dimensionality of the embedding vectors.","examples":[1536]},"chunkingConfig":{"$ref":"#/components/schemas/Knowledge_V2KnowledgeChunkingConfig"},"docCount":{"description":"Number of documents in the knowledge base.","examples":[12],"type":"number"},"connectorTypes":{"description":"External connector types that have synced documents into the knowledge base.","examples":[["notion","google_drive"]],"type":"array","items":{"type":"string"}},"createdAt":{"type":"string","description":"ISO 8601 timestamp when the knowledge base was created.","format":"date-time","examples":["2025-01-10T09:00:00Z"]},"updatedAt":{"type":"string","description":"ISO 8601 timestamp when the knowledge base was last modified.","format":"date-time","examples":["2025-06-18T16:45:00Z"]},"webUrl":{"type":"string","format":"uri","description":"Canonical absolute URL for opening this resource in the Sim web application."},"ownerEmail":{"type":"string","format":"email","pattern":"^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$","description":"Current email address of the knowledge base owner.","examples":["owner@example.com"]},"folderPath":{"type":"string","title":"Folder path","description":"Canonical containing-folder path; `/` is the workspace root. Resolved against active folders only, so an archived knowledge base whose containing folder was archived with it reports `/`.","maxLength":4096,"examples":["/Product"]},"deletedAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},{"type":"null"}],"description":"ISO 8601 archive timestamp, or null while active. Use List Knowledge Bases with `scope=archived` to find archived knowledge bases.","format":"date-time","examples":["2026-01-16T09:00:00Z"]}},"required":["id","name","description","tokenCount","embeddingModel","embeddingDimension","chunkingConfig","createdAt","updatedAt","webUrl","ownerEmail","folderPath","deletedAt"],"additionalProperties":false,"title":"Knowledge base","description":"A collection of documents indexed for vector and tag search."},"Knowledge_V2KnowledgeChunkingConfig":{"type":"object","properties":{"maxSize":{"type":"number","description":"Maximum chunk size in tokens.","examples":[1024]},"minSize":{"type":"number","description":"Minimum chunk size in characters.","examples":[100]},"overlap":{"type":"number","description":"Number of overlapping characters between adjacent chunks.","examples":[200]},"strategy":{"description":"Chunking strategy applied during document processing.","type":"string","enum":["auto","text","regex","recursive","sentence","token"]},"strategyOptions":{"description":"Strategy-specific tuning options.","type":"object","properties":{"pattern":{"description":"Regular expression used by the regex chunking strategy.","type":"string","maxLength":500},"separators":{"description":"Ordered separators used to split content into chunks.","type":"array","items":{"type":"string"}},"recipe":{"description":"Content-aware recipe used by the automatic chunking strategy.","type":"string","enum":["plain","markdown","code"]},"strictBoundaries":{"description":"Whether regex matches must form strict chunk boundaries.","type":"boolean"}},"additionalProperties":false}},"required":["maxSize","minSize","overlap"],"additionalProperties":{"description":"Additional forward-compatible chunking configuration property."},"title":"Knowledge chunking configuration","description":"How documents in a knowledge base are split into chunks before embedding."},"Knowledge_V2KnowledgeBaseListResponse":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Knowledge_V2KnowledgeBase"},"description":"Items in the current page."},"nextCursor":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Opaque cursor for the next page. Send it back as `cursor`; `null` means there is nothing further to fetch. Never construct one yourself."}},"required":["data","nextCursor"],"additionalProperties":false,"title":"Knowledge base list response","description":"A cursor-paginated page of knowledge bases."},"Knowledge_V2KnowledgeBaseResponse":{"type":"object","properties":{"data":{"description":"Response data.","$ref":"#/components/schemas/Knowledge_V2KnowledgeBase"}},"required":["data"],"additionalProperties":false,"title":"Knowledge base response","description":"A single knowledge base."},"Knowledge_V2KnowledgeChunkingConfigInput":{"type":"object","properties":{"maxSize":{"default":1024,"description":"Maximum chunk size in tokens.","examples":[1024],"type":"number","minimum":100,"maximum":4000},"minSize":{"default":100,"description":"Minimum chunk size in characters.","examples":[100],"type":"number","minimum":1,"maximum":2000},"overlap":{"default":200,"description":"Number of overlapping characters between adjacent chunks.","examples":[200],"type":"number","minimum":0,"maximum":500},"strategy":{"description":"Chunking strategy applied during document processing. `regex` additionally requires `strategyOptions.pattern`.","type":"string","enum":["auto","text","regex","recursive","sentence","token"]},"strategyOptions":{"description":"Strategy-specific tuning options. `strictBoundaries` is accepted only with `strategy: \"regex\"`.","type":"object","properties":{"pattern":{"description":"Regular expression used by the regex chunking strategy.","type":"string","maxLength":500},"separators":{"description":"Ordered separators used to split content into chunks.","maxItems":32,"type":"array","items":{"type":"string","maxLength":100}},"recipe":{"description":"Content-aware recipe used by the automatic chunking strategy.","type":"string","enum":["plain","markdown","code"]},"strictBoundaries":{"description":"Whether regex matches must form strict chunk boundaries.","type":"boolean"}},"additionalProperties":false}},"additionalProperties":false,"title":"Knowledge chunking configuration input","description":"Chunking configuration applied when processing documents. On update this object is replaced wholesale rather than merged, so a caller preserving one key must read, modify, and write the whole object back."},"Knowledge_CreateKnowledgeBaseRequest":{"type":"object","properties":{"workspaceId":{"type":"string","minLength":1,"maxLength":128,"description":"Workspace in which to create the knowledge base."},"name":{"type":"string","minLength":1,"maxLength":255,"description":"Human-readable knowledge base name.","examples":["Product Documentation"]},"description":{"description":"Optional knowledge base description.","examples":["All product documentation and guides"],"type":"string","maxLength":10000},"chunkingConfig":{"default":{"maxSize":1024,"minSize":100,"overlap":200},"description":"Chunking configuration; defaults are applied when omitted.","$ref":"#/components/schemas/Knowledge_V2KnowledgeChunkingConfigInput"},"folderPath":{"description":"Containing folder path; omission creates the knowledge base at the root.","$ref":"#/components/schemas/Knowledge_FolderPathInput"}},"required":["workspaceId","name"],"additionalProperties":false,"title":"Create knowledge base request","description":"Workspace, name, description, chunking configuration, and folder placement."},"Knowledge_UpdateKnowledgeBaseRequest":{"type":"object","properties":{"workspaceId":{"type":"string","minLength":1,"maxLength":128,"description":"Workspace that owns the knowledge base."},"name":{"description":"New knowledge base name.","examples":["Updated Product Documentation"],"type":"string","minLength":1,"maxLength":255},"description":{"description":"New knowledge base description.","examples":["Refreshed product documentation and guides"],"type":"string","maxLength":10000},"chunkingConfig":{"description":"New document chunking configuration.","$ref":"#/components/schemas/Knowledge_V2KnowledgeChunkingConfigInput"},"folderPath":{"description":"New containing-folder path.","$ref":"#/components/schemas/Knowledge_FolderPathInput"}},"required":["workspaceId"],"additionalProperties":false,"title":"Update knowledge base request","description":"Workspace scope and fields to update. At least one mutable field is required."},"Knowledge_V2KnowledgeDeleteData":{"type":"object","properties":{"id":{"type":"string","description":"Identifier of the deleted resource.","examples":["7c9e6679-7425-40de-944b-e07fc1f90ae7"]},"deleted":{"type":"boolean","const":true,"description":"Confirms that the resource was deleted."}},"required":["id","deleted"],"additionalProperties":false,"title":"Knowledge deletion data","description":"Acknowledgement for a deleted knowledge base or document."},"Knowledge_V2KnowledgeDeleteResponse":{"type":"object","properties":{"data":{"description":"Response data.","$ref":"#/components/schemas/Knowledge_V2KnowledgeDeleteData"}},"required":["data"],"additionalProperties":false,"title":"Knowledge deletion response","description":"Deletion acknowledgement containing the removed resource identifier."},"Knowledge_V2KnowledgeConnector":{"type":"object","properties":{"id":{"type":"string","minLength":1,"description":"Unique connector identifier."},"knowledgeBaseId":{"type":"string","minLength":1,"description":"Knowledge base synced by the connector."},"connectorType":{"type":"string","minLength":1,"description":"Registered external source type."},"credentialId":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"OAuth credential identifier, or null for API-key and unauthenticated sources."},"sourceConfig":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"description":"Connector-specific source configuration value."},"description":"Connector-specific source selection and filtering configuration."},"syncMode":{"type":"string","description":"Synchronization mode used by the connector."},"syncIntervalMinutes":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Scheduled synchronization interval in minutes; zero disables scheduled syncs."},"status":{"type":"string","enum":["active","paused","pending","syncing","error","disabled"],"description":"Current connector state. `pending` means a sync is queued but not yet running."},"lastSyncAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},{"type":"null"}],"description":"Time of the most recent synchronization, or null before the first sync."},"lastSyncError":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Most recent synchronization error, or null when none is recorded."},"lastSyncDocCount":{"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}],"description":"Documents observed by the most recent synchronization."},"nextSyncAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},{"type":"null"}],"description":"Next scheduled synchronization time, or null when not scheduled."},"consecutiveFailures":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Number of consecutive synchronization failures."},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$","description":"Time the connector was created."},"updatedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$","description":"Time the connector was last updated."}},"required":["id","knowledgeBaseId","connectorType","credentialId","sourceConfig","syncMode","syncIntervalMinutes","status","lastSyncAt","lastSyncError","lastSyncDocCount","nextSyncAt","consecutiveFailures","createdAt","updatedAt"],"additionalProperties":false,"title":"Knowledge connector","description":"An external document source linked to a knowledge base, without secret material."},"Knowledge_V2KnowledgeConnectorListResponse":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Knowledge_V2KnowledgeConnector"},"description":"Items in the current page."},"nextCursor":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Opaque cursor for the next page. Send it back as `cursor`; `null` means there is nothing further to fetch. Never construct one yourself."}},"required":["data","nextCursor"],"additionalProperties":false,"title":"Knowledge connector list response","description":"A cursor-paginated page of connectors without secret material.","examples":[{"data":[{"id":"kc-9f8e7d6c","knowledgeBaseId":"7c9e6679-7425-40de-944b-e07fc1f90ae7","connectorType":"notion","credentialId":"cred-4b3a2c1d","sourceConfig":{"pageIds":["page-123"]},"syncMode":"full","syncIntervalMinutes":1440,"status":"active","lastSyncAt":"2026-06-20T14:02:11.000Z","lastSyncError":null,"lastSyncDocCount":42,"nextSyncAt":"2026-06-21T14:02:11.000Z","consecutiveFailures":0,"createdAt":"2026-06-01T09:14:00.000Z","updatedAt":"2026-06-20T14:02:11.000Z"}],"nextCursor":null}]},"Knowledge_V2KnowledgeConnectorResponse":{"type":"object","properties":{"data":{"description":"Response data.","$ref":"#/components/schemas/Knowledge_V2KnowledgeConnector"}},"required":["data"],"additionalProperties":false,"title":"Knowledge connector response","description":"A single connector without secret material.","examples":[{"data":{"id":"kc-9f8e7d6c","knowledgeBaseId":"7c9e6679-7425-40de-944b-e07fc1f90ae7","connectorType":"notion","credentialId":"cred-4b3a2c1d","sourceConfig":{"pageIds":["page-123"]},"syncMode":"full","syncIntervalMinutes":1440,"status":"active","lastSyncAt":"2026-06-20T14:02:11.000Z","lastSyncError":null,"lastSyncDocCount":42,"nextSyncAt":"2026-06-21T14:02:11.000Z","consecutiveFailures":0,"createdAt":"2026-06-01T09:14:00.000Z","updatedAt":"2026-06-20T14:02:11.000Z"}}]},"Knowledge_CreateKnowledgeConnectorRequest":{"type":"object","properties":{"workspaceId":{"type":"string","minLength":1,"maxLength":128,"description":"Workspace that owns the knowledge base."},"connectorType":{"type":"string","minLength":1,"maxLength":100,"description":"Registered connector type."},"credentialId":{"description":"OAuth credential identifier for connectors that require OAuth.","type":"string","minLength":1,"maxLength":255},"apiKey":{"description":"Write-only API key for connectors that use API-key authentication.","type":"string","minLength":1,"maxLength":10000},"sourceConfig":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"description":"Connector-specific source configuration value."},"description":"Connector-specific source selection and filtering configuration."},"syncIntervalMinutes":{"default":1440,"description":"Scheduled synchronization interval in minutes; zero disables scheduling.","type":"integer","minimum":0,"maximum":525600}},"required":["workspaceId","connectorType","sourceConfig"],"additionalProperties":false,"title":"Create knowledge connector request","description":"Workspace, connector type, authentication reference, source configuration, and sync schedule.","examples":[{"workspaceId":"a91c4b2e-6d3f-4e8a-b5c7-0d9e2f1a8c64","connectorType":"notion","credentialId":"cred-4b3a2c1d","sourceConfig":{"pageIds":["page-123"]},"syncIntervalMinutes":1440}]},"Knowledge_V2KnowledgeConnectorSyncLog":{"type":"object","properties":{"id":{"type":"string","minLength":1,"description":"Unique synchronization log identifier."},"connectorId":{"type":"string","minLength":1,"description":"Connector that produced the log."},"status":{"type":"string","minLength":1,"description":"Synchronization outcome or current state."},"startedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$","description":"Time synchronization started."},"completedAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},{"type":"null"}],"description":"Time synchronization completed, or null while it is running."},"docsAdded":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Documents added."},"docsUpdated":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Documents updated."},"docsDeleted":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Documents deleted."},"docsUnchanged":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Documents unchanged."},"docsSkipped":{"default":0,"description":"Documents intentionally skipped because they could not be indexed safely.","type":"integer","minimum":0,"maximum":9007199254740991},"docsFailed":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Documents that failed to synchronize."},"errorMessage":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Synchronization error, or null."}},"required":["id","connectorId","status","startedAt","completedAt","docsAdded","docsUpdated","docsDeleted","docsUnchanged","docsSkipped","docsFailed","errorMessage"],"additionalProperties":false,"title":"Knowledge connector sync log","description":"One synchronization attempt for a knowledge connector."},"Knowledge_V2KnowledgeConnectorDetail":{"type":"object","properties":{"id":{"type":"string","minLength":1,"description":"Unique connector identifier."},"knowledgeBaseId":{"type":"string","minLength":1,"description":"Knowledge base synced by the connector."},"connectorType":{"type":"string","minLength":1,"description":"Registered external source type."},"credentialId":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"OAuth credential identifier, or null for API-key and unauthenticated sources."},"sourceConfig":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"description":"Connector-specific source configuration value."},"description":"Connector-specific source selection and filtering configuration."},"syncMode":{"type":"string","description":"Synchronization mode used by the connector."},"syncIntervalMinutes":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Scheduled synchronization interval in minutes; zero disables scheduled syncs."},"status":{"type":"string","enum":["active","paused","pending","syncing","error","disabled"],"description":"Current connector state. `pending` means a sync is queued but not yet running."},"lastSyncAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},{"type":"null"}],"description":"Time of the most recent synchronization, or null before the first sync."},"lastSyncError":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Most recent synchronization error, or null when none is recorded."},"lastSyncDocCount":{"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}],"description":"Documents observed by the most recent synchronization."},"nextSyncAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},{"type":"null"}],"description":"Next scheduled synchronization time, or null when not scheduled."},"consecutiveFailures":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Number of consecutive synchronization failures."},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$","description":"Time the connector was created."},"updatedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$","description":"Time the connector was last updated."},"syncLogs":{"type":"array","items":{"$ref":"#/components/schemas/Knowledge_V2KnowledgeConnectorSyncLog"},"description":"The ten most recent synchronization attempts."}},"required":["id","knowledgeBaseId","connectorType","credentialId","sourceConfig","syncMode","syncIntervalMinutes","status","lastSyncAt","lastSyncError","lastSyncDocCount","nextSyncAt","consecutiveFailures","createdAt","updatedAt","syncLogs"],"additionalProperties":false,"title":"Knowledge connector detail","description":"A knowledge connector and its recent synchronization history."},"Knowledge_V2KnowledgeConnectorDetailResponse":{"type":"object","properties":{"data":{"description":"Response data.","$ref":"#/components/schemas/Knowledge_V2KnowledgeConnectorDetail"}},"required":["data"],"additionalProperties":false,"title":"Knowledge connector detail response","description":"A connector and recent synchronization history without secret material.","examples":[{"data":{"id":"kc-9f8e7d6c","knowledgeBaseId":"7c9e6679-7425-40de-944b-e07fc1f90ae7","connectorType":"notion","credentialId":"cred-4b3a2c1d","sourceConfig":{"pageIds":["page-123"]},"syncMode":"full","syncIntervalMinutes":1440,"status":"active","lastSyncAt":"2026-06-20T14:02:11.000Z","lastSyncError":null,"lastSyncDocCount":42,"nextSyncAt":"2026-06-21T14:02:11.000Z","consecutiveFailures":0,"createdAt":"2026-06-01T09:14:00.000Z","updatedAt":"2026-06-20T14:02:11.000Z","syncLogs":[]}}]},"Knowledge_UpdateKnowledgeConnectorRequest":{"type":"object","properties":{"workspaceId":{"type":"string","minLength":1,"maxLength":128,"description":"Workspace that owns the knowledge base."},"sourceConfig":{"description":"Replacement source selection and filtering configuration. Updating a runnable connector queues synchronization; paused connectors remain paused.","type":"object","propertyNames":{"type":"string"},"additionalProperties":{"description":"Connector-specific source configuration value."}},"syncIntervalMinutes":{"description":"New scheduled synchronization interval in minutes.","type":"integer","minimum":0,"maximum":525600},"status":{"description":"New connector state.","type":"string","enum":["active","paused"]}},"required":["workspaceId"],"additionalProperties":false,"title":"Update knowledge connector request","description":"Workspace scope and at least one mutable connector field.","examples":[{"workspaceId":"a91c4b2e-6d3f-4e8a-b5c7-0d9e2f1a8c64","status":"paused"}]},"Knowledge_V2KnowledgeConnectorDeleteData":{"type":"object","properties":{"id":{"type":"string","minLength":1,"description":"Deleted connector identifier."},"deleted":{"type":"boolean","const":true,"description":"Whether the connector was deleted."},"documentsDeleted":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Connector documents deleted."},"documentsKept":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Connector documents retained."}},"required":["id","deleted","documentsDeleted","documentsKept"],"additionalProperties":false,"title":"Knowledge connector deletion data","description":"Connector deletion acknowledgement and affected document counts."},"Knowledge_V2KnowledgeConnectorDeleteResponse":{"type":"object","properties":{"data":{"description":"Response data.","$ref":"#/components/schemas/Knowledge_V2KnowledgeConnectorDeleteData"}},"required":["data"],"additionalProperties":false,"title":"Knowledge connector delete response","description":"Deletion acknowledgement and affected document counts.","examples":[{"data":{"id":"kc-9f8e7d6c","deleted":true,"documentsDeleted":0,"documentsKept":42}}]},"Knowledge_V2KnowledgeConnectorSyncData":{"type":"object","properties":{"id":{"type":"string","minLength":1,"description":"Connector queued for synchronization."},"syncTriggered":{"type":"boolean","const":true,"description":"Whether synchronization was queued."}},"required":["id","syncTriggered"],"additionalProperties":false,"title":"Knowledge connector sync data","description":"Acknowledgement that connector synchronization was queued."},"Knowledge_V2KnowledgeConnectorSyncResponse":{"type":"object","properties":{"data":{"description":"Response data.","$ref":"#/components/schemas/Knowledge_V2KnowledgeConnectorSyncData"}},"required":["data"],"additionalProperties":false,"title":"Knowledge connector sync response","description":"Acknowledgement that synchronization was queued.","examples":[{"data":{"id":"kc-9f8e7d6c","syncTriggered":true}}]},"Knowledge_SyncKnowledgeConnectorRequest":{"type":"object","properties":{"workspaceId":{"type":"string","minLength":1,"maxLength":128,"description":"Workspace that owns the knowledge base."},"rehydrate":{"default":false,"description":"Re-fetch and re-index every existing connector document.","type":"boolean"}},"required":["workspaceId"],"additionalProperties":false,"title":"Sync knowledge connector request","description":"Workspace scope and optional full rehydration control.","examples":[{"workspaceId":"a91c4b2e-6d3f-4e8a-b5c7-0d9e2f1a8c64","rehydrate":false}]},"Knowledge_V2KnowledgeConnectorDocument":{"type":"object","properties":{"id":{"type":"string","minLength":1,"description":"Unique document identifier."},"filename":{"type":"string","minLength":1,"description":"Document filename."},"externalId":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Identifier assigned by the external source."},"sourceUrl":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Original external source URL."},"enabled":{"type":"boolean","description":"Whether the document is enabled for knowledge search."},"userExcluded":{"type":"boolean","description":"Whether a user explicitly excluded the document from connector sync results."},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$","description":"Time the document was first synchronized."},"processingStatus":{"type":"string","description":"Current document processing state."}},"required":["id","filename","externalId","sourceUrl","enabled","userExcluded","createdAt","processingStatus"],"additionalProperties":false,"title":"Knowledge connector document","description":"A knowledge document produced by an external connector."},"Knowledge_V2KnowledgeConnectorDocumentListResponse":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Knowledge_V2KnowledgeConnectorDocument"},"description":"Items in the current page."},"nextCursor":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Opaque cursor for the next page. Send it back as `cursor`; `null` means there is nothing further to fetch. Never construct one yourself."}},"required":["data","nextCursor"],"additionalProperties":false,"title":"Knowledge connector document list response","description":"A cursor-paginated page of connector documents.","examples":[{"data":[{"id":"doc-8a7b6c5d","filename":"Product requirements","externalId":"page-123","sourceUrl":"https://www.notion.so/page-123","enabled":true,"userExcluded":false,"createdAt":"2026-06-01T09:15:00.000Z","processingStatus":"completed"}],"nextCursor":null}]},"Knowledge_V2KnowledgeConnectorDocumentsUpdateData":{"type":"object","properties":{"operation":{"type":"string","enum":["restore","exclude"],"description":"Operation that was applied."},"updatedCount":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Documents changed."},"documentIds":{"type":"array","items":{"type":"string"},"description":"Identifiers of documents changed."}},"required":["operation","updatedCount","documentIds"],"additionalProperties":false,"title":"Knowledge connector documents update data","description":"Outcome of restoring or excluding connector documents."},"Knowledge_V2KnowledgeConnectorDocumentsUpdateResponse":{"type":"object","properties":{"data":{"description":"Response data.","$ref":"#/components/schemas/Knowledge_V2KnowledgeConnectorDocumentsUpdateData"}},"required":["data"],"additionalProperties":false,"title":"Knowledge connector documents update response","description":"Operation result and identifiers actually changed.","examples":[{"data":{"operation":"exclude","updatedCount":1,"documentIds":["doc-8a7b6c5d"]}}]},"Knowledge_UpdateKnowledgeConnectorDocumentsRequest":{"type":"object","properties":{"workspaceId":{"type":"string","minLength":1,"maxLength":128,"description":"Workspace that owns the knowledge base."},"operation":{"type":"string","enum":["restore","exclude"],"description":"Whether to restore or exclude the selected documents."},"documentIds":{"minItems":1,"maxItems":100,"type":"array","items":{"type":"string","minLength":1,"maxLength":255},"description":"Connector document identifiers to update."}},"required":["workspaceId","operation","documentIds"],"additionalProperties":false,"title":"Update knowledge connector documents request","description":"Workspace, restore or exclude operation, and selected document identifiers.","examples":[{"workspaceId":"a91c4b2e-6d3f-4e8a-b5c7-0d9e2f1a8c64","operation":"exclude","documentIds":["doc-8a7b6c5d"]}]},"Knowledge_V2KnowledgeSearchResult":{"type":"object","properties":{"knowledgeBaseId":{"type":"string","description":"Knowledge base the matching chunk came from; a search may span up to 20.","examples":["7c9e6679-7425-40de-944b-e07fc1f90ae7"]},"documentId":{"type":"string","description":"Identifier of the document containing the matching chunk.","examples":["b2d4f8a0-1c3e-4a5b-9d7c-2e6f0a8b4c12"]},"documentName":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filename of the source document, or null when unavailable.","examples":["getting-started.pdf"]},"sourceUrl":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Original source URL, or null for a directly uploaded document."},"content":{"type":"string","description":"Text content of the matching chunk.","examples":["To reset your password, open Settings and choose Security."]},"chunkIndex":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Zero-based chunk index within the document.","examples":[3]},"metadata":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"description":"User-defined string, number, boolean, or date tag value."},"description":"Document tag values keyed by tag display name.","examples":[{"category":"billing","priority":2}]},"similarity":{"type":"number","description":"Similarity score for vector search; tag-only matches use 1.","examples":[0.8423]},"rerankerScore":{"description":"Relevance score assigned by the reranker, present only on results a reranker ordered. Results are ordered by this score when it is present, which is why it can disagree with `similarity`.","examples":[0.9312],"type":"number"}},"required":["knowledgeBaseId","documentId","documentName","sourceUrl","content","chunkIndex","metadata","similarity"],"additionalProperties":false,"title":"Knowledge search result","description":"A matching document chunk returned by knowledge search."},"Knowledge_V2KnowledgeSearchData":{"type":"object","properties":{"results":{"type":"array","items":{"$ref":"#/components/schemas/Knowledge_V2KnowledgeSearchResult"},"description":"Matching chunks ordered by relevance."},"query":{"type":"string","description":"Executed query, or an empty string for tag-only search.","examples":["How do I reset my password?"]},"knowledgeBaseIds":{"type":"array","items":{"type":"string"},"description":"Knowledge base identifiers that were searched.","examples":[["7c9e6679-7425-40de-944b-e07fc1f90ae7"]]},"topK":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991,"description":"Maximum number of results requested.","examples":[10]},"totalResults":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Number of results returned.","examples":[4]},"rerankerStatus":{"type":"string","enum":["not_requested","skipped","unavailable","applied"],"description":"What the reranker did on this search. `applied` means it ordered the results, which carry `rerankerScore`. `unavailable` means it was attempted but could not complete, so results are in vector order with no `rerankerScore` — the search still succeeded, and is worth retrying. `skipped` means there was nothing to rank. `not_requested` means `rerankerEnabled` was absent or false.","examples":["applied"]}},"required":["results","query","knowledgeBaseIds","topK","totalResults","rerankerStatus"],"additionalProperties":false,"title":"Knowledge search data","description":"Results and execution context for a knowledge search."},"Knowledge_V2KnowledgeSearchResponse":{"type":"object","properties":{"data":{"description":"Response data.","$ref":"#/components/schemas/Knowledge_V2KnowledgeSearchData"}},"required":["data"],"additionalProperties":false,"title":"Knowledge search response","description":"Matching chunks and search execution context."},"Knowledge_V2KnowledgeSearchTagFilter":{"type":"object","properties":{"tagName":{"type":"string","description":"Display name of the tag to filter.","examples":["category"]},"fieldType":{"description":"Tag field type.","type":"string","enum":["text","number","date","boolean"]},"operator":{"default":"eq","description":"Comparison operator; valid operators depend on the field type. Text tags accept eq, neq, contains, not_contains, starts_with, ends_with; number and date tags accept eq, neq, gt, gte, lt, lte, between; boolean tags accept eq, neq. An operator the tag's field type does not implement is rejected, never ignored.","examples":["eq"],"type":"string","enum":["eq","neq","contains","not_contains","starts_with","ends_with","gt","gte","lt","lte","between"]},"value":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"}],"description":"Tag value to compare against.","examples":["billing"]},"valueTo":{"description":"Upper bound for the `between` operator, and required whenever that operator is used.","anyOf":[{"type":"string"},{"type":"number"}]}},"required":["tagName","value"],"additionalProperties":false,"title":"Knowledge search tag filter","description":"A structured tag filter applied to knowledge search."},"Knowledge_SearchKnowledgeRequest":{"type":"object","properties":{"workspaceId":{"type":"string","minLength":1,"maxLength":128,"description":"Workspace that owns the knowledge bases."},"knowledgeBaseIds":{"anyOf":[{"type":"string","minLength":1},{"minItems":1,"maxItems":20,"type":"array","items":{"type":"string","minLength":1}}],"description":"One knowledge base identifier or an array of up to 20 identifiers.","examples":[["7c9e6679-7425-40de-944b-e07fc1f90ae7"]]},"query":{"description":"Natural-language query; required when tag filters are omitted. At most 32768 characters — longer text exceeds the embedding model's per-input token ceiling and would be truncated before the billed search ran.","examples":["How do I reset my password?"],"type":"string","maxLength":32768},"topK":{"default":10,"description":"Maximum number of search results to return. Must be a whole number between 1 and 100.","type":"number","minimum":1,"maximum":100},"tagFilters":{"description":"Up to 10 filters combined with AND; repeating a tag narrows results. To express OR, run separate searches. Every tag must exist with the same slot and field type in each selected knowledge base or the request is rejected. List valid names with the knowledge-base tag-list operation.","maxItems":10,"type":"array","items":{"$ref":"#/components/schemas/Knowledge_V2KnowledgeSearchTagFilter"}},"searchMode":{"description":"Retrieval strategy: vector is semantic-only, while hybrid also runs full-text search.","anyOf":[{"type":"string","enum":["vector","hybrid"]},{"type":"null"}]},"rerankerEnabled":{"description":"Re-order retrieved chunks with a reranking model before truncating to `topK`. Ignored for a tag-only search, and billed as an additional search unit. Reranking is best-effort — a provider failure falls back to vector ordering, so check `rerankerStatus` on the response.","type":"boolean"},"rerankerModel":{"default":"rerank-v4.0-fast","description":"Reranking model to use when `rerankerEnabled` is true. Defaults to `rerank-v4.0-fast`.","type":"string","enum":["rerank-v4.0-pro","rerank-v4.0-fast","rerank-v3.5"]},"rerankerInputCount":{"description":"How many candidate chunks to retrieve before reranking. Defaults to four times `topK`, capped at 100. A larger pool costs more retrieval work but gives the reranker more to choose from.","type":"integer","minimum":1,"maximum":100}},"required":["workspaceId","knowledgeBaseIds"],"additionalProperties":false,"title":"Search knowledge request","description":"Knowledge bases, query, result limit, retrieval mode, and optional tag filters."},"Knowledge_V2KnowledgeTag":{"type":"object","properties":{"id":{"type":"string","description":"Tag definition ID used by Update Tag and Delete Tag."},"displayName":{"type":"string","description":"Display name used by tag filters and by tag values on document reads.","examples":["category"]},"tagSlot":{"type":"string","description":"Storage slot the tag occupies. Document writes set tag values by slot (`tag1`..`tag7`).","examples":["tag1"]},"fieldType":{"type":"string","description":"Value type stored in the slot; it determines the valid filter operators.","examples":["text"]}},"required":["id","displayName","tagSlot","fieldType"],"additionalProperties":false,"title":"Knowledge tag","description":"A tag defined on a knowledge base, and the slot it is stored in."},"Knowledge_V2KnowledgeTagListResponse":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Knowledge_V2KnowledgeTag"},"description":"Items in the current page."},"nextCursor":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Always `null` — this list has no `cursor` or `limit` param and returns its whole bounded set in one page. Present so the list can gain pages later without a shape change."}},"required":["data","nextCursor"],"additionalProperties":false,"title":"Knowledge tag list response","description":"The full tag vocabulary of one knowledge base."},"Knowledge_V2KnowledgeTaggedDocument":{"type":"object","properties":{"id":{"type":"string","description":"Unique document identifier.","examples":["b2d4f8a0-1c3e-4a5b-9d7c-2e6f0a8b4c12"]},"knowledgeBaseId":{"type":"string","description":"Knowledge base to which the document belongs.","examples":["7c9e6679-7425-40de-944b-e07fc1f90ae7"]},"filename":{"type":"string","description":"Original filename of the uploaded document.","examples":["getting-started.pdf"]},"fileSize":{"type":"number","description":"File size in bytes.","examples":[248913]},"mimeType":{"type":"string","description":"MIME type of the document file.","examples":["application/pdf"]},"processingStatus":{"type":"string","enum":["pending","processing","completed","failed"],"description":"Current document processing state.","examples":["completed"]},"chunkCount":{"type":"number","description":"Number of indexed chunks; zero until processing completes.","examples":[24]},"tokenCount":{"type":"number","description":"Total tokens extracted from the document.","examples":[8123]},"characterCount":{"type":"number","description":"Total characters extracted from the document.","examples":[41205]},"enabled":{"type":"boolean","description":"Whether the document is enabled for search.","examples":[true]},"createdAt":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"ISO 8601 timestamp when the document was uploaded, or null.","format":"date-time","examples":["2025-06-18T16:45:00Z"]},"tags":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"}],"description":"Tag value; dates are ISO 8601 strings and an unset tag is null."},"description":"Document tag values keyed by display name. Writes use slots such as `tag1`; use List Tags to map names to slots.","examples":[{"category":"billing","priority":2}]}},"required":["id","knowledgeBaseId","filename","fileSize","mimeType","processingStatus","chunkCount","tokenCount","characterCount","enabled","createdAt","tags"],"additionalProperties":false,"title":"Knowledge document list item","description":"Document summary with the document tag values keyed by display name."},"Knowledge_V2KnowledgeDocumentListResponse":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Knowledge_V2KnowledgeTaggedDocument"},"description":"Items in the current page."},"nextCursor":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Opaque cursor for the next page. Send it back as `cursor`; `null` means there is nothing further to fetch. Never construct one yourself."}},"required":["data","nextCursor"],"additionalProperties":false,"title":"Knowledge document list response","description":"A cursor-paginated page of knowledge documents."},"Knowledge_V2BulkKnowledgeDocumentsData":{"type":"object","properties":{"operation":{"type":"string","enum":["enable","disable"],"description":"Operation that was applied."},"updatedCount":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Number of documents the operation changed.","examples":[42]},"documentIds":{"description":"Identifiers of the documents the operation changed. Present only for an explicit `documentIds` request, which is bounded to 100 documents; a `selectAll` request omits it because the selection is unbounded, and reports `updatedCount` instead.","type":"array","items":{"type":"string"}}},"required":["operation","updatedCount"],"additionalProperties":false,"title":"Bulk knowledge document update data","description":"Outcome of a bulk enable or disable across knowledge documents."},"Knowledge_V2BulkKnowledgeDocumentsResponse":{"type":"object","properties":{"data":{"description":"Response data.","$ref":"#/components/schemas/Knowledge_V2BulkKnowledgeDocumentsData"}},"required":["data"],"additionalProperties":false,"title":"Bulk knowledge document response","description":"Outcome of a bulk enable or disable."},"Knowledge_BulkUpdateKnowledgeDocumentsRequest":{"type":"object","properties":{"workspaceId":{"type":"string","minLength":1,"maxLength":128,"description":"Workspace that owns the knowledge base."},"operation":{"type":"string","enum":["enable","disable"],"description":"Whether the selected documents become enabled or disabled for search."},"documentIds":{"description":"Documents to update, by identifier.","minItems":1,"maxItems":100,"type":"array","items":{"type":"string","minLength":1}},"selectAll":{"description":"Update every document in the knowledge base instead of an explicit list, narrowed by `enabledFilter`.","type":"boolean","const":true},"enabledFilter":{"description":"With `selectAll`, restrict the update to documents in this state.","type":"string","enum":["all","enabled","disabled"]}},"required":["workspaceId","operation"],"additionalProperties":false,"title":"Bulk knowledge document request","description":"Operation and the documents it applies to.","examples":[{"workspaceId":"a91c4b2e-6d3f-4e8a-b5c7-0d9e2f1a8c64","operation":"disable","documentIds":["b2d4f8a0-1c3e-4a5b-9d7c-2e6f0a8b4c12"]}]},"Knowledge_V2KnowledgeDocumentSummary":{"type":"object","properties":{"id":{"type":"string","description":"Unique document identifier.","examples":["b2d4f8a0-1c3e-4a5b-9d7c-2e6f0a8b4c12"]},"knowledgeBaseId":{"type":"string","description":"Knowledge base to which the document belongs.","examples":["7c9e6679-7425-40de-944b-e07fc1f90ae7"]},"filename":{"type":"string","description":"Original filename of the uploaded document.","examples":["getting-started.pdf"]},"fileSize":{"type":"number","description":"File size in bytes.","examples":[248913]},"mimeType":{"type":"string","description":"MIME type of the document file.","examples":["application/pdf"]},"processingStatus":{"type":"string","enum":["pending","processing","completed","failed"],"description":"Current document processing state.","examples":["completed"]},"chunkCount":{"type":"number","description":"Number of indexed chunks; zero until processing completes.","examples":[24]},"tokenCount":{"type":"number","description":"Total tokens extracted from the document.","examples":[8123]},"characterCount":{"type":"number","description":"Total characters extracted from the document.","examples":[41205]},"enabled":{"type":"boolean","description":"Whether the document is enabled for search.","examples":[true]},"createdAt":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"ISO 8601 timestamp when the document was uploaded, or null.","format":"date-time","examples":["2025-06-18T16:45:00Z"]}},"required":["id","knowledgeBaseId","filename","fileSize","mimeType","processingStatus","chunkCount","tokenCount","characterCount","enabled","createdAt"],"additionalProperties":false,"title":"Knowledge document summary","description":"Summary returned by document lists and upload acknowledgements."},"Knowledge_V2KnowledgeDocumentSummaryResponse":{"type":"object","properties":{"data":{"description":"Response data.","$ref":"#/components/schemas/Knowledge_V2KnowledgeDocumentSummary"}},"required":["data"],"additionalProperties":false,"title":"Knowledge document summary response","description":"An accepted knowledge document summary."},"Knowledge_UploadKnowledgeDocumentForm":{"type":"object","properties":{"file":{"type":"string","format":"binary","contentEncoding":"binary","maxLength":104857600,"description":"Document file to upload; the maximum size is 100 MB."}},"required":["file"],"additionalProperties":{"description":"Additional multipart form fields are ignored."},"title":"Upload knowledge document form","description":"Multipart form containing the document file."},"Knowledge_V2KnowledgeDocumentUpload":{"type":"object","properties":{"id":{"type":"string","description":"Upload session identifier."},"knowledgeBaseId":{"type":"string","description":"Knowledge base that will own the document."},"status":{"type":"string","enum":["uploading","completing","finalizing","completed","failed","aborting","aborted","expired"],"description":"Current upload-session state."},"name":{"type":"string","description":"Filename recorded on the knowledge document."},"contentType":{"type":"string","description":"MIME type declared for the document."},"size":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991,"description":"Exact file size in bytes."},"expiresAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$","description":"ISO 8601 upload-session expiration time."},"error":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Terminal upload error, or null when none occurred."},"document":{"anyOf":[{"$ref":"#/components/schemas/Knowledge_V2KnowledgeDocumentSummary"},{"type":"null"}],"description":"Queued document after completion, or null before completion."}},"required":["id","knowledgeBaseId","status","name","contentType","size","expiresAt","error","document"],"additionalProperties":false,"title":"Knowledge document upload","description":"State of a resumable knowledge-document upload session."},"Knowledge_V2KnowledgeUploadTransfer":{"oneOf":[{"$ref":"#/components/schemas/Knowledge_V2PutUploadTransfer"},{"$ref":"#/components/schemas/Knowledge_V2MultipartUploadTransfer"}],"description":"Provider transfer strategy for a knowledge document upload.","title":"Knowledge upload transfer"},"Knowledge_V2PutUploadTransfer":{"type":"object","properties":{"method":{"type":"string","const":"put","description":"Upload strategy discriminator."},"url":{"type":"string","format":"uri","description":"Signed URL to which the file bytes are uploaded. Upload bytes with `PUT` and exactly the supplied headers; never construct or modify the signed URL. Treat any `2xx` as success. Sim-hosted URLs return an empty `204` and v2 JSON errors. Object-storage URLs may return `200` or `201` and provider-specific errors, often XML."},"headers":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"string"},"description":"Headers that must be included with the upload request."},"expiresAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$","description":"ISO 8601 expiration time for this signed URL. This is the URL's own expiry and is normally earlier than the upload session's expiresAt: the session stays open for later part, status, completion, and abort requests, but the bytes must be uploaded before this time. Once it passes, the storage provider rejects the upload and a new upload session must be created."}},"required":["method","url","headers","expiresAt"],"additionalProperties":false,"title":"Direct upload transfer","description":"Instructions for uploading bytes to one signed URL."},"Knowledge_V2MultipartUploadTransfer":{"type":"object","properties":{"method":{"type":"string","const":"multipart","description":"Upload strategy discriminator."},"partSize":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991,"description":"Required size of each non-final part in bytes."},"partCount":{"type":"integer","exclusiveMinimum":0,"maximum":640,"description":"Total number of upload parts."}},"required":["method","partSize","partCount"],"additionalProperties":false,"title":"Multipart upload transfer","description":"Instructions for splitting bytes into a multipart upload."},"Knowledge_V2CreateKnowledgeDocumentUploadData":{"type":"object","properties":{"session":{"$ref":"#/components/schemas/Knowledge_V2KnowledgeDocumentUpload"},"uploadToken":{"type":"string","minLength":1,"description":"Signed control token required by subsequent upload-session requests."},"transfer":{"$ref":"#/components/schemas/Knowledge_V2KnowledgeUploadTransfer"}},"required":["session","uploadToken","transfer"],"additionalProperties":false,"title":"Create knowledge document upload data","description":"Upload session, signed control token, and transfer instructions."},"Knowledge_V2CreateKnowledgeDocumentUploadResponse":{"type":"object","properties":{"data":{"description":"Response data.","$ref":"#/components/schemas/Knowledge_V2CreateKnowledgeDocumentUploadData"}},"required":["data"],"additionalProperties":false,"title":"Create knowledge document upload response","description":"Upload session, signed control token, and transfer instructions."},"Knowledge_CreateKnowledgeDocumentUploadRequest":{"type":"object","properties":{"workspaceId":{"type":"string","minLength":1,"maxLength":128,"description":"Workspace that owns the knowledge base."},"name":{"type":"string","minLength":1,"maxLength":255,"description":"Filename recorded on the knowledge document.","examples":["getting-started.pdf"]},"contentType":{"type":"string","minLength":1,"maxLength":255,"description":"Supported MIME type for the document.","examples":["application/pdf"]},"size":{"type":"integer","minimum":1,"maximum":104857600,"description":"Exact file size in bytes.","examples":[248913]},"tag1":{"description":"Value for tag slot 1.","type":"string","maxLength":1000},"tag2":{"description":"Value for tag slot 2.","type":"string","maxLength":1000},"tag3":{"description":"Value for tag slot 3.","type":"string","maxLength":1000},"tag4":{"description":"Value for tag slot 4.","type":"string","maxLength":1000},"tag5":{"description":"Value for tag slot 5.","type":"string","maxLength":1000},"tag6":{"description":"Value for tag slot 6.","type":"string","maxLength":1000},"tag7":{"description":"Value for tag slot 7.","type":"string","maxLength":1000},"processingOptions":{"description":"Optional processing recipe and language.","type":"object","properties":{"recipe":{"description":"Optional document processing recipe. One of: default, plain, markdown, code.","type":"string","enum":["default","plain","markdown","code"]},"lang":{"description":"Optional document language: hyphen-separated letter and digit subtags such as `en`, `en-US`, or `zh-Hant-TW`. Only that shape is validated, not full BCP-47 conformance.","type":"string","maxLength":35,"pattern":"^[A-Za-z]{2,8}(?:-[A-Za-z0-9]{1,8})*$"}},"additionalProperties":false}},"required":["workspaceId","name","contentType","size"],"additionalProperties":false,"title":"Create knowledge document upload request","description":"Document metadata used to authorize and initialize the upload.","examples":[{"workspaceId":"a91c4b2e-6d3f-4e8a-b5c7-0d9e2f1a8c64","name":"getting-started.pdf","contentType":"application/pdf","size":248913}]},"Knowledge_V2KnowledgeDocumentUploadResponse":{"type":"object","properties":{"data":{"description":"Response data.","$ref":"#/components/schemas/Knowledge_V2KnowledgeDocumentUpload"}},"required":["data"],"additionalProperties":false,"title":"Knowledge document upload response","description":"Current state of a knowledge document upload session."},"Knowledge_V2UploadPartUrl":{"type":"object","properties":{"partNumber":{"type":"integer","minimum":1,"maximum":9007199254740991,"description":"Multipart part number."},"url":{"type":"string","format":"uri","description":"Signed URL for this upload part. Upload bytes with `PUT` and exactly the supplied headers; never construct or modify the signed URL. Treat any `2xx` as success. Sim-hosted URLs return an empty `204` and v2 JSON errors. Object-storage URLs may return `200` or `201` and provider-specific errors, often XML. Do not retain part `ETag` values; after every part succeeds, call the completion endpoint without a request body."},"headers":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"string"},"description":"Headers that must be included with the part upload."},"expiresAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$","description":"ISO 8601 expiration time for the signed URL."}},"required":["partNumber","url","headers","expiresAt"],"additionalProperties":false,"title":"Upload part URL","description":"A signed URL and required headers for one multipart upload part."},"Knowledge_V2PartUrlsData":{"type":"object","properties":{"parts":{"maxItems":100,"type":"array","items":{"$ref":"#/components/schemas/Knowledge_V2UploadPartUrl"},"description":"Signed URLs for requested parts."}},"required":["parts"],"additionalProperties":false,"title":"Upload part URLs","description":"Signed transfer URLs for the requested multipart upload parts."},"Knowledge_V2KnowledgeDocumentUploadPartUrlsResponse":{"type":"object","properties":{"data":{"description":"Response data.","$ref":"#/components/schemas/Knowledge_V2PartUrlsData"}},"required":["data"],"additionalProperties":false,"title":"Knowledge document upload part URLs response","description":"Signed provider URLs for requested multipart parts."},"Knowledge_CreateKnowledgeDocumentUploadPartUrlsRequest":{"type":"object","properties":{"partNumbers":{"minItems":1,"maxItems":100,"type":"array","items":{"type":"integer","minimum":1,"maximum":9007199254740991},"description":"Multipart part numbers for which signed URLs should be created."}},"required":["partNumbers"],"additionalProperties":false,"title":"Create upload part URLs request","description":"Multipart part numbers for which signed URLs should be created.","examples":[{"partNumbers":[1,2,3]}]},"Knowledge_V2KnowledgeDocument":{"type":"object","properties":{"id":{"type":"string","description":"Unique document identifier.","examples":["b2d4f8a0-1c3e-4a5b-9d7c-2e6f0a8b4c12"]},"knowledgeBaseId":{"type":"string","description":"Knowledge base to which the document belongs.","examples":["7c9e6679-7425-40de-944b-e07fc1f90ae7"]},"filename":{"type":"string","description":"Original filename of the uploaded document.","examples":["getting-started.pdf"]},"fileSize":{"type":"number","description":"File size in bytes.","examples":[248913]},"mimeType":{"type":"string","description":"MIME type of the document file.","examples":["application/pdf"]},"processingStatus":{"type":"string","enum":["pending","processing","completed","failed"],"description":"Current document processing state.","examples":["completed"]},"chunkCount":{"type":"number","description":"Number of indexed chunks; zero until processing completes.","examples":[24]},"tokenCount":{"type":"number","description":"Total tokens extracted from the document.","examples":[8123]},"characterCount":{"type":"number","description":"Total characters extracted from the document.","examples":[41205]},"enabled":{"type":"boolean","description":"Whether the document is enabled for search.","examples":[true]},"createdAt":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"ISO 8601 timestamp when the document was uploaded, or null.","format":"date-time","examples":["2025-06-18T16:45:00Z"]},"tags":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"}],"description":"Tag value; dates are ISO 8601 strings and an unset tag is null."},"description":"Document tag values keyed by display name. Writes use slots such as `tag1`; use List Tags to map names to slots.","examples":[{"category":"billing","priority":2}]},"processingError":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Processing error message, or null when processing has not failed."},"processingStartedAt":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"ISO 8601 timestamp when processing started, or null.","format":"date-time","examples":["2025-06-18T16:45:05Z"]},"processingCompletedAt":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"ISO 8601 timestamp when processing completed, or null.","format":"date-time","examples":["2025-06-18T16:45:42Z"]},"connectorId":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Connector identifier for a synced document, or null for a direct upload."},"connectorType":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Connector type for a synced document, or null for a direct upload."},"sourceUrl":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Original source URL for a synced document, or null for a direct upload."}},"required":["id","knowledgeBaseId","filename","fileSize","mimeType","processingStatus","chunkCount","tokenCount","characterCount","enabled","createdAt","tags","processingError","processingStartedAt","processingCompletedAt","connectorId","connectorType","sourceUrl"],"additionalProperties":false,"title":"Knowledge document","description":"Full document detail including processing state and connector provenance."},"Knowledge_V2KnowledgeDocumentResponse":{"type":"object","properties":{"data":{"description":"Response data.","$ref":"#/components/schemas/Knowledge_V2KnowledgeDocument"}},"required":["data"],"additionalProperties":false,"title":"Knowledge document response","description":"Full knowledge document detail."},"Knowledge_V2KnowledgeDocumentProcessing":{"type":"object","properties":{"id":{"type":"string","description":"Identifier of the requeued document."},"queued":{"type":"boolean","const":true,"description":"Confirms that processing was requeued."},"processingStatus":{"type":"string","description":"Processing state the document was moved to.","examples":["pending"]},"message":{"type":"string","description":"Human-readable outcome of the requeue."}},"required":["id","queued","processingStatus","message"],"additionalProperties":false,"title":"Knowledge document processing acknowledgement","description":"Acknowledgement returned when a document is requeued for processing."},"Knowledge_V2UpdateKnowledgeDocumentResponse":{"type":"object","properties":{"data":{"anyOf":[{"$ref":"#/components/schemas/Knowledge_V2KnowledgeTaggedDocument"},{"$ref":"#/components/schemas/Knowledge_V2KnowledgeDocumentProcessing"}],"description":"Response data."}},"required":["data"],"additionalProperties":false,"title":"Update knowledge document response","description":"The updated document, or the processing requeue acknowledgement."},"Knowledge_UpdateKnowledgeDocumentRequest":{"type":"object","properties":{"workspaceId":{"type":"string","minLength":1,"maxLength":128,"description":"Workspace that owns the knowledge base."},"filename":{"description":"New filename for the document.","examples":["getting-started-v2.pdf"],"type":"string","minLength":1,"maxLength":255},"enabled":{"description":"Whether the document participates in search. Disabling keeps it indexed.","type":"boolean"},"tag1":{"description":"New value for tag slot 1.","type":"string","maxLength":1000},"tag2":{"description":"New value for tag slot 2.","type":"string","maxLength":1000},"tag3":{"description":"New value for tag slot 3.","type":"string","maxLength":1000},"tag4":{"description":"New value for tag slot 4.","type":"string","maxLength":1000},"tag5":{"description":"New value for tag slot 5.","type":"string","maxLength":1000},"tag6":{"description":"New value for tag slot 6.","type":"string","maxLength":1000},"tag7":{"description":"New value for tag slot 7.","type":"string","maxLength":1000},"number1":{"description":"New value for number tag slot 1.","type":"number"},"number2":{"description":"New value for number tag slot 2.","type":"number"},"number3":{"description":"New value for number tag slot 3.","type":"number"},"number4":{"description":"New value for number tag slot 4.","type":"number"},"number5":{"description":"New value for number tag slot 5.","type":"number"},"date1":{"description":"New value for date tag slot 1, formatted YYYY-MM-DD.","type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$"},"date2":{"description":"New value for date tag slot 2, formatted YYYY-MM-DD.","type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$"},"boolean1":{"description":"New value for boolean tag slot 1.","type":"boolean"},"boolean2":{"description":"New value for boolean tag slot 2.","type":"boolean"},"boolean3":{"description":"New value for boolean tag slot 3.","type":"boolean"},"retryProcessing":{"description":"Requeue a failed or stuck document for processing. Send it alone — no other field may accompany it — and it answers with a queue acknowledgement rather than the document.","type":"boolean","const":true}},"required":["workspaceId"],"additionalProperties":false,"title":"Update knowledge document request","description":"Filename, search state, tag slot values, or a processing retry.","examples":[{"workspaceId":"a91c4b2e-6d3f-4e8a-b5c7-0d9e2f1a8c64","enabled":false,"tag1":"billing"}]},"Knowledge_V2Folder":{"type":"object","properties":{"name":{"type":"string","description":"Folder name."},"path":{"type":"string","title":"Non-root folder path","description":"Canonical folder path used as the public folder identifier.","maxLength":4096},"parentPath":{"type":"string","title":"Folder path","description":"Canonical parent path; `/` is the root.","maxLength":4096},"createdAt":{"type":"string","description":"ISO 8601 timestamp when the folder was created.","format":"date-time"},"updatedAt":{"type":"string","description":"ISO 8601 timestamp when the folder was last updated.","format":"date-time"}},"required":["name","path","parentPath","createdAt","updatedAt"],"additionalProperties":false,"title":"Folder","description":"A canonical workspace folder."},"Knowledge_V2KnowledgeFolderListResponse":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Knowledge_V2Folder"},"description":"Items in the current page."},"nextCursor":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Always `null` — this list has no `cursor` or `limit` param and returns its whole bounded set in one page. Present so the list can gain pages later without a shape change."}},"required":["data","nextCursor"],"additionalProperties":false,"title":"Knowledge folder list response","description":"The whole bounded set of knowledge-base folders, in one page."},"Knowledge_V2KnowledgeFolderResponse":{"type":"object","properties":{"data":{"description":"Response data.","$ref":"#/components/schemas/Knowledge_V2Folder"}},"required":["data"],"additionalProperties":false,"title":"Knowledge folder response","description":"A single knowledge-base folder."},"Knowledge_NonRootFolderPathInput":{"title":"Non-root folder path input","description":"Non-root folder path. A missing leading slash is normalized before validation. Segments are percent-encoded, so a folder shown as \"New folder\" is `/New%20folder`: everything outside `A-Z a-z 0-9 - _ . ~` is escaped as uppercase hex, and only that exact encoding is accepted. A trailing slash, an empty segment, and a literal `.` or `..` segment are rejected. At most 64 segments and 4096 encoded bytes.","maxLength":4096,"type":"string"},"Knowledge_CreateKnowledgeFolderRequest":{"type":"object","properties":{"workspaceId":{"type":"string","minLength":1,"maxLength":128,"description":"Workspace in which to create the folder."},"path":{"description":"Path of the folder to create.","$ref":"#/components/schemas/Knowledge_NonRootFolderPathInput"}},"required":["workspaceId","path"],"additionalProperties":false,"title":"Create knowledge folder request","description":"Workspace and canonical path for a new knowledge-base folder."},"Knowledge_RelocateKnowledgeFolderRequest":{"type":"object","properties":{"workspaceId":{"type":"string","minLength":1,"maxLength":128,"description":"Workspace containing the folder."},"path":{"description":"Current folder path.","$ref":"#/components/schemas/Knowledge_NonRootFolderPathInput"},"destinationPath":{"description":"New full path for the folder and its descendants.","$ref":"#/components/schemas/Knowledge_NonRootFolderPathInput"}},"required":["workspaceId","path","destinationPath"],"additionalProperties":false,"title":"Relocate knowledge folder request","description":"Current and destination canonical paths for a knowledge-base folder."},"Knowledge_V2DeleteKnowledgeFolderData":{"type":"object","properties":{"path":{"type":"string","title":"Folder path","description":"Canonical path of the deleted folder.","maxLength":4096},"deleted":{"type":"boolean","const":true,"description":"Confirms that the folder was deleted."},"deletedItems":{"type":"object","properties":{"folders":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Number of deleted folders."},"knowledgeBases":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Number of deleted knowledge bases."}},"required":["folders","knowledgeBases"],"additionalProperties":false,"description":"Counts of deleted resources."}},"required":["path","deleted","deletedItems"],"additionalProperties":false,"title":"Delete knowledge folder data","description":"Folder deletion acknowledgement and deleted-resource counts."},"Knowledge_V2DeleteKnowledgeFolderResponse":{"type":"object","properties":{"data":{"description":"Response data.","$ref":"#/components/schemas/Knowledge_V2DeleteKnowledgeFolderData"}},"required":["data"],"additionalProperties":false,"title":"Delete knowledge folder response","description":"Folder deletion acknowledgement and deleted-resource counts."},"Knowledge_RestoreKnowledgeBaseRequest":{"type":"object","properties":{"workspaceId":{"type":"string","minLength":1,"maxLength":128,"description":"Workspace that owns the knowledge base."}},"required":["workspaceId"],"additionalProperties":false,"title":"Restore knowledge base request","description":"Workspace scope for the knowledge base.","examples":[{"workspaceId":"a91c4b2e-6d3f-4e8a-b5c7-0d9e2f1a8c64"}]},"Knowledge_V2AddedWorkspaceFileDocument":{"type":"object","properties":{"documentId":{"type":"string","description":"Identifier of the queued knowledge document."},"filename":{"type":"string","description":"Filename recorded on the knowledge document."},"mimeType":{"type":"string","description":"MIME type of the source workspace file."},"fileSize":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"File size in bytes."}},"required":["documentId","filename","mimeType","fileSize"],"additionalProperties":false,"title":"Indexed workspace file","description":"A workspace file that was queued for indexing into a knowledge base."},"Knowledge_V2AddWorkspaceFilesToKnowledgeBaseData":{"type":"object","properties":{"knowledgeBaseId":{"type":"string","description":"Knowledge base the files were added to."},"added":{"type":"array","items":{"$ref":"#/components/schemas/Knowledge_V2AddedWorkspaceFileDocument"},"description":"Files queued for indexing, in request order."},"failed":{"type":"array","items":{"type":"string"},"description":"References that could not be indexed, echoed exactly as they were sent."}},"required":["knowledgeBaseId","added","failed"],"additionalProperties":false,"title":"Add workspace files data","description":"Outcome of indexing workspace files into a knowledge base."},"Knowledge_V2AddWorkspaceFilesToKnowledgeBaseResponse":{"type":"object","properties":{"data":{"description":"Response data.","$ref":"#/components/schemas/Knowledge_V2AddWorkspaceFilesToKnowledgeBaseData"}},"required":["data"],"additionalProperties":false,"title":"Index workspace files response","description":"Documents queued for indexing and references that could not be."},"Knowledge_AddWorkspaceFilesToKnowledgeBaseRequest":{"type":"object","properties":{"workspaceId":{"type":"string","minLength":1,"maxLength":128,"description":"Workspace that owns both the files and the base."},"fileReferences":{"minItems":1,"maxItems":100,"type":"array","items":{"type":"string","minLength":1},"description":"Workspace file identifiers or storage keys to index. Duplicates resolving to the same file are indexed once."}},"required":["workspaceId","fileReferences"],"additionalProperties":false,"title":"Index workspace files request","description":"Workspace scope and the workspace file references to index.","examples":[{"workspaceId":"a91c4b2e-6d3f-4e8a-b5c7-0d9e2f1a8c64","fileReferences":["handbook.pdf"]}]},"Knowledge_V2KnowledgeChunk":{"type":"object","properties":{"id":{"type":"string","description":"Unique chunk identifier.","examples":["4c1f9e77-2b3a-4f8d-9e10-6a2c8d4b1e05"]},"chunkIndex":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Zero-based position of the chunk within its document.","examples":[3]},"content":{"type":"string","description":"Text content of the chunk, exactly as it was embedded.","examples":["To reset your password, open Settings and choose Security."]},"contentLength":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Character count of `content`.","examples":[58]},"tokenCount":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Tokens the chunk consumed when embedded.","examples":[14]},"enabled":{"type":"boolean","description":"Whether the chunk participates in search. A disabled chunk stays indexed."},"startOffset":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Character offset of the chunk within the extracted document text."},"endOffset":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Character offset just past the end of the chunk."},"tag1":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Text tag value inherited from the document, or null when the slot is unset."},"tag2":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Text tag value inherited from the document, or null when the slot is unset."},"tag3":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Text tag value inherited from the document, or null when the slot is unset."},"tag4":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Text tag value inherited from the document, or null when the slot is unset."},"tag5":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Text tag value inherited from the document, or null when the slot is unset."},"tag6":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Text tag value inherited from the document, or null when the slot is unset."},"tag7":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Text tag value inherited from the document, or null when the slot is unset."},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$","description":"ISO 8601 timestamp when the chunk was created."},"updatedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$","description":"ISO 8601 timestamp when the chunk was last modified."}},"required":["id","chunkIndex","content","contentLength","tokenCount","enabled","startOffset","endOffset","tag1","tag2","tag3","tag4","tag5","tag6","tag7","createdAt","updatedAt"],"additionalProperties":false,"title":"Knowledge chunk","description":"One embedded passage of a knowledge document."},"Knowledge_V2KnowledgeChunkListResponse":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Knowledge_V2KnowledgeChunk"},"description":"Items in the current page."},"nextCursor":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Opaque cursor for the next page. Send it back as `cursor`; `null` means there is nothing further to fetch. Never construct one yourself."}},"required":["data","nextCursor"],"additionalProperties":false,"title":"Knowledge chunk list response","description":"A cursor-paginated page of document chunks."},"Knowledge_V2KnowledgeChunkResponse":{"type":"object","properties":{"data":{"description":"Response data.","$ref":"#/components/schemas/Knowledge_V2KnowledgeChunk"}},"required":["data"],"additionalProperties":false,"title":"Knowledge chunk response","description":"A single document chunk."},"Knowledge_CreateKnowledgeChunkRequest":{"type":"object","properties":{"workspaceId":{"type":"string","minLength":1,"maxLength":128,"description":"Workspace that owns the knowledge base."},"content":{"type":"string","minLength":1,"maxLength":10000,"description":"Text to embed. It is embedded on write, so the chunk is searchable immediately."},"enabled":{"default":true,"description":"Whether the new chunk participates in search.","type":"boolean"}},"required":["workspaceId","content"],"additionalProperties":false,"title":"Create knowledge chunk request","description":"Workspace scope and the text to embed.","examples":[{"workspaceId":"a91c4b2e-6d3f-4e8a-b5c7-0d9e2f1a8c64","content":"To reset your password, open Settings and choose Security."}]},"Knowledge_V2BulkKnowledgeChunksData":{"type":"object","properties":{"operation":{"type":"string","enum":["enable","disable","delete"],"description":"Operation that was applied."},"processed":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Number of chunks in this document the operation matched. Chunks already in the requested state are counted too, so this is not a count of changes.","examples":[12]},"errors":{"type":"array","items":{"type":"string"},"description":"Per-chunk failures, including any identifier that named no chunk in the document. A populated array still answers 200."}},"required":["operation","processed","errors"],"additionalProperties":false,"title":"Bulk knowledge chunk update data","description":"Outcome of a bulk enable, disable, or delete across knowledge chunks."},"Knowledge_V2BulkKnowledgeChunksResponse":{"type":"object","properties":{"data":{"description":"Response data.","$ref":"#/components/schemas/Knowledge_V2BulkKnowledgeChunksData"}},"required":["data"],"additionalProperties":false,"title":"Bulk knowledge chunk response","description":"Counts and per-chunk failures from a bulk chunk operation."},"Knowledge_BulkUpdateKnowledgeChunksRequest":{"type":"object","properties":{"workspaceId":{"type":"string","minLength":1,"maxLength":128,"description":"Workspace that owns the knowledge base."},"operation":{"type":"string","enum":["enable","disable","delete"],"description":"What to do with the selected chunks."},"chunkIds":{"minItems":1,"maxItems":100,"type":"array","items":{"type":"string","minLength":1},"description":"Chunks to operate on, by identifier. An id naming no chunk in the document is reported in errors and does not fail the request."}},"required":["workspaceId","operation","chunkIds"],"additionalProperties":false,"title":"Bulk knowledge chunk request","description":"Workspace scope, the operation to apply, and the chunks to apply it to.","examples":[{"workspaceId":"a91c4b2e-6d3f-4e8a-b5c7-0d9e2f1a8c64","operation":"disable","chunkIds":["4c1f9e77-2b3a-4f8d-9e10-6a2c8d4b1e05"]}]},"Knowledge_UpdateKnowledgeChunkRequest":{"type":"object","properties":{"workspaceId":{"type":"string","minLength":1,"maxLength":128,"description":"Workspace that owns the knowledge base."},"content":{"description":"Replacement text. Changing it re-embeds the chunk and re-derives its token and character counts.","type":"string","minLength":1,"maxLength":10000},"enabled":{"description":"Whether the chunk participates in search. Disabling keeps it indexed.","type":"boolean"}},"required":["workspaceId"],"additionalProperties":false,"title":"Update knowledge chunk request","description":"Workspace scope and the fields to update. At least one is required.","examples":[{"workspaceId":"a91c4b2e-6d3f-4e8a-b5c7-0d9e2f1a8c64","enabled":false}]},"Knowledge_V2KnowledgeTagResponse":{"type":"object","properties":{"data":{"description":"Response data.","$ref":"#/components/schemas/Knowledge_V2KnowledgeTag"}},"required":["data"],"additionalProperties":false,"title":"Knowledge tag response","description":"A single tag definition."},"Knowledge_CreateKnowledgeTagRequest":{"type":"object","properties":{"workspaceId":{"type":"string","minLength":1,"maxLength":128,"description":"Workspace that owns the knowledge base."},"displayName":{"type":"string","minLength":1,"maxLength":100,"description":"Name tag filters and document reads use for this tag.","examples":["category"]},"fieldType":{"default":"text","type":"string","enum":["text","number","date","boolean"],"description":"Value type stored in the slot; it decides which slots are usable and which filter operators apply. Slot capacity per type: text 7, number 5, date 2, boolean 3.","examples":["text"]},"tagSlot":{"description":"Slot to store the tag in. Omit to take the next free slot for the field type; a slot that does not belong to the field type, or one already in use, is rejected.","type":"string","enum":["tag1","tag2","tag3","tag4","tag5","tag6","tag7","number1","number2","number3","number4","number5","date1","date2","boolean1","boolean2","boolean3"],"examples":["tag1"]}},"required":["workspaceId","displayName"],"additionalProperties":false,"title":"Create knowledge tag request","description":"Workspace scope, display name, field type, and optional slot.","examples":[{"workspaceId":"a91c4b2e-6d3f-4e8a-b5c7-0d9e2f1a8c64","displayName":"category","fieldType":"text"}]},"Knowledge_UpdateKnowledgeTagRequest":{"type":"object","properties":{"workspaceId":{"type":"string","minLength":1,"maxLength":128,"description":"Workspace that owns the knowledge base."},"displayName":{"description":"New tag display name.","type":"string","minLength":1,"maxLength":100,"examples":["category"]},"fieldType":{"description":"New value type for the tag.","type":"string","enum":["text","number","date","boolean"],"examples":["text"]}},"required":["workspaceId"],"additionalProperties":false,"title":"Update knowledge tag request","description":"Workspace scope and the fields to update. At least one is required.","examples":[{"workspaceId":"a91c4b2e-6d3f-4e8a-b5c7-0d9e2f1a8c64","displayName":"topic"}]},"Knowledge_V2DeleteKnowledgeTagData":{"type":"object","properties":{"id":{"type":"string","description":"Identifier of the deleted tag definition."},"tagSlot":{"type":"string","description":"Slot the deleted tag occupied; its values are now cleared."},"displayName":{"type":"string","description":"Display name the deleted tag carried."},"deleted":{"type":"boolean","const":true,"description":"Confirms that the tag definition was deleted."}},"required":["id","tagSlot","displayName","deleted"],"additionalProperties":false,"title":"Delete knowledge tag data","description":"Acknowledgement for a deleted tag definition."},"Knowledge_V2DeleteKnowledgeTagResponse":{"type":"object","properties":{"data":{"description":"Response data.","$ref":"#/components/schemas/Knowledge_V2DeleteKnowledgeTagData"}},"required":["data"],"additionalProperties":false,"title":"Delete knowledge tag response","description":"Acknowledgement naming the deleted definition and the slot it freed."},"Knowledge_V2NextKnowledgeTagSlotData":{"type":"object","properties":{"nextAvailableSlot":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"The free slot a create would take, or null when the field type is exhausted.","examples":["tag3"]},"fieldType":{"type":"string","description":"Field type the slots were counted for."},"usedSlots":{"type":"array","items":{"type":"string"},"description":"Slots of this field type already holding a tag."},"totalSlots":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991,"description":"Total slots this field type has: 7 for text, 5 for number, 2 for date, 3 for boolean."},"availableSlots":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Slots of this field type still free, or 0 when the field type is exhausted."}},"required":["nextAvailableSlot","fieldType","usedSlots","totalSlots","availableSlots"],"additionalProperties":false,"title":"Next knowledge tag slot","description":"Slot availability for one tag field type."},"Knowledge_V2NextKnowledgeTagSlotResponse":{"type":"object","properties":{"data":{"description":"Response data.","$ref":"#/components/schemas/Knowledge_V2NextKnowledgeTagSlotData"}},"required":["data"],"additionalProperties":false,"title":"Next knowledge tag slot response","description":"Slot availability for one tag field type."},"Knowledge_V2KnowledgeTagUsage":{"type":"object","properties":{"id":{"type":"string","description":"Tag definition ID used by Update Tag and Delete Tag.","examples":["7c9e6679-7425-40de-944b-e07fc1f90ae7"]},"tagSlot":{"type":"string","description":"Slot the tag occupies.","examples":["tag1"]},"displayName":{"type":"string","description":"Tag display name.","examples":["category"]},"fieldType":{"type":"string","description":"Value type stored in the slot.","examples":["text"]},"documentCount":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Documents in the knowledge base carrying a value in this slot."},"chunkCount":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Indexed chunks carrying a value in this slot."}},"required":["id","tagSlot","displayName","fieldType","documentCount","chunkCount"],"additionalProperties":false,"title":"Knowledge tag usage","description":"How widely one tag is populated across a knowledge base."},"Knowledge_V2KnowledgeTagUsageListResponse":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Knowledge_V2KnowledgeTagUsage"},"description":"Items in the current page."},"nextCursor":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Always `null` — this list has no `cursor` or `limit` param and returns its whole bounded set in one page. Present so the list can gain pages later without a shape change."}},"required":["data","nextCursor"],"additionalProperties":false,"title":"Knowledge tag usage response","description":"Usage counts for every tag defined on one knowledge base."},"Knowledge_V2BulkSaveKnowledgeTagDefinitionsData":{"type":"object","properties":{"created":{"type":"array","items":{"$ref":"#/components/schemas/Knowledge_V2KnowledgeTag"},"description":"Definitions that did not previously exist."},"updated":{"type":"array","items":{"$ref":"#/components/schemas/Knowledge_V2KnowledgeTag"},"description":"Definitions whose slot was already defined."},"errors":{"type":"array","items":{"type":"string"},"description":"Per-definition failures. A populated array still answers 200."}},"required":["created","updated","errors"],"additionalProperties":false,"title":"Bulk save knowledge tag definitions data","description":"Definitions created and updated by a bulk tag-definition save."},"Knowledge_V2BulkSaveKnowledgeTagDefinitionsResponse":{"type":"object","properties":{"data":{"description":"Response data.","$ref":"#/components/schemas/Knowledge_V2BulkSaveKnowledgeTagDefinitionsData"}},"required":["data"],"additionalProperties":false,"title":"Bulk save tag definitions response","description":"Definitions created and updated, with any per-definition failures."},"Knowledge_V2BulkSaveKnowledgeTagDefinition":{"type":"object","properties":{"tagSlot":{"type":"string","enum":["tag1","tag2","tag3","tag4","tag5","tag6","tag7","number1","number2","number3","number4","number5","date1","date2","boolean1","boolean2","boolean3"],"description":"Storage slot the tag occupies. It must belong to the tag’s `fieldType`.","examples":["tag1"]},"displayName":{"type":"string","minLength":1,"maxLength":100,"description":"Name tag filters and document reads use for this tag.","examples":["category"]},"fieldType":{"type":"string","enum":["text","number","date","boolean"],"description":"Value type stored in the slot; it decides which slots are usable and which filter operators apply. Slot capacity per type: text 7, number 5, date 2, boolean 3.","examples":["text"]},"originalDisplayName":{"description":"Previous display name, when this entry renames an existing definition.","type":"string","minLength":1,"maxLength":100,"examples":["category"]}},"required":["tagSlot","displayName","fieldType"],"additionalProperties":false,"title":"Knowledge tag definition input","description":"One tag definition declared in a bulk save."},"Knowledge_BulkSaveKnowledgeTagDefinitionsRequest":{"type":"object","properties":{"workspaceId":{"type":"string","minLength":1,"maxLength":128,"description":"Workspace that owns the knowledge base."},"definitions":{"minItems":1,"maxItems":17,"type":"array","items":{"$ref":"#/components/schemas/Knowledge_V2BulkSaveKnowledgeTagDefinition"},"description":"Tag definitions to create or update on the knowledge base."}},"required":["workspaceId","definitions"],"additionalProperties":false,"title":"Bulk save tag definitions request","description":"Workspace scope and the tag definitions to create or update.","examples":[{"workspaceId":"a91c4b2e-6d3f-4e8a-b5c7-0d9e2f1a8c64","definitions":[{"tagSlot":"tag1","displayName":"category","fieldType":"text"}]}]},"Knowledge_V2DeleteKnowledgeTagDefinitionsData":{"type":"object","properties":{"unused":{"type":"boolean","description":"Whether the delete was restricted to definitions no document still uses."},"count":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Number of tag definitions removed."}},"required":["unused","count"],"additionalProperties":false,"title":"Delete knowledge tag definitions data","description":"Outcome of a knowledge-base tag-definition delete."},"Knowledge_V2DeleteKnowledgeTagDefinitionsResponse":{"type":"object","properties":{"data":{"description":"Response data.","$ref":"#/components/schemas/Knowledge_V2DeleteKnowledgeTagDefinitionsData"}},"required":["data"],"additionalProperties":false,"title":"Delete tag definitions response","description":"Number of tag definitions that were removed."},"Billing_V2ActionableForbiddenDetails":{"type":"object","properties":{"code":{"$ref":"#/components/schemas/Billing_V2ForbiddenDetailCode"}},"required":["code"],"additionalProperties":{"description":"Additional context for this refusal."},"title":"Actionable forbidden details","description":"Machine-readable cause and optional context for an actionable `403` response."},"Billing_V2ForbiddenDetailCode":{"type":"string","enum":["INSUFFICIENT_WORKSPACE_ROLE","PERSONAL_API_KEYS_DISABLED","WORKSPACE_KEY_OPERATION_NOT_PERMITTED","PRINCIPAL_KIND_NOT_PERMITTED","ORGANIZATION_MEMBERSHIP_REQUIRED","ORGANIZATION_ADMIN_REQUIRED","ENTERPRISE_PLAN_REQUIRED","ORGANIZATION_PLAN_REQUIRED","AUDIT_LOGS_DISABLED","SKILL_EDITOR_ACCESS_REQUIRED","SECRET_ADMIN_ACCESS_REQUIRED","WORKSPACE_RESOURCE_LIMIT_REACHED","PUBLIC_SHARING_NOT_ALLOWED","CREDENTIAL_ADMIN_ACCESS_REQUIRED","MCP_SERVER_URL_NOT_ALLOWED","WORKSPACE_PLAN_CAPABILITY_REQUIRED","CHAT_AUTH_MODE_NOT_PERMITTED","CONNECTOR_MANAGED_RESOURCE_READ_ONLY","PERMISSION_GROUP_CAPABILITY_BLOCKED","INTEGRATION_NOT_ALLOWED","INSUFFICIENT_SCOPE","SCIM_MANAGED_MEMBERSHIP"],"title":"Forbidden detail code","description":"Stable cause code for an actionable `403` response."},"Billing_V2Error":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","description":"Stable machine-readable error code."},"message":{"type":"string","description":"Human-readable explanation of the error."},"details":{"description":"Structured error context whose keys depend on the error. Actionable `403` responses use the `V2ActionableForbiddenDetails` shape; validation failures may return issue arrays instead.","anyOf":[{"$ref":"#/components/schemas/Billing_V2ActionableForbiddenDetails"},{"description":"Other structured context defined by the specific error."}]}},"required":["code","message"],"additionalProperties":false,"description":"Canonical error details."}},"required":["error"],"additionalProperties":false,"title":"v2 error response","description":"Canonical error envelope returned by the public v2 API.","examples":[{"error":{"code":"BAD_REQUEST","message":"The request is invalid."}}]},"Billing_V2BillingStatus":{"type":"object","properties":{"workspaceId":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Workspace whose payer was resolved, or null for account billing."},"period":{"type":"object","properties":{"start":{"type":"string","description":"ISO 8601 start of the current billing period, or 1970-01-01T00:00:00.000Z when no Stripe subscription defines one.","format":"date-time"},"end":{"type":"string","description":"ISO 8601 end of the current billing period, or 9999-12-31T00:00:00.000Z when no Stripe subscription defines one.","format":"date-time"}},"required":["start","end"],"additionalProperties":false,"description":"Current billing period. Only a Stripe subscription defines a real period; without one — notably on the free plan — this is the open interval 1970-01-01 to 9999-12-31 and must not be read as a monthly window."},"plan":{"type":"string","description":"Current billing plan."},"status":{"type":"string","enum":["active","limit_exceeded","billing_blocked"],"description":"Current billing standing."},"credits":{"anyOf":[{"type":"object","properties":{"used":{"type":"number","description":"Credits consumed so far. The counter is reset by Stripe invoice webhooks, so on a paid plan it covers the current billing period; on the free plan nothing resets it and the value is lifetime consumption."},"limit":{"type":"number","description":"Credit allowance for the reporting window — per billing period on a paid plan, lifetime on the free plan."},"remaining":{"type":"number","description":"Allowance minus consumption, over the same window."}},"required":["used","limit","remaining"],"additionalProperties":false},{"type":"null"}],"description":"The payer's credit usage and allowance — periodic on a paid plan, lifetime on the free plan, where the counter never resets. Null when the caller cannot manage that payer's billing. Always null for a workspace API key."},"storage":{"anyOf":[{"type":"object","properties":{"usedBytes":{"type":"number","minimum":0,"description":"Storage currently consumed, in bytes."},"limitBytes":{"type":"number","minimum":0,"description":"Storage quota, in bytes."},"percentUsed":{"type":"number","minimum":0,"description":"Percentage of the storage quota consumed."}},"required":["usedBytes","limitBytes","percentUsed"],"additionalProperties":false},{"type":"null"}],"description":"The payer's storage consumption and quota, or null when the caller cannot manage that payer's billing. Always null for a workspace API key."}},"required":["workspaceId","period","plan","status","credits","storage"],"additionalProperties":false,"title":"Billing status","description":"Current billing standing, credit allowance, and storage quota."},"Billing_V2BillingStatusResponse":{"type":"object","properties":{"data":{"description":"Response data.","$ref":"#/components/schemas/Billing_V2BillingStatus"}},"required":["data"],"additionalProperties":false,"title":"Billing status response","description":"Current billing standing, credit allowance, and storage quota.","examples":[{"data":{"workspaceId":null,"period":{"start":"2026-07-01T00:00:00.000Z","end":"2026-08-01T00:00:00.000Z"},"plan":"pro","status":"active","credits":{"used":512,"limit":20000,"remaining":19488},"storage":{"usedBytes":5242880,"limitBytes":1073741824,"percentUsed":0.48828125}}}]},"Billing_V2BillingLogEntry":{"type":"object","properties":{"id":{"type":"string","description":"Unique usage-event identifier."},"createdAt":{"type":"string","description":"ISO 8601 timestamp when the usage event was recorded.","format":"date-time"},"source":{"type":"string","enum":["workflow","wand","sim-chat","mcp_copilot","mothership_block","knowledge-base","voice-input","enrichment","voice-output","api-tool"],"description":"Product surface that consumed the credits."},"workspaceId":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Workspace attributed to the event, or null for account-level usage."},"workflow":{"anyOf":[{"type":"object","properties":{"id":{"type":"string","description":"Workflow identifier."},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Workflow display name, when available."}},"required":["id","name"],"additionalProperties":false},{"type":"null"}],"description":"Workflow attributed to the event, when applicable."},"runId":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Workflow run attributed to the event, when applicable."},"creditCost":{"type":"number","description":"Credits apportioned to the event so page rows sum to the rounded page total; may be zero for a sub-credit event."}},"required":["id","createdAt","source","workspaceId","workflow","runId","creditCost"],"additionalProperties":false,"title":"Billing log entry","description":"One credit-consuming usage event in the billing ledger."},"Billing_V2BillingLogListResponse":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Billing_V2BillingLogEntry"},"description":"Items in the current page."},"nextCursor":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Opaque cursor for the next page. Send it back as `cursor`; `null` means there is nothing further to fetch. Never construct one yourself."},"scope":{"type":"string","enum":["user","workspace"],"description":"Whose usage this page reports. `user` contains only the OAuth or personal-key user's events, optionally narrowed by `workspaceId`; it omits other members. `workspace` contains every member's events for the workspace API key's bound workspace."}},"required":["data","nextCursor","scope"],"additionalProperties":false,"title":"Billing log list response","description":"A cursor-paginated page of credit-consuming usage events.","examples":[{"data":[{"id":"log_1","createdAt":"2026-07-29T18:04:11.000Z","source":"sim-chat","workspaceId":"ws_1","workflow":null,"runId":null,"creditCost":12}],"nextCursor":null,"scope":"workspace"}]},"Resources_V2ActionableForbiddenDetails":{"type":"object","properties":{"code":{"$ref":"#/components/schemas/Resources_V2ForbiddenDetailCode"}},"required":["code"],"additionalProperties":{"description":"Additional context for this refusal."},"title":"Actionable forbidden details","description":"Machine-readable cause and optional context for an actionable `403` response."},"Resources_V2ForbiddenDetailCode":{"type":"string","enum":["INSUFFICIENT_WORKSPACE_ROLE","PERSONAL_API_KEYS_DISABLED","WORKSPACE_KEY_OPERATION_NOT_PERMITTED","PRINCIPAL_KIND_NOT_PERMITTED","ORGANIZATION_MEMBERSHIP_REQUIRED","ORGANIZATION_ADMIN_REQUIRED","ENTERPRISE_PLAN_REQUIRED","ORGANIZATION_PLAN_REQUIRED","AUDIT_LOGS_DISABLED","SKILL_EDITOR_ACCESS_REQUIRED","SECRET_ADMIN_ACCESS_REQUIRED","WORKSPACE_RESOURCE_LIMIT_REACHED","PUBLIC_SHARING_NOT_ALLOWED","CREDENTIAL_ADMIN_ACCESS_REQUIRED","MCP_SERVER_URL_NOT_ALLOWED","WORKSPACE_PLAN_CAPABILITY_REQUIRED","CHAT_AUTH_MODE_NOT_PERMITTED","CONNECTOR_MANAGED_RESOURCE_READ_ONLY","PERMISSION_GROUP_CAPABILITY_BLOCKED","INTEGRATION_NOT_ALLOWED","INSUFFICIENT_SCOPE","SCIM_MANAGED_MEMBERSHIP"],"title":"Forbidden detail code","description":"Stable cause code for an actionable `403` response."},"Resources_V2Error":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","description":"Stable machine-readable error code."},"message":{"type":"string","description":"Human-readable explanation of the error."},"details":{"description":"Structured error context whose keys depend on the error. Actionable `403` responses use the `V2ActionableForbiddenDetails` shape; validation failures may return issue arrays instead.","anyOf":[{"$ref":"#/components/schemas/Resources_V2ActionableForbiddenDetails"},{"description":"Other structured context defined by the specific error."}]}},"required":["code","message"],"additionalProperties":false,"description":"Canonical error details."}},"required":["error"],"additionalProperties":false,"title":"v2 error response","description":"Canonical error envelope returned by the public v2 API.","examples":[{"error":{"code":"BAD_REQUEST","message":"The request is invalid."}}]},"Resources_V2Workspace":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":128,"description":"Unique workspace identifier."},"name":{"type":"string","description":"Workspace display name."},"color":{"type":"string","description":"Workspace color as a hexadecimal color value."},"logoUrl":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Workspace logo URL, or null when none is configured."},"memberCount":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Number of effective members, including inherited organization administrators."},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$","description":"ISO 8601 timestamp when the workspace was created."},"updatedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$","description":"ISO 8601 timestamp when the workspace was last updated."}},"required":["id","name","color","logoUrl","memberCount","createdAt","updatedAt"],"additionalProperties":false,"title":"Workspace","description":"Public metadata for an accessible workspace."},"Resources_ListWorkspacesResponse":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Resources_V2Workspace"},"description":"Items in the current page."},"nextCursor":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Opaque cursor for the next page. Send it back as `cursor`; `null` means there is nothing further to fetch. Never construct one yourself."}},"required":["data","nextCursor"],"additionalProperties":false,"title":"List workspaces response","description":"Public metadata for workspaces available to the credential.","examples":[{"data":[{"id":"a91c4b2e-6d3f-4e8a-b5c7-0d9e2f1a8c64","name":"Engineering","color":"#33C482","logoUrl":null,"memberCount":14,"createdAt":"2026-01-15T10:30:00.000Z","updatedAt":"2026-06-20T14:02:11.000Z"}],"nextCursor":null}]},"Resources_GetWorkspaceResponse":{"type":"object","properties":{"data":{"description":"Response data.","$ref":"#/components/schemas/Resources_V2Workspace"}},"required":["data"],"additionalProperties":false,"title":"Get workspace response","description":"Public metadata for one workspace.","examples":[{"data":{"id":"a91c4b2e-6d3f-4e8a-b5c7-0d9e2f1a8c64","name":"Engineering","color":"#33C482","logoUrl":null,"memberCount":14,"createdAt":"2026-01-15T10:30:00.000Z","updatedAt":"2026-06-20T14:02:11.000Z"}}]},"Resources_V2WorkspaceMember":{"type":"object","properties":{"email":{"type":"string","format":"email","pattern":"^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$","description":"Member email address and public member identifier."},"name":{"type":"string","description":"Member display name."},"image":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Member profile image URL, or null when absent."},"role":{"type":"string","enum":["admin","write","read"],"description":"Effective role in the workspace."},"isExternal":{"type":"boolean","description":"Whether the member belongs to a different organization than the workspace. True only for an explicitly granted member whose own organization differs; inherited organization-administrator access is always reported as false, so this does not detect every outside caller."},"joinedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$","description":"ISO 8601 timestamp when access was granted."}},"required":["email","name","image","role","isExternal","joinedAt"],"additionalProperties":false,"title":"Workspace member","description":"An effective workspace member and their public access role."},"Resources_ListWorkspaceMembersResponse":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Resources_V2WorkspaceMember"},"description":"Items in the current page."},"nextCursor":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Opaque cursor for the next page. Send it back as `cursor`; `null` means there is nothing further to fetch. Never construct one yourself."}},"required":["data","nextCursor"],"additionalProperties":false,"title":"List workspace members response","description":"A cursor-paginated page of effective workspace members.","examples":[{"data":[{"email":"jane@example.com","name":"Jane Smith","image":null,"role":"admin","isExternal":false,"joinedAt":"2026-01-15T10:30:00.000Z"}],"nextCursor":null}]},"Resources_V2McpServer":{"type":"object","properties":{"id":{"type":"string","description":"Unique server identifier derived from the workspace and endpoint URL."},"name":{"type":"string","description":"Server display name."},"description":{"description":"Optional server description.","type":"string"},"transport":{"default":"streamable-http","description":"Transport used to communicate with the server.","type":"string","enum":["streamable-http"]},"authType":{"description":"Authentication method used by the server.","type":"string","enum":["none","headers","oauth"]},"url":{"description":"Server endpoint URL.","type":"string"},"timeout":{"description":"Per-request timeout in milliseconds.","type":"number"},"retries":{"description":"Number of retries attempted per request.","type":"number"},"enabled":{"type":"boolean","description":"Whether the server tools are available to workflows."},"connectionStatus":{"description":"Result of the most recent connection attempt. Registration and re-registration establish no connection — the auth-type probe they may send does not count as one — so a server begins, and returns to, `disconnected` until a tool discovery runs.","type":"string","enum":["connected","disconnected","error"]},"lastError":{"description":"Message from the most recent failed connection, or null when absent. A re-registration clears it, since the configuration it described no longer applies.","anyOf":[{"type":"string"},{"type":"null"}]},"toolCount":{"description":"Number of tools discovered on the server.","type":"number"},"lastToolsRefresh":{"description":"ISO 8601 timestamp of the most recent tool-list refresh.","type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"lastConnected":{"description":"ISO 8601 timestamp of the most recent successful connection. Absent until the server completes one; registering a server does not set it.","type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"createdAt":{"description":"ISO 8601 timestamp when the server was registered.","type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"updatedAt":{"description":"ISO 8601 timestamp when the server was last updated.","type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"oauthClientId":{"description":"Pre-registered OAuth client identifier, when configured.","type":"string"},"hasHeaders":{"type":"boolean","description":"Whether any request headers are configured."},"headerNames":{"type":"array","items":{"type":"string","description":"Configured header name."},"description":"Names of configured request headers. Header values are never returned."},"hasOauthClientSecret":{"type":"boolean","description":"Whether an OAuth client secret is stored. The value is never returned."}},"required":["id","name","transport","enabled","createdAt","updatedAt","hasHeaders","headerNames","hasOauthClientSecret"],"additionalProperties":false,"title":"MCP server","description":"Public MCP server configuration without write-only credential values."},"Resources_ListMcpServersResponse":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Resources_V2McpServer"},"description":"Items in the current page."},"nextCursor":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Opaque cursor for the next page. Send it back as `cursor`; `null` means there is nothing further to fetch. Never construct one yourself."}},"required":["data","nextCursor"],"additionalProperties":false,"title":"List MCP servers response","description":"MCP servers registered in the workspace.","examples":[{"data":[{"id":"mcp-3f7a9c21","name":"Docs server","description":"Internal documentation tools","transport":"streamable-http","authType":"headers","url":"https://mcp.example.com/sse","timeout":30000,"retries":3,"enabled":true,"connectionStatus":"connected","lastError":null,"toolCount":7,"lastToolsRefresh":"2026-06-20T14:02:11.000Z","lastConnected":"2026-06-20T14:02:11.000Z","createdAt":"2026-06-01T09:14:00.000Z","updatedAt":"2026-06-20T14:02:11.000Z","hasHeaders":true,"headerNames":["Authorization"],"hasOauthClientSecret":false}],"nextCursor":null}]},"Resources_CreateMcpServerResponse":{"type":"object","properties":{"data":{"description":"Response data.","$ref":"#/components/schemas/Resources_V2McpServer"}},"required":["data"],"additionalProperties":false,"title":"Create MCP server response","description":"The registered MCP server without write-only credentials.","examples":[{"data":{"id":"mcp-3f7a9c21","name":"Docs server","description":"Internal documentation tools","transport":"streamable-http","authType":"headers","url":"https://mcp.example.com/sse","timeout":30000,"retries":3,"enabled":true,"connectionStatus":"disconnected","lastError":null,"toolCount":0,"createdAt":"2026-06-01T09:14:00.000Z","updatedAt":"2026-06-20T14:02:11.000Z","hasHeaders":true,"headerNames":["Authorization"],"hasOauthClientSecret":false}}]},"Resources_CreateMcpServerRequest":{"type":"object","properties":{"workspaceId":{"type":"string","minLength":1,"maxLength":128,"description":"Workspace in which to register the server."},"name":{"type":"string","minLength":1,"maxLength":255,"description":"Server display name."},"description":{"description":"Optional server description.","type":"string","maxLength":2000},"transport":{"description":"Transport protocol. Defaults to `streamable-http` on creation.","default":"streamable-http","type":"string","enum":["streamable-http"]},"url":{"type":"string","minLength":1,"maxLength":2048,"description":"Absolute HTTP or HTTPS endpoint URL without `{{ENV_VAR}}` references. It determines server identity and is immutable: delete and recreate the server to change endpoints."},"authType":{"description":"Authentication method. When omitted, and no `headers` are sent, registration probes the endpoint once to classify it, falling back to `headers` when the probe fails or the server does not advertise OAuth. A server publishing RFC 9728 metadata is therefore stored as `oauth`, and headers configured afterwards will not authenticate — send this field explicitly to pin the method.","type":"string","enum":["none","headers","oauth"]},"headers":{"description":"Write-only request headers sent to the server. Replaced wholesale rather than merged on update: sending this field drops every stored header it does not repeat.","writeOnly":true,"type":"object","propertyNames":{"type":"string","minLength":1},"additionalProperties":{"type":"string","description":"Header value sent to the MCP server."}},"timeout":{"description":"Per-request timeout in milliseconds. Defaults to 30000 on creation.","default":30000,"type":"integer","minimum":1000,"maximum":300000},"retries":{"description":"Number of retries per request. Defaults to 3 on creation.","default":3,"type":"integer","minimum":0,"maximum":10},"enabled":{"description":"Whether workflows can use the server's tools. Defaults to true on creation.","default":true,"type":"boolean"},"oauthClientId":{"description":"Pre-registered OAuth client identifier. Changing it on update revokes the stored OAuth grant and forces reauthorization.","anyOf":[{"type":"string","maxLength":512},{"type":"null"}]},"oauthClientSecret":{"description":"Write-only pre-registered OAuth client secret. Sending it on update as null or a new value revokes the stored OAuth grant and forces reauthorization, as does switching away from OAuth authentication.","writeOnly":true,"anyOf":[{"type":"string","maxLength":2048},{"type":"null"}]}},"required":["workspaceId","name","url"],"additionalProperties":false,"title":"Create MCP server request","description":"Configuration for a new MCP server.","examples":[{"workspaceId":"a91c4b2e-6d3f-4e8a-b5c7-0d9e2f1a8c64","name":"Docs server","url":"https://mcp.example.com/sse","authType":"headers","headers":{"Authorization":"Bearer YOUR_TOKEN"}}]},"Resources_GetMcpServerResponse":{"type":"object","properties":{"data":{"description":"Response data.","$ref":"#/components/schemas/Resources_V2McpServer"}},"required":["data"],"additionalProperties":false,"title":"Get MCP server response","description":"One MCP server without write-only credentials.","examples":[{"data":{"id":"mcp-3f7a9c21","name":"Docs server","description":"Internal documentation tools","transport":"streamable-http","authType":"headers","url":"https://mcp.example.com/sse","timeout":30000,"retries":3,"enabled":true,"connectionStatus":"connected","lastError":null,"toolCount":7,"lastToolsRefresh":"2026-06-20T14:02:11.000Z","lastConnected":"2026-06-20T14:02:11.000Z","createdAt":"2026-06-01T09:14:00.000Z","updatedAt":"2026-06-20T14:02:11.000Z","hasHeaders":true,"headerNames":["Authorization"],"hasOauthClientSecret":false}}]},"Resources_UpdateMcpServerResponse":{"type":"object","properties":{"data":{"description":"Response data.","$ref":"#/components/schemas/Resources_V2McpServer"}},"required":["data"],"additionalProperties":false,"title":"Update MCP server response","description":"The updated MCP server.","examples":[{"data":{"id":"mcp-3f7a9c21","name":"Docs server","description":"Internal documentation tools","transport":"streamable-http","authType":"headers","url":"https://mcp.example.com/sse","timeout":30000,"retries":3,"enabled":false,"connectionStatus":"connected","lastError":null,"toolCount":7,"lastToolsRefresh":"2026-06-20T14:02:11.000Z","lastConnected":"2026-06-20T14:02:11.000Z","createdAt":"2026-06-01T09:14:00.000Z","updatedAt":"2026-06-20T14:02:11.000Z","hasHeaders":true,"headerNames":["Authorization"],"hasOauthClientSecret":false}}]},"Resources_UpdateMcpServerRequest":{"type":"object","properties":{"workspaceId":{"type":"string","minLength":1,"maxLength":128,"description":"Workspace that owns the MCP server."},"name":{"type":"string","minLength":1,"maxLength":255,"description":"Server display name."},"description":{"description":"Optional server description.","type":"string","maxLength":2000},"transport":{"description":"Transport protocol. Defaults to `streamable-http` on creation.","default":"streamable-http","type":"string","enum":["streamable-http"]},"url":{"description":"Immutable server URL. When provided, it must equal the current URL; use delete and create to change endpoints.","type":"string","minLength":1,"maxLength":2048},"authType":{"description":"Authentication method. When omitted, and no `headers` are sent, registration probes the endpoint once to classify it, falling back to `headers` when the probe fails or the server does not advertise OAuth. A server publishing RFC 9728 metadata is therefore stored as `oauth`, and headers configured afterwards will not authenticate — send this field explicitly to pin the method.","type":"string","enum":["none","headers","oauth"]},"headers":{"description":"Write-only request headers sent to the server. Replaced wholesale rather than merged on update: sending this field drops every stored header it does not repeat.","writeOnly":true,"type":"object","propertyNames":{"type":"string","minLength":1},"additionalProperties":{"type":"string","description":"Header value sent to the MCP server."}},"timeout":{"description":"Per-request timeout in milliseconds. Defaults to 30000 on creation.","default":30000,"type":"integer","minimum":1000,"maximum":300000},"retries":{"description":"Number of retries per request. Defaults to 3 on creation.","default":3,"type":"integer","minimum":0,"maximum":10},"enabled":{"description":"Whether workflows can use the server's tools. Defaults to true on creation.","default":true,"type":"boolean"},"oauthClientId":{"description":"Pre-registered OAuth client identifier. Changing it on update revokes the stored OAuth grant and forces reauthorization.","anyOf":[{"type":"string","maxLength":512},{"type":"null"}]},"oauthClientSecret":{"description":"Write-only pre-registered OAuth client secret. Sending it on update as null or a new value revokes the stored OAuth grant and forces reauthorization, as does switching away from OAuth authentication.","writeOnly":true,"anyOf":[{"type":"string","maxLength":2048},{"type":"null"}]}},"required":["workspaceId"],"additionalProperties":false,"title":"Update MCP server request","description":"MCP server fields to change; omitted fields retain their stored values.","examples":[{"workspaceId":"a91c4b2e-6d3f-4e8a-b5c7-0d9e2f1a8c64","enabled":false}]},"Resources_V2McpServerDeleteData":{"type":"object","properties":{"id":{"type":"string","description":"Identifier of the deleted MCP server."},"deleted":{"type":"boolean","const":true,"description":"Whether the server was deleted."}},"required":["id","deleted"],"additionalProperties":false,"title":"Delete MCP server data","description":"MCP server deletion acknowledgement."},"Resources_DeleteMcpServerResponse":{"type":"object","properties":{"data":{"description":"Response data.","$ref":"#/components/schemas/Resources_V2McpServerDeleteData"}},"required":["data"],"additionalProperties":false,"title":"Delete MCP server response","description":"Acknowledgement that the MCP server was deleted.","examples":[{"data":{"id":"mcp-3f7a9c21","deleted":true}}]},"Resources_V2McpTool":{"type":"object","properties":{"name":{"type":"string","description":"Tool name, as the MCP server reports it."},"description":{"description":"Tool description reported by the server.","type":"string"},"inputSchema":{"type":"object","properties":{"type":{"type":"string","const":"object","description":"JSON Schema type of the argument object. MCP requires `object`."},"properties":{"description":"Argument schemas keyed by argument name.","type":"object","propertyNames":{"type":"string"},"additionalProperties":{"description":"Server-defined JSON Schema for one tool argument."}},"required":{"description":"Names of the arguments the tool requires.","type":"array","items":{"type":"string","description":"Name of a required argument."}}},"required":["type"],"additionalProperties":{"description":"Additional JSON Schema keyword reported by the server."},"description":"JSON Schema for the tool's arguments, as reported by the server."},"serverId":{"type":"string","description":"Identifier of the MCP server exposing the tool."},"serverName":{"type":"string","description":"Display name of the MCP server exposing the tool."}},"required":["name","inputSchema","serverId","serverName"],"additionalProperties":false,"title":"MCP tool","description":"A tool exposed by a registered MCP server."},"Resources_ListMcpServerToolsResponse":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Resources_V2McpTool"},"description":"Items in the current page."},"nextCursor":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Always `null` — this list has no `cursor` or `limit` param and returns its whole bounded set in one page. Present so the list can gain pages later without a shape change."}},"required":["data","nextCursor"],"additionalProperties":false,"title":"List MCP server tools response","description":"Tools exposed by the MCP server.","examples":[{"data":[{"name":"search_docs","description":"Search the internal documentation","inputSchema":{"type":"object","properties":{"query":{"type":"string","description":"Search terms"}},"required":["query"]},"serverId":"mcp-3f7a9c21","serverName":"Docs server"}],"nextCursor":null}]},"Resources_V2SkillSummary":{"type":"object","properties":{"id":{"type":"string","description":"Unique skill identifier. A built-in skill is `builtin-` followed by its name, for example `builtin-research`."},"name":{"type":"string","description":"Kebab-case name that agents use to reference the skill."},"description":{"type":"string","description":"One-line summary of when the skill applies."},"readOnly":{"type":"boolean","description":"Whether this is a built-in skill that cannot be modified or deleted."},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$","description":"ISO 8601 timestamp when the skill was created. Built-in skills report the Unix epoch."},"updatedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$","description":"ISO 8601 timestamp when the skill was last updated. Built-in skills report the Unix epoch."}},"required":["id","name","description","readOnly","createdAt","updatedAt"],"additionalProperties":false,"title":"Skill summary","description":"Public summary metadata for a workspace or built-in skill."},"Resources_ListSkillsResponse":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Resources_V2SkillSummary"},"description":"Items in the current page."},"nextCursor":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Opaque cursor for the next page. Send it back as `cursor`; `null` means there is nothing further to fetch. Never construct one yourself."}},"required":["data","nextCursor"],"additionalProperties":false,"title":"List skills response","description":"Skill summaries available in the workspace.","examples":[{"data":[{"id":"V1StGXR8Z5jdHi6BmyT","name":"refund-policy","description":"How support should handle refund requests","readOnly":false,"createdAt":"2026-06-01T09:14:00.000Z","updatedAt":"2026-06-20T14:02:11.000Z"}],"nextCursor":null}]},"Resources_V2Skill":{"type":"object","properties":{"id":{"type":"string","description":"Unique skill identifier. A built-in skill is `builtin-` followed by its name, for example `builtin-research`."},"name":{"type":"string","description":"Kebab-case name that agents use to reference the skill."},"description":{"type":"string","description":"One-line summary of when the skill applies."},"readOnly":{"type":"boolean","description":"Whether this is a built-in skill that cannot be modified or deleted."},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$","description":"ISO 8601 timestamp when the skill was created. Built-in skills report the Unix epoch."},"updatedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$","description":"ISO 8601 timestamp when the skill was last updated. Built-in skills report the Unix epoch."},"content":{"type":"string","description":"Skill body containing the instructions given to the agent."}},"required":["id","name","description","readOnly","createdAt","updatedAt","content"],"additionalProperties":false,"title":"Skill","description":"A workspace or built-in skill including its instruction body."},"Resources_CreateSkillResponse":{"type":"object","properties":{"data":{"description":"Response data.","$ref":"#/components/schemas/Resources_V2Skill"}},"required":["data"],"additionalProperties":false,"title":"Create skill response","description":"The created skill including its content.","examples":[{"data":{"id":"V1StGXR8Z5jdHi6BmyT","name":"refund-policy","description":"How support should handle refund requests","readOnly":false,"createdAt":"2026-06-01T09:14:00.000Z","updatedAt":"2026-06-20T14:02:11.000Z","content":"# Refund policy\n\nAlways check the order date first."}}]},"Resources_CreateSkillRequest":{"type":"object","properties":{"workspaceId":{"type":"string","minLength":1,"maxLength":128,"description":"Workspace in which to create the skill."},"name":{"type":"string","minLength":1,"maxLength":64,"pattern":"^[a-z0-9]+(-[a-z0-9]+)*$","description":"Kebab-case name, unique within the workspace and not reserved by a built-in skill."},"description":{"type":"string","minLength":1,"maxLength":1024,"description":"One-line summary of when the skill applies."},"content":{"type":"string","minLength":1,"maxLength":50000,"description":"Skill body containing the instructions given to the agent."}},"required":["workspaceId","name","description","content"],"additionalProperties":false,"title":"Create skill request","description":"Definition of a new skill.","examples":[{"workspaceId":"a91c4b2e-6d3f-4e8a-b5c7-0d9e2f1a8c64","name":"refund-policy","description":"How support should handle refund requests","content":"# Refund policy\n\nAlways check the order date first."}]},"Resources_GetSkillResponse":{"type":"object","properties":{"data":{"description":"Response data.","$ref":"#/components/schemas/Resources_V2Skill"}},"required":["data"],"additionalProperties":false,"title":"Get skill response","description":"One skill including its full content.","examples":[{"data":{"id":"V1StGXR8Z5jdHi6BmyT","name":"refund-policy","description":"How support should handle refund requests","readOnly":false,"createdAt":"2026-06-01T09:14:00.000Z","updatedAt":"2026-06-20T14:02:11.000Z","content":"# Refund policy\n\nAlways check the order date first."}}]},"Resources_UpdateSkillResponse":{"type":"object","properties":{"data":{"description":"Response data.","$ref":"#/components/schemas/Resources_V2Skill"}},"required":["data"],"additionalProperties":false,"title":"Update skill response","description":"The updated skill including its full content.","examples":[{"data":{"id":"V1StGXR8Z5jdHi6BmyT","name":"refund-policy","description":"Updated refund guidance","readOnly":false,"createdAt":"2026-06-01T09:14:00.000Z","updatedAt":"2026-06-20T14:02:11.000Z","content":"# Refund policy\n\nAlways check the order date first."}}]},"Resources_UpdateSkillRequest":{"type":"object","properties":{"workspaceId":{"type":"string","minLength":1,"maxLength":128,"description":"Workspace that owns the skill."},"name":{"description":"New kebab-case skill name.","type":"string","minLength":1,"maxLength":64,"pattern":"^[a-z0-9]+(-[a-z0-9]+)*$"},"description":{"description":"New one-line summary of when the skill applies.","type":"string","minLength":1,"maxLength":1024},"content":{"description":"Replacement skill body.","type":"string","minLength":1,"maxLength":50000}},"required":["workspaceId"],"additionalProperties":false,"title":"Update skill request","description":"Skill fields to change; at least one editable field is required.","examples":[{"workspaceId":"a91c4b2e-6d3f-4e8a-b5c7-0d9e2f1a8c64","description":"Updated refund guidance"}]},"Resources_V2SkillDeleteData":{"type":"object","properties":{"id":{"type":"string","description":"Identifier of the deleted skill."},"deleted":{"type":"boolean","const":true,"description":"Whether the skill was deleted."}},"required":["id","deleted"],"additionalProperties":false,"title":"Delete skill data","description":"Skill deletion acknowledgement."},"Resources_DeleteSkillResponse":{"type":"object","properties":{"data":{"description":"Response data.","$ref":"#/components/schemas/Resources_V2SkillDeleteData"}},"required":["data"],"additionalProperties":false,"title":"Delete skill response","description":"Acknowledgement that the skill was deleted.","examples":[{"data":{"id":"V1StGXR8Z5jdHi6BmyT","deleted":true}}]},"Resources_V2SkillEditor":{"type":"object","properties":{"email":{"type":"string","format":"email","pattern":"^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$","description":"Email address of the skill editor."},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Display name of the skill editor."},"image":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Profile image URL of the skill editor."},"isWorkspaceAdmin":{"type":"boolean","description":"Whether editor access is derived from workspace administration."}},"required":["email","name","image","isWorkspaceAdmin"],"additionalProperties":false,"title":"Skill editor","description":"Public identity fields for a user who can edit a skill."},"Resources_ListSkillEditorsResponse":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Resources_V2SkillEditor"},"description":"Items in the current page."},"nextCursor":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Opaque cursor for the next page. Send it back as `cursor`; `null` means there is nothing further to fetch. Never construct one yourself."}},"required":["data","nextCursor"],"additionalProperties":false,"title":"List skill editors response","description":"Public identity fields for users who can edit the skill.","examples":[{"data":[{"email":"jane@example.com","name":"Jane Smith","image":null,"isWorkspaceAdmin":false}],"nextCursor":null}]},"Resources_GrantSkillEditorResponse":{"type":"object","properties":{"data":{"description":"Response data.","$ref":"#/components/schemas/Resources_V2SkillEditor"}},"required":["data"],"additionalProperties":false,"title":"Grant skill editor response","description":"Public identity fields for the editor.","examples":[{"data":{"email":"jane@example.com","name":"Jane Smith","image":null,"isWorkspaceAdmin":false}}]},"Resources_GrantSkillEditorRequest":{"type":"object","properties":{"workspaceId":{"type":"string","minLength":1,"maxLength":128,"description":"Workspace that owns the skill."},"email":{"type":"string","format":"email","pattern":"^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$","description":"Email address of a current workspace member."}},"required":["workspaceId","email"],"additionalProperties":false,"title":"Grant skill editor request","description":"Workspace scope and email of the member to grant.","examples":[{"workspaceId":"a91c4b2e-6d3f-4e8a-b5c7-0d9e2f1a8c64","email":"jane@example.com"}]},"Resources_V2SkillEditorDeleteData":{"type":"object","properties":{"email":{"type":"string","format":"email","pattern":"^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$","description":"Email address whose explicit editor grant was revoked."},"revoked":{"type":"boolean","const":true,"description":"Whether the explicit editor grant was revoked."}},"required":["email","revoked"],"additionalProperties":false,"title":"Revoke skill editor data","description":"Skill editor revocation acknowledgement."},"Resources_RevokeSkillEditorResponse":{"type":"object","properties":{"data":{"description":"Response data.","$ref":"#/components/schemas/Resources_V2SkillEditorDeleteData"}},"required":["data"],"additionalProperties":false,"title":"Revoke skill editor response","description":"Acknowledgement that the explicit editor grant was revoked.","examples":[{"data":{"email":"jane@example.com","revoked":true}}]},"Resources_V2CustomTool":{"type":"object","properties":{"id":{"type":"string","description":"Unique custom tool identifier."},"title":{"type":"string","description":"Display title, unique within the workspace."},"schema":{"type":"object","properties":{"type":{"type":"string","const":"function","description":"Function declaration discriminator."},"function":{"type":"object","properties":{"name":{"type":"string","minLength":1,"description":"Function name presented to the model."},"description":{"description":"Optional explanation of what the function does.","type":"string"},"parameters":{"type":"object","properties":{"type":{"type":"string","description":"JSON Schema type for the arguments, usually `object`."},"properties":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"description":"Caller-defined JSON Schema for one tool argument."},"description":"Caller-defined argument schemas keyed by argument name."},"required":{"description":"Names of required arguments.","type":"array","items":{"type":"string"}}},"required":["type","properties"],"additionalProperties":{"description":"Caller-defined extension value preserved by the public API."},"description":"JSON Schema describing the arguments accepted by the tool."}},"required":["name","parameters"],"additionalProperties":{"description":"Caller-defined extension value preserved by the public API."},"description":"OpenAI-style function definition."}},"required":["type","function"],"additionalProperties":{"description":"Caller-defined extension value preserved by the public API."},"description":"OpenAI-style function declaration describing the callable tool surface."},"code":{"type":"string","description":"Tool implementation executed in the sandboxed function runtime."},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$","description":"ISO 8601 timestamp when the tool was created."},"updatedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$","description":"ISO 8601 timestamp when the tool was last updated."}},"required":["id","title","schema","code","createdAt","updatedAt"],"additionalProperties":false,"title":"Custom tool","description":"A workspace custom tool and its callable function declaration."},"Resources_ListCustomToolsResponse":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Resources_V2CustomTool"},"description":"Items in the current page."},"nextCursor":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Opaque cursor for the next page. Send it back as `cursor`; `null` means there is nothing further to fetch. Never construct one yourself."}},"required":["data","nextCursor"],"additionalProperties":false,"title":"List custom tools response","description":"Custom tools defined in the workspace.","examples":[{"data":[{"id":"V1StGXR8Z5jdHi6BmyT","title":"lookup_order","schema":{"type":"function","function":{"name":"lookup_order","description":"Look up an order by id","parameters":{"type":"object","properties":{"orderId":{"type":"string"}},"required":["orderId"]}}},"code":"return { ok: true }","createdAt":"2026-06-01T09:14:00.000Z","updatedAt":"2026-06-20T14:02:11.000Z"}],"nextCursor":null}]},"Resources_CreateCustomToolResponse":{"type":"object","properties":{"data":{"description":"Response data.","$ref":"#/components/schemas/Resources_V2CustomTool"}},"required":["data"],"additionalProperties":false,"title":"Create custom tool response","description":"The created custom tool.","examples":[{"data":{"id":"V1StGXR8Z5jdHi6BmyT","title":"lookup_order","schema":{"type":"function","function":{"name":"lookup_order","description":"Look up an order by id","parameters":{"type":"object","properties":{"orderId":{"type":"string"}},"required":["orderId"]}}},"code":"return { ok: true }","createdAt":"2026-06-01T09:14:00.000Z","updatedAt":"2026-06-20T14:02:11.000Z"}}]},"Resources_CreateCustomToolRequest":{"type":"object","properties":{"workspaceId":{"type":"string","minLength":1,"maxLength":128,"description":"Workspace in which to create the custom tool."},"title":{"type":"string","minLength":1,"maxLength":200,"description":"Display title, unique within the workspace."},"schema":{"type":"object","properties":{"type":{"type":"string","const":"function","description":"Function declaration discriminator."},"function":{"type":"object","properties":{"name":{"type":"string","minLength":1,"description":"Function name presented to the model."},"description":{"description":"Optional explanation of what the function does.","type":"string"},"parameters":{"type":"object","properties":{"type":{"type":"string","description":"JSON Schema type for the arguments, usually `object`."},"properties":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"description":"Caller-defined JSON Schema for one tool argument."},"description":"Caller-defined argument schemas keyed by argument name."},"required":{"description":"Names of required arguments.","type":"array","items":{"type":"string"}}},"required":["type","properties"],"additionalProperties":{"description":"Caller-defined extension value preserved by the public API."},"description":"JSON Schema describing the arguments accepted by the tool."}},"required":["name","parameters"],"additionalProperties":{"description":"Caller-defined extension value preserved by the public API."},"description":"OpenAI-style function definition."}},"required":["type","function"],"additionalProperties":{"description":"Caller-defined extension value preserved by the public API."},"description":"OpenAI-style function declaration describing the callable tool surface."},"code":{"type":"string","maxLength":100000,"description":"Tool implementation executed in the sandboxed function runtime."}},"required":["workspaceId","title","schema","code"],"additionalProperties":false,"title":"Create custom tool request","description":"Definition and implementation of a new custom tool.","examples":[{"workspaceId":"a91c4b2e-6d3f-4e8a-b5c7-0d9e2f1a8c64","title":"lookup_order","schema":{"type":"function","function":{"name":"lookup_order","description":"Look up an order by id","parameters":{"type":"object","properties":{"orderId":{"type":"string"}},"required":["orderId"]}}},"code":"return { ok: true }"}]},"Resources_GetCustomToolResponse":{"type":"object","properties":{"data":{"description":"Response data.","$ref":"#/components/schemas/Resources_V2CustomTool"}},"required":["data"],"additionalProperties":false,"title":"Get custom tool response","description":"One custom tool.","examples":[{"data":{"id":"V1StGXR8Z5jdHi6BmyT","title":"lookup_order","schema":{"type":"function","function":{"name":"lookup_order","description":"Look up an order by id","parameters":{"type":"object","properties":{"orderId":{"type":"string"}},"required":["orderId"]}}},"code":"return { ok: true }","createdAt":"2026-06-01T09:14:00.000Z","updatedAt":"2026-06-20T14:02:11.000Z"}}]},"Resources_UpdateCustomToolResponse":{"type":"object","properties":{"data":{"description":"Response data.","$ref":"#/components/schemas/Resources_V2CustomTool"}},"required":["data"],"additionalProperties":false,"title":"Update custom tool response","description":"The updated custom tool.","examples":[{"data":{"id":"V1StGXR8Z5jdHi6BmyT","title":"lookup_order","schema":{"type":"function","function":{"name":"lookup_order","description":"Look up an order by id","parameters":{"type":"object","properties":{"orderId":{"type":"string"}},"required":["orderId"]}}},"code":"return { ok: false }","createdAt":"2026-06-01T09:14:00.000Z","updatedAt":"2026-06-20T14:02:11.000Z"}}]},"Resources_UpdateCustomToolRequest":{"type":"object","properties":{"workspaceId":{"type":"string","minLength":1,"maxLength":128,"description":"Workspace that owns the custom tool."},"title":{"description":"New display title for the tool.","type":"string","minLength":1,"maxLength":200},"schema":{"description":"Replacement function declaration.","type":"object","properties":{"type":{"type":"string","const":"function","description":"Function declaration discriminator."},"function":{"type":"object","properties":{"name":{"type":"string","minLength":1,"description":"Function name presented to the model."},"description":{"description":"Optional explanation of what the function does.","type":"string"},"parameters":{"type":"object","properties":{"type":{"type":"string","description":"JSON Schema type for the arguments, usually `object`."},"properties":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"description":"Caller-defined JSON Schema for one tool argument."},"description":"Caller-defined argument schemas keyed by argument name."},"required":{"description":"Names of required arguments.","type":"array","items":{"type":"string"}}},"required":["type","properties"],"additionalProperties":{"description":"Caller-defined extension value preserved by the public API."},"description":"JSON Schema describing the arguments accepted by the tool."}},"required":["name","parameters"],"additionalProperties":{"description":"Caller-defined extension value preserved by the public API."},"description":"OpenAI-style function definition."}},"required":["type","function"],"additionalProperties":{"description":"Caller-defined extension value preserved by the public API."}},"code":{"description":"Replacement tool implementation.","type":"string","maxLength":100000}},"required":["workspaceId"],"additionalProperties":false,"title":"Update custom tool request","description":"Custom tool fields to change; at least one editable field is required.","examples":[{"workspaceId":"a91c4b2e-6d3f-4e8a-b5c7-0d9e2f1a8c64","code":"return { ok: false }"}]},"Resources_V2CustomToolDeleteData":{"type":"object","properties":{"id":{"type":"string","description":"Identifier of the deleted custom tool."},"deleted":{"type":"boolean","const":true,"description":"Whether the custom tool was deleted."}},"required":["id","deleted"],"additionalProperties":false,"title":"Delete custom tool data","description":"Custom tool deletion acknowledgement."},"Resources_DeleteCustomToolResponse":{"type":"object","properties":{"data":{"description":"Response data.","$ref":"#/components/schemas/Resources_V2CustomToolDeleteData"}},"required":["data"],"additionalProperties":false,"title":"Delete custom tool response","description":"Acknowledgement that the custom tool was deleted.","examples":[{"data":{"id":"V1StGXR8Z5jdHi6BmyT","deleted":true}}]},"Resources_V2Sandbox":{"type":"object","properties":{"id":{"type":"string","description":"Unique sandbox identifier."},"name":{"type":"string","description":"Display name, unique within the workspace."},"language":{"type":"string","enum":["javascript","python"],"description":"Dependency ecosystem: `javascript` installs from npm, `python` from PyPI."},"dependencies":{"type":"array","items":{"type":"string"},"description":"Package specifiers installed into the sandbox, one per entry."},"cliTools":{"type":"array","items":{"type":"string","enum":["google-cloud-cli@577.0.0-r1","aws-cli@2.36.15-r1","azure-cli@2.89.0-r1","doctl@1.166.0-r1","github-cli@2.97.0-r1","gitlab-cli@1.111.0-r1","kubectl@1.36.3-r1","helm@4.2.3-r1","kustomize@5.8.1-r1","argocd@3.4.6-r1","terraform@1.15.8-r1","pulumi@3.255.0-r1","supabase-cli@2.111.0-r1","firebase-cli@15.25.1-r1","flyctl@0.4.78-r1","railway-cli@5.30.4-r1","stripe-cli@1.45.0-r1","duckdb@1.5.5-r1","rclone@1.75.0-r1","restic@0.19.1-r1","minio-mc@RELEASE.2025-08-13T08-35-41Z-r1","mongosh@2.9.2-r1","sops@3.13.3-r1","age@1.3.1-r1"]},"description":"Pinned managed CLI ids installed into the sandbox, at most 10, no duplicates."},"systemPackages":{"type":"array","items":{"type":"string"},"description":"Debian packages installed into the sandbox, one per entry."},"buildStatus":{"anyOf":[{"type":"string","enum":["pending","building","ready","failed"]},{"type":"null"}],"description":"Image build state. `null` when the deployment installs dependencies at run time and has nothing to build."},"errorCode":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Classified build failure code, or `null`."},"errorMessage":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Human-readable build failure summary, or `null`."},"errorDetail":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Tail of the installer log for a failed build, or `null`."},"builtAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},{"type":"null"}],"description":"ISO 8601 timestamp when the current image finished building, or `null`."},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$","description":"ISO 8601 timestamp when the sandbox was created."},"updatedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$","description":"ISO 8601 timestamp when the sandbox was last updated."}},"required":["id","name","language","dependencies","cliTools","systemPackages","buildStatus","errorCode","errorMessage","errorDetail","builtAt","createdAt","updatedAt"],"additionalProperties":false,"title":"Sandbox","description":"A workspace sandbox: a reusable dependency set that Function blocks execute against."},"Resources_ListSandboxesResponse":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Resources_V2Sandbox"},"description":"Items in the current page."},"nextCursor":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Opaque cursor for the next page. Send it back as `cursor`; `null` means there is nothing further to fetch. Never construct one yourself."}},"required":["data","nextCursor"],"additionalProperties":false,"title":"List sandboxes response","description":"Sandboxes defined in the workspace.","examples":[{"data":[{"id":"V1StGXR8Z5jdHi6BmyT","name":"data-tools","language":"python","dependencies":["pandas==2.2.2","requests"],"cliTools":[],"systemPackages":["graphviz"],"buildStatus":"ready","errorCode":null,"errorMessage":null,"errorDetail":null,"builtAt":"2026-06-20T14:05:40.000Z","createdAt":"2026-06-01T09:14:00.000Z","updatedAt":"2026-06-20T14:02:11.000Z"}],"nextCursor":null}]},"Resources_CreateSandboxResponse":{"type":"object","properties":{"data":{"description":"Response data.","$ref":"#/components/schemas/Resources_V2Sandbox"}},"required":["data"],"additionalProperties":false,"title":"Create sandbox response","description":"The created sandbox. `buildStatus` is `pending` while an image builds and `null` where nothing is built.","examples":[{"data":{"id":"V1StGXR8Z5jdHi6BmyT","name":"data-tools","language":"python","dependencies":["pandas==2.2.2","requests"],"cliTools":[],"systemPackages":["graphviz"],"buildStatus":"pending","errorCode":null,"errorMessage":null,"errorDetail":null,"builtAt":null,"createdAt":"2026-06-01T09:14:00.000Z","updatedAt":"2026-06-20T14:02:11.000Z"}}]},"Resources_CreateSandboxRequest":{"type":"object","properties":{"workspaceId":{"type":"string","minLength":1,"maxLength":128,"description":"Workspace in which to create the sandbox."},"name":{"type":"string","minLength":1,"maxLength":64,"description":"Display name, unique within the workspace; 1 to 64 characters."},"language":{"type":"string","enum":["javascript","python"],"description":"Dependency ecosystem: `javascript` installs from npm, `python` from PyPI."},"dependencies":{"default":[],"description":"Package specifiers installed into the sandbox, one per entry.","maxItems":1000,"type":"array","items":{"type":"string","maxLength":2000}},"cliTools":{"default":[],"description":"Pinned managed CLI ids installed into the sandbox, at most 10, no duplicates.","maxItems":10,"type":"array","items":{"type":"string","enum":["google-cloud-cli@577.0.0-r1","aws-cli@2.36.15-r1","azure-cli@2.89.0-r1","doctl@1.166.0-r1","github-cli@2.97.0-r1","gitlab-cli@1.111.0-r1","kubectl@1.36.3-r1","helm@4.2.3-r1","kustomize@5.8.1-r1","argocd@3.4.6-r1","terraform@1.15.8-r1","pulumi@3.255.0-r1","supabase-cli@2.111.0-r1","firebase-cli@15.25.1-r1","flyctl@0.4.78-r1","railway-cli@5.30.4-r1","stripe-cli@1.45.0-r1","duckdb@1.5.5-r1","rclone@1.75.0-r1","restic@0.19.1-r1","minio-mc@RELEASE.2025-08-13T08-35-41Z-r1","mongosh@2.9.2-r1","sops@3.13.3-r1","age@1.3.1-r1"]}},"systemPackages":{"default":[],"description":"Debian packages installed into the sandbox, one per entry.","maxItems":1000,"type":"array","items":{"type":"string","maxLength":2000}}},"required":["workspaceId","name","language"],"additionalProperties":false,"title":"Create sandbox request","description":"Name, language, and dependency set of a new sandbox.","examples":[{"workspaceId":"a91c4b2e-6d3f-4e8a-b5c7-0d9e2f1a8c64","name":"data-tools","language":"python","dependencies":["pandas==2.2.2","requests"],"systemPackages":["graphviz"]}]},"Resources_GetSandboxResponse":{"type":"object","properties":{"data":{"description":"Response data.","$ref":"#/components/schemas/Resources_V2Sandbox"}},"required":["data"],"additionalProperties":false,"title":"Get sandbox response","description":"One sandbox.","examples":[{"data":{"id":"V1StGXR8Z5jdHi6BmyT","name":"data-tools","language":"python","dependencies":["pandas==2.2.2","requests"],"cliTools":[],"systemPackages":["graphviz"],"buildStatus":"ready","errorCode":null,"errorMessage":null,"errorDetail":null,"builtAt":"2026-06-20T14:05:40.000Z","createdAt":"2026-06-01T09:14:00.000Z","updatedAt":"2026-06-20T14:02:11.000Z"}}]},"Resources_UpdateSandboxResponse":{"type":"object","properties":{"data":{"description":"Response data.","$ref":"#/components/schemas/Resources_V2Sandbox"}},"required":["data"],"additionalProperties":false,"title":"Update sandbox response","description":"The updated sandbox. `buildStatus` is `pending` while an image rebuilds and `null` where nothing is built.","examples":[{"data":{"id":"V1StGXR8Z5jdHi6BmyT","name":"data-tools","language":"python","dependencies":["pandas==2.2.2","requests","pyarrow"],"cliTools":[],"systemPackages":["graphviz"],"buildStatus":"pending","errorCode":null,"errorMessage":null,"errorDetail":null,"builtAt":null,"createdAt":"2026-06-01T09:14:00.000Z","updatedAt":"2026-06-20T14:02:11.000Z"}}]},"Resources_UpdateSandboxRequest":{"type":"object","properties":{"workspaceId":{"type":"string","minLength":1,"maxLength":128,"description":"Workspace that owns the sandbox."},"name":{"description":"New display name, unique within the workspace; 1 to 64 characters.","type":"string","minLength":1,"maxLength":64},"language":{"description":"Replacement dependency ecosystem. The whole spec is revalidated against it, so a Python dependency list does not survive a switch to JavaScript.","type":"string","enum":["javascript","python"]},"dependencies":{"description":"Replacement package list; replaces the whole list.","maxItems":1000,"type":"array","items":{"type":"string","maxLength":2000}},"cliTools":{"description":"Replacement managed CLI list; replaces the whole list.","maxItems":10,"type":"array","items":{"type":"string","enum":["google-cloud-cli@577.0.0-r1","aws-cli@2.36.15-r1","azure-cli@2.89.0-r1","doctl@1.166.0-r1","github-cli@2.97.0-r1","gitlab-cli@1.111.0-r1","kubectl@1.36.3-r1","helm@4.2.3-r1","kustomize@5.8.1-r1","argocd@3.4.6-r1","terraform@1.15.8-r1","pulumi@3.255.0-r1","supabase-cli@2.111.0-r1","firebase-cli@15.25.1-r1","flyctl@0.4.78-r1","railway-cli@5.30.4-r1","stripe-cli@1.45.0-r1","duckdb@1.5.5-r1","rclone@1.75.0-r1","restic@0.19.1-r1","minio-mc@RELEASE.2025-08-13T08-35-41Z-r1","mongosh@2.9.2-r1","sops@3.13.3-r1","age@1.3.1-r1"]}},"systemPackages":{"description":"Replacement Debian package list; replaces the whole list.","maxItems":1000,"type":"array","items":{"type":"string","maxLength":2000}}},"required":["workspaceId"],"additionalProperties":false,"title":"Update sandbox request","description":"Sandbox fields to change; at least one editable field is required.","examples":[{"workspaceId":"a91c4b2e-6d3f-4e8a-b5c7-0d9e2f1a8c64","dependencies":["pandas==2.2.2","requests","pyarrow"]}]},"Resources_V2SandboxDeleteData":{"type":"object","properties":{"id":{"type":"string","description":"Identifier of the deleted sandbox."},"deleted":{"type":"boolean","const":true,"description":"Whether the sandbox was deleted."}},"required":["id","deleted"],"additionalProperties":false,"title":"Delete sandbox data","description":"Sandbox deletion acknowledgement."},"Resources_DeleteSandboxResponse":{"type":"object","properties":{"data":{"description":"Response data.","$ref":"#/components/schemas/Resources_V2SandboxDeleteData"}},"required":["data"],"additionalProperties":false,"title":"Delete sandbox response","description":"Acknowledgement that the sandbox was deleted.","examples":[{"data":{"id":"V1StGXR8Z5jdHi6BmyT","deleted":true}}]},"Resources_V2Credential":{"type":"object","properties":{"id":{"type":"string","description":"Unique credential identifier."},"type":{"type":"string","enum":["oauth","service_account"],"description":"Authenticated connection type."},"displayName":{"type":"string","description":"Credential display name."},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Optional credential description."},"providerId":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Integration provider authenticated by this credential."},"accountId":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Linked account identifier for OAuth credentials."},"hasServiceAccountKey":{"type":"boolean","description":"Whether a service-account payload is stored. Its contents are never returned."},"role":{"type":"string","enum":["admin","member"],"description":"Caller role for the credential."},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$","description":"ISO 8601 timestamp when the credential was created."},"updatedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$","description":"ISO 8601 timestamp when the credential was last updated."}},"required":["id","type","displayName","description","providerId","accountId","hasServiceAccountKey","role","createdAt","updatedAt"],"additionalProperties":false,"title":"Credential","description":"Public authenticated-connection metadata without secret material."},"Resources_ListCredentialsResponse":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Resources_V2Credential"},"description":"Items in the current page."},"nextCursor":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Opaque cursor for the next page. Send it back as `cursor`; `null` means there is nothing further to fetch. Never construct one yourself."}},"required":["data","nextCursor"],"additionalProperties":false,"title":"List credentials response","description":"Credential metadata visible to the caller.","examples":[{"data":[{"id":"7c9e6679-7425-40de-944b-e07fc1f90ae7","type":"service_account","displayName":"Zoom service account","description":null,"providerId":"zoom-service-account","accountId":null,"hasServiceAccountKey":true,"role":"admin","createdAt":"2026-06-01T09:14:00.000Z","updatedAt":"2026-06-20T14:02:11.000Z"}],"nextCursor":null}]},"Resources_V2CredentialProvider":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","const":"oauth","description":"Browser-based OAuth connection method."},"serviceId":{"type":"string","minLength":1,"maxLength":255,"description":"Stable credential-provider identifier."},"name":{"type":"string","minLength":1,"maxLength":255,"description":"Credential provider display name."},"description":{"type":"string","minLength":1,"maxLength":1000,"description":"Credential provider description."},"providerFamily":{"type":"string","minLength":1,"maxLength":255,"description":"Owning provider family identifier."},"available":{"type":"boolean","description":"Whether this caller can connect the provider in the current deployment."},"supportsReconnect":{"type":"boolean","description":"Whether existing credentials for this service can be reconnected."},"authorizationOptions":{"minItems":1,"maxItems":10,"type":"array","items":{"type":"object","properties":{"providerId":{"type":"string","minLength":1,"maxLength":255,"description":"Exact OAuth provider identifier accepted by the connection endpoint."},"label":{"type":"string","minLength":1,"maxLength":255,"description":"Human-readable authorization-server label."}},"required":["providerId","label"],"additionalProperties":false},"description":"Authorization servers available for this OAuth service."},"fields":{"maxItems":20,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":255,"description":"Exact create-body field name."},"label":{"type":"string","minLength":1,"maxLength":255,"description":"Human-readable field label."},"placeholder":{"type":"string","minLength":1,"maxLength":1000,"description":"Suggested input placeholder."},"required":{"type":"boolean","description":"Whether the field is required for the selected flow."},"secret":{"type":"boolean","description":"Whether the submitted field is write-only secret material."},"multiline":{"type":"boolean","description":"Whether the field is intended for multi-line input."},"requiredForAuthMethods":{"description":"Authentication methods for which this field is required.","minItems":1,"maxItems":10,"type":"array","items":{"type":"string","minLength":1,"maxLength":64}},"options":{"description":"Fixed values accepted by a selector field.","minItems":1,"maxItems":20,"type":"array","items":{"type":"object","properties":{"value":{"type":"string","minLength":1,"maxLength":255,"description":"Submitted option value."},"label":{"type":"string","minLength":1,"maxLength":255,"description":"Human-readable option label."}},"required":["value","label"],"additionalProperties":false}},"hint":{"description":"Provider-specific setup guidance.","type":"string","minLength":1,"maxLength":2000}},"required":["id","label","placeholder","required","secret","multiline"],"additionalProperties":false},"description":"Write-only setup fields required before starting this OAuth flow."}},"required":["type","serviceId","name","description","providerFamily","available","supportsReconnect","authorizationOptions","fields"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","const":"service_account","description":"Direct service-account credential method."},"serviceId":{"type":"string","minLength":1,"maxLength":255,"description":"Stable credential-provider identifier."},"name":{"type":"string","minLength":1,"maxLength":255,"description":"Credential provider display name."},"description":{"type":"string","minLength":1,"maxLength":1000,"description":"Credential provider description."},"providerFamily":{"type":"string","minLength":1,"maxLength":255,"description":"Owning provider family identifier."},"available":{"type":"boolean","description":"Whether this caller can connect the provider in the current deployment."},"providerId":{"type":"string","minLength":1,"maxLength":255,"description":"Exact service-account provider ID accepted by credential creation."},"docsUrl":{"type":"string","format":"uri","description":"Setup guide for the provider."},"helpText":{"description":"Provider-specific setup guidance.","type":"string","minLength":1,"maxLength":2000},"requiresClientGeneratedCredentialId":{"type":"boolean","description":"Whether the caller must generate and submit the credential ID before setup."},"fields":{"minItems":1,"maxItems":20,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":255,"description":"Exact create-body field name."},"label":{"type":"string","minLength":1,"maxLength":255,"description":"Human-readable field label."},"placeholder":{"type":"string","minLength":1,"maxLength":1000,"description":"Suggested input placeholder."},"required":{"type":"boolean","description":"Whether the field is required for the selected flow."},"secret":{"type":"boolean","description":"Whether the submitted field is write-only secret material."},"multiline":{"type":"boolean","description":"Whether the field is intended for multi-line input."},"requiredForAuthMethods":{"description":"Authentication methods for which this field is required.","minItems":1,"maxItems":10,"type":"array","items":{"type":"string","minLength":1,"maxLength":64}},"options":{"description":"Fixed values accepted by a selector field.","minItems":1,"maxItems":20,"type":"array","items":{"type":"object","properties":{"value":{"type":"string","minLength":1,"maxLength":255,"description":"Submitted option value."},"label":{"type":"string","minLength":1,"maxLength":255,"description":"Human-readable option label."}},"required":["value","label"],"additionalProperties":false}},"hint":{"description":"Provider-specific setup guidance.","type":"string","minLength":1,"maxLength":2000}},"required":["id","label","placeholder","required","secret","multiline"],"additionalProperties":false},"description":"Create-body fields accepted by this provider. Secret fields are write-only."}},"required":["type","serviceId","name","description","providerFamily","available","providerId","docsUrl","requiresClientGeneratedCredentialId","fields"],"additionalProperties":false}],"title":"Credential Provider","description":"An OAuth or service-account connection method available to a workspace."},"Resources_ListCredentialProvidersResponse":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Resources_V2CredentialProvider"},"description":"Items in the current page."},"nextCursor":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Always `null` — this list has no `cursor` or `limit` param and returns its whole bounded set in one page. Present so the list can gain pages later without a shape change."}},"required":["data","nextCursor"],"additionalProperties":false,"title":"List credential providers response","description":"OAuth and service-account connection methods.","examples":[{"data":[{"type":"oauth","serviceId":"salesforce","name":"Salesforce","description":"Connect to Salesforce CRM data and operations.","providerFamily":"salesforce","available":true,"supportsReconnect":true,"fields":[],"authorizationOptions":[{"providerId":"salesforce","label":"Production"},{"providerId":"salesforce-sandbox","label":"Sandbox"}]},{"type":"service_account","serviceId":"zoom-service-account","providerId":"zoom-service-account","name":"Zoom server-to-server app","description":"Connect Zoom with a server-to-server app.","providerFamily":"zoom","available":true,"docsUrl":"https://docs.sim.ai/integrations/zoom-service-account","requiresClientGeneratedCredentialId":false,"fields":[{"id":"clientId","label":"Client ID","placeholder":"Paste the client ID","required":true,"secret":false,"multiline":false},{"id":"clientSecret","label":"Client secret","placeholder":"Paste the client secret","required":true,"secret":true,"multiline":false},{"id":"orgId","label":"Account ID","placeholder":"Paste the account ID","required":true,"secret":false,"multiline":false}]}],"nextCursor":null}]},"Resources_CreateServiceAccountCredentialResponse":{"type":"object","properties":{"data":{"description":"Response data.","$ref":"#/components/schemas/Resources_V2Credential"}},"required":["data"],"additionalProperties":false,"title":"Create service-account credential response","description":"Verified credential metadata without secret material.","examples":[{"data":{"id":"7c9e6679-7425-40de-944b-e07fc1f90ae7","type":"service_account","displayName":"Zoom service account","description":null,"providerId":"zoom-service-account","accountId":null,"hasServiceAccountKey":true,"role":"admin","createdAt":"2026-06-01T09:14:00.000Z","updatedAt":"2026-06-20T14:02:11.000Z"}}]},"Resources_CreateServiceAccountCredentialRequest":{"type":"object","properties":{"workspaceId":{"type":"string","minLength":1,"maxLength":128,"description":"Workspace that will own the credential."},"type":{"type":"string","const":"service_account","description":"Service-account credential discriminator."},"providerId":{"type":"string","minLength":1,"maxLength":255,"description":"Exact service-account provider ID returned by provider discovery."},"displayName":{"description":"Optional name; providers may derive one from the verified account identity.","type":"string","minLength":1,"maxLength":255},"description":{"description":"Optional credential description.","type":"string","maxLength":500},"id":{"description":"Required only when provider discovery requests a client-generated ID.","type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"credentials":{"type":"string","minLength":1,"maxLength":131072,"description":"Write-only JSON object string containing the fields declared by credential-provider discovery.","writeOnly":true}},"required":["workspaceId","type","providerId","credentials"],"additionalProperties":false,"title":"Create service-account credential request","description":"Provider identifier, optional display metadata, and a write-only JSON object string containing the fields declared by provider discovery."},"Resources_V2CredentialConnectionAuthorization":{"type":"object","properties":{"authorizationUrl":{"type":"string","format":"uri","description":"Short-lived Sim browser URL that starts the OAuth authorization flow."},"expiresAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$","description":"ISO 8601 timestamp when the connection link expires."}},"required":["authorizationUrl","expiresAt"],"additionalProperties":false,"title":"Credential Connection Authorization","description":"A short-lived browser entrypoint for an OAuth connection flow."},"Resources_CreateCredentialConnectionResponse":{"type":"object","properties":{"data":{"description":"Response data.","$ref":"#/components/schemas/Resources_V2CredentialConnectionAuthorization"}},"required":["data"],"additionalProperties":false,"title":"Create credential connection response","description":"Short-lived Sim browser entrypoint and its expiry.","examples":[{"data":{"authorizationUrl":"https://www.sim.ai/api/auth/oauth2/authorize?draftId=draft-123","expiresAt":"2026-06-20T14:17:11.000Z"}}]},"Resources_CreateCredentialConnectionBody":{"anyOf":[{"anyOf":[{"type":"object","properties":{"workspaceId":{"type":"string","minLength":1,"maxLength":128,"description":"Workspace that will own the credential."},"displayName":{"type":"string","minLength":1,"maxLength":255,"description":"Name shown for the new credential in Sim."},"providerId":{"type":"string","const":"quickbooks","description":"QuickBooks OAuth provider ID returned by credential-provider discovery."},"oauthClientConfig":{"type":"object","properties":{"clientId":{"type":"string","minLength":1,"maxLength":255,"description":"Client ID for the caller-managed Intuit OAuth application."},"clientSecret":{"type":"string","minLength":1,"maxLength":512,"description":"Write-only client secret for the caller-managed Intuit OAuth application.","writeOnly":true},"environment":{"type":"string","enum":["sandbox","production"],"description":"Intuit company environment used for authorization and API requests."},"webhookVerifierToken":{"type":"string","minLength":1,"maxLength":512,"description":"Write-only verifier token for webhook signatures from the caller-managed app.","writeOnly":true}},"required":["clientId","clientSecret","environment","webhookVerifierToken"],"additionalProperties":false,"description":"Write-only caller-managed Intuit OAuth app configuration."}},"required":["workspaceId","displayName","providerId","oauthClientConfig"],"additionalProperties":false},{"type":"object","properties":{"workspaceId":{"type":"string","minLength":1,"maxLength":128,"description":"Workspace that will own the credential."},"displayName":{"type":"string","minLength":1,"maxLength":255,"description":"Name shown for the new credential in Sim."},"providerId":{"type":"string","enum":["github-repositories","google-email","google-drive","google-docs","google-sheets","google-forms","google-calendar","google-contacts","google-ads","google-bigquery","google-tasks","google-vault","google-groups","google-chat","google-meet","vertex-ai","microsoft-ad","microsoft-dataverse","microsoft-excel","microsoft-planner","microsoft-teams","microsoft-word","outlook","onedrive","sharepoint","x","tiktok","confluence","jira","airtable","bitbucket","notion","clickup","linear","manageengine-sdp","monday","box","dropbox","shopify","slack","reddit","wealthbox","webflow","trello","asana","attio","calcom","docusign","pipedrive","hubspot","linkedin","instagram","salesforce","salesforce-sandbox","zoho-desk","zoom","wordpress","spotify"],"description":"Exact OAuth provider ID returned by credential-provider discovery."}},"required":["workspaceId","displayName","providerId"],"additionalProperties":false}]},{"type":"object","properties":{"workspaceId":{"type":"string","minLength":1,"maxLength":128,"description":"Workspace expected to own the credential."},"credentialId":{"type":"string","minLength":1,"maxLength":255,"description":"Existing OAuth credential to reconnect in place. QuickBooks reconnects also require oauthClientConfig with the Intuit client ID, client secret, environment, and webhook verifier token."},"oauthClientConfig":{"description":"Write-only Intuit OAuth app configuration. Required when credentialId identifies a QuickBooks credential; omit it for other providers.","type":"object","properties":{"clientId":{"type":"string","minLength":1,"maxLength":255,"description":"Client ID for the caller-managed Intuit OAuth application."},"clientSecret":{"type":"string","minLength":1,"maxLength":512,"description":"Write-only client secret for the caller-managed Intuit OAuth application.","writeOnly":true},"environment":{"type":"string","enum":["sandbox","production"],"description":"Intuit company environment used for authorization and API requests."},"webhookVerifierToken":{"type":"string","minLength":1,"maxLength":512,"description":"Write-only verifier token for webhook signatures from the caller-managed app.","writeOnly":true}},"required":["clientId","clientSecret","environment","webhookVerifierToken"],"additionalProperties":false}},"required":["workspaceId","credentialId"],"additionalProperties":false}],"title":"Create credential connection body","description":"For a new connection, provide providerId and displayName. For a reconnect, provide only credentialId; the existing display name is preserved."},"Resources_V2CredentialDeleteData":{"type":"object","properties":{"id":{"type":"string","minLength":1,"description":"Disconnected credential identifier."},"deleted":{"type":"boolean","const":true,"description":"Whether the credential was disconnected."}},"required":["id","deleted"],"additionalProperties":false,"title":"Delete credential data","description":"Credential disconnection acknowledgement."},"Resources_DeleteCredentialResponse":{"type":"object","properties":{"data":{"description":"Response data.","$ref":"#/components/schemas/Resources_V2CredentialDeleteData"}},"required":["data"],"additionalProperties":false,"title":"Disconnect credential response","description":"Acknowledgement that the credential was disconnected.","examples":[{"data":{"id":"7c9e6679-7425-40de-944b-e07fc1f90ae7","deleted":true}}]},"Resources_V2SecretWithValue":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":255,"pattern":"^[A-Za-z0-9_]+$","description":"Secret name containing only letters, numbers, and underscores."},"scope":{"type":"string","enum":["workspace","personal"],"description":"Whether the secret belongs to the workspace or to the caller. A personal secret belongs to the caller across every workspace, not to one workspace."},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"What the secret is for, as set on the workspace secret. Always null for a personal secret, which has no shared audience."},"unredacted":{"type":"boolean","description":"Whether the workspace secret opts out of redaction, so its value appears in plaintext in run logs and model-visible content. Always false for a personal secret."},"role":{"type":"string","enum":["admin","member"],"description":"Caller role for the secret."},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$","description":"ISO 8601 timestamp when the secret was created."},"updatedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$","description":"ISO 8601 timestamp when the secret was last updated."},"value":{"description":"The stored secret value. Present only when the workspace secret is marked visible (unredacted); omitted for every other secret.","type":"string"}},"required":["name","scope","description","unredacted","role","createdAt","updatedAt"],"additionalProperties":false,"title":"Secret metadata with visible value","description":"Secret metadata; the stored value is included only for a workspace secret marked visible (unredacted)."},"Resources_ListSecretsResponse":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Resources_V2SecretWithValue"},"description":"Items in the current page."},"nextCursor":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Opaque cursor for the next page. Send it back as `cursor`; `null` means there is nothing further to fetch. Never construct one yourself."}},"required":["data","nextCursor"],"additionalProperties":false,"title":"List secrets response","description":"Secret metadata visible to the caller; visible (unredacted) workspace secrets carry their value.","examples":[{"data":[{"name":"STRIPE_API_KEY","scope":"workspace","description":"Production billing key — rotate quarterly.","unredacted":false,"role":"admin","createdAt":"2026-06-01T09:14:00.000Z","updatedAt":"2026-06-20T14:02:11.000Z"},{"name":"STAGING_BASE_URL","scope":"workspace","description":"Staging environment base URL.","unredacted":true,"role":"member","createdAt":"2026-06-03T11:30:00.000Z","updatedAt":"2026-06-21T08:45:09.000Z","value":"https://staging.example.com"}],"nextCursor":null}]},"Resources_V2Secret":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":255,"pattern":"^[A-Za-z0-9_]+$","description":"Secret name containing only letters, numbers, and underscores."},"scope":{"type":"string","enum":["workspace","personal"],"description":"Whether the secret belongs to the workspace or to the caller. A personal secret belongs to the caller across every workspace, not to one workspace."},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"What the secret is for, as set on the workspace secret. Always null for a personal secret, which has no shared audience."},"unredacted":{"type":"boolean","description":"Whether the workspace secret opts out of redaction, so its value appears in plaintext in run logs and model-visible content. Always false for a personal secret."},"role":{"type":"string","enum":["admin","member"],"description":"Caller role for the secret."},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$","description":"ISO 8601 timestamp when the secret was created."},"updatedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$","description":"ISO 8601 timestamp when the secret was last updated."}},"required":["name","scope","description","unredacted","role","createdAt","updatedAt"],"additionalProperties":false,"title":"Secret metadata","description":"Public secret metadata without the stored secret value."},"Resources_SetSecretResponse":{"type":"object","properties":{"data":{"description":"Response data.","$ref":"#/components/schemas/Resources_V2Secret"}},"required":["data"],"additionalProperties":false,"title":"Set secret response","description":"Metadata for the created or replaced secret without its value.","examples":[{"data":{"name":"STRIPE_API_KEY","scope":"workspace","description":"Production billing key — rotate quarterly.","unredacted":false,"role":"admin","createdAt":"2026-06-01T09:14:00.000Z","updatedAt":"2026-06-20T14:02:11.000Z"}}]},"Resources_SetSecretRequest":{"type":"object","properties":{"workspaceId":{"type":"string","minLength":1,"maxLength":128,"description":"Workspace the request is authorized against. A workspace secret is written to it; a personal secret is written to the caller and is available in all of their workspaces."},"scope":{"type":"string","enum":["workspace","personal"],"description":"Whether the secret belongs to the workspace or to the caller. A personal secret belongs to the caller across every workspace, not to one workspace."},"value":{"description":"Write-only secret value. It is never returned. Omit it on a workspace secret to change description or unredacted alone, leaving the stored value untouched; the secret must already exist. Always required for a personal secret, which carries no other writable field.","writeOnly":true,"type":"string","minLength":1,"maxLength":65536},"description":{"description":"What the secret is for, shown to teammates. Workspace scope only — sending it for a personal secret is rejected. Omit it to leave an existing description untouched; send null or an empty string to clear one.","anyOf":[{"type":"string","maxLength":500},{"type":"null"}]},"unredacted":{"description":"Opt the workspace secret out of redaction: its value then appears in plaintext in run logs, model-visible content, and files, including publicly shared log links. Workspace scope only — sending it for a personal secret is rejected. Omit it to leave the current setting untouched.","type":"boolean"}},"required":["workspaceId","scope"],"additionalProperties":false,"title":"Set secret request","description":"Ownership scope and write-only value for the secret. A workspace secret may instead send description or unredacted alone, without a value.","examples":[{"workspaceId":"a91c4b2e-6d3f-4e8a-b5c7-0d9e2f1a8c64","scope":"workspace","value":"YOUR_SECRET_VALUE"},{"workspaceId":"a91c4b2e-6d3f-4e8a-b5c7-0d9e2f1a8c64","scope":"workspace","unredacted":false}]},"Resources_V2SecretDeleteData":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":255,"pattern":"^[A-Za-z0-9_]+$","description":"Secret name containing only letters, numbers, and underscores."},"scope":{"type":"string","enum":["workspace","personal"],"description":"Whether the secret belongs to the workspace or to the caller. A personal secret belongs to the caller across every workspace, not to one workspace."},"deleted":{"type":"boolean","const":true,"description":"Whether the secret was deleted."}},"required":["name","scope","deleted"],"additionalProperties":false,"title":"Delete secret data","description":"Secret deletion acknowledgement without the stored value."},"Resources_DeleteSecretResponse":{"type":"object","properties":{"data":{"description":"Response data.","$ref":"#/components/schemas/Resources_V2SecretDeleteData"}},"required":["data"],"additionalProperties":false,"title":"Delete secret response","description":"Acknowledgement that the secret was deleted.","examples":[{"data":{"name":"STRIPE_API_KEY","scope":"workspace","deleted":true}}]},"Resources_V2Meta":{"type":"object","properties":{"v2Enabled":{"type":"boolean","description":"Whether this API version is available. This is true when the endpoint is served."},"keyType":{"type":"string","enum":["personal","workspace","oauth_access_token"],"description":"Whether the calling credential is a personal API key carrying the full authority of its owner across their workspaces, a key scoped to one workspace, or an OAuth access token acting for its user within the scopes it was granted."},"expiresAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},{"type":"null"}],"description":"ISO 8601 timestamp when the calling credential expires, or null when it does not."}},"required":["v2Enabled","keyType","expiresAt"],"additionalProperties":false,"title":"API capabilities","description":"API availability and lifecycle facts about the calling credential."},"Resources_GetApiMetaResponse":{"type":"object","properties":{"data":{"description":"Response data.","$ref":"#/components/schemas/Resources_V2Meta"}},"required":["data"],"additionalProperties":false,"title":"API capabilities response","description":"API availability, credential type, and expiry for the caller.","examples":[{"data":{"v2Enabled":true,"keyType":"personal","expiresAt":null}}]},"Resources_WorkflowMcpServerListItem":{"type":"object","properties":{"id":{"type":"string","description":"Unique workflow-MCP server identifier."},"name":{"type":"string","description":"Server display name, shown to connecting MCP clients."},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Optional server description, or null when unset."},"isPublic":{"type":"boolean","description":"Whether the server answers MCP clients without a Sim API key."},"mcpServerUrl":{"type":"string","description":"Endpoint an MCP client connects to. Published here so callers never build it.","examples":["https://www.sim.ai/api/mcp/serve/wfmcp_01J8ZK3QW4M6X2R9T7B5C0V2"]},"createdAt":{"type":"string","description":"ISO 8601 timestamp when the server was created.","format":"date-time"},"updatedAt":{"type":"string","description":"ISO 8601 timestamp when the server was last modified.","format":"date-time"},"toolCount":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Number of workflows published as tools."},"toolNames":{"type":"array","items":{"type":"string"},"description":"Tool names this server publishes, alphabetically ordered."}},"required":["id","name","description","isPublic","mcpServerUrl","createdAt","updatedAt","toolCount","toolNames"],"additionalProperties":false,"title":"Workflow MCP server list item","description":"A published MCP server together with the tool names it exposes."},"Resources_ListWorkflowMcpServersResponse":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Resources_WorkflowMcpServerListItem"},"description":"Items in the current page."},"nextCursor":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Opaque cursor for the next page. Send it back as `cursor`; `null` means there is nothing further to fetch. Never construct one yourself."},"toolNamesTruncated":{"type":"boolean","description":"Whether the page-wide tool-name limit left some inventories incomplete. Use List Workflow MCP Tools for one server and check its `truncated` flag before treating the inventory as complete. `nextCursor` paginates servers, not tool names."}},"required":["data","nextCursor","toolNamesTruncated"],"additionalProperties":false,"title":"List workflow MCP servers response","description":"A cursor-paginated page of published MCP servers.","examples":[{"data":[{"id":"wfmcp_01J8ZK3QW4M6X2R9T7B5C0V2","name":"Support agents","description":"Ticket triage and escalation workflows.","isPublic":false,"mcpServerUrl":"https://www.sim.ai/api/mcp/serve/wfmcp_01J8ZK3QW4M6X2R9T7B5C0V2","createdAt":"2026-06-12T10:30:00.000Z","updatedAt":"2026-06-12T10:30:00.000Z","toolCount":1,"toolNames":["triage_ticket"]}],"nextCursor":null,"toolNamesTruncated":false}]},"Resources_WorkflowMcpServer":{"type":"object","properties":{"id":{"type":"string","description":"Unique workflow-MCP server identifier."},"name":{"type":"string","description":"Server display name, shown to connecting MCP clients."},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Optional server description, or null when unset."},"isPublic":{"type":"boolean","description":"Whether the server answers MCP clients without a Sim API key."},"mcpServerUrl":{"type":"string","description":"Endpoint an MCP client connects to. Published here so callers never build it.","examples":["https://www.sim.ai/api/mcp/serve/wfmcp_01J8ZK3QW4M6X2R9T7B5C0V2"]},"createdAt":{"type":"string","description":"ISO 8601 timestamp when the server was created.","format":"date-time"},"updatedAt":{"type":"string","description":"ISO 8601 timestamp when the server was last modified.","format":"date-time"}},"required":["id","name","description","isPublic","mcpServerUrl","createdAt","updatedAt"],"additionalProperties":false,"title":"Workflow MCP server","description":"A workspace-published MCP server exposing deployed workflows as tools."},"Resources_CreateWorkflowMcpServerResponse":{"type":"object","properties":{"data":{"description":"Response data.","$ref":"#/components/schemas/Resources_WorkflowMcpServer"}},"required":["data"],"additionalProperties":false,"title":"Create workflow MCP server response","description":"The published MCP server.","examples":[{"data":{"id":"wfmcp_01J8ZK3QW4M6X2R9T7B5C0V2","name":"Support agents","description":"Ticket triage and escalation workflows.","isPublic":false,"mcpServerUrl":"https://www.sim.ai/api/mcp/serve/wfmcp_01J8ZK3QW4M6X2R9T7B5C0V2","createdAt":"2026-06-12T10:30:00.000Z","updatedAt":"2026-06-12T10:30:00.000Z"}}]},"Resources_CreateWorkflowMcpServerRequest":{"type":"object","properties":{"workspaceId":{"type":"string","minLength":1,"maxLength":128,"description":"Workspace in which to publish the server."},"name":{"type":"string","minLength":1,"maxLength":255,"description":"Server display name, shown to connecting MCP clients."},"description":{"description":"Optional server description.","type":"string","maxLength":2000},"isPublic":{"description":"Whether the server answers MCP clients without a Sim API key. Defaults to false — a public server executes the workflows it publishes for anyone holding its URL.","default":false,"type":"boolean"},"workflowIds":{"description":"Deployed workflows to publish as tools on the new server.","maxItems":100,"type":"array","items":{"type":"string","minLength":1}}},"required":["workspaceId","name"],"additionalProperties":false,"title":"Create workflow MCP server request","description":"A new workspace-published MCP server and the workflows it exposes.","examples":[{"workspaceId":"9f4c2a10-3b7e-4d58-8f6a-2c1d0e5b7a94","name":"Support agents","workflowIds":["3b1f7c92-8d4e-4a6b-9c0d-5e2f8a714b36"]}]},"Resources_GetWorkflowMcpServerResponse":{"type":"object","properties":{"data":{"description":"Response data.","$ref":"#/components/schemas/Resources_WorkflowMcpServer"}},"required":["data"],"additionalProperties":false,"title":"Get workflow MCP server response","description":"A single published MCP server.","examples":[{"data":{"id":"wfmcp_01J8ZK3QW4M6X2R9T7B5C0V2","name":"Support agents","description":"Ticket triage and escalation workflows.","isPublic":false,"mcpServerUrl":"https://www.sim.ai/api/mcp/serve/wfmcp_01J8ZK3QW4M6X2R9T7B5C0V2","createdAt":"2026-06-12T10:30:00.000Z","updatedAt":"2026-06-12T10:30:00.000Z"}}]},"Resources_WorkflowMcpToolListItem":{"type":"object","properties":{"id":{"type":"string","description":"Unique tool identifier."},"serverId":{"type":"string","description":"Server that publishes this tool."},"workflowId":{"type":"string","description":"Workflow this tool executes."},"toolName":{"type":"string","description":"Name an MCP client calls. Derived from the supplied name or the workflow name, normalized to the MCP tool-name grammar."},"toolDescription":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Description shown to MCP clients."},"mcpServerUrl":{"type":"string","description":"Endpoint an MCP client connects to."},"apiEndpoint":{"type":"string","description":"Sim execution endpoint this tool calls through."},"createdAt":{"type":"string","description":"ISO 8601 timestamp when the tool was created.","format":"date-time"},"updatedAt":{"type":"string","description":"ISO 8601 timestamp when the tool was last modified.","format":"date-time"}},"required":["id","serverId","workflowId","toolName","toolDescription","mcpServerUrl","apiEndpoint","createdAt","updatedAt"],"additionalProperties":false,"title":"Workflow MCP tool list item","description":"A tool a server publishes, as returned by a read."},"Resources_ListWorkflowMcpToolsResponse":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Resources_WorkflowMcpToolListItem"},"description":"Items in the current page."},"nextCursor":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Always `null` — this list has no `cursor` or `limit` param and returns its whole bounded set in one page. Present so the list can gain pages later without a shape change."},"truncated":{"type":"boolean","description":"Whether the tool limit left this inventory incomplete. The list is unpaginated and `nextCursor` remains null even when truncated. Do not treat a truncated inventory as the complete set of published tools."}},"required":["data","nextCursor","truncated"],"additionalProperties":false,"title":"List workflow MCP tools response","description":"The tools a published MCP server exposes.","examples":[{"data":[{"id":"wfmcptool_01J8ZK3QW4M6X2R9T7B5C0V3","serverId":"wfmcp_01J8ZK3QW4M6X2R9T7B5C0V2","workflowId":"3b1f7c92-8d4e-4a6b-9c0d-5e2f8a714b36","toolName":"triage_ticket","toolDescription":"Execute Ticket triage workflow","mcpServerUrl":"https://www.sim.ai/api/mcp/serve/wfmcp_01J8ZK3QW4M6X2R9T7B5C0V2","apiEndpoint":"https://www.sim.ai/api/v2/workflows/3b1f7c92-8d4e-4a6b-9c0d-5e2f8a714b36/execute","createdAt":"2026-06-12T10:30:00.000Z","updatedAt":"2026-06-12T10:30:00.000Z"}],"nextCursor":null,"truncated":false}]},"Resources_UpdateWorkflowMcpServerResponse":{"type":"object","properties":{"data":{"description":"Response data.","$ref":"#/components/schemas/Resources_WorkflowMcpServer"}},"required":["data"],"additionalProperties":false,"title":"Update workflow MCP server response","description":"The updated MCP server.","examples":[{"data":{"id":"wfmcp_01J8ZK3QW4M6X2R9T7B5C0V2","name":"Support agents","description":"Ticket triage and escalation workflows.","isPublic":true,"mcpServerUrl":"https://www.sim.ai/api/mcp/serve/wfmcp_01J8ZK3QW4M6X2R9T7B5C0V2","createdAt":"2026-06-12T10:30:00.000Z","updatedAt":"2026-06-12T10:30:00.000Z"}}]},"Resources_UpdateWorkflowMcpServerRequest":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":255,"description":"Server display name, shown to connecting MCP clients."},"description":{"description":"New server description, or null to clear it.","anyOf":[{"type":"string","maxLength":2000},{"type":"null"}]},"isPublic":{"description":"Whether the server answers MCP clients without a Sim API key.","type":"boolean"}},"additionalProperties":false,"title":"Update workflow MCP server request","description":"Merge-patch body for a published MCP server.","examples":[{"isPublic":true}]},"Resources_DeleteWorkflowMcpServerResult":{"type":"object","properties":{"id":{"type":"string","description":"Identifier of the unpublished server."},"deleted":{"type":"boolean","const":true,"description":"Whether the server was unpublished."}},"required":["id","deleted"],"additionalProperties":false,"title":"Delete workflow MCP server result","description":"Unpublish acknowledgement."},"Resources_DeleteWorkflowMcpServerResponse":{"type":"object","properties":{"data":{"description":"Response data.","$ref":"#/components/schemas/Resources_DeleteWorkflowMcpServerResult"}},"required":["data"],"additionalProperties":false,"title":"Delete workflow MCP server response","description":"Acknowledgement that the MCP server was unpublished.","examples":[{"data":{"id":"wfmcp_01J8ZK3QW4M6X2R9T7B5C0V2","deleted":true}}]},"Resources_WorkflowMcpTool":{"type":"object","properties":{"id":{"type":"string","description":"Unique tool identifier."},"serverId":{"type":"string","description":"Server that publishes this tool."},"workflowId":{"type":"string","description":"Workflow this tool executes."},"toolName":{"type":"string","description":"Name an MCP client calls. Derived from the supplied name or the workflow name, normalized to the MCP tool-name grammar."},"toolDescription":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Description shown to MCP clients."},"mcpServerUrl":{"type":"string","description":"Endpoint an MCP client connects to."},"apiEndpoint":{"type":"string","description":"Sim execution endpoint this tool calls through."},"updated":{"type":"boolean","description":"False when the workflow was newly published on this server, true when an existing tool was replaced. Publishing is idempotent per workflow, so a repeat call answers 200 with true rather than conflicting."},"createdAt":{"type":"string","description":"ISO 8601 timestamp when the tool was created.","format":"date-time"},"updatedAt":{"type":"string","description":"ISO 8601 timestamp when the tool was last modified.","format":"date-time"}},"required":["id","serverId","workflowId","toolName","toolDescription","mcpServerUrl","apiEndpoint","updated","createdAt","updatedAt"],"additionalProperties":false,"title":"Workflow MCP tool","description":"A deployed workflow published as a tool on a workflow-MCP server."},"Resources_DeployWorkflowMcpToolResponse":{"type":"object","properties":{"data":{"description":"Response data.","$ref":"#/components/schemas/Resources_WorkflowMcpTool"}},"required":["data"],"additionalProperties":false,"title":"Publish workflow as MCP tool response","description":"The published tool.","examples":[{"data":{"id":"wfmcptool_01J8ZK3QW4M6X2R9T7B5C0V3","serverId":"wfmcp_01J8ZK3QW4M6X2R9T7B5C0V2","workflowId":"3b1f7c92-8d4e-4a6b-9c0d-5e2f8a714b36","toolName":"triage_ticket","toolDescription":"Execute Ticket triage workflow","mcpServerUrl":"https://www.sim.ai/api/mcp/serve/wfmcp_01J8ZK3QW4M6X2R9T7B5C0V2","apiEndpoint":"https://www.sim.ai/api/v2/workflows/3b1f7c92-8d4e-4a6b-9c0d-5e2f8a714b36/execute","updated":false,"createdAt":"2026-06-12T10:30:00.000Z","updatedAt":"2026-06-12T10:30:00.000Z"}}]},"Resources_DeployWorkflowMcpToolRequest":{"type":"object","properties":{"workflowId":{"type":"string","minLength":1,"description":"Deployed workflow to publish. The workflow must already be deployed."},"toolName":{"description":"Name MCP clients call. Normalized to the MCP tool-name grammar, and derived from the workflow name when omitted.","type":"string","minLength":1,"maxLength":128},"toolDescription":{"description":"Description shown to MCP clients. Derived from the workflow name when omitted.","type":"string","maxLength":2000},"parameterDescriptions":{"description":"Per-field description overrides applied to the schema generated from the deployed workflow inputs. A name matching no input field is ignored.","maxItems":100,"type":"array","items":{"type":"object","properties":{"name":{"type":"string","minLength":1,"description":"Input field of the deployed workflow to describe."},"description":{"type":"string","minLength":1,"maxLength":2000,"description":"Text MCP clients see for that field."}},"required":["name","description"],"additionalProperties":false}}},"required":["workflowId"],"additionalProperties":false,"title":"Publish workflow as MCP tool request","description":"The workflow to publish and the tool metadata MCP clients see.","examples":[{"workflowId":"3b1f7c92-8d4e-4a6b-9c0d-5e2f8a714b36","toolName":"triage_ticket"}]},"Resources_UndeployWorkflowMcpToolResult":{"type":"object","properties":{"id":{"type":"string","description":"Identifier of the removed tool."},"serverId":{"type":"string","description":"Server the tool was removed from."},"workflowId":{"type":"string","description":"Workflow that is no longer published."},"deleted":{"type":"boolean","const":true,"description":"Whether the tool was removed."}},"required":["id","serverId","workflowId","deleted"],"additionalProperties":false,"title":"Unpublish workflow MCP tool result","description":"Tool removal acknowledgement."},"Resources_UndeployWorkflowMcpToolResponse":{"type":"object","properties":{"data":{"description":"Response data.","$ref":"#/components/schemas/Resources_UndeployWorkflowMcpToolResult"}},"required":["data"],"additionalProperties":false,"title":"Unpublish workflow MCP tool response","description":"Acknowledgement that the tool was removed.","examples":[{"data":{"id":"wfmcptool_01J8ZK3QW4M6X2R9T7B5C0V3","serverId":"wfmcp_01J8ZK3QW4M6X2R9T7B5C0V2","workflowId":"3b1f7c92-8d4e-4a6b-9c0d-5e2f8a714b36","deleted":true}}]},"Resources_UpdateCredentialResponse":{"type":"object","properties":{"data":{"description":"Response data.","$ref":"#/components/schemas/Resources_V2Credential"}},"required":["data"],"additionalProperties":false,"title":"Update credential response","description":"Updated credential metadata without secret material.","examples":[{"data":{"id":"7c9e6679-7425-40de-944b-e07fc1f90ae7","type":"service_account","displayName":"Zoom service account","description":null,"providerId":"zoom-service-account","accountId":null,"hasServiceAccountKey":true,"role":"admin","createdAt":"2026-06-01T09:14:00.000Z","updatedAt":"2026-06-20T14:02:11.000Z"}}]},"Resources_UpdateCredentialRequest":{"type":"object","properties":{"displayName":{"description":"New name shown for the credential in Sim.","type":"string","minLength":1,"maxLength":255},"description":{"description":"New credential description. Send null to clear the stored one.","anyOf":[{"type":"string","maxLength":500},{"type":"null"}]},"serviceAccountJson":{"description":"Write-only Google service-account JSON key.","writeOnly":true,"type":"string","minLength":1,"maxLength":65536},"apiToken":{"description":"Write-only provider API token.","writeOnly":true,"type":"string","minLength":1,"maxLength":8192},"domain":{"description":"Provider account domain.","type":"string","minLength":1,"maxLength":2048},"atlassianProduct":{"description":"Atlassian product to verify; defaults to Jira on create and preserves the saved product on reconnect.","type":"string","enum":["jira","confluence"]},"signingSecret":{"description":"Write-only webhook signing secret.","writeOnly":true,"type":"string","minLength":1,"maxLength":8192},"botToken":{"description":"Write-only bot token.","writeOnly":true,"type":"string","minLength":1,"maxLength":8192},"clientId":{"description":"OAuth client identifier.","type":"string","minLength":1,"maxLength":512},"clientSecret":{"description":"Write-only OAuth client secret.","writeOnly":true,"type":"string","minLength":1,"maxLength":1024},"certificateId":{"description":"Provider certificate mapping identifier.","type":"string","minLength":1,"maxLength":512},"orgId":{"description":"Provider organization ID.","type":"string","minLength":1,"maxLength":255},"dataCenter":{"description":"Provider data center.","type":"string","minLength":1,"maxLength":32},"authMethod":{"description":"Provider authentication method.","type":"string","minLength":1,"maxLength":64},"privateKey":{"description":"Write-only PEM private key.","writeOnly":true,"type":"string","minLength":1,"maxLength":8192},"username":{"description":"Provider run-as username.","type":"string","minLength":1,"maxLength":255}},"additionalProperties":false,"title":"Update credential request","description":"Replacement display metadata and the write-only fields declared by provider discovery.","examples":[{"clientSecret":"YOUR_ROTATED_CLIENT_SECRET"}]},"Resources_V2BlockSummary":{"type":"object","properties":{"id":{"type":"string","description":"Block type identifier, used as a workflow block’s `type`."},"name":{"type":"string","description":"Display name."},"description":{"type":"string","description":"One-line summary of what the block does."},"longDescription":{"description":"Extended explanation, when the block has one.","type":"string"},"category":{"type":"string","description":"Toolbar category: `blocks`, `tools`, or `triggers`."},"integrationType":{"description":"Integration category, e.g. `communication`, `databases`.","type":"string"},"source":{"type":"string","enum":["builtin","custom"],"description":"Block source: `builtin` for built-in blocks, or `custom` for workflows this workspace deployed as blocks."},"authMode":{"description":"How the block authenticates: `oauth`, `api_key`, or `bot_token`.","type":"string"},"triggerAllowed":{"type":"boolean","description":"Whether the block declares itself usable as a trigger."},"triggerCapable":{"type":"boolean","description":"Whether the block can start a workflow — a trigger-category block, one declaring `triggerAllowed`, or one with trigger-mode fields."},"triggerIds":{"type":"array","items":{"type":"string"},"description":"Identifiers of the triggers this block supports."},"toolIds":{"type":"array","items":{"type":"string"},"description":"Built-in tools this block can run. Read a tool by its id for the full definition."},"operationIds":{"type":"array","items":{"type":"string"},"description":"Operations this block exposes. Their fields and tools are on the block read."},"preview":{"type":"boolean","description":"Whether the block is unreleased and revealed only to this caller."},"sunset":{"description":"Post-release lifecycle state. Absent for a block in normal support.","type":"object","properties":{"status":{"type":"string","enum":["legacy","deprecated"],"description":"`legacy` is superseded but supported; `deprecated` is slated for removal."},"replacedBy":{"description":"Block type to migrate to, when one exists.","type":"string"}},"required":["status"],"additionalProperties":false},"docsLink":{"description":"Sim documentation page for the integration.","type":"string"},"tags":{"type":"array","items":{"type":"string"},"description":"Catalog tags, e.g. `messaging`, `version-control`."}},"required":["id","name","description","category","source","triggerAllowed","triggerCapable","triggerIds","toolIds","operationIds","preview","tags"],"additionalProperties":false,"title":"Block summary","description":"List view of a block: what it is and what it references, by id."},"Resources_ListBlocksResponse":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Resources_V2BlockSummary"},"description":"Items in the current page."},"nextCursor":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Opaque cursor for the next page. Send it back as `cursor`; `null` means there is nothing further to fetch. Never construct one yourself."}},"required":["data","nextCursor"],"additionalProperties":false,"title":"List blocks response","description":"Blocks available in the workspace.","examples":[{"data":[{"id":"slack","name":"Slack","description":"Send messages and read channels in Slack.","category":"tools","integrationType":"communication","source":"builtin","authMode":"oauth","triggerAllowed":true,"triggerCapable":true,"triggerIds":["slack_webhook"],"toolIds":["slack_message","slack_canvas_read"],"operationIds":["send","read"],"preview":false,"docsLink":"https://docs.sim.ai/tools/slack","tags":["messaging"]}],"nextCursor":null}]},"Resources_V2BlockField":{"type":"object","properties":{"id":{"type":"string","description":"Field identifier, and the key its value is stored under."},"type":{"type":"string","description":"Editor control the field renders as, e.g. `short-input`."},"title":{"description":"Human-readable label.","type":"string"},"required":{"description":"Whether a value must be supplied. A conditionally required field reports `true` and carries `requiredWhen`.","type":"boolean"},"requiredWhen":{"description":"Condition under which the field is required.","$ref":"#/components/schemas/Resources_V2CatalogCondition"},"description":{"description":"Authored explanation of the field.","type":"string"},"placeholder":{"description":"Placeholder shown in the editor.","type":"string"},"mode":{"description":"Where the field renders: `basic`, `advanced`, `both`, `trigger`, or `trigger-advanced`.","type":"string"},"hidden":{"description":"Whether the field is hidden in the editor.","type":"boolean"},"condition":{"description":"Condition under which the field applies at all.","$ref":"#/components/schemas/Resources_V2CatalogCondition"},"options":{"description":"Selectable options. Absent on fields whose options are fetched per workspace at edit time.","type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Value stored when this option is selected."},"label":{"description":"Human-readable option label.","type":"string"},"hasIcon":{"description":"Whether the option renders with an icon. The icon itself is not published.","type":"boolean"}},"required":["id"],"additionalProperties":false}},"min":{"description":"Minimum accepted numeric value.","type":"number"},"max":{"description":"Maximum accepted numeric value.","type":"number"},"step":{"description":"Increment for numeric controls.","type":"number"},"integer":{"description":"Whether the numeric value must be a whole number.","type":"boolean"},"rows":{"description":"Visible row count for multi-line text.","type":"number"},"password":{"description":"Whether the stored value is masked in the editor.","type":"boolean"},"multiSelect":{"description":"Whether more than one option may be selected.","type":"boolean"},"language":{"description":"Language of a code field.","type":"string"},"generationType":{"description":"Kind of content AI assistance generates here.","type":"string"},"serviceId":{"description":"OAuth service this credential field authenticates.","type":"string"},"requiredScopes":{"description":"OAuth scopes the credential selected here must carry.","type":"array","items":{"type":"string"}},"mimeType":{"description":"MIME type filter applied to a file picker.","type":"string"},"acceptedTypes":{"description":"Accepted file extensions for an upload field.","type":"string"},"multiple":{"description":"Whether more than one file may be supplied.","type":"boolean"},"maxSize":{"description":"Maximum upload size in megabytes.","type":"number"},"connectionDroppable":{"description":"Whether another block’s output can be dropped onto this field.","type":"boolean"},"columns":{"description":"Column headings for a table field.","type":"array","items":{"type":"string"}},"dependsOn":{"description":"Sibling fields this field is cleared by when they change.","anyOf":[{"type":"array","items":{"type":"string"}},{"type":"object","properties":{"all":{"description":"Every listed field must hold a value.","type":"array","items":{"type":"string"}},"any":{"description":"At least one listed field must hold a value.","type":"array","items":{"type":"string"}}},"additionalProperties":false}]},"canonicalParamId":{"description":"Shared key for a picker/manual-entry pair. Both fields write the same value, so supply exactly one of the pair.","type":"string"},"defaultValue":{"description":"Value used when the field is left unset.","anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"description":"Member of an object-valued default. Shape varies by field type."}},{"type":"array","items":{"description":"Element of an array-valued default. Shape varies by field type."}}]},"hasComputedDefault":{"description":"Whether the field derives its value from the block’s other values. The deriving function is not published.","type":"boolean"}},"required":["id","type"],"additionalProperties":false,"title":"Block field","description":"One configuration field on a block."},"Resources_V2CatalogCondition":{"type":"object","properties":{"field":{"type":"string","description":"Sibling field id whose value decides this condition."},"value":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"array","items":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"}]}}],"description":"Value, or set of accepted values, the named field must hold."},"not":{"description":"Invert the match: every value EXCEPT `value`.","type":"boolean"},"and":{"description":"A second clause that must hold as well.","type":"object","properties":{"field":{"type":"string","description":"Sibling field id for the second clause."},"value":{"description":"Value the second clause matches. Absent means \"holds any value\".","anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"array","items":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"}]}}]},"not":{"description":"Invert the second clause.","type":"boolean"}},"required":["field"],"additionalProperties":false}},"required":["field","value"],"additionalProperties":false,"title":"Catalog condition","description":"When a configuration field applies, expressed against a sibling field."},"Resources_V2OperationInput":{"type":"object","properties":{"type":{"type":"string","description":"Value type."},"required":{"description":"Whether the value must be supplied.","type":"boolean"},"visibility":{"description":"Who may supply the value: `user-or-llm`, `user-only`, `llm-only`, or `hidden`.","type":"string"},"description":{"description":"What the value means.","type":"string"},"default":{"description":"Value used when this input is omitted."},"items":{"description":"JSON-Schema-shaped constraints declared by the tool parameter."},"schema":{"description":"JSON-Schema-shaped structure declared by the block input."}},"required":["type"],"additionalProperties":false,"title":"Operation input","description":"One value a block operation needs, from its tool or its block-level inputs."},"Resources_V2ToolOutput":{"type":"object","properties":{"type":{"type":"string","description":"Value type of the output field."},"description":{"description":"What the field holds.","type":"string"},"optional":{"description":"Whether the field may be absent.","type":"boolean"},"nullable":{"description":"Whether the field may be null.","type":"boolean"},"properties":{"description":"Members of an object-typed output, keyed by field name.","type":"object","propertyNames":{"type":"string"},"additionalProperties":{"description":"Nested output field, in this same shape."}},"items":{"description":"Element shape of an array-typed output.","type":"object","properties":{"type":{"type":"string","description":"Element value type."},"description":{"description":"What an element holds.","type":"string"},"properties":{"description":"Members of an object-typed element, keyed by field name.","type":"object","propertyNames":{"type":"string"},"additionalProperties":{"description":"Nested output field, in this same shape."}}},"required":["type"],"additionalProperties":false},"fileConfig":{"description":"File metadata for a file-typed output.","type":"object","properties":{"mimeType":{"description":"MIME type of the produced file.","type":"string"},"extension":{"description":"File extension of the produced file.","type":"string"}},"additionalProperties":false}},"required":["type"],"additionalProperties":false,"title":"Tool output","description":"One declared output field of a built-in tool."},"Resources_V2ToolDetail":{"type":"object","properties":{"id":{"type":"string","description":"Registered tool identifier, including its version suffix."},"name":{"type":"string","description":"Display name."},"description":{"type":"string","description":"What the tool does."},"version":{"description":"Tool version.","type":"string"},"hostedApiKey":{"type":"string","enum":["always","conditional","none"],"description":"Whether Sim supplies the API key on THIS deployment: `always`, `conditional` (only for some parameter combinations), or `none` (bring your own). Self-hosted deployments supply no hosted keys, so every tool reports `none` there regardless of what it declares."},"oauth":{"description":"OAuth requirement, when the tool has one.","type":"object","properties":{"required":{"type":"boolean","description":"Whether the tool cannot run without an OAuth credential."},"provider":{"type":"string","description":"OAuth service the credential must authenticate."},"requiredScopes":{"description":"Scopes the credential must carry.","type":"array","items":{"type":"string"}}},"required":["required","provider"],"additionalProperties":false},"params":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"$ref":"#/components/schemas/Resources_V2ToolParam"},"description":"Parameters the tool accepts."},"outputs":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"$ref":"#/components/schemas/Resources_V2ToolOutput"},"description":"Fields the tool produces."}},"required":["id","name","description","hostedApiKey","params","outputs"],"additionalProperties":false,"title":"Tool","description":"A built-in tool with its declared parameters and outputs."},"Resources_V2ToolParam":{"type":"object","properties":{"type":{"type":"string","description":"Parameter value type."},"required":{"description":"Whether the parameter must be supplied.","type":"boolean"},"visibility":{"description":"Who may supply the value: `user-or-llm`, `user-only`, `llm-only`, or `hidden`.","type":"string"},"description":{"description":"What the parameter means.","type":"string"},"default":{"description":"Value used when the parameter is omitted."},"items":{"description":"JSON-Schema-shaped constraints for structured params."}},"required":["type"],"additionalProperties":false,"title":"Tool parameter","description":"One declared parameter of a built-in tool."},"Resources_V2BlockDetail":{"type":"object","properties":{"id":{"type":"string","description":"Block type identifier, used as a workflow block’s `type`."},"name":{"type":"string","description":"Display name."},"description":{"type":"string","description":"One-line summary of what the block does."},"longDescription":{"description":"Extended explanation, when the block has one.","type":"string"},"category":{"type":"string","description":"Toolbar category: `blocks`, `tools`, or `triggers`."},"integrationType":{"description":"Integration category, e.g. `communication`, `databases`.","type":"string"},"source":{"type":"string","enum":["builtin","custom"],"description":"Block source: `builtin` for built-in blocks, or `custom` for workflows this workspace deployed as blocks."},"authMode":{"description":"How the block authenticates: `oauth`, `api_key`, or `bot_token`.","type":"string"},"triggerAllowed":{"type":"boolean","description":"Whether the block declares itself usable as a trigger."},"triggerCapable":{"type":"boolean","description":"Whether the block can start a workflow — a trigger-category block, one declaring `triggerAllowed`, or one with trigger-mode fields."},"triggerIds":{"type":"array","items":{"type":"string"},"description":"Identifiers of the triggers this block supports."},"toolIds":{"type":"array","items":{"type":"string"},"description":"Built-in tools this block can run. Read a tool by its id for the full definition."},"operationIds":{"type":"array","items":{"type":"string"},"description":"Operations this block exposes. Their fields and tools are on the block read."},"preview":{"type":"boolean","description":"Whether the block is unreleased and revealed only to this caller."},"sunset":{"description":"Post-release lifecycle state. Absent for a block in normal support.","type":"object","properties":{"status":{"type":"string","enum":["legacy","deprecated"],"description":"`legacy` is superseded but supported; `deprecated` is slated for removal."},"replacedBy":{"description":"Block type to migrate to, when one exists.","type":"string"}},"required":["status"],"additionalProperties":false},"docsLink":{"description":"Sim documentation page for the integration.","type":"string"},"tags":{"type":"array","items":{"type":"string"},"description":"Catalog tags, e.g. `messaging`, `version-control`."},"bestPractices":{"description":"Authored guidance on using the block correctly.","type":"string"},"inputSchema":{"type":"array","items":{"$ref":"#/components/schemas/Resources_V2BlockField"},"description":"Configuration fields that apply regardless of the selected operation."},"operationInputSchema":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"array","items":{"$ref":"#/components/schemas/Resources_V2BlockField"}},"description":"Configuration fields keyed by the operation that reveals them."},"inputDefinitions":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"object","properties":{"type":{"type":"string","description":"Value type: `string`, `number`, `boolean`, `json`, `array`, or `file`."},"description":{"description":"What the input means.","type":"string"},"schema":{"description":"JSON-Schema-shaped structure for object and array inputs."}},"required":["type"],"additionalProperties":false},"description":"Block-level input definitions, keyed by parameter name."},"operations":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"object","properties":{"toolId":{"description":"Built-in tool that performs this operation.","type":"string"},"toolName":{"description":"Display name of that tool.","type":"string"},"description":{"description":"What the operation does.","type":"string"},"inputs":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"$ref":"#/components/schemas/Resources_V2OperationInput"},"description":"Values this operation needs, excluding the ones the block supplies from its own block-level inputs."},"outputs":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"$ref":"#/components/schemas/Resources_V2ToolOutput"},"description":"Fields the operation produces."},"inputSchema":{"type":"array","items":{"$ref":"#/components/schemas/Resources_V2BlockField"},"description":"Configuration fields that appear when this operation is selected."}},"required":["inputs","outputs","inputSchema"],"additionalProperties":false},"description":"Operations the block exposes, keyed by operation id."},"tools":{"type":"array","items":{"$ref":"#/components/schemas/Resources_V2ToolDetail"},"description":"Every built-in tool the block can run, with parameters and outputs."},"triggers":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Trigger identifier."},"outputs":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"object","properties":{"type":{"type":"string","description":"Value type of the output."},"description":{"description":"What the output holds.","type":"string"}},"required":["type"],"additionalProperties":false},"description":"Top-level fields the trigger event delivers."},"configFields":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"object","properties":{"type":{"type":"string","description":"Editor control the field renders as."},"required":{"type":"boolean","description":"Whether a value must be supplied."},"title":{"description":"Human-readable label.","type":"string"},"description":{"description":"Authored explanation of the field.","type":"string"},"placeholder":{"description":"Placeholder shown in the editor.","type":"string"},"default":{"description":"Value used when the field is left unset."},"options":{"description":"Selectable options.","type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Value stored when this option is selected."},"label":{"type":"string","description":"Human-readable option label."}},"required":["id","label"],"additionalProperties":false}},"condition":{"description":"Condition under which the field applies.","$ref":"#/components/schemas/Resources_V2CatalogCondition"}},"required":["type","required"],"additionalProperties":false},"description":"Fields that configure the trigger, keyed by field id."}},"required":["id","outputs","configFields"],"additionalProperties":false},"description":"Triggers the block can run on."},"outputs":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"object","properties":{"type":{"type":"string","description":"Value type of the output."},"description":{"description":"What the output holds.","type":"string"}},"required":["type"],"additionalProperties":false},"description":"Fields the block produces."}},"required":["id","name","description","category","source","triggerAllowed","triggerCapable","triggerIds","toolIds","operationIds","preview","tags","inputSchema","operationInputSchema","inputDefinitions","operations","tools","triggers","outputs"],"additionalProperties":false,"title":"Block","description":"A block with its configuration fields, operations, tools, and triggers."},"Resources_GetBlockResponse":{"type":"object","properties":{"data":{"description":"Response data.","$ref":"#/components/schemas/Resources_V2BlockDetail"}},"required":["data"],"additionalProperties":false,"title":"Get block response","description":"One block with its fields, operations, tools, and triggers.","examples":[{"data":{"id":"slack","name":"Slack","description":"Send messages and read channels in Slack.","category":"tools","integrationType":"communication","source":"builtin","authMode":"oauth","triggerAllowed":true,"triggerCapable":true,"triggerIds":["slack_webhook"],"toolIds":["slack_message","slack_canvas_read"],"operationIds":["send","read"],"preview":false,"docsLink":"https://docs.sim.ai/tools/slack","tags":["messaging"],"inputSchema":[{"id":"operation","type":"dropdown","title":"Operation","required":true,"options":[{"id":"send","label":"Send message"},{"id":"read","label":"Read messages"}]}],"operationInputSchema":{"send":[{"id":"text","type":"long-input","title":"Message","required":true}]},"inputDefinitions":{"channel":{"type":"string","description":"Channel to post into."}},"operations":{"send":{"toolId":"slack_message","toolName":"Slack Send Message","description":"Send a message to a Slack channel.","inputs":{"text":{"type":"string","required":true,"description":"Message body."}},"outputs":{"ts":{"type":"string","description":"Message timestamp."}},"inputSchema":[{"id":"text","type":"long-input","title":"Message","required":true}]}},"tools":[{"id":"slack_message","name":"Slack Send Message","description":"Send a message to a Slack channel.","version":"1.0.0","hostedApiKey":"none","oauth":{"required":true,"provider":"slack","requiredScopes":["chat:write"]},"params":{"text":{"type":"string","required":true,"description":"Message body."}},"outputs":{"ts":{"type":"string","description":"Message timestamp."}}}],"triggers":[{"id":"slack_webhook","outputs":{"text":{"type":"string","description":"Message text."}},"configFields":{"channels":{"type":"short-input","required":false,"title":"Channels"}}}],"outputs":{"ts":{"type":"string","description":"Message timestamp."}}}}]},"Resources_V2ToolSummary":{"type":"object","properties":{"id":{"type":"string","description":"Registered tool identifier, including its version suffix."},"name":{"type":"string","description":"Display name."},"description":{"type":"string","description":"What the tool does."},"version":{"description":"Tool version.","type":"string"},"hostedApiKey":{"type":"string","enum":["always","conditional","none"],"description":"Whether Sim supplies the API key on THIS deployment: `always`, `conditional` (only for some parameter combinations), or `none` (bring your own). Self-hosted deployments supply no hosted keys, so every tool reports `none` there regardless of what it declares."},"oauth":{"description":"OAuth requirement, when the tool has one.","type":"object","properties":{"required":{"type":"boolean","description":"Whether the tool cannot run without an OAuth credential."},"provider":{"type":"string","description":"OAuth service the credential must authenticate."},"requiredScopes":{"description":"Scopes the credential must carry.","type":"array","items":{"type":"string"}}},"required":["required","provider"],"additionalProperties":false}},"required":["id","name","description","hostedApiKey"],"additionalProperties":false,"title":"Tool summary","description":"List view of a built-in tool: identity, auth, and key hosting."},"Resources_ListToolsResponse":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Resources_V2ToolSummary"},"description":"Items in the current page."},"nextCursor":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Opaque cursor for the next page. Send it back as `cursor`; `null` means there is nothing further to fetch. Never construct one yourself."}},"required":["data","nextCursor"],"additionalProperties":false,"title":"List tools response","description":"Built-in tools available in the workspace.","examples":[{"data":[{"id":"slack_message","name":"Slack Send Message","description":"Send a message to a Slack channel.","version":"1.0.0","hostedApiKey":"none","oauth":{"required":true,"provider":"slack","requiredScopes":["chat:write"]}}],"nextCursor":null}]},"Resources_GetToolResponse":{"type":"object","properties":{"data":{"description":"Response data.","$ref":"#/components/schemas/Resources_V2ToolDetail"}},"required":["data"],"additionalProperties":false,"title":"Get tool response","description":"One built-in tool with its parameters and outputs.","examples":[{"data":{"id":"slack_message","name":"Slack Send Message","description":"Send a message to a Slack channel.","version":"1.0.0","hostedApiKey":"none","oauth":{"required":true,"provider":"slack","requiredScopes":["chat:write"]},"params":{"channel":{"type":"string","required":true,"description":"Channel ID to post into."},"text":{"type":"string","required":true,"description":"Message body."}},"outputs":{"ts":{"type":"string","description":"Message timestamp."}}}}]},"Resources_V2ToolExecution":{"type":"object","properties":{"toolId":{"type":"string","description":"Tool that ran. An unversioned name resolves to the newest version visible in the workspace, so this can differ from the id in the path."},"status":{"type":"string","enum":["succeeded","failed"],"description":"Whether the tool reported success. A failed tool call is still a 200."},"output":{"description":"Whatever the tool produced, shaped by its declared outputs."},"error":{"anyOf":[{"type":"object","properties":{"message":{"type":"string","description":"Why the tool call did not succeed."}},"required":["message"],"additionalProperties":false},{"type":"null"}],"description":"Populated only when `status` is `failed`."}},"required":["toolId","status","output","error"],"additionalProperties":false,"title":"Tool execution","description":"The result of running one built-in tool."},"Resources_ExecuteToolResponse":{"type":"object","properties":{"data":{"description":"Response data.","$ref":"#/components/schemas/Resources_V2ToolExecution"}},"required":["data"],"additionalProperties":false,"title":"Run tool response","description":"What the tool produced, or why it did not succeed.","examples":[{"data":{"toolId":"slack_message","status":"succeeded","output":{"ts":"1718191234.004500"},"error":null}}]},"Resources_ExecuteToolRequest":{"type":"object","properties":{"workspaceId":{"type":"string","minLength":1,"maxLength":128,"description":"Workspace whose integration allowlist, credentials, and environment variables govern this call."},"input":{"default":{},"description":"Tool arguments keyed by published parameter IDs. For `user-only` parameters, a whole-value `{{VAR_NAME}}` reference resolves a workspace environment variable. Other values pass through unchanged.","type":"object","propertyNames":{"type":"string"},"additionalProperties":{"description":"One argument value. Its shape is declared by the tool parameter."}},"credentialId":{"description":"Credential to authenticate with. Required when the tool declares an OAuth requirement; the workspace credentials list names the candidates.","type":"string","minLength":1,"maxLength":255},"timeoutSeconds":{"description":"How long to wait for the tool before abandoning the call.","type":"integer","minimum":1,"maximum":300}},"required":["workspaceId"],"additionalProperties":false,"title":"Run tool request","description":"Workspace, arguments, and the credential to authenticate with.","examples":[{"workspaceId":"a91c4b2e-6d3f-4e8a-b5c7-0d9e2f1a8c64","input":{"channel":"C0123456789","text":"Deploy finished."},"credentialId":"cred_01J8ZK3QW4M6X2R9T7B5C0V2"}]},"Resources_V2ConnectorType":{"type":"object","properties":{"connectorType":{"type":"string","description":"Exact identifier to send when creating a connector of this type."},"name":{"type":"string","description":"Display name."},"description":{"type":"string","description":"What the connector syncs."},"version":{"type":"string","description":"Connector version."},"auth":{"oneOf":[{"type":"object","properties":{"mode":{"type":"string","const":"oauth","description":"Authenticates with an OAuth credential."},"provider":{"type":"string","description":"OAuth service the credential must authenticate."},"requiredScopes":{"description":"Scopes the credential must carry.","type":"array","items":{"type":"string"}}},"required":["mode","provider"],"additionalProperties":false},{"type":"object","properties":{"mode":{"type":"string","const":"apiKey","description":"Authenticates with a stored API key."},"label":{"description":"Label shown above the key field.","type":"string"},"placeholder":{"description":"Placeholder shown in the key field.","type":"string"},"optional":{"type":"boolean","description":"Whether the key may be left blank, for a source reachable without authentication."}},"required":["mode","optional"],"additionalProperties":false}],"description":"How the connector authenticates against its source."},"configFields":{"type":"array","items":{"$ref":"#/components/schemas/Resources_V2ConnectorConfigField"},"description":"Fields that make up the connector’s `sourceConfig`."},"supportsIncrementalSync":{"type":"boolean","description":"Whether syncs after the first fetch only what changed."},"tagDefinitions":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Semantic tag identifier the connector populates."},"displayName":{"type":"string","description":"Human-readable tag name."},"fieldType":{"type":"string","enum":["text","number","date","boolean"],"description":"Value type, which decides the tag slot pool it draws from."}},"required":["id","displayName","fieldType"],"additionalProperties":false},"description":"Tags this connector writes onto the documents it syncs."}},"required":["connectorType","name","description","version","auth","configFields","supportsIncrementalSync","tagDefinitions"],"additionalProperties":false,"title":"Connector type","description":"A knowledge-base connector type and the configuration it accepts."},"Resources_V2ConnectorConfigField":{"type":"object","properties":{"id":{"type":"string","description":"Field identifier."},"title":{"type":"string","description":"Human-readable label."},"type":{"type":"string","enum":["short-input","dropdown","selector"],"description":"Control the field renders as. A `selector` fetches its options from the connected account."},"placeholder":{"description":"Placeholder shown in the editor.","type":"string"},"required":{"description":"Whether a value must be supplied.","type":"boolean"},"description":{"description":"Authored explanation of the field.","type":"string"},"options":{"description":"Static options, for a `dropdown` field.","type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Value stored when this option is selected."},"label":{"type":"string","description":"Human-readable option label."}},"required":["id","label"],"additionalProperties":false}},"selectorKey":{"description":"Names the picker a `selector` field renders. Its options are fetched per workspace.","type":"string"},"mimeType":{"description":"MIME type filter applied to the picker.","type":"string"},"dependsOn":{"description":"Sibling fields this field is cleared by when they change.","anyOf":[{"type":"array","items":{"type":"string"}},{"type":"object","properties":{"all":{"description":"Every listed field must hold a value.","type":"array","items":{"type":"string"}},"any":{"description":"At least one listed field must hold a value.","type":"array","items":{"type":"string"}}},"additionalProperties":false}]},"mode":{"description":"Which half of a canonical pair this field is: `basic` is the picker, `advanced` the manual entry.","type":"string","enum":["basic","advanced"]},"canonicalParamId":{"description":"Shared `sourceConfig` key for a picker/manual-entry pair. Send exactly one of the pair, keyed by this value rather than by the field’s own `id`.","type":"string"},"multi":{"description":"When true the stored `sourceConfig` value is a `string[]`, not a `string`: a `selector` renders a multi-select picker and a `short-input` accepts a comma-separated list.","type":"boolean"}},"required":["id","title","type"],"additionalProperties":false,"title":"Connector config field","description":"One field of a knowledge-base connector’s source configuration."},"Resources_ListConnectorTypesResponse":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Resources_V2ConnectorType"},"description":"Items in the current page."},"nextCursor":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Always `null` — this list has no `cursor` or `limit` param and returns its whole bounded set in one page. Present so the list can gain pages later without a shape change."}},"required":["data","nextCursor"],"additionalProperties":false,"title":"List connector types response","description":"Knowledge-base connector types and their configuration fields.","examples":[{"data":[{"connectorType":"google_drive","name":"Google Drive","description":"Sync documents from a Google Drive folder.","version":"1.0.0","auth":{"mode":"oauth","provider":"google-drive","requiredScopes":["https://www.googleapis.com/auth/drive.readonly"]},"configFields":[{"id":"folderSelector","title":"Folder","type":"selector","selectorKey":"google-drive-folder","mimeType":"application/vnd.google-apps.folder","mode":"basic","canonicalParamId":"folderId","required":true},{"id":"manualFolderId","title":"Folder ID","type":"short-input","placeholder":"Enter the folder ID","mode":"advanced","canonicalParamId":"folderId"}],"supportsIncrementalSync":true,"tagDefinitions":[{"id":"owner","displayName":"Owner","fieldType":"text"}]}],"nextCursor":null}]}}},"x-generated-by":"scripts/generate-openapi.ts"}