# Лимиты запросов

> Каждый тариф задает лимит в запросах в минуту: 20, 40 или 120. amodb считает запросы в скользящем окне 60 секунд. Каждый ответ содержит X-RateLimit-Limit, X-RateLimit-Remaining и X-RateLimit-Reset. При превышении лимита приходит HTTP 429 со status_code 25 и заголовком Retry-After в секундах. Ответы из кэша тоже учитываются.

## Лимиты по тарифам

| Запросов в минуту | Запросов в день на полной скорости |
| ----------------- | ---------------------------------- |
| 20                | 28,800                             |
| 40                | 57,600                             |
| 120               | 172,800                            |

Все тарифы включают одни и те же эндпоинты и данные. Названия и цены тарифов смотрите на странице [цены](https://amodb.dev/ru/pricing/).

## Как работает окно

amodb считает запросы каждого ключа за последние 60 секунд. Окно скользит: запрос, сделанный в 12:00:30, перестает учитываться в 12:01:30. В начале минуты сброса нет, поэтому ровный поток запросов работает лучше, чем всплески.

Проверка ключа и лимит запросов выполняются раньше кэша edge. Ответ, отданный из кэша, все равно считается за один запрос.

## Заголовки ответа

Каждый вызов с ключом возвращает эти заголовки:

| Заголовок               | Значение                                                                             |
| ----------------------- | ------------------------------------------------------------------------------------ |
| `X-RateLimit-Limit`     | Сколько запросов разрешено за 60 секунд для этого ключа.                             |
| `X-RateLimit-Remaining` | Сколько запросов осталось в текущем окне.                                            |
| `X-RateLimit-Reset`     | Сколько секунд осталось до момента, когда самый старый учтенный запрос покинет окно. |
| `Retry-After`           | Только при 429: сколько секунд ждать перед следующим вызовом.                        |

## Когда вы достигли лимита

Ответ имеет код HTTP 429 и тело ошибки TMDB:

```json
{
  "success": false,
  "status_code": 25,
  "status_message": "Your request count (41) is over the allowed limit of (40)."
}
```

Подождите `Retry-After` секунд и повторите вызов. Не повторяйте его в быстром цикле.

```js
async function amodb(path) {
  for (let attempt = 0; attempt < 3; attempt++) {
    const res = await fetch(`https://api.amodb.dev${path}`, {
      headers: { Authorization: `Bearer ${process.env.AMODB_KEY}` },
    });
    if (res.status !== 429) return res.json();
    const wait = Number(res.headers.get("Retry-After") ?? 1);
    await new Promise((r) => setTimeout(r, wait * 1000));
  }
  throw new Error("amodb: still rate limited after 3 attempts");
}
```

```python
import os
import time
import requests

def amodb(path):
    for _ in range(3):
        res = requests.get(
            f"https://api.amodb.dev{path}",
            headers={"Authorization": f"Bearer {os.environ['AMODB_KEY']}"},
            timeout=10,
        )
        if res.status_code != 429:
            return res.json()
        time.sleep(int(res.headers.get("Retry-After", "1")))
    raise RuntimeError("amodb: still rate limited after 3 attempts")
```

## Как не выходить за лимит

- Кэшируйте ответы у себя. Детали меняются редко; 6 часов это безопасное значение по умолчанию.
- Используйте `append_to_response`, чтобы получить детали, данные об актерах и съемочной группе и изображения одним запросом вместо трех.
- Растягивайте пакетные задания во времени: при 40 запросах в минуту отправляйте один запрос каждые 1.5 секунды.
- Читайте `X-RateLimit-Remaining` и замедляйтесь, не дожидаясь, пока значение дойдет до 0.

## Вопросы и ответы

### Делят ли все мои ключи один лимит?

Каждый ключ считается в своем окне, и каждый ключ получает лимит вашего тарифа. Используйте по одному ключу на приложение, чтобы загруженное приложение не замедляло другое.

### Есть ли суточный лимит?

Нет. Единственное ограничение это лимит в минуту. При 40 запросах в минуту один ключ может сделать до 57,600 запросов в сутки.

### Считаются ли запросы изображений?

Нет. Изображениям на img.amodb.dev ключ не нужен, и они не входят в ваш лимит запросов.

## Связанные страницы

- [Цены](https://amodb.dev/ru/pricing/): Тарифы amodb различаются только запросами в минуту: 20, 40 или 120. В каждом все данные в стиле TMDB v3 и OMDb. Предоплата, без продления и пробного периода.
- [Ошибки](https://amodb.dev/ru/errors/): Все ошибки amodb: HTTP-статус, status_code и сообщение TMDB, а также формат ошибки OMDb. Что означает каждая и что должен делать ваш клиент дальше.
- [Аутентификация](https://amodb.dev/ru/authentication/): Как передать ключ amodb: api_key в запросе, заголовок Authorization Bearer или apikey для вызовов OMDb. Формат ключа, хранение, ротация и ошибки 401.
- [Быстрый старт](https://amodb.dev/ru/quickstart/): Первый вызов amodb: получите ключ, запросите детали фильма через curl, JavaScript, Python, PHP или Go и загрузите постер с img.amodb.dev. Меньше 2 минут.

Обновлено: 2026-10-18. Source: https://amodb.dev/ru/rate-limits/
