Skip to Content
API & MCPErrors

API & MCP

Errors

One error shape for REST and MCP, with a stable code an agent can act on.

Every failure has the same shape — as the REST response body, and as the text of an MCP tool result with isError: true:

{ "error": { "code": "rate_limited", "message": "rate limit reached (300/min)", "request_id": "req_4f1c…", "retry_after": 2 } }
codeHTTPMeaningWhat to do
invalid_argument400An argument is missing, malformed or unknown (the message names it)Fix the call
unauthenticated401No, unknown, revoked or expired credentialRe-authenticate
payment_required402No active plan, or a paid action while payment is failingUpdate billing
forbidden403The credential lacks the scopeUse a key / grant with that scope
not_found404No such list, job or task in your organizationCheck the id
conflict409E.g. a list with that name already existsPick another name
quota_exceeded429The 5-hour or weekly allowance, a list size or the list count is used up — details.window and details.resets_at say which and until whenWait until resets_at (also retry_after), or upgrade
rate_limited429Too many requests or concurrent callsWait retry_after seconds
unavailable503A dependency is overloaded or downWait retry_after seconds
timeout504The operation exceeded its deadline and was cancelledNarrow the query or retry
internal500Our bugRetry; quote request_id to support

retry_after is also sent as the Retry-After header on REST. Another organization’s list, job or task is always not_found — the API never confirms that someone else’s id exists.