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

# Rate limits

> Stay within request limits and handle 429 responses gracefully.

Requests are rate limited per API key to keep the platform fast and fair.

<Note>
  The default limit is **60 requests per minute per API key**. When you exceed it, responses
  include a `Retry-After` header (in seconds). Higher limits can be arranged with your account
  manager - always design your integration to respect `429` responses.
</Note>

## Response headers

Every v2 response includes rate-limit headers:

| Header                  | Meaning                                                 |
| ----------------------- | ------------------------------------------------------- |
| `X-RateLimit-Limit`     | Maximum requests allowed in the current window          |
| `X-RateLimit-Remaining` | Requests remaining in the current window                |
| `X-RateLimit-Reset`     | Unix timestamp (seconds) when the window resets         |
| `Retry-After`           | Present on `429` only - seconds to wait before retrying |

Use `X-RateLimit-Remaining` to slow down proactively before hitting the limit.

## When you exceed a limit

You receive `429 Too Many Requests`:

```json theme={"dark"}
{
  "statusCode": 429,
  "error": "Too Many Requests",
  "message": "Rate limit exceeded. Retry after 30s."
}
```

## Best practices

<CardGroup cols={2}>
  <Card title="Back off" icon="hourglass-half">
    On `429`, wait for `Retry-After` (or read `X-RateLimit-Reset`) before retrying.
  </Card>

  <Card title="Poll sensibly" icon="clock">
    Poll orders at or after `estimatedReadyAt`, then about once a minute - not in a tight loop.
  </Card>

  <Card title="Batch reads" icon="layer-group">
    Use `take=100` and [filters](/concepts/filtering) to reduce the number of calls.
  </Card>

  <Card title="Cache the catalog" icon="database">
    The catalog changes infrequently - cache it and refresh periodically.
  </Card>
</CardGroup>
