Ліміти запитів

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

Оновлено Відкрити в Markdown

Ліміти за тарифами

Запитів на хвилинуЗапитів на день на повній швидкості
2028,800
4057,600
120172,800

Кожен тариф містить ті самі ендпоінти й дані. Назви тарифів і ціни дивіться на сторінці ціни.

Як працює вікно

amodb рахує запити кожного ключа за останні 60 секунд. Вікно ковзає: запит, зроблений о 12:00:30, перестає враховуватися о 12:01:30. На початку хвилини скидання немає, тож рівномірний темп працює краще за сплески.

Перевірка ключа й ліміт запитів виконуються перед кешем на периферії. Відповідь, віддана з кешу, усе одно враховується як один запит.

Заголовки відповіді

Кожен виклик із ключем повертає такі заголовки:

ЗаголовокЗначення
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 секунд, потім повторіть запит. Не повторюйте у щільному циклі.

jspy
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");
}
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 не потребують ключа й не входять у ваш ліміт.