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

# Rate limits

> How Runflow throttles requests and how to back off.

The API enforces a default request-rate limit, sized for typical production load. Exceed it and the call returns `429 Too Many Requests` with the standard error envelope:

```json theme={"dark"}
{ "code": "RATE_LIMITED", "message": "Rate limit exceeded: ..." }
```

429 responses do not currently carry rate-limit headers, so do not branch on `Retry-After` or `X-RateLimit-*`. Treat a `429` as the signal to slow down, and retry with backoff.

## Backoff

Retry on `429` with exponential backoff plus jitter. Pseudocode:

```python theme={"dark"}
import random, time

delay = 1
for attempt in range(5):
    response = call_runflow()
    if response.status != 429:
        break
    time.sleep(min(delay, 32) + random.uniform(0, 1))
    delay = min(delay * 2, 32)
```

## Run capacity

Runs are dispatched asynchronously onto a shared worker fleet. When capacity is busy, a run waits in the `queued` status until a worker is free rather than being rejected, so a sustained backlog shows up as runs sitting in `queued` (see [Runs](/concepts/runs) for the lifecycle). If queue times grow beyond what your workload can tolerate, get in touch about higher throughput.

## Need a higher limit?

[Talk to us](https://cal.com/team/runflow/talk-to-founders?duration=25). Include peak QPS, average payload size, and target concurrency.

## Related

<CardGroup cols={2}>
  <Card title="Errors" icon="triangle-exclamation" href="/concepts/errors">All status codes including 429.</Card>
  <Card title="Pricing" icon="coin" href="/concepts/pricing">Per-request and per-second pricing.</Card>
</CardGroup>
