Base URL
Authentication
Authenticate every request with a bearer token:Requests
All request bodies are JSON encoded as UTF-8 withContent-Type: application/json.
The API supports CORS for GET, POST, DELETE, and OPTIONS.
Responses
Single resources return the object directly:Conventions
- Field names use
snake_case. - IDs are prefixed by resource type:
msg_,cht_,ln_,rxn_,obx_,wh_,ind_,rcp_,file_. - Timestamps are Unix milliseconds (UTC).
- Every response includes a
request_id. Include it when reporting issues.
Pagination
List endpoints are cursor-paginated. Whenhas_more is true, pass
next_cursor as the cursor query parameter on the next request:
Asynchronous writes
Write endpoints (POST /messages, /reactions, /typing, /receipts) accept
the request and return an outbox record with status queued:
- Webhooks (recommended): subscribe to
message.sent,message.failed, etc. - Polling:
GET /outbox?id=obx_...
Errors
The API maps to standard HTTP status codes (2xx success, 4xx client error,
5xx server error). See Errors for the full taxonomy and
error codes.
Rate limits
API keys are rate limited per hour. When exceeded, the API returns429 with
a Retry-After header indicating the seconds to wait. See
rate limit errors for details.
DELETE with a request body
DELETE /webhooks takes the resource ID in the request body, not the URL: