# Rate limits

Generation is rate limited **per user** (the user who owns the [access token](/docs/authentication)), not per workspace.

| Limit                        | Value                                    |
| ---------------------------- | ---------------------------------------- |
| Generations (all modalities) | **60 per minute** per user               |
| Video generations            | an **additional 30 per minute** per user |

Video generations count against **both** limits. List, get, and estimate endpoints are not rate limited, and **workflow runs are not currently subject to these generation limits**.

## Hitting a limit

When you exceed a limit, the execute request returns [429 RATE\_LIMITED](/docs/errors) with a `Retry-After` header (in seconds):

```plaintext
HTTP/1.1 429 Too Many Requests
Retry-After: 30
Content-Type: application/problem+json


{ "type": "https://api.layer.ai/errors/RATE_LIMITED", "title": "Rate limited", "status": 429, "detail": "…" }
```

Wait for the `Retry-After` interval before retrying.

Note

The API does **not** emit `X-RateLimit-*` headers — don’t rely on them. Pace your requests against the limits above and back off on `429`.

## Recommendations

* Spread bulk generation over time rather than bursting.
* Honor `Retry-After`; add jitter if you run many workers.
* Poll runs on the returned `poll_interval_seconds` (see [Async jobs & polling](/docs/async-jobs)) rather than tight-looping — polling reads aren’t the bottleneck, but a stampede of workers can be.
