Skip to main content
Every error returns a consistent JSON shape under an error key:
  • type — a stable, machine-readable category. Branch on this.
  • message — a human-readable explanation. Safe to log; do not pattern-match on it.
  • code — a dotted sub-code for finer handling.
  • param — the offending field, when applicable.

Status codes

Pair 429 and 5xx handling with idempotency keys so retries never double-post.