A2P Messaging API · HTTP
A2P Messaging API rate limits
A2P Messaging HTTP traffic is rate-limited per account and per endpoint. Each response reports the current window through X-RateLimit headers, and breaching the limit returns 429.
Every A2P Messaging endpoint enforces a ceiling of requests per 60-second window. The counter is kept per account and per endpoint: all the tokens of an account share one counter for each endpoint, so spreading traffic across several tokens does not add capacity. If you need more throughput on a specific endpoint, open a ticket with the expected peak rate and we will raise the ceiling on your account.
Limits per endpoint
| Endpoint | Requests per 60 seconds |
|---|---|
POST /sms | 1200 |
POST /sms/bulk | 1200. One call counts as one request, however many messages it carries, and it has its own counter, separate from POST /sms. |
GET /sms | 10 |
GET /sms/{id} | 20 |
POST /lookup, GET /lookup, GET /lookup/{id} | 1200 each |
GET /organization/account | 1200 |
GET /sms/price-profile/me/countries, GET /lookup/price-profile/me/countries | 1200 each |
With so few reads allowed on GET /sms and GET /sms/{id}, track delivery through DLR webhooks instead of polling.
Reading the headers
Every response includes three headers with the current window state. Log them in production — they are the cheapest way to spot a client that is about to hit the wall.
X-RateLimit-Limit 1200
X-RateLimit-Remaining 1195
X-RateLimit-Reset 1893452400
| Header | Meaning |
|---|---|
X-RateLimit-Limit | Total requests allowed in the current window. |
X-RateLimit-Remaining | Requests left before the window tightens. |
X-RateLimit-Reset | Unix timestamp when the counter resets. |
When you hit the limit
Requests that exceed the window return 429 Too Many Requests. The body is the plain text You exceeded the rate limit (not JSON); the X-RateLimit-Reset header tells you when to retry.
What's next
- Errors — every status code you might receive, including
429. - API Reference — per-endpoint documentation.