Rate limits
How many requests each account can make, and how to stay within them.
Limits apply per account, across all of its API keys. One customer's traffic never affects another's.
| Requests | Limit |
|---|---|
Sends: POST /sms, POST /email | 30 per second |
Reads: GET on messages, /sending-profile, webhook endpoint and events | 100 per second |
Each send can carry 1,000 recipients, so the send limit allows up to 30,000 messages a second. If you're hitting it, batch recipients into fewer, larger requests before anything else.
When you exceed a limit
You get 429 with a Retry-After header giving the seconds to wait:
HTTP/1.1 429 Too Many Requests
Retry-After: 1
Content-Type: application/json
{"error": {"code": "throttled", "message": "Request was throttled. Expected available in 1 second.", "details": null}}Wait Retry-After seconds, then retry. Nothing was sent or charged, so a retry, ideally with the same Idempotency-Key, is safe.
Staying under the limits
- Batch. One request for 1,000 recipients beats 1,000 requests for one.
- Use webhooks, not polling. One event per outcome replaces many reads.
- Spread scheduled jobs. Avoid starting every job on the hour.
- Back off on
429. HonourRetry-After; never retry in a tight loop.
Need more? Email support@softlinksms.co.ke with your expected volume.