Rate limiting
Limits apply per API key. Two dimensions determine the limit that applies to a given request: Endpoint type — message send endpoints (POST /v1/messages) have tighter limits than read or list endpoints. Agent management and billing queries each have their own bands.
Workspace tier — as your channel tier increases, rate limits on that channel’s send endpoint increase automatically. No new API key is required — limits are applied to your existing key when the tier upgrade takes effect.
Response headers
Every API response includes headers that show your current limit state for that endpoint:| Header | Meaning |
|---|---|
X-RateLimit-Limit | Maximum requests allowed in the current window |
X-RateLimit-Remaining | Requests remaining in the current window |
X-RateLimit-Reset | Unix timestamp when the window resets |
429 Too Many Requests:
rate_limit_exceededSeconds until the rate limit window resets.
Handling 429s
Back off with exponential jitter — avoid tight retry loops that compound failures. A pattern that works well:retry_after value from the response rather than guessing the backoff interval.
Idempotency
ForPOST /v1/messages and other mutating routes, send an idempotency key so retries after timeouts do not create duplicate sends.
| Location | Example |
|---|---|
| Header | Idempotency-Key: 550e8400-e29b-41d4-a716-446655440000 |
| Body | "idempotency_key": "550e8400-e29b-41d4-a716-446655440000" |
Idempotency-Key header on mutating routes (POST /v1/messages, billing top-ups).
Dates and times
- All timestamps use ISO 8601 in UTC:
2026-03-28T14:30:00Z - Durations in payloads use string form where documented:
3600s,24h
Pagination
List endpoints (webhooks, transactions, invoices) return cursor- or offset-based results per route documentation. Prefer cursor pagination for large or frequently changing datasets — offset results may skip or duplicate items if records are added or removed between pages.Opaque token returned in the previous response. Pass as a query parameter to fetch the next page.
true when additional pages exist.Error envelope
All errors share a consistent shape — see Errors for the full status code catalog.Correlation
Responses include anX-Request-Id header for support correlation. Include this value when filing bug reports or contacting support.
Content negotiation
Default content type isapplication/json. Binary or PDF responses (for example invoice downloads) return their Content-Type in the response header.