Skip to main content

Error envelope

Every error shares one envelope:
  • code — a stable, machine-readable identifier. Branch on this, not on the message.
  • message — a human-readable description. Subject to change; don’t parse it.
  • field — present only for validation errors tied to a specific input field.
  • request_id — the same value as the X-Request-Id response header. Include it when contacting support.

Error codes

Rate limiting

Authenticated requests are limited per (business, oauth_client) pair. Anonymous requests (only GET /health) are limited per IP. Every response includes: A 429 rate_limited response additionally carries a Retry-After header (seconds). Honor it: wait the indicated time before retrying, and prefer exponential backoff for repeated 429s.