Idempotency: retrying safely
Send anIdempotency-Key header on any POST, and a retry of the same request can’t do
the work twice. Use something unique to the action, such as your order id:
Keys are remembered for 24 hours, are per account, and are at most 255 characters.
Paging
Lists answer newest first, a page at a time:
Keep asking with
starting_after=<next> until has_more is false.
Rate limits
Each key may make 600 requests a minute. Past that, requests are refused with429 rate_limited and a Retry-After header saying how many seconds to wait. Separate
systems should have separate keys, each with its own allowance.
Times, numbers and ids
- Times are ISO 8601 with their offset (
2026-10-05T11:42:07.081Z). Days you send, as in/v1/usage?from=2026-10-01, are in your account’s time zone. - Phone numbers are answered with their country code (
+919876543210). You may send a national number; it is read in your account’s country. - Ids are opaque strings. Messages are
msg_…, messages on a channelcm_…, eventsevt_…; contacts, routes, templates and webhook endpoints are UUIDs.
Versions
Everything here is/v1. Within /v1, changes only add: new endpoints, new fields in
answers, new event types, new optional parameters. Ignore fields you don’t know. Anything
that would break an integration would come as /v2, alongside.