Skip to main content

Rate limits

Limits apply per API key, over a sliding one-minute window:

EndpointRequests per minute
POST /v1/sms/send60
GET /v1/sms/status/{message_id} and GET /v1/sms/batches/{batch_id} (shared)120
GET /v1/sms/balance30

A request counts towards the limit even if it then fails validation.

Headers​

Every response includes:

HeaderMeaning
X-RateLimit-LimitRequests allowed per window for this endpoint
X-RateLimit-RemainingRequests left in the current window
X-RateLimit-ResetUnix time (seconds) when the next request will be accepted

When you go over the limit you get 429 rate_limit_exceeded with a Retry-After header (seconds to wait).

Staying within the limits​

  • Send lists, not loops. One request can carry up to 10,000 numbers — far better than thousands of single sends.
  • Use webhooks instead of polling /status. Delivery reports come to you.
  • On 429, wait for Retry-After and retry. Don't retry immediately in a tight loop.
  • If a system needs more capacity, give it its own key — limits are per key.