---
title: "Rate limits"
subtitle: "How many requests the gateway admits per minute, and what happens over the limit."
---

Every request is checked against these limits before any provider is called. Over a limit, the gateway answers `429` and the request costs nothing.

## Plan limits

Your plan sets how many requests per minute your organization can send through the gateway, across all its API keys.

| Plan | Requests per minute |
|---|---|
| Free | 4,200 |
| Team | 8,400 |
| Enterprise | Custom |

There is no plan limit on tokens per minute.

## Limits you set

| Limit | Scope | Default | Set it in |
|---|---|---|---|
| Requests per minute (`rate_limit`) | One API key | None | **Gateway** › **API keys** › your key |
| Tokens per minute (`tpm_rate_limit`) | One API key | None | **Gateway** › **API keys** › your key |
| Customer rate limit | One `customer_identifier`, Chat Completions only | None | **Gateway** › **Routing config** › **Limits**, or `customer_params.rate_limit` |

A request has to fit every limit that applies, so the tightest one wins. To cap spend rather than speed, use [budgets and limits](/docs/ai-gateway/spend/budgets-and-limits).

## Realtime sessions

Open realtime sessions are capped at 10 per API key, 50 per organization, and 500 per gateway instance. A new session over a cap is refused with `429` `realtime_session_limit`.

## Provider limits

Calls on Respan credits share Respan's capacity with each provider. If a provider rate limits that capacity, you get the provider's `429`. Calls on [your own key](/docs/ai-gateway/spend/credits-vs-byok#byok) use your provider account's quotas instead, and [managed fallback](/docs/ai-gateway/spend/credits-vs-byok#managed-fallback) can move them onto Respan's keys when your key is rate limited.

## Over the limit

```json
{
  "error": {
    "message": "Rate Limit - You have reached the rate limit for your Respan API key: prod-key with rate limit 60.0 per minute, try again shortly or modify your rate limit at ...",
    "type": "rate_limit_exceeded",
    "code": "rate_limit_exceeded"
  }
}
```

| `code` | Cause | What to do |
|---|---|---|
| `rate_limit_exceeded` | A plan, key, or customer limit | Wait and retry with backoff |
| `realtime_session_limit` | Too many open realtime sessions | Retry after a session closes |
| The provider's code | The provider is limiting Respan's capacity | Retry later, or add your own provider key |

A tokens-per-minute refusal includes a `retry-after` header in seconds; wait that long. Other refusals have none, so retry with exponential backoff.
