Skip to main content

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:
A 422 for bad skill inputs lists every problem and the inputs the skill accepts in detail:
A 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 an X-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.

Other limits