Rate limits
| Limit | Value |
|---|---|
Sending (POST /v1/messages, POST /v1/contacts) | 50 requests a second per key, 200 a second per account |
Reading (GET endpoints) | 20 requests a second per key |
| Requests with an invalid key | 20 a minute per address, then every request from it is refused until the minute ends |
| Request body | 64 KiB |
| Messages a day | the daily limit of the account; test keys: 1000 a day |
Over a rate limit the answer is 429 too_many_requests with a Retry-After header in seconds. Wait that long, then retry with the same Idempotency-Key.
Daily limit
Every account has a daily limit of accepted messages; a new account starts with a modest one. Over it, POST /v1/messages answers 429 daily_limit_reached:
json
{
"type": "about:blank",
"status": 429,
"code": "daily_limit_reached",
"title": "The daily message limit is reached",
"retry_after": "2026-11-03T03:00:00+00:00"
}The day starts at midnight in the time zone of the account (Settings → Account in the console); retry_after and the Retry-After header tell when. Messages the provider later refuses still count. To raise the limit, ask your manager.
Test keys have their own limit of 1000 messages a day, apart from the live one.