Límites de solicitudes

Cada plan fija un ritmo en solicitudes por minuto: 20, 40 o 120. amodb cuenta las solicitudes en una ventana deslizante de 60 segundos. Cada respuesta lleva X-RateLimit-Limit, X-RateLimit-Remaining y X-RateLimit-Reset. Si superas el límite recibes HTTP 429 con status_code 25 y un encabezado Retry-After en segundos. Las respuestas en caché también cuentan.

Actualizado el Ver en Markdown

Límites por plan

Solicitudes por minutoSolicitudes al día al ritmo máximo
2028 800
4057 600
120172 800

Todos los planes incluyen los mismos endpoints y datos. Consulta los precios para ver los nombres y los precios de los planes.

Cómo funciona la ventana

amodb cuenta las solicitudes de cada clave durante los últimos 60 segundos. La ventana se desliza: una solicitud hecha a las 12:00:30 deja de contar a las 12:01:30. No hay reinicio al comienzo del minuto, así que un ritmo constante funciona mejor que las ráfagas.

La comprobación de la clave y el límite de solicitudes se ejecutan antes que la caché perimetral. Una respuesta servida desde la caché cuenta igualmente como una solicitud.

Encabezados de respuesta

Toda llamada hecha con una clave devuelve estos encabezados:

EncabezadoSignificado
X-RateLimit-LimitSolicitudes permitidas por 60 segundos para esta clave.
X-RateLimit-RemainingSolicitudes que quedan en la ventana actual.
X-RateLimit-ResetSegundos hasta que la solicitud contada más antigua salga de la ventana.
Retry-AfterSolo en 429: segundos que debes esperar antes de la siguiente llamada.

Cuando alcanzas el límite

La respuesta es HTTP 429 con el cuerpo de error de TMDB:

JSON
{
  "success": false,
  "status_code": 25,
  "status_message": "Your request count (41) is over the allowed limit of (40)."
}

Espera los segundos de Retry-After y vuelve a intentarlo. No reintentes en un bucle cerrado.

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

Mantente por debajo del límite

  • Guarda las respuestas en caché de tu lado. Los detalles cambian poco; 6 horas es un valor seguro por defecto.
  • Usa append_to_response para obtener detalles, créditos e imágenes en una sola solicitud en lugar de tres.
  • Reparte los trabajos por lotes: con 40 solicitudes por minuto, envía una solicitud cada 1,5 segundos.
  • Lee X-RateLimit-Remaining y reduce el ritmo antes de que llegue a 0.

Preguntas y respuestas

¿Todas mis claves comparten un único límite?

Cada clave se cuenta en su propia ventana, y todas las claves reciben el ritmo de tu plan. Usa una clave por app para que una app con mucha carga no ralentice a otra.

¿Hay un tope diario?

No. El único límite es el ritmo por minuto. Con 40 solicitudes por minuto, una clave puede hacer hasta 57 600 solicitudes al día.

¿Las solicitudes de imágenes cuentan?

No. Las imágenes de img.amodb.dev no necesitan clave y no cuentan en tu ritmo de solicitudes.