Limiti di richieste
Ogni piano stabilisce una frequenza in richieste al minuto: 20, 40 o 120. amodb conta le richieste in una finestra scorrevole di 60 secondi. Ogni risposta porta X-RateLimit-Limit, X-RateLimit-Remaining e X-RateLimit-Reset. Oltre il limite ricevi HTTP 429 con status_code 25 e un header Retry-After in secondi. Anche le risposte dalla cache contano.
Limiti per piano
| Richieste al minuto | Richieste al giorno alla frequenza massima |
|---|---|
| 20 | 28.800 |
| 40 | 57.600 |
| 120 | 172.800 |
Ogni piano include gli stessi endpoint e gli stessi dati. Vedi i prezzi per i nomi e i prezzi dei piani.
Come funziona la finestra
amodb conta le richieste di ogni chiave negli ultimi 60 secondi. La finestra scorre: una richiesta fatta alle 12:00:30 smette di contare alle 12:01:30. Non c'è alcun azzeramento allo scoccare del minuto, quindi una frequenza costante funziona meglio delle raffiche.
Il controllo della chiave e il limite di richieste vengono eseguiti prima della cache edge. Una risposta servita dalla cache conta comunque come una richiesta.
Header della risposta
Ogni chiamata fatta con una chiave restituisce questi header:
| Header | Significato |
|---|---|
X-RateLimit-Limit | Richieste consentite ogni 60 secondi per questa chiave. |
X-RateLimit-Remaining | Richieste rimaste nella finestra corrente. |
X-RateLimit-Reset | Secondi prima che la richiesta contata più vecchia esca dalla finestra. |
Retry-After | Solo su 429: secondi da attendere prima della chiamata successiva. |
Quando raggiungi il limite
La risposta è HTTP 429 con il corpo di errore TMDB:
{
"success": false,
"status_code": 25,
"status_message": "Your request count (41) is over the allowed limit of (40)."
}Attendi i secondi di Retry-After, poi riprova. Non riprovare in un ciclo stretto.
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")Restare sotto il limite
- Metti in cache le risposte dal tuo lato. I dettagli cambiano di rado; 6 ore è un valore predefinito sicuro.
- Usa
append_to_responseper ottenere dettagli, crediti e immagini in una sola richiesta invece di tre. - Distribuisci i lavori in batch: a 40 richieste al minuto, invia una richiesta ogni 1,5 secondi.
- Leggi
X-RateLimit-Remaininge rallenta prima che arrivi a 0.