Skip to main content
Rate limits protect the platform from runaway loops and keep delivery times predictable for every team.

Defaults

ScopeLimit
Per API key, per endpoint10 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 endpoints60 req / min
Different plans have different ceilings — contact us if you need higher limits for a one-off campaign.

What happens when you hit the limit

// 429 Too Many Requests
{
  "error": {
    "type": "rate_limit_exceeded",
    "message": "rate limit exceeded"
  }
}
A 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.

Higher limits

Need more than the default? Email sales@robase.dev with your monthly volume and use case. We lift limits for teams doing ≥50k messages/day at no extra cost.