Error codes

Every error response has one shape: { error: { type, code, message, param, doc_url, request_id, details? } }. Branch on type for the class of failure and on code for the exact reason; meanings never change.

codestatustype
ai_draft_rejected422invalid_request
ai_drafting_disabled403permission
ai_unavailable503api_error
alias_conflict409conflict
already_exists409conflict
audit_reason_required403permission
authentication_required401authentication
batch_too_large400invalid_request
body_too_large413invalid_request
credentials_revoked401authentication
environment_required403permission
evaluation_failed502api_error
event_id_conflict409conflict
event_requires_secret_key403permission
event_too_large413invalid_request
forbidden403permission
idempotency_in_progress409idempotency
idempotency_key_required400idempotency
idempotency_key_reused422idempotency
insufficient_balance409conflict
insufficient_scope403permission
internal_error500api_error
invalid_credentials401authentication
invalid_cursor400invalid_request
invalid_json400invalid_request
invalid_state409conflict
last_owner409conflict
occurred_at_in_future400invalid_request
origin_not_allowed403permission
quota_exceeded429rate_limited
rate_limited429rate_limited
resource_in_use409conflict
resource_not_found404not_found
reward_unavailable409conflict
route_not_found404not_found
rule_invalid422invalid_request
stale_write409conflict
unsupported_media_type415invalid_request
validation_failed400invalid_request