Base URL
/api/v1. HTTPS only.
Keys
Two ways to prove who you are, depending on the endpoint.Token in the path
/api/v1/responses/{token} carries its own key. Send no Authorization header. It expires after 45 minutes.Bearer key
Everything else takes
Authorization: Bearer mac_live_…. One key per chatbot, and it never expires.Endpoints
Rules
- JSON in, JSON out. Send
Content-Type: application/json— except on the file upload endpoints, which takemultipart/form-data. - snake_case everywhere.
- Times are ISO 8601 in UTC (
2026-07-17T03:15:12.398Z). - Ids are plain strings. Do not try to read meaning into them.
- Success includes
"ok": true. Failure includes"ok": falseand anerrorobject. TheGEThistory endpoint is the one exception — it returns the data directly.
Errors
One shape everywhere:issues list that points at each problem:
Rate limits
A
429 includes retry_after in seconds:
Sizes
Safe retries
Give a message amid, and sending it again updates instead of duplicating. Build the mid from the event’s event_id, and your whole integration becomes safe to retry — which matters, because Make, n8n, and Zapier all retry.
See Updating messages.
