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

# Limits

> Request rates, link lifetimes, and webhook delivery

## Request rates

Requests with `X-API-Key` are limited **per key**: a sustained rate of
**10 requests per second**, with short bursts up to **20 requests**.
Exceeding the limit returns `429 Too Many Requests`.

<Note>
  There is currently no `Retry-After` header on `429` responses — a preview
  limitation. Use exponential backoff from the start: wait 1 s, then 2 s, 4 s…
  with a little random jitter.
</Note>

Practical advice for bulk exports:

* keep your rate at 8–9 requests per second to leave headroom for retries;
* fetch pages at the maximum size (`page_size=100`) rather than in small chunks;
* on a `429`, stop sending parallel requests — wait out the window.

## Lifetimes

| What                                | Lifetime                                    | What to do when it expires                              |
| ----------------------------------- | ------------------------------------------- | ------------------------------------------------------- |
| File download link (`download_url`) | **1 hour**                                  | Call the download endpoint again — you get a fresh link |
| API key secret                      | Shown **once** at creation                  | Create a new key; the secret cannot be recovered        |
| Webhook secret                      | Shown **once** when the endpoint is created | Recreate the endpoint                                   |

<Warning>
  Do not store `download_url` in your database or embed it in emails — the link
  stops working after an hour. Store the file `id` and request a link at download
  time.
</Warning>

## Webhook delivery

* Each event gets up to **8 delivery attempts** with exponentially growing
  intervals, roughly **a day** in total.
* Success is any `2xx` response within a reasonable time; everything else
  (timeout, `3xx`, `4xx`, `5xx`) counts as a failure and is retried.
* After **20 consecutive** permanently failed deliveries the endpoint is
  **automatically disabled**. Re-enable it in settings (Integrations →
  Webhooks) — there is currently no re-enable endpoint in the API.

More on delivery mechanics in the [webhooks reference](/en/api-reference/webhooks).

## Sizes

* An Ingest batch has no hard record cap, but keep it within a few thousand
  records: processing is asynchronous, and the request body should stay a
  reasonable size (single-digit megabytes).
* List responses are bounded by pagination — `page_size` up to 100.
