# Rate limits

Per-key request limits, the per-organization search quota, and the headers that report them.

## Limits

| Limit | Default | Scope |
|---|---|---|
| Requests per minute | 300 | Per API key |
| Requests per minute, all keys | 10,000 | Per organization |
| Requests in flight | 6,000 | Per organization |
| Searches per hour | 20 | Per organization |

The per-key requests per minute and the searches per hour can be raised for your organization; [`GET /v1/account`](https://up2data.ai/docs/v1/api/account-get/) reports the values that apply to you, plus the searches left this hour. There is no cap on concurrent batch jobs.

Request limits apply per API key across every enrich, search, and batch call. Submitting a batch job counts as one request no matter how many items it holds.

The search quota counts calls, not results: every `POST /v1/search/*` call is 1 - [people](https://up2data.ai/docs/v1/api/search-people/), [companies](https://up2data.ai/docs/v1/api/search-companies/), [jobs](https://up2data.ai/docs/v1/api/search-jobs/), [posts](https://up2data.ai/docs/v1/api/search-posts/), their Sales Navigator ([people](https://up2data.ai/docs/v1/api/search-people-sales-nav/), [companies](https://up2data.ai/docs/v1/api/search-companies-sales-nav/)) and standard ([people](https://up2data.ai/docs/v1/api/search-people-standard/), [companies](https://up2data.ai/docs/v1/api/search-companies-standard/)) variants - and so is every `search.*` operation item (Sales Navigator, standard, jobs, or posts) you send inside a `POST /v1/batch` job. Enrich items and every non-search operation item inside a batch don't count against it. The quota is shared per organization, across every key. A sync search call returns at most 100 results (`pagination.has_more` shows when more exist); for a bigger pull - up to 2,500 for people, 1,000 for companies, 500 for jobs or posts - send it as an operation item inside [`POST /v1/batch`](https://up2data.ai/docs/v1/api/batch-create/) instead of issuing more sync searches.

Need a higher limit? Email support@uptodata.io, and for search limits specifically, put "Higher search limits" in the subject line.

## Response headers

Every authenticated business response carries:

```http
X-RateLimit-Limit: 300
X-RateLimit-Remaining: 287
X-RateLimit-Reset: 1767225600
X-Global-RateLimit-Limit: 10000
X-Global-RateLimit-Remaining: 9987
X-Active-Requests-Limit: 6000
X-Active-Requests-Remaining: 5998
```

The global headers count requests across every key in the organization. The active-requests headers count calls still in flight, including this one.

Search responses also carry:

```http
X-Search-RateLimit-Limit: 20
X-Search-RateLimit-Remaining: 17
X-Search-RateLimit-Reset: 1767229200
```

## Getting rate limited

```json
{
  "error": {
    "type": "rate_limited",
    "message": "Search rate limit exceeded (20 searches per hour per organization). A sync search returns at most 100 results per call - for a bigger pull, send it as a POST /v1/batch search item instead of sending more searches. Need a higher limit? Email support@uptodata.io.",
    "requestId": "req_55azx1qm"
  }
}
```

The response includes a `Retry-After` header, in seconds. Rate-limited requests are never billed. Back off exponentially with jitter, and treat `Retry-After` as a floor rather than the exact wait time. See [Errors](https://up2data.ai/docs/v1/guides/errors/) for the full status table.

