# Rate limits

Ingest traffic is rate-limited per datasource and per endpoint. Each response reports the current window through X-RateLimit headers, and breaching the limit returns 429.

Every Ingest endpoint enforces a request-per-minute ceiling, scoped by datasource and by endpoint. Limits are sized to your subscription plan and documented per endpoint in the [API Reference](/ingest-api/reference) — if you need more throughput for a backfill or a traffic spike, open a ticket with the expected peak rate and we will raise the ceiling on your datasource.

## Reading the headers

Every response includes three headers with the current window state. Log them in production — they are the cheapest way to spot a client that is about to hit the wall.

```
X-RateLimit-Limit      600
X-RateLimit-Remaining  597
X-RateLimit-Reset      1893452400
```

| Header                  | Meaning                                       |
| ----------------------- | --------------------------------------------- |
| `X-RateLimit-Limit`     | Total requests allowed in the current window. |
| `X-RateLimit-Remaining` | Requests left before the window tightens.     |
| `X-RateLimit-Reset`     | Unix timestamp when the counter resets.       |

## Batch, don't hammer

Both `POST /stream/contacts` and `POST /stream/events` accept up to **100 items per call**. A single batched request counts as one hit against the rate limit, so batching is the cheapest way to move volume without tripping the ceiling. Drop to smaller batches only when your source system produces records one at a time.

## When you hit the limit

Requests that exceed the window return **`429 Too Many Requests`**. The body is empty; the `X-RateLimit-Reset` header tells you when to retry.

> **Tip**: Back off exponentially rather than retrying in a tight loop. A client that hammers a 429 response keeps the window full and never recovers — waiting until `X-RateLimit-Reset` resolves the situation cleanly.

## What's next

- **[Errors](/ingest-api/errors)** — every status code you might receive, including `429`.
- **[API Reference](/ingest-api/reference)** — per-endpoint documentation.
