General response format
All responses begin with thesuccess field, which indicates whether the operation succeeded.
- Success
- Error
HTTP codes
Literal messages by category
Fine-grained differentiation between errors is done through the text oferror.message. Below are the messages you may encounter.
Authentication (401)
Authentication (401)
Ownership (403)
Ownership (403)
Validation (400)
Validation (400)
Instance state (400/503)
Instance state (400/503)
Rate limit (429)
Rate limit (429)
Conflict (409)
Conflict (409)
Integrations (Chatwoot)
Integrations (Chatwoot)
The root cause coming from Chatwoot is always included after
Detail: for diagnosis.Integrations (Typebot)
Integrations (Typebot)
The
503 for Typebot only appears in POST /api/typebot/set/:instance and POST /api/typebot/start/:instance. The list, find, and delete endpoints respond even without the bridge.Unsupported features (501)
Unsupported features (501)
Webhooks: delivery errors
Failed webhooks do not return a synchronous error, they are persisted in a queue with:status:pending/delivered/failedattempts,max_attempts(default 5)last_error: full messagenext_retry_at: timestamp of the next retry
After
max_attempts, the status becomes failed and the row remains as a Dead Letter Queue (audit/manual replay). Details in Events.
Best practices
Always check
success before assuming the content is valid.HTTP status is the source of truth, different payloads can have the same
error.message.Retry
429 with exponential backoff; respect the global limit of 100/min.Do not retry
4xx in general (except 408, 429).For
503 on Chatwoot, recognize that the Chatwoot module is not enabled on the server and stop retrying, log it for the operator.Schema validation errors
When you send a body with the wrong format (missing required field, incompatible type, etc.), the API returns400 with a descriptive text:
Next
Authentication
Details about tokens and ownership.
Rate limit
Per-minute limits and how to react to 429.