# Rate limits

600 requests per minute per account, counted per endpoint; 100 per minute on run polling; 10 concurrent connections on the v1 and v2 streaming endpoints.

## Request limits

- **600 requests per minute per account**, counted **per endpoint**. Each endpoint has its own counter, so calls to one do not consume another's allowance
- The counter is per account, not per key: every API key on an account draws from the same allowance
- Exception: `GET /v3/runs/{run_id}` is **100 requests per minute**. Polls are free, so poll every 10 seconds rather than in a tight loop, or pass `webhook_url` and skip polling. See [Webhooks](/docs/guides/webhooks)

## Concurrent connections

**10 concurrent connections per account** on the v1 and v2 streaming endpoints (`/v1/entity-resolution/stream`, `/v2/entity-resolution/stream`). v3 has no streaming endpoint.

Async and polling requests have no concurrency limit; they are bounded by the per-endpoint request limit above.

Exceeding it returns a `429`. Every response on these routes carries `X-Concurrent-Quota-Limit` and `X-Concurrent-Quota-Remaining`, not just the rejections.

## Rate limit headers

Every API response includes rate limit information in the headers:

```http
RateLimit-Limit: 600
RateLimit-Remaining: 599
RateLimit-Reset: 50
```

- **`RateLimit-Limit`**: Total requests allowed per window
- **`RateLimit-Remaining`**: Requests remaining in current window
- **`RateLimit-Reset`**: Seconds until window resets

`X-RateLimit-Limit-Minute` and `X-RateLimit-Remaining-Minute` are also sent, carrying the same values. Prefer the `RateLimit-*` headers above.

## Rate limit responses

A `429` comes from either a rate limit or a plan limit, and the two carry different bodies. Branch on the shape, not on the status code.

The per-minute rate limit and the concurrency limit share this body. The per-minute limit also carries a `Retry-After` header giving the seconds to wait:

```json
{ "message": "API rate limit exceeded" }
```

A plan limit, meaning the free-plan allowance, a monthly request cap, or a monthly spend limit:

```json
{ "error": "monthly_cap_reached", "message": "Monthly usage cap reached for this API." }
```

## Higher limits

For production workloads needing more throughput, contact [sales@savvyiq.ai](mailto:sales@savvyiq.ai).
