Limites de débit
Chaque offre fixe un débit en requêtes par minute : 20, 40 ou 120. amodb compte les requêtes sur une fenêtre glissante de 60 secondes. Chaque réponse porte X-RateLimit-Limit, X-RateLimit-Remaining et X-RateLimit-Reset. Au-delà de la limite, vous recevez HTTP 429 avec status_code 25 et un en-tête Retry-After en secondes. Les réponses en cache comptent aussi.
Limites par offre
| Requêtes par minute | Requêtes par jour au débit maximal |
|---|---|
| 20 | 28 800 |
| 40 | 57 600 |
| 120 | 172 800 |
Chaque offre inclut les mêmes points de terminaison et les mêmes données. Voir les tarifs pour les noms et les prix des offres.
Fonctionnement de la fenêtre
amodb compte les requêtes de chaque clé sur les 60 dernières secondes. La fenêtre glisse : une requête faite à 12:00:30 cesse de compter à 12:01:30. Il n'y a pas de remise à zéro au début de la minute, donc un rythme régulier fonctionne mieux que des rafales.
La vérification de la clé et la limite de débit passent avant le cache de périphérie. Une réponse servie depuis le cache compte quand même pour une requête.
En-têtes de réponse
Chaque appel fait avec une clé renvoie ces en-têtes :
| En-tête | Signification |
|---|---|
X-RateLimit-Limit | Requêtes autorisées par 60 secondes pour cette clé. |
X-RateLimit-Remaining | Requêtes restantes dans la fenêtre en cours. |
X-RateLimit-Reset | Secondes avant que la plus ancienne requête comptée sorte de la fenêtre. |
Retry-After | Sur 429 uniquement : secondes à attendre avant l'appel suivant. |
Quand vous atteignez la limite
La réponse est HTTP 429 avec le corps d'erreur TMDB :
{
"success": false,
"status_code": 25,
"status_message": "Your request count (41) is over the allowed limit of (40)."
}Attendez les secondes de Retry-After, puis réessayez. Ne réessayez pas en boucle serrée.
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")Rester sous la limite
- Mettez les réponses en cache de votre côté. Les détails changent rarement : 6 heures est une valeur par défaut sûre.
- Utilisez
append_to_responsepour obtenir les détails, les crédits et les images en une requête au lieu de trois. - Étalez les traitements par lots : à 40 requêtes par minute, envoyez une requête toutes les 1,5 secondes.
- Lisez
X-RateLimit-Remaininget ralentissez avant qu'il n'atteigne 0.