# API de películas para búsqueda, detalles y puntuaciones

> amodb es una API de películas de pago en https://api.amodb.dev/3 con las mismas rutas y el mismo JSON que TMDB v3. Busca un título con /search/movie y lee la película con append_to_response para obtener reparto, tráilers y puntuaciones en una sola solicitud. Las respuestas llegan en 14 idiomas, desde 20 solicitudes por minuto.

## Una API de películas que habla TMDB v3 y OMDb

amodb es una API de películas independiente. Habla el mismo protocolo que TMDB v3 y OMDb, así que un cliente escrito para cualquiera de los dos funciona después de cambiar la URL base a `https://api.amodb.dev/3` (o a `https://api.amodb.dev/omdb/` para las llamadas estilo OMDb). Encuentras una película con `/search/movie` y luego la lees con `/movie/{movie_id}` y `append_to_response`.

Lo que obtienes:

- JSON con la forma de TMDB v3, con las mismas rutas y los mismos parámetros de consulta.
- Títulos y sinopsis en 14 idiomas, que eliges con `language`.
- Reparto, equipo técnico, tráilers, palabras clave, imágenes y fechas de estreno mediante `append_to_response`.
- Puntuaciones de IMDb, Kinopoisk, Metacritic, Rotten Tomatoes y TMDB cuando se conocen.
- Pósteres desde `https://img.amodb.dev/t/p/{size}/{file}`, sin clave.

## Qué datos obtienes

| Necesitas                         | Llamada                      | Notas                                                                                                                        |
| --------------------------------- | ---------------------------- | ---------------------------------------------------------------------------------------------------------------------------- |
| Encontrar una película por título | `GET /3/search/movie?query=` | Paginado, hasta 20 resultados por página, caché perimetral de 10 minutos. Consulta [búsqueda](https://amodb.dev/es/search/). |
| El registro principal             | `GET /3/movie/{movie_id}`    | Títulos, sinopsis, duración, géneros, fecha de estreno. Consulta [películas](https://amodb.dev/es/movies/).                  |
| Reparto y equipo técnico          | `append_to_response=credits` | Los campos se describen en [créditos](https://amodb.dev/es/credits/).                                                        |
| Tráilers                          | `append_to_response=videos`  | Devuelve el array `results` con `key`, `site` y `type`.                                                                      |
| Puntuaciones                      | `append_to_response=ratings` | Cinco fuentes, cada una `{ value, votes }` o null. Consulta [puntuaciones](https://amodb.dev/es/ratings/).                   |
| Una respuesta estilo OMDb         | `GET /omdb/?t=Inception`     | Los mismos campos de cuerpo que OMDb. Consulta [endpoint OMDb](https://amodb.dev/es/omdb-endpoint/).                         |

## Empieza en 3 pasos

1. Elige un plan en [precios](https://amodb.dev/es/pricing/). Los planes se diferencian solo en el límite: 20, 40 o 120 solicitudes por minuto.
2. Crea una clave en el panel de tu cuenta. Una clave tiene 32 caracteres hexadecimales en minúscula.
3. Llama al endpoint con la clave en el parámetro `api_key` o en un encabezado `Authorization: Bearer`. Consulta [autenticación](https://amodb.dev/es/authentication/).

## Ejemplo de solicitud

El ejemplo busca Inception por título, toma el primer resultado y lee la película con reparto, tráilers y puntuaciones en una llamada más. Son dos solicitudes en total.

```bash
# 1. find the id
curl -s "https://api.amodb.dev/3/search/movie?query=inception&language=en-US" \
  -H "Authorization: Bearer $AMODB_KEY"

# 2. read the movie with extras
curl -s "https://api.amodb.dev/3/movie/27205?language=en-US&append_to_response=credits,videos,ratings" \
  -H "Authorization: Bearer $AMODB_KEY"
```

```js
const base = 'https://api.amodb.dev/3';
const headers = { Authorization: `Bearer ${process.env.AMODB_KEY}` };

async function get(path, params) {
  const res = await fetch(`${base}${path}?${new URLSearchParams(params)}`, { headers });
  if (res.status === 429) {
    throw new Error(`Over the limit, retry in ${res.headers.get('Retry-After')} s`);
  }
  if (!res.ok) throw new Error(`amodb returned ${res.status}`);
  return res.json();
}

const found = await get('/search/movie', { query: 'inception', language: 'en-US' });
if (!found.results.length) throw new Error('No match');

const movie = await get(`/movie/${found.results[0].id}`, {
  language: 'en-US',
  append_to_response: 'credits,videos,ratings',
});
const director = movie.credits.crew.find((c) => c.job === 'Director');
console.log(movie.title, movie.release_date, movie.runtime, director?.name);
console.log('IMDb', movie.ratings.imdb?.value);
```

La respuesta recortada. Solo se conservan algunos campos del registro de la película, `credits` se reduce a un miembro del reparto y al director, y se omite el bloque `videos`.

```json
{
  "genres": [
    {
      "id": 12,
      "name": "Adventure"
    },
    {
      "id": 28,
      "name": "Action"
    },
    {
      "id": 80,
      "name": "Crime"
    }
  ],
  "id": 27205,
  "imdb_id": "tt1375666",
  "poster_path": "/xlaY2zyzMfkhk0HSC5VUwzoZPU1.jpg",
  "release_date": "2010-07-15",
  "runtime": 148,
  "title": "Inception",
  "credits": {
    "cast": [
      {
        "adult": false,
        "gender": 2,
        "id": 6193,
        "known_for_department": "Acting",
        "name": "Leonardo DiCaprio",
        "original_name": "Leonardo DiCaprio",
        "popularity": 9.3213,
        "profile_path": "/wo2hJpn04vbtmh0B9utCFdsQhxM.jpg",
        "character": "Dom Cobb",
        "credit_id": "52fe4534c3a368484e04de03",
        "order": 0
      }
    ],
    "crew": [
      {
        "adult": false,
        "gender": 2,
        "id": 525,
        "known_for_department": "Directing",
        "name": "Christopher Nolan",
        "original_name": "Christopher Nolan",
        "popularity": 8.578,
        "profile_path": "/xuAIuYSmsUzKlUMBFGVZaWsY3DZ.jpg",
        "credit_id": "5e83ac2ee33f830018359a00",
        "department": "Directing",
        "job": "Director"
      }
    ]
  },
  "ratings": {
    "imdb": {
      "value": 8.8,
      "votes": 2877173
    },
    "kinopoisk": {
      "value": 8.7,
      "votes": null
    },
    "metacritic": {
      "value": 74,
      "votes": null
    },
    "rotten_tomatoes": {
      "value": 86,
      "votes": null
    },
    "tmdb": {
      "value": 8.373,
      "votes": 40457
    }
  }
}
```

## Formas de encontrar una película

Elige la llamada que se ajuste a lo que ya tienes.

| Empiezas con                          | Llamada                                         | Resultado                                                        |
| ------------------------------------- | ----------------------------------------------- | ---------------------------------------------------------------- |
| Un título escrito por un usuario      | `GET /3/search/movie?query=`                    | Array `results` con `id`, `title`, `release_date`, `poster_path` |
| Un ID de IMDb como `tt0133093`        | `GET /3/find/tt0133093?external_source=imdb_id` | Array `movie_results`                                            |
| Un id numérico de película como `603` | `GET /3/movie/603`                              | El registro completo                                             |
| Un cliente OMDb existente             | `GET /omdb/?i=tt0133093`                        | Cuerpo OMDb con `Title`, `Year`, `Ratings`                       |

Guarda ambos ids. El `id` numérico es la clave para todas las demás llamadas, y `imdb_id` une tus datos con otros sistemas. Las reglas de consulta están en [buscar por ID externo](https://amodb.dev/es/find-by-external-id/).

## Campos vacíos y consultas fallidas

Los datos reales de películas tienen huecos, así que escribe el código de presentación pensando en ellos. Una búsqueda sin resultados no es un error: devuelve HTTP 200 con un array `results` vacío. Un id desconocido sí es un error.

| Caso                       | Qué ves                    | Qué hacer                                  |
| -------------------------- | -------------------------- | ------------------------------------------ |
| Búsqueda sin resultados    | 200 y `"results": []`      | Muestra «sin coincidencias», no reintentes |
| ID de película desconocido | 404 con `status_code` 34   | Quita el id de tu lista                    |
| Clave ausente o incorrecta | 401 con `status_code` 7    | Detente y corrige la clave                 |
| `overview` vacío           | Una cadena vacía           | Solicita de nuevo con `language=en-US`     |
| Puntuación desconocida     | `null` dentro de `ratings` | Oculta esa insignia                        |
| Sin fecha de estreno       | `release_date` vacío       | Ordena el título al final                  |

La lista completa de errores está en [errores](https://amodb.dev/es/errors/).

## Cómo respetar el límite de solicitudes

Una búsqueda y una llamada de detalles cuestan una solicitud cada una. Con 20 solicitudes por minuto son diez consultas de títulos por minuto, y con 120 solicitudes por minuto son sesenta. Un acierto en la caché perimetral también cuenta, porque la comprobación de la clave y el límite se ejecutan antes que la caché. Mantén una caché propia para las consultas repetidas y lee `X-RateLimit-Remaining` para ver cuánto queda del minuto. Cuando recibas un 429, espera los segundos indicados en `Retry-After`. Los límites de cada plan están en [límites de solicitudes](https://amodb.dev/es/rate-limits/).

## Cómo se compara

| Capacidad                             | Hacer scraping de las páginas tú mismo         | API de metadatos con nivel gratuito           | amodb                                                   |
| ------------------------------------- | ---------------------------------------------- | --------------------------------------------- | ------------------------------------------------------- |
| Formato de respuesta                  | HTML que debes analizar                        | JSON                                          | JSON con la forma de TMDB v3                            |
| Estabilidad del esquema               | Se rompe cuando cambia el marcado de la página | Lo define el proveedor                        | Rutas y campos fijos, pueden aparecer campos nuevos     |
| Condiciones de acceso                 | Se aplican los términos de cada sitio          | Nivel gratuito con términos de uso, revísalos | De pago, prepago, sin nivel gratuito                    |
| Límite de solicitudes                 | Nada en lo que puedas confiar                  | Lo define el proveedor                        | 20, 40 o 120 solicitudes por minuto por clave           |
| Puntuaciones de varias fuentes        | Un scraper por cada sitio                      | Varía, revisa la documentación                | `ratings` en la misma llamada, null cuando se desconoce |
| Idiomas                               | Los que ofrezca cada página                    | Varía                                         | 14, elegidos con `language`                             |
| Reutilizar clientes de TMDB v3 y OMDb | No                                             | Solo si usa el mismo protocolo                | Sí, cambia la URL base                                  |

## Precios

El acceso es prepago por 1, 3, 6, 12 o 24 meses, con 0, 10, 20, 30 y 40 por ciento de descuento en los periodos más largos. No hay renovación automática ni nivel gratuito. Todos los planes dan acceso a todos los datos y se diferencian solo en el límite: 20, 40 o 120 solicitudes por minuto. Elige uno en [precios](https://amodb.dev/es/pricing/) y haz tu primera llamada en pocos minutos.

## Preguntas y respuestas

### ¿Esta API de películas es compatible con TMDB?

Sí, en los endpoints de lectura que necesita una app de películas. Las rutas, los parámetros de consulta y el JSON coinciden con TMDB v3 en https://api.amodb.dev/3, así que cambias la URL base y usas tu clave de amodb. Los métodos de escritura de cuenta, sesión, puntuaciones y listas devuelven 405 con status_code 37. Los feeds de changes, aggregate_credits y las consultas de credit y review devuelven 404.

### ¿Puedo buscar una película por su ID de IMDb?

Sí. Llama a /3/find/tt0133093?external_source=imdb_id y lee movie_results, o usa el endpoint estilo OMDb en /omdb/?i=tt0133093. Ambos aceptan la misma clave que las llamadas estilo TMDB.

### ¿Cuántas solicitudes necesita la página de una película?

Dos como máximo: una búsqueda para obtener el id y luego una llamada a /movie/{id} con append_to_response=credits,videos,ratings. Si ya guardas el id, basta una sola solicitud.

### ¿En qué idiomas responde la API de películas?

En catorce: inglés, ruso, ucraniano, bielorruso, chino, portugués, búlgaro, hebreo, checo, rumano, francés, polaco, italiano y español. Pasa una etiqueta de TMDB como pt-BR en language. Cualquier otra etiqueta recurre al inglés.

### ¿Hay un nivel gratuito o un periodo de prueba?

No. El acceso es prepago por 1, 3, 6, 12 o 24 meses, con descuentos de 0, 10, 20, 30 y 40 por ciento. No hay renovación automática. Los planes de 20, 40 y 120 solicitudes por minuto están en la página de precios.

## Páginas relacionadas

- [API de detalles de película](https://amodb.dev/es/movies/): API de detalles de película con rutas y JSON de TMDB v3. Obtén una película por id y añade créditos, puntuaciones y moods con append_to_response, en 14 idiomas.
- [API de búsqueda](https://amodb.dev/es/search/): API de búsqueda con rutas y JSON de TMDB v3. Encuentra películas, series, personas, colecciones, productoras y palabras clave por texto, con filtros de año.
- [Puntuaciones de películas y series](https://amodb.dev/es/ratings/): API de puntuaciones de películas: IMDb, Kinopoisk, Metacritic, Rotten Tomatoes y TMDB de un título en una sola llamada, con null si falta una fuente.
- [Buscar por id externo](https://amodb.dev/es/find-by-external-id/): Busca una película, serie o persona por id de IMDb, TVDB, Wikidata o Kinopoisk con el endpoint find de TMDB, y lee los ids externos y los datos de Wikidata.
- [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.
- [Alternativa a la API de TMDB](https://amodb.dev/es/tmdb-api-alternative/): ¿Buscas una alternativa a TMDB? Revisa términos, límites, idiomas y puntuaciones, y pasa a una API de pago con la mayoría de lecturas y el JSON de TMDB v3.

Actualizado: 2026-10-18. Source: https://amodb.dev/es/movie-api/
