Errors
All errors — including those produced at the edge — share one JSON
envelope. The code field is stable and safe to program against;
detail is human-readable and may change.
{
"type": "about:blank",
"title": "UNAUTHORIZED",
"status": 401,
"code": "unauthorized",
"detail": "Unauthorized",
"request_id": "9739dd78-..."
}
| Status | code | Meaning |
|---|---|---|
| 401 | unauthorized | Missing, malformed or unknown API key |
| 403 | access_denied | Key revoked/expired, plan missing, IP not allowed, or resource outside your permissions |
| 404 | — | Resource does not exist |
| 400 | bad_request | Invalid parameters (e.g. bad cursor) |
| 422 | — | Validation error; the body lists the offending fields |
| 429 | rate_limited / quota_exceeded | See Limits |
| 5xx | server_error | Our side — retry with backoff; include request_id when contacting support |
Always log the
request_id: it lets our support team find
your exact request.