Skip to content
Dashboard

Errors

All errors use the same envelope shape:

{
"error": {
"type": "validation_error",
"code": "invalid_field",
"message": "The 'status' field must be one of: open, in_progress, completed.",
"details": [
{ "field": "status", "message": "Invalid value." }
]
},
"meta": { "requestId": "req_01j..." }
}
FieldTypeDescription
error.typestringMachine-readable error category (see table below)
error.codestringSpecific error code within the category
error.messagestringHuman-readable description
error.detailsarray, optionalField-level details for validation errors
meta.requestIdstringUnique ID for the request — include this when contacting support
TypeStatusRetry?Notes
validation_error400NoFix the request. Check error.details for field-level messages.
authentication_error401NoKey missing, revoked, or invalid. Check your Authorization header.
authorization_error403NoKey is valid but lacks the required scope. Create a key with the needed scopes.
not_found_error404NoResource does not exist or is not accessible to your organization.
conflict_error409NoState conflict — for example, an in-flight duplicate idempotent request. Check the specific error.code.
business_rule_error422NoThe request is structurally valid but violates a business rule. Check error.message for details.
rate_limit_error429YesSlow down. Wait for the duration in the Retry-After header before retrying.
internal_error500YesServer error. Retry with exponential backoff. If the error persists, contact support with meta.requestId.
  • 429 rate_limit_error: Honor the Retry-After header (seconds). See Rate Limits for details.
  • 500 internal_error: Retry with exponential backoff (start at 1s, double each attempt, cap at 60s). Idempotent GET requests can be retried unconditionally. For POST requests, use the Idempotency-Key header to avoid duplicate side effects — see Idempotency.
  • All other errors: Do not retry without changing the request.