# 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.

## Límites por plan

| Solicitudes por minuto | Solicitudes al día al ritmo máximo |
| ---------------------- | ---------------------------------- |
| 20                     | 28 800                             |
| 40                     | 57 600                             |
| 120                    | 172 800                            |

Todos los planes incluyen los mismos endpoints y datos. Consulta los [precios](https://amodb.dev/es/pricing/) 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:

| Encabezado              | Significado                                                              |
| ----------------------- | ------------------------------------------------------------------------ |
| `X-RateLimit-Limit`     | Solicitudes permitidas por 60 segundos para esta clave.                  |
| `X-RateLimit-Remaining` | Solicitudes que quedan en la ventana actual.                             |
| `X-RateLimit-Reset`     | Segundos hasta que la solicitud contada más antigua salga de la ventana. |
| `Retry-After`           | Solo 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.

```js
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");
}
```

```python
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.

## Páginas relacionadas

- [Precios](https://amodb.dev/es/pricing/): Los planes de amodb se diferencian solo en solicitudes por minuto: 20, 40 o 120. Todos incluyen todos los datos de TMDB v3 y OMDb. Prepago y sin renovación.
- [Errores](https://amodb.dev/es/errors/): Cada error de amodb con su estado HTTP, su status_code de TMDB y su mensaje, más la forma de error de OMDb. Qué significa cada uno y qué debe hacer tu cliente.
- [Autenticación](https://amodb.dev/es/authentication/): Cómo enviar tu clave de amodb: api_key en la consulta, un encabezado Bearer o apikey en llamadas OMDb. Formato, almacenamiento, rotación y errores 401.
- [Inicio rápido](https://amodb.dev/es/quickstart/): Haz tu primera llamada a amodb: consigue una clave, pide los detalles de una película en curl, JavaScript, Python, PHP o Go y carga el póster. En 2 minutos.

Actualizado: 2026-10-18. Source: https://amodb.dev/es/rate-limits/
