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

CodeHTTPMeaning
unauthorized401Missing or invalid Bearer token
forbidden403Generic forbidden
plan_inactive403Subscription past due, cancelled, or account suspended
plan_does_not_include_api403Plan doesn't allow API or a specific scope
scope_missing403Key doesn't carry the required scope
not_found404Resource doesn't exist or belongs to another tenant
rate_limited429Quota exceeded — see Retry-After
invalid_request400Malformed query params or body
internal_error500Something broke on our side; retry with backoff