Errors

A single format, stable codes.

{
  "error": {
    "code": "contact_not_allowed",
    "message": "The text contains contact details.",
    "fields": [{ "path": "description", "code": "contact_not_allowed" }],
    "requestId": "req_ab12cd34"
  }
}

message can be translated; code never changes without a new version (/v2). fields only appears for validation errors, with path (where in the request) and code.

HTTP codes

CodeMeans
400invalid request or cursor
401missing or invalid credential
402the plan doesn't include the API
403insufficient permission
404resource missing or inaccessible (including "not yours")
409conflict (cursor changed, idempotency)
422business validation (for example, text with contact details)
429rate limited — see Retry-After
503temporary unavailability

404 is also used when the resource exists but you don't have a right to it — so we don't confirm which identifiers are valid for others.

requestId is useful for support: we keep it in our own logs too.