Skip to main content
The API follows a pure REST contract: the HTTP status code is the success or error signal.

Response shape

A success returns the payload directly, with no envelope. An error always returns { code, message } — both fields are guaranteed.
Switch on code: it is stable and part of the contract. The message is helpful human text and may be refined between API versions without notice. Messages are delivered in English (industry standard, same pattern as Stripe, GitHub or Linear). If you need to display them translated to the end user, map them in your client by code.

Status families

Code catalog

The HTTP status of each code is typical: a specific endpoint may return a different status if context warrants it. The authoritative per-endpoint status lives in the API Reference. The table here is a general reference, not a binding per-endpoint contract.The conversation-resolution ambiguity codes (PHONE_NUMBER_AMBIGUOUS, USERNAME_AMBIGUOUS) can surface on any endpoint that accepts a conversation reference by phone/username, even if its API Reference lists other 409 codes.

Auth and tenant

Rate limit

Validation

Conversation, contact, and channel

Tags

Mailboxes and categories

Precondition guards

Owner ↔ executor coherence (schedules)

AI employees and execution

Scheduled message action

Uploads

Messages

Quick replies and templates

Generic operations