Base URL
Authentication
All endpoints except/, /v1/health, and /v1/authenticate require a valid JWT token in the Authorization header:
Request format
- Request bodies are JSON with
Content-Type: application/jsonunless an endpoint documents multipart upload data. - Live chat streaming uses the WebSocket endpoint. Detached clients can submit a durable turn over REST and poll its status.
Response format
Most responses return JSON. Artifact payloads, message audio, and similar download endpoints return their documented binary content types.Error responses
HTTP error bodies are not uniform. Handle these JSON shapes:429 shape has no detail key and also includes a Retry-After header. An unhandled server error can be plain text, so inspect Content-Type before parsing a 5xx body as JSON.
Errors on the chat WebSocket arrive as error frames instead. Terminal turn errors normalize to {error, code, retryable, debug_id}; validation and other pre-turn errors may omit some of those fields. Branch on code when present and treat the human-readable message as non-contractual.
HTTP status codes
Rate limits
Limits on authenticated endpoints are keyed bymember_id; re-authenticating does not reset them. The authentication endpoint has a separate API-key budget.
HTTP limits return
429 with Retry-After; WebSocket submission limits return an error frame with code: "RATE_LIMIT" and retry_after_seconds.
Pagination
List endpoints that support pagination return results in pages. Pass apage query parameter (1-based) to navigate. Responses include total, page, page_size, and has_more fields.