Errors
All errors use a consistent envelope:
{
"error": {
"code": "plan_does_not_include_api",
"message": "Your plan does not include API access.",
"request_id": "550e8400-e29b-41d4-a716-446655440000"
}
}The X-Request-Id header on every response (success or error) is the same value as request_id. Include it when reporting issues.
Codes
| Code | HTTP | Meaning |
|---|---|---|
unauthorized | 401 | Missing or invalid Bearer token |
forbidden | 403 | Generic forbidden |
plan_inactive | 403 | Subscription past due, cancelled, or account suspended |
plan_does_not_include_api | 403 | Plan doesn't allow API or a specific scope |
scope_missing | 403 | Key doesn't carry the required scope |
not_found | 404 | Resource doesn't exist or belongs to another tenant |
rate_limited | 429 | Quota exceeded — see Retry-After |
invalid_request | 400 | Malformed query params or body |
internal_error | 500 | Something broke on our side; retry with backoff |