Limites de requisições
Cada plano define uma taxa em requisições por minuto: 20, 40 ou 120. O amodb conta as requisições em uma janela deslizante de 60 segundos. Toda resposta traz X-RateLimit-Limit, X-RateLimit-Remaining e X-RateLimit-Reset. Acima do limite você recebe HTTP 429 com status_code 25 e um cabeçalho Retry-After em segundos. Respostas em cache também contam.
Limites por plano
| Requisições por minuto | Requisições por dia na taxa máxima |
|---|---|
| 20 | 28.800 |
| 40 | 57.600 |
| 120 | 172.800 |
Todo plano inclui os mesmos endpoints e dados. Veja preços para os nomes e preços dos planos.
Como a janela funciona
O amodb conta as requisições de cada chave nos últimos 60 segundos. A janela desliza: uma requisição feita às 12:00:30 deixa de contar às 12:01:30. Não há reinício na virada do minuto, então uma taxa constante funciona melhor que rajadas.
A verificação da chave e o limite de requisições rodam antes do cache de borda. Uma resposta servida do cache ainda conta como uma requisição.
Cabeçalhos de resposta
Toda chamada feita com uma chave retorna estes cabeçalhos:
| Cabeçalho | Significado |
|---|---|
X-RateLimit-Limit | Requisições permitidas a cada 60 segundos para esta chave. |
X-RateLimit-Remaining | Requisições restantes na janela atual. |
X-RateLimit-Reset | Segundos até a requisição contada mais antiga sair da janela. |
Retry-After | Só no 429: segundos de espera antes da próxima chamada. |
Quando você atinge o limite
A resposta é HTTP 429 com o corpo de erro do TMDB:
{
"success": false,
"status_code": 25,
"status_message": "Your request count (41) is over the allowed limit of (40)."
}Aguarde Retry-After segundos e tente de novo. Não repita em um loop apertado.
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")Fique abaixo do limite
- Guarde as respostas em cache do seu lado. Os detalhes mudam raramente; 6 horas é um padrão seguro.
- Use
append_to_responsepara obter detalhes, créditos e imagens em uma requisição em vez de três. - Espalhe os trabalhos em lote: com 40 requisições por minuto, envie uma requisição a cada 1,5 segundo.
- Leia
X-RateLimit-Remaininge desacelere antes que chegue a 0.