Skip to main content
← All documentation

Errors and rate limits

Getting started

Every failure returns the same envelope: an error object carrying a stable machine-readable code, a human-readable message, and optional details. Branch on the code, never on the message — messages are copy and will be reworded.

{ "error": { "code": "channel.not_found", "message": "No such channel." } }

Status codes

  • 401 — no session, or the session has ended.
  • 403 — authenticated, but the permission required is not held.
  • 404 — the resource does not exist, or you may not know that it does. Kemble masks existence rather than confirming it.
  • 422 — the body failed validation. details names the field.
  • 402 — a plan ceiling was reached. The message names the ceiling.
  • 429 — rate limited. Retry after the interval named in the response.

Rate limits are per plan and enforced on three buckets: requests per minute per person, requests per minute per organization, and messages per minute per organization. The exact numbers for each plan are on the pricing page, read from the same catalogue the server enforces.