Plain JSON over HTTPS for everything the MCP server can do. Every route below is also an MCP tool of the same name: one implementation, one scope map, one rate limit, reachable from curl, a cron job or an automation platform.
List routes take limit (default 50, at most 100) and cursor. The response carries a pagination block with total, limit, has_more and next_cursor; pass next_cursor back as cursor until it is null. Cursors are opaque and only valid for the same route and filters.
Send an Idempotency-Key header (any string up to 255 characters, unique per operation) on a write and the first response is stored for 24 hours. A retry with the same key and the same request gets that response back with Idempotency-Replayed: true; the same key with a different request is a 409 conflict. Keys are private to the credential that sent them.
Every non-success response is { "error": { "code", "message", "details"? } }. The message is written to be shown to a developer and lists every problem it found, so one fix reaches a correct call.
Code
HTTP
Meaning
unauthorized
401
No credential, or one that is malformed, revoked or expired. The response carries a WWW-Authenticate header.
forbidden
403
The credential is valid but lacks the scope the route needs; details.required_scope names it.
plan_limit
403
The workspace plan does not include this capability; details.entitlement names it.
not_found
404
No route at that path, or the object id is not in this workspace.
method_not_allowed
405
The path exists but not for that verb. The Allow header lists the verbs that work.
conflict
409
An Idempotency-Key was reused with a different request, or the first request with it is still running.
invalid_request
400
A parameter or body field is missing, unknown or the wrong shape; the message lists every problem at once.
rate_limited
429
Over the per-credential ceiling. Retry after the number of seconds in Retry-After.
internal
500
Something failed on our side. The details are logged; retry once, then contact support.
Retry 429 after the header value and 500 once; never retry 400, 401, 403 or 409 unchanged.
A 404 on an id means the object is not in this workspace, which is also what a wrong workspace key looks like.
Grouped as on the MCP server page. Required parameters are marked with *. Path segments in braces are ids from the list routes; GET routes take parameters in the query string, other verbs in a JSON body.