Get Started

Conventions

Product endpoint map, request conventions, pagination, conflicts, and errors.


Protected /v1 endpoints take Authorization: Bearer <access-token> and JSON request bodies. The API validates public request shapes, resolves caller and workspace context, then delegates to the domain services; it owns no product storage itself.

Core endpoint map

Domain Main endpoints
Playbooks GET/POST /v1/playbooks, GET/DELETE /v1/playbooks/:id, Versions, /access, star, share-token routes
Playbook alias GET/PUT /v1/aliases, DELETE /v1/aliases/:alias; /v1/aliases/resolve resolves pb: references
Cases GET/POST /v1/cases, GET/PATCH /v1/cases/:id, assignee, ACL, handoffs, handoff candidates/graph, close, reopen
Tasks GET/POST /v1/cases/:id/tasks, GET /v1/tasks, update, assignee, close, reopen
Records GET/POST /v1/cases/:id/records (GET supports scope expansion across handoffs)
Suggestions GET/POST /v1/playbooks/:id/suggestions, GET /v1/suggestions, get, update, resolve
Administration workspaces, workspace members, teams, team members, credits, CLI and MCP tokens

Creation and parent-scoped browsing follow ownership: Tasks and Records live below their Case, and Suggestions below their Playbook. Cross-Case Task and cross-Playbook Suggestion lists remain top-level inbox views. Alias operations are top-level because (ownerId, alias) identifies the namespace resource; each personal or managed Workspace namespace can assign one alias to any readable Playbook. The Playbook owner's alias is surfaced as official; a third-party alias is returned only in its namespace owner's own context. Use assignedTo=me for your Task inbox. For Suggestions, view=sent lists the ones you sent and view=inbox the ones on Playbooks you manage; both require authentication.

Context and pagination

Supported administrative endpoints take workspaceId as a query parameter. Product-domain routes resolve the actor context from the bearer credential. Never assume that a locally selected CLI workspace applies to a raw HTTP request.

List operations use pageSize and an opaque cursor. Preserve the cursor exactly; do not construct or decode it. Records use stable (createdAt, id) ordering and accept order=asc|desc. Record filters always intersect the caller's live Case access.

Mutations

Mutation bodies carry idempotencyKey. Reuse a key only for an identical request after a network failure or uncertain response. Case and Task mutations include expectedLockVersion; Playbook publication includes baseVersionId. A mismatch returns a conflict so the client can re-read and rebuild intent from fresh state.

Close Task and close Case requests may include new Records, allowing the state transition and final durable outputs to commit together.

Errors

Status Meaning
400 malformed parameter, query, JSON, unsupported value, or request-schema validation failure
401 missing, expired, or invalid bearer credentials
402 insufficient credits in the resolved context
403 authenticated but not authorized for the operation
404 missing or intentionally hidden resource
409 base Version, lock Version, lifecycle, or uniqueness conflict
429 rate limited; back off before retrying
5xx server or upstream failure

Retry 429 and transient 5xx responses with bounded exponential backoff. Do not automatically retry validation, authorization, or conflict responses. For a conflict, read current state and obtain human or agent judgment before issuing a new mutation.