> ## Documentation Index
> Fetch the complete documentation index at: https://docs.robase.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# Rate limits

> How many requests per second, what happens when you exceed, and how to back off.

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

## 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                                                                                                        |

Different plans have different ceilings — contact us if you need higher limits for a one-off campaign.

## What happens when you hit the limit

```json theme={null}
// 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

<CardGroup cols={2}>
  <Card title="Use batch endpoints" icon="layer-group" href="/sms/batch">
    One `/v1/sms/batch` call of 1000 messages is 1 request. Same for emails.
  </Card>

  <Card title="Add jitter to retries" icon="shuffle">
    When retrying a 429, add random 100–500 ms jitter so you don't stampede on the next second.
  </Card>

  <Card title="Bucket by idempotency key" icon="lock" href="/concepts/idempotency">
    Deterministic keys mean a stampede of retries doesn't multiply charges.
  </Card>

  <Card title="Move heavy work to queues" icon="conveyor-belt">
    Don't call Robase from a hot request handler. Enqueue a job, return immediately, process async.
  </Card>
</CardGroup>

## Higher limits

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