Envelope

json
{
  "error": {
    "code": "invalid_request",
    "message": "channels[0].id must be a uuid",
    "details": { "field": "channels[0].id" }
  }
}

Status codes

StatusCodeMeaning
400invalid_requestMalformed JSON, missing required field, wrong type.
401unauthorizedMissing, invalid, revoked, or expired API key.
403forbiddenKey valid but lacks the required scope.
404not_foundResource missing, or not owned by your organization.
409idempotency_conflictSame Idempotency-Key, different body.
413payload_too_largeMedia upload exceeded the 1 GB limit.
422unprocessableSemantically invalid — e.g. channel id belongs to another org.
429rate_limitedSlow down. See Retry-After.
5xxinternal_errorOur fault. Retry with a fresh request after a brief backoff.

Retry semantics

  • 4xx errors will not change on retry unless you change the request — fix and re-send.
  • 5xx errors are usually transient. Re-send the request with the same Idempotency-Key.
  • For 429, honor Retry-After; for 5xx, exponential backoff (1s → 2s → 4s, capped at 30s) is a sane default.
Errors — Public API