Defaults
| Scope | Limit |
|---|---|
| Per API key, per endpoint | 10 requests / second |
Batch endpoints (/v1/sms/batch, /v1/emails/batch) | 10 requests / second (batches count as one request each — send 10 batches of 1000 messages = 10,000 messages/s) |
| Dashboard session endpoints | 60 req / min |
What happens when you hit the limit
Retry-After: 1 header tells you the minimum seconds to wait. Our SDKs handle this automatically — they back off and retry once before surfacing the error to your code.
Best practices
Use batch endpoints
One
/v1/sms/batch call of 1000 messages is 1 request. Same for emails.Add jitter to retries
When retrying a 429, add random 100–500 ms jitter so you don’t stampede on the next second.
Bucket by idempotency key
Deterministic keys mean a stampede of retries doesn’t multiply charges.
Move heavy work to queues
Don’t call Robase from a hot request handler. Enqueue a job, return immediately, process async.