Errors & rate limits

Error response

All error responses use this JSON shape:

{
  "error": {
    "type": "authentication_error",
    "code": "invalid_auth",
    "message": "Human-readable explanation.",
    "request_id": "unique-id-for-support"
  }
}

Common type values:

typeHTTPMeaning
invalid_request400Malformed input
authentication_error401Missing/invalid Bearer token
permission_error403Forbidden or insufficient scope
not_found404Resource missing
conflict_error409Conflict (e.g. idempotency)
validation_error422Validation failed
rate_limit_error429Too many requests
billing_error402Billing / entitlement
internal_error500Unexpected server error

Include request_id when contacting support.

Rate limiting

When Upstash Redis is configured:

AuthWindowLimit
Session JWT1 minute~100 requests
API key1 minute~60 requests

If Redis env vars are not set, limits may be disabled in development.

Response 429

{
  "error": {
    "type": "rate_limit_error",
    "code": "rate_limit_exceeded",
    "message": "Too many requests. Please try again later.",
    "request_id": "req_01abc..."
  }
}