Status codes
A request refused before it starts (
400, 401, 402, 403, 404, 409, 422, 429) runs nothing and costs nothing.
Error body
Every error, from every route, has the same shape:
A
422 for a field that does not validate:
422 for bad skill inputs lists every problem and the inputs the skill accepts in detail:
429 because too many runs are in progress has a Retry-After header, and detail says which limit:
Error codes
New codes may be added; treat an unknown
code by its type and status.
Request ids
Every response, success or error, carries anX-Request-ID header. Send your own X-Request-ID (letters, digits, ., _, :, -; up to 64 characters) to trace a call through your logs and ours; anything else is replaced with an id of ours.
Rate limits
Each API key may make a number of requests a minute, counted in a fixed one-minute window:
The same budget covers the
/v1 routes and the MCP endpoint when you connect with the key. Every response to a request made with a key, errors included, carries:
X-RateLimit-Reset is the Unix time the window resets. Over the limit, you get a 429 with code: rate_limited and a Retry-After header in seconds. AI assistants connected with OAuth are not counted per request; the run limits below and your credits bound them. The limits for AI assistants are on Limits and side effects.

