Ліміти запитів
Кожен тариф задає ліміт у запитах на хвилину: 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 |
Кожен тариф містить ті самі ендпоінти й дані. Назви тарифів і ціни дивіться на сторінці ціни.
Як працює вікно
amodb рахує запити кожного ключа за останні 60 секунд. Вікно ковзає: запит, зроблений о 12:00:30, перестає враховуватися о 12:01:30. На початку хвилини скидання немає, тож рівномірний темп працює краще за сплески.
Перевірка ключа й ліміт запитів виконуються перед кешем на периферії. Відповідь, віддана з кешу, усе одно враховується як один запит.
Заголовки відповіді
Кожен виклик із ключем повертає такі заголовки:
| Заголовок | Значення |
|---|---|
X-RateLimit-Limit | Запитів, дозволених за 60 секунд для цього ключа. |
X-RateLimit-Remaining | Запитів, що лишилися в поточному вікні. |
X-RateLimit-Reset | Секунд до того, як найстаріший врахований запит вийде з вікна. |
Retry-After | Лише при 429: секунд очікування перед наступним викликом. |
Коли ви досягли ліміту
Відповідь це HTTP 429 з тілом помилки TMDB:
{
"success": false,
"status_code": 25,
"status_message": "Your request count (41) is over the allowed limit of (40)."
}Зачекайте Retry-After секунд, потім повторіть запит. Не повторюйте у щільному циклі.
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.