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.

Atualizado em Ver em Markdown

Limites por plano

Requisições por minutoRequisições por dia na taxa máxima
2028.800
4057.600
120172.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çalhoSignificado
X-RateLimit-LimitRequisições permitidas a cada 60 segundos para esta chave.
X-RateLimit-RemainingRequisições restantes na janela atual.
X-RateLimit-ResetSegundos até a requisição contada mais antiga sair da janela.
Retry-AfterSó 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:

JSON
{
  "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.

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")

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_response para 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-Remaining e desacelere antes que chegue a 0.

Perguntas e respostas

Todas as minhas chaves compartilham um limite?

Cada chave é contada em sua própria janela, e toda chave recebe a taxa do seu plano. Use uma chave por app para que um app movimentado não deixe outro lento.

Existe um teto diário?

Não. O único limite é a taxa por minuto. Com 40 requisições por minuto, uma chave pode fazer até 57.600 requisições por dia.

As requisições de imagem contam?

Não. As imagens em img.amodb.dev não precisam de chave e não contam na sua taxa.