# API de detalles de película

> El endpoint de detalles devuelve una película por id en GET /3/movie/{movie_id}. El JSON coincide con TMDB v3, así que los clientes existentes solo necesitan una nueva URL base. Añade append_to_response para obtener créditos, vídeos, imágenes y los extras de amodb ratings, moods, soundtracks, wikidata y showtimes en una sola solicitud.

## Endpoint

`GET /3/movie/{movie_id}`

```bash
curl "https://api.amodb.dev/3/movie/550?language=en-US" \
  -H "Authorization: Bearer $AMODB_KEY"
```

Respuesta:

```json
{
  "adult": false,
  "backdrop_path": "/b9HyPoxwxjxkWEUL5ErZdhApQe2.jpg",
  "belongs_to_collection": null,
  "budget": 63000000,
  "genres": [
    {
      "id": 18,
      "name": "Drama"
    },
    {
      "id": 53,
      "name": "Thriller"
    }
  ],
  "homepage": "https://www.20thcenturystudios.com/movies/fight-club",
  "id": 550,
  "imdb_id": "tt0137523",
  "origin_country": [
    "US",
    "DE"
  ],
  "original_language": "en",
  "original_title": "Fight Club",
  "overview": "A ticking-time-bomb insomniac and a slippery soap salesman channel primal male aggression into a shocking new form of therapy. Their concept catches on, with underground \"fight clubs\" forming in every town, until an eccentric gets in the wa...",
  "popularity": 39.0054,
  "poster_path": "/jSziioSwPVrOy9Yow3XhWIBDjq1.jpg",
  "production_companies": [
    {
      "id": 25,
      "logo_path": "/nM2MfoMqzJQRiSynsDabOtFKetD.png",
      "name": "20th Century Fox",
      "origin_country": "US"
    },
    {
      "id": 508,
      "logo_path": "/4sGWXoboEkWPphI6es6rTmqkCBh.png",
      "name": "Regency Enterprises",
      "origin_country": "US"
    },
    {
      "id": 711,
      "logo_path": "/tEiIH5QesdheJmDAqQwvtN60727.png",
      "name": "Fox 2000 Pictures",
      "origin_country": "US"
    }
  ],
  "production_countries": [
    {
      "iso_3166_1": "US",
      "name": "United States of America"
    },
    {
      "iso_3166_1": "DE",
      "name": "Germany"
    }
  ],
  "release_date": "1999-10-15",
  "revenue": 101209702,
  "runtime": 139,
  "spoken_languages": [
    {
      "english_name": "English",
      "iso_639_1": "en",
      "name": "English"
    }
  ],
  "status": "Released",
  "tagline": "Mischief. Mayhem. Soap.",
  "title": "Fight Club",
  "video": false,
  "vote_average": 8.437,
  "vote_count": 33042
}
```

## Obtener los detalles de una película

`GET /3/movie/{movie_id}` devuelve el registro principal de una película: títulos, sinopsis, duración, géneros, fecha de estreno, presupuesto, ingresos, productoras y rutas de imágenes. El id es el mismo id numérico que usa TMDB, así que una película que ya guardas como `550` conserva ese id aquí.

El ejemplo de abajo pide la película en inglés y añade sus puntuaciones en la misma llamada.

```bash
curl -s "https://api.amodb.dev/3/movie/550?language=en-US&append_to_response=ratings" \
  -H "Authorization: Bearer $AMODB_KEY"
```

```js
const url = 'https://api.amodb.dev/3/movie/550?language=en-US&append_to_response=ratings';
const res = await fetch(url, { headers: { Authorization: `Bearer ${process.env.AMODB_KEY}` } });
if (!res.ok) throw new Error(`amodb returned ${res.status}`);
const movie = await res.json();
console.log(movie.title, movie.runtime, movie.ratings.imdb?.value);
```

```python
import os
import requests

r = requests.get(
    "https://api.amodb.dev/3/movie/550",
    params={"language": "en-US", "append_to_response": "ratings"},
    headers={"Authorization": f"Bearer {os.environ['AMODB_KEY']}"},
    timeout=10,
)
r.raise_for_status()
movie = r.json()
imdb = movie["ratings"]["imdb"]
print(movie["title"], movie["runtime"], imdb and imdb["value"])
```

```php
<?php
$url = 'https://api.amodb.dev/3/movie/550?language=en-US&append_to_response=ratings';
$ch = curl_init($url);
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_TIMEOUT => 10,
    CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . getenv('AMODB_KEY')],
]);
$body = curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
if ($status !== 200) {
    throw new RuntimeException("amodb returned $status");
}
$movie = json_decode($body, true);
echo $movie['title'], ' ', $movie['runtime'], ' ', $movie['ratings']['imdb']['value'] ?? 'n/a', PHP_EOL;
```

```go
package main

import (
	"encoding/json"
	"fmt"
	"net/http"
	"os"
)

type Movie struct {
	Title   string `json:"title"`
	Runtime int    `json:"runtime"`
}

func main() {
	url := "https://api.amodb.dev/3/movie/550?language=en-US"
	req, _ := http.NewRequest("GET", url, nil)
	req.Header.Set("Authorization", "Bearer "+os.Getenv("AMODB_KEY"))
	res, err := http.DefaultClient.Do(req)
	if err != nil {
		panic(err)
	}
	defer res.Body.Close()
	if res.StatusCode != http.StatusOK {
		panic(res.Status)
	}
	var m Movie
	json.NewDecoder(res.Body).Decode(&m)
	fmt.Println(m.Title, m.Runtime)
}
```

### Parámetros

| Parámetro            | En       | Obligatorio    | Descripción                                                                                             |
| -------------------- | -------- | -------------- | ------------------------------------------------------------------------------------------------------- |
| `movie_id`           | ruta     | sí             | Id numérico de la película, por ejemplo `550`.                                                          |
| `api_key`            | consulta | uno de los dos | Tu clave. Usa esta o el encabezado `Authorization: Bearer`.                                             |
| `language`           | consulta | no             | Etiqueta de TMDB como `en-US`, `ru-RU` o `pt-BR`. Se sirven 14 idiomas base. Valor por defecto `en-US`. |
| `append_to_response` | consulta | no             | Lista separada por comas de hasta 20 subrecursos que se unen a la respuesta.                            |

### Campos de la respuesta

| Campo                          | Tipo           | Notas                                                                                                    |
| ------------------------------ | -------------- | -------------------------------------------------------------------------------------------------------- |
| `id`                           | entero         | Id de la película.                                                                                       |
| `imdb_id`                      | texto o null   | Id de IMDb como `tt0137523`.                                                                             |
| `title`, `original_title`      | texto          | Título localizado y título original.                                                                     |
| `original_language`            | texto          | Código de idioma como `en`.                                                                              |
| `overview`, `tagline`          | texto          | Texto localizado, vacío cuando no existe traducción.                                                     |
| `homepage`                     | texto          | Sitio oficial, vacío cuando se desconoce.                                                                |
| `release_date`                 | texto          | `YYYY-MM-DD`, vacío cuando se desconoce.                                                                 |
| `status`                       | texto          | Estado del estreno, por ejemplo `Released` o `In Production`.                                            |
| `runtime`                      | entero         | Minutos.                                                                                                 |
| `budget`, `revenue`            | entero         | Dólares estadounidenses, `0` cuando se desconoce.                                                        |
| `genres`                       | array          | Objetos con `id` y `name`.                                                                               |
| `belongs_to_collection`        | objeto o null  | `id`, `name`, `poster_path`, `backdrop_path`. Consulta [colecciones](https://amodb.dev/es/collections/). |
| `production_companies`         | array          | `id`, `logo_path`, `name`, `origin_country`.                                                             |
| `production_countries`         | array          | `iso_3166_1`, `name`.                                                                                    |
| `spoken_languages`             | array          | `english_name`, `iso_639_1`, `name`.                                                                     |
| `origin_country`               | array          | Códigos de país como `US`.                                                                               |
| `poster_path`, `backdrop_path` | texto o null   | Añádelo a `https://img.amodb.dev/t/p/{size}`. Consulta [imágenes](https://amodb.dev/es/images-api/).     |
| `popularity`                   | número         | Puntuación relativa que usa la lista de populares.                                                       |
| `vote_average`, `vote_count`   | número, entero | Puntuación agregada de los usuarios.                                                                     |
| `adult`, `video`               | booleano       | Ambos son `false`. Nunca se sirven títulos para adultos.                                                 |

### Ejemplo de respuesta

`GET /3/movie/550?language=en-US&append_to_response=ratings`, con arrays y textos largos acortados:

```json
{
  "adult": false,
  "backdrop_path": "/b9HyPoxwxjxkWEUL5ErZdhApQe2.jpg",
  "belongs_to_collection": null,
  "budget": 63000000,
  "genres": [
    {
      "id": 18,
      "name": "Drama"
    },
    {
      "id": 53,
      "name": "Thriller"
    }
  ],
  "homepage": "https://www.20thcenturystudios.com/movies/fight-club",
  "id": 550,
  "imdb_id": "tt0137523",
  "origin_country": [
    "US",
    "DE"
  ],
  "original_language": "en",
  "original_title": "Fight Club",
  "overview": "A ticking-time-bomb insomniac and a slippery soap salesman channel primal male aggression into a shocking n...",
  "popularity": 39.0054,
  "poster_path": "/jSziioSwPVrOy9Yow3XhWIBDjq1.jpg",
  "production_companies": [
    {
      "id": 25,
      "logo_path": "/nM2MfoMqzJQRiSynsDabOtFKetD.png",
      "name": "20th Century Fox",
      "origin_country": "US"
    },
    {
      "id": 508,
      "logo_path": "/4sGWXoboEkWPphI6es6rTmqkCBh.png",
      "name": "Regency Enterprises",
      "origin_country": "US"
    }
  ],
  "production_countries": [
    {
      "iso_3166_1": "US",
      "name": "United States of America"
    },
    {
      "iso_3166_1": "DE",
      "name": "Germany"
    }
  ],
  "release_date": "1999-10-15",
  "revenue": 101209702,
  "runtime": 139,
  "spoken_languages": [
    {
      "english_name": "English",
      "iso_639_1": "en",
      "name": "English"
    }
  ],
  "status": "Released",
  "tagline": "Mischief. Mayhem. Soap.",
  "title": "Fight Club",
  "video": false,
  "vote_average": 8.437,
  "vote_count": 33039,
  "ratings": {
    "imdb": {
      "value": 8.8,
      "votes": 2669989
    },
    "kinopoisk": {
      "value": 8.7,
      "votes": null
    },
    "metacritic": {
      "value": 67,
      "votes": null
    },
    "rotten_tomatoes": {
      "value": 81,
      "votes": null
    },
    "tmdb": {
      "value": 8.437,
      "votes": 33039
    }
  }
}
```

El bloque `ratings` viene de `append_to_response`. Cada proveedor es un objeto `{value, votes}` o `null`, como se describe en [puntuaciones](https://amodb.dev/es/ratings/).

## Combinar datos con append_to_response

Una llamada puede reemplazar seis. Enumera los subrecursos que necesitas y cada uno llega bajo su propia clave. Funcionan los valores estándar de TMDB: `credits`, `videos`, `images`, `keywords`, `translations`, `external_ids`, `release_dates`, `alternative_titles`, `recommendations`, `similar`, `reviews`, `lists` y `watch/providers`. amodb añade cinco más.

| Valor         | Añade                                                               | Detalles                                                           |
| ------------- | ------------------------------------------------------------------- | ------------------------------------------------------------------ |
| `ratings`     | Puntuaciones de IMDb, Kinopoisk, Metacritic, Rotten Tomatoes y TMDB | [Puntuaciones](https://amodb.dev/es/ratings/)                      |
| `moods`       | Medidores de mood                                                   | [Moods](https://amodb.dev/es/moods/)                               |
| `soundtracks` | Temas que suenan en la película                                     | [Bandas sonoras](https://amodb.dev/es/soundtracks/)                |
| `wikidata`    | Id de Wikidata, presupuesto, taquilla, premios, lugares de rodaje   | [Buscar por id externo](https://amodb.dev/es/find-by-external-id/) |
| `showtimes`   | Horarios de sesiones de cine donde se conocen                       | [Horarios de sesiones](https://amodb.dev/es/showtimes/)            |

Cada bloque añadido cuenta como parte de una sola solicitud HTTP. Una solicitud con diez valores añadidos sigue usando una de tus 20, 40 o 120 solicitudes por minuto. Los bloques añadidos `ratings`, `moods` y `soundtracks` omiten la clave `id` que devuelven las rutas independientes.

## Otros endpoints de películas

Todas las rutas de abajo comparten la base `https://api.amodb.dev/3` y el parámetro `language`.

| Método y ruta                              | Devuelve                                           | Parámetros adicionales |
| ------------------------------------------ | -------------------------------------------------- | ---------------------- |
| `GET /movie/{movie_id}/alternative_titles` | `{id, titles}`, a menudo un array vacío            | ninguno                |
| `GET /movie/{movie_id}/release_dates`      | Fechas de estreno y clasificaciones por país       | ninguno                |
| `GET /movie/{movie_id}/recommendations`    | Una lista de 20 películas recomendadas             | ninguno                |
| `GET /movie/{movie_id}/similar`            | Una lista de 20 películas similares                | ninguno                |
| `GET /movie/{movie_id}/reviews`            | `results` está vacío en la mayoría de los títulos  | ninguno                |
| `GET /movie/{movie_id}/lists`              | Listas públicas que contienen la película          | `page`                 |
| `GET /movie/{movie_id}/watch/providers`    | Proveedores de streaming y alquiler por país       | ninguno                |
| `GET /movie/latest`                        | El registro de película más reciente que se añadió | ninguno                |

Las listas de recomendadas y similares siempre devuelven la página 1 con 20 elementos. La respuesta de `lists` se pagina con `page`, 20 listas por página. Las listas paginadas del resto de la API aceptan `page` de 1 a 500.

Los créditos, las imágenes, los vídeos, las traducciones, las palabras clave y los ids externos tienen sus propias páginas: [créditos](https://amodb.dev/es/credits/), [imágenes](https://amodb.dev/es/images-api/), [vídeos y tráilers](https://amodb.dev/es/videos-trailers/), [traducciones](https://amodb.dev/es/translations/), [palabras clave](https://amodb.dev/es/keywords/) y [buscar por id externo](https://amodb.dev/es/find-by-external-id/). amodb no ofrece las rutas `changes` de TMDB.

## Errores

Los errores usan el cuerpo de TMDB, por ejemplo `{"success": false, "status_code": 34, "status_message": "The resource you requested could not be found."}`.

| HTTP | status_code | Cuándo                                                                                |
| ---- | ----------- | ------------------------------------------------------------------------------------- |
| 401  | 7           | La clave falta o es incorrecta.                                                       |
| 402  | 36          | El periodo del plan ha terminado.                                                     |
| 404  | 34          | No hay ninguna película con ese id, la ruta no se ofrece o es un título para adultos. |
| 405  | 37          | Llamaste a un método de escritura, como puntuar una película.                         |
| 429  | 25          | Superaste tus solicitudes por minuto. Espera los segundos de `Retry-After`.           |

La lista completa está en la página de [errores](https://amodb.dev/es/errors/), y los límites de cada plan en [límites de solicitudes](https://amodb.dev/es/rate-limits/).

## Notas prácticas

- Guarda el `id` y el `imdb_id` juntos. Cualquiera de los dos vuelve a encontrar la película con la [búsqueda por id externo](https://amodb.dev/es/find-by-external-id/).
- Pide el idioma que muestras. Un campo de texto puede venir vacío cuando no existe traducción en ese idioma, así que comprueba si es una cadena vacía y vuelve a pedir en `en-US` si necesitas una alternativa.
- Guarda los detalles en caché de tu lado durante unas horas. La caché del servidor ya los conserva 6 horas, así que una caché de cliente más corta no aporta nada.
- Para listar películas en lugar de leer una, consulta la [búsqueda](https://amodb.dev/es/search/), [discover](https://amodb.dev/es/discover/) y [tendencias y listas](https://amodb.dev/es/trending-lists/).

## Preguntas y respuestas

### ¿Necesito cambiar el código de mi cliente de TMDB?

No, en las rutas que sirve amodb. Las rutas, los parámetros de consulta y los campos JSON son los mismos que en TMDB v3. Cambia la URL base a https://api.amodb.dev/3 y usa tu clave de amodb en api_key o en un encabezado Bearer.

### ¿Cuántas subsolicitudes puede combinar append_to_response?

Hasta 20 valores en una lista separada por comas, como en TMDB. Toda la llamada es una sola solicitud HTTP, así que cuenta una vez para tu límite de solicitudes por minuto. Los nombres desconocidos se ignoran sin error.

### ¿Qué idioma se usa si omito el parámetro language?

Inglés (en-US). El parámetro language acepta etiquetas de TMDB como ru-RU o pt-BR. Solo se sirven los 14 idiomas base, y cualquier otra etiqueta recurre al inglés.

### ¿Se admiten los métodos de escritura de TMDB, como puntuar una película?

No. Los métodos de escritura de cuenta, sesión, puntuaciones y listas devuelven 405 con status_code 37 en el cuerpo de error de TMDB. Se sirven las rutas de lectura de títulos, personas, listas y búsqueda. Algunas rutas de TMDB, como changes, no se ofrecen.

### ¿Qué antigüedad pueden tener los datos?

Los detalles de películas se guardan en caché 6 horas, y el endpoint de la película más reciente 10 minutos. Un cambio en un registro puede tardar hasta 6 horas en verse en una llamada de detalles.

## Páginas relacionadas

- [API de series de TV](https://amodb.dev/es/tv-series/): API de series de TV con las mismas rutas y JSON que TMDB v3. Obtén una serie con temporadas, cadenas y próximo episodio, más clasificaciones y plataformas.
- [API de créditos](https://amodb.dev/es/credits/): API de créditos con las mismas rutas y el mismo JSON que TMDB v3. Obtén reparto y equipo técnico de películas, series, temporadas y episodios con order y job.
- [API de imágenes y host de imágenes](https://amodb.dev/es/images-api/): API de imágenes de películas con rutas TMDB v3: lista pósters, fondos, logos y fotogramas por título y cárgalos desde img.amodb.dev en 10 tamaños sin clave.
- [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.
- [Endpoints de tendencias y listas](https://amodb.dev/es/trending-lists/): API de películas en tendencia con rutas TMDB v3: rankings diarios y semanales, más cartelera, populares, mejor valoradas y estrenos. Caché de 30 minutos.
- [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/movies/
