# Rate limits

> Per-key request limits and 429 handling.

Source: https://tickos.dev/docs/rate-limits

Each API key is limited to a number of requests per minute based on your workspace plan. Limits are counted per key in one-minute windows and are approximate, so do not rely on reaching the exact number.

| Plan | Requests per minute (per key) |
|---|---|
| Free | 120 |
| Starter | 600 |
| Pro | 1,500 |
| Enterprise | 6,000 |

## Rate limit headers

When the limit is exceeded, the API responds with HTTP 429 and error "Rate limit exceeded". These headers are included on 429 responses only (successful responses do not carry them):

| Header | Description |
|---|---|
| X-RateLimit-Limit | Maximum requests per minute for your plan. |
| X-RateLimit-Remaining | Requests left in the current window (0 on a 429). |
| X-RateLimit-Reset | Unix timestamp (seconds) when the window resets. |
| Retry-After | Seconds to wait before retrying. |

429 response:

```json
{
  "error": "Rate limit exceeded",
  "message": "You have exceeded the limit of 120 requests per minute for your plan (free). Retry after 12 seconds."
}
```

On a 429, wait Retry-After seconds before retrying. If you retry in a loop, add exponential backoff (e.g. 1s, 2s, 4s) up to a maximum delay.

> **Not the same as plan quotas:** Plan quotas (monthly, daily or hourly email limits, storage, recipients per email) also return 429, but with error "Limit exceeded" and no rate limit headers. See Errors for details.

> **Need more headroom?:** Upgrade your plan from Settings > Billing to raise the per-minute limit.
