Skip to main content
The Custral API returns a structured JSON body for every non-2xx response. Every error has a stable string code you can match against, plus a human-readable message and optional details, and the reqId of the failing request.

Response shape

HTTP status convention

  • 400: request shape invalid (a field is missing or the wrong type).
  • 401: authorization_missing or authorization_invalid.
  • 403: authenticated, but not allowed: organization_invalid, scope violations, ACL denials.
  • 404: *_not_found codes.
  • 409: write conflicts (uniqueness violations, optimistic-lock failures).
  • 422: domain validation (e.g. storage_limit_reached, domains_limit_reached).
  • 5xx: internal errors. The body still carries a code; record the request id from the response headers when reporting.

Common codes by group

Auth

Validation

Limits

Not found

Workflow / blueprint

Conversation / action

Long tail

The codes above cover the failures you’ll meet in normal integration work, but the API can return others in narrower situations. Every one is a stable string, so it’s safe to branch on a code you see in the wild even if it isn’t listed here yet. If you hit one you can’t place, email hello@custral.com with the code and the reqId from the same response (the request id is what lets us find your exact call) and we’ll explain it and add it to this page.