# API de guía de episodios

> La API de guía de episodios lista todos los episodios de una serie con GET /3/tv/{tv_id}/season/{season_number}. Cada episodio tiene nombre, sinopsis, fecha de emisión, duración e imagen. La lista episode_groups nombra órdenes alternativos como DVD o absoluto. Las rutas y el JSON coinciden con TMDB v3, así que los clientes existentes solo necesitan una nueva URL base.

## Obtén todos los episodios de una temporada

`GET /3/tv/{tv_id}/season/{season_number}` devuelve una temporada con su array `episodes` completo. Cada episodio tiene `episode_number`, `name`, `overview`, `air_date`, `runtime` y `still_path`. Los ids son los ids numéricos que usa TMDB, por ejemplo `1396` para Breaking Bad.

Obtienes temporadas, episodios con fechas y duraciones, imágenes de episodio, el próximo y el último episodio emitido de una serie, y la lista de órdenes alternativos de episodios. Los campos de texto siguen el parámetro `language`, y una sinopsis queda vacía cuando no existe traducción.

## Qué datos obtienes

| Endpoint                                                            | Devuelve                                                                                          |
| ------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------- |
| `GET /3/tv/{tv_id}`                                                 | Resumen de `seasons`, `number_of_seasons`, `status`, `next_episode_to_air`, `last_episode_to_air` |
| `GET /3/tv/{tv_id}/season/{season_number}`                          | Una temporada con todos sus `episodes`                                                            |
| `GET /3/tv/{tv_id}/season/{season_number}/episode/{episode_number}` | Un episodio con `crew` y `guest_stars`                                                            |
| `GET /3/tv/{tv_id}/episode_groups`                                  | Nombre, `type` y número de episodios de cada orden alternativo definido para la serie             |

Campos de un episodio:

| Campo                             | Tipo           | Notas                                                                                                                                        |
| --------------------------------- | -------------- | -------------------------------------------------------------------------------------------------------------------------------------------- |
| `id`, `show_id`                   | entero         | Id del episodio e id de la serie. `show_id` aparece en las listas de temporada y en `next_episode_to_air`, no en la ruta de un solo episodio |
| `episode_number`, `season_number` | entero         | Posición en la temporada                                                                                                                     |
| `episode_type`                    | cadena         | Por ejemplo `standard`                                                                                                                       |
| `name`, `overview`                | cadena         | Localizados con `language`                                                                                                                   |
| `air_date`                        | cadena o null  | `YYYY-MM-DD`, vacía o null cuando no está anunciado                                                                                          |
| `runtime`                         | entero o null  | Minutos                                                                                                                                      |
| `still_path`                      | cadena o null  | Únelo a `https://img.amodb.dev/t/p/{size}`                                                                                                   |
| `vote_average`, `vote_count`      | número, entero | Actualmente `0` en los episodios                                                                                                             |
| `production_code`                 | cadena         | Código del estudio, a menudo vacío                                                                                                           |
| `crew`, `guest_stars`             | array          | Personas acreditadas en el episodio, con los mismos campos que un miembro del reparto                                                        |

## Empieza en 3 pasos

1. Elige un plan en [precios](https://amodb.dev/es/pricing/). Todos los planes devuelven los mismos datos de episodios, y solo cambia el límite de solicitudes.
2. Crea una clave en el panel de tu cuenta y guárdala en una variable de entorno.
3. Solicita `/3/tv/{tv_id}/season/1` con la clave como encabezado Bearer o como `api_key`.

## Ejemplo de solicitud

El ejemplo obtiene la temporada 1 de Breaking Bad (id de serie `1396`) en inglés. El programa en Go la decodifica en structs tipados e imprime una línea por episodio con la fecha de emisión, la duración y la URL de la imagen.

```bash
curl -s "https://api.amodb.dev/3/tv/1396/season/1?language=en-US" \
  -H "Authorization: Bearer $AMODB_KEY"
```

```go
package main

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

type Episode struct {
	EpisodeNumber int     `json:"episode_number"`
	Name          string  `json:"name"`
	AirDate       string  `json:"air_date"`
	Runtime       int     `json:"runtime"`
	StillPath     *string `json:"still_path"`
}

type Season struct {
	Name         string    `json:"name"`
	SeasonNumber int       `json:"season_number"`
	Episodes     []Episode `json:"episodes"`
}

func main() {
	client := &http.Client{Timeout: 10 * time.Second}
	url := "https://api.amodb.dev/3/tv/1396/season/1?language=en-US"
	req, err := http.NewRequest("GET", url, nil)
	if err != nil {
		panic(err)
	}
	req.Header.Set("Authorization", "Bearer "+os.Getenv("AMODB_KEY"))
	res, err := client.Do(req)
	if err != nil {
		panic(err)
	}
	defer res.Body.Close()
	if res.StatusCode != http.StatusOK {
		panic(fmt.Sprintf("amodb returned %s", res.Status))
	}
	var season Season
	if err := json.NewDecoder(res.Body).Decode(&season); err != nil {
		panic(err)
	}
	fmt.Println(season.Name)
	for _, e := range season.Episodes {
		still := "no still"
		if e.StillPath != nil {
			still = "https://img.amodb.dev/t/p/w300" + *e.StillPath
		}
		fmt.Printf("S%02dE%02d  %s  %3d min  %s  %s\n",
			season.SeasonNumber, e.EpisodeNumber, e.AirDate, e.Runtime, e.Name, still)
	}
}
```

Respuesta recortada: 2 de los 7 episodios, con un miembro del equipo técnico y un invitado en cada uno.

```json
{
  "air_date": "2008-01-20",
  "episodes": [
    {
      "air_date": "2008-01-20",
      "episode_number": 1,
      "episode_type": "standard",
      "id": 62085,
      "name": "Pilot",
      "overview": "When an unassuming high school chemistry teacher discovers he has a rare form...",
      "production_code": "",
      "runtime": 59,
      "season_number": 1,
      "show_id": 1396,
      "still_path": "/ydlY3iPfeOAvu8gVqrxPoMvzNCn.jpg",
      "vote_average": 0,
      "vote_count": 0,
      "crew": [
        {
          "department": "Camera",
          "job": "Director of Photography",
          "credit_id": "52b7029219c29533d00dd2c1",
          "adult": false,
          "gender": 2,
          "id": 2483,
          "known_for_department": "Camera",
          "name": "约翰·托尔",
          "original_name": "约翰·托尔",
          "popularity": 1.1957,
          "profile_path": "/cfL9A6tC7L5Ps5fq1o3WpVKGMb1.jpg"
        }
      ],
      "guest_stars": [
        {
          "character": "Steven Gomez",
          "credit_id": "5271b489760ee35b3e0881a7",
          "order": 8,
          "adult": false,
          "gender": 2,
          "id": 61535,
          "known_for_department": "Acting",
          "name": "史蒂文·迈克尔·奎扎达",
          "original_name": "史蒂文·迈克尔·奎扎达",
          "popularity": 1.7511,
          "profile_path": "/pVYrDkwI6GWvCNL2kJhpDJfBFyd.jpg"
        }
      ]
    },
    {
      "air_date": "2008-01-27",
      "episode_number": 2,
      "episode_type": "standard",
      "id": 62086,
      "name": "Cat's in the Bag...",
      "overview": "Walt and Jesse attempt to tie up loose ends. The desperate situation gets mor...",
      "production_code": "",
      "runtime": 49,
      "season_number": 1,
      "show_id": 1396,
      "still_path": "/AbMoecO0ZZio0LcgeLxlzdyGs6X.jpg",
      "vote_average": 0,
      "vote_count": 0,
      "crew": [
        {
          "department": "Camera",
          "job": "Director of Photography",
          "credit_id": "52b7049c19c2953b63015013",
          "adult": false,
          "gender": 2,
          "id": 17948,
          "known_for_department": "Camera",
          "name": "Reynaldo Villalobos",
          "original_name": "Reynaldo Villalobos",
          "popularity": 0.904,
          "profile_path": "/4YlfhHDRZWhbRgeqT2Bwl1u5p9j.jpg"
        }
      ],
      "guest_stars": [
        {
          "character": "Krazy-8",
          "credit_id": "52725845760ee3046b09426e",
          "order": 504,
          "adult": false,
          "gender": 2,
          "id": 1046460,
          "known_for_department": "Acting",
          "name": "Max Arciniega",
          "original_name": "Max Arciniega",
          "popularity": 1.4399,
          "profile_path": "/eqKAJKPpt41KpsLIkkBnAY4HMAL.jpg"
        }
      ]
    }
  ],
  "name": "Season 1",
  "overview": "High school chemistry teacher Walter White's life is suddenly transformed by...",
  "id": 3572,
  "poster_path": "/91EIXdWxmp2mHNRsSuDW3WyDJLj.jpg",
  "season_number": 1,
  "vote_average": 0
}
```

## Obtén una serie completa

amodb no acepta valores del tipo `season/1` en `append_to_response`, así que las llamadas de temporada van por separado. Lee primero `number_of_seasons` y la lista `seasons` de los detalles de TV, y luego solicita cada temporada en un bucle.

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

async function get(path) {
  const res = await fetch(base + path, { headers });
  if (!res.ok) throw new Error(`amodb returned ${res.status} for ${path}`);
  return res.json();
}

const show = await get('/tv/1396');
for (const { season_number } of show.seasons) {
  const season = await get(`/tv/1396/season/${season_number}`);
  console.log(season.name, season.episodes.length);
}
```

`seasons` incluye la temporada 0 cuando la serie tiene especiales, así que Breaking Bad cuesta 1 llamada de detalles más 6 llamadas de temporada. Una serie con 10 temporadas cuesta 11 solicitudes. Los detalles se guardan en la caché perimetral 6 horas, así que almacena el resultado y actualízalo según un calendario.

## Fechas de emisión y qué viene después

`GET /3/tv/{tv_id}` contiene `next_episode_to_air` y `last_episode_to_air`, objetos de episodio completos con `name`, `air_date`, `season_number`, `episode_number`, `runtime` y `still_path`. `next_episode_to_air` es `null` cuando no hay nada anunciado. Combínalo con `status` (por ejemplo `Returning Series`, `Ended` o `Canceled`) para decidir si muestras una cuenta atrás.

`air_date` es una fecha de calendario sin hora del día. Compárala con la fecha de hoy para marcar los episodios nuevos. Para un calendario de lo que se emite, las listas `airing_today` y `on_the_air` de [tendencias y listas](https://amodb.dev/es/trending-lists/) se guardan en caché 30 minutos.

## Imágenes de episodio y duraciones

Usa `w185` o `w300` para las filas de una lista y `original` para el tamaño completo. Los tamaños de imagen de episodio son `w92`, `w185`, `w300` y `original`. Un episodio puede no tener imagen, así que muestra un marcador de posición cuando `still_path` sea `null`. El host de imágenes no necesita clave, consulta [imágenes](https://amodb.dev/es/images-api/).

`runtime` está en minutos y puede ser `null`. Para mostrar el tiempo de maratón de una temporada, suma `runtime` de todos los `episodes` y cuenta `null` como 0. Añade `append_to_response=credits,images` a la ruta de un solo episodio para obtener un objeto `credits` y una lista `stills`. El array `cast` del episodio está vacío, y las personas aparecen en `crew` y `guest_stars`. Los detalles están en [temporadas y episodios](https://amodb.dev/es/tv-seasons-episodes/) y en [créditos](https://amodb.dev/es/credits/).

## Órdenes alternativos con grupos de episodios

Algunas series se ven en un orden distinto al de su emisión. `GET /3/tv/{tv_id}/episode_groups` lista los órdenes definidos para una serie. Cada entrada tiene `id`, `name`, `description`, `type`, `episode_count`, `group_count` y `network`. El array `results` está vacío cuando no hay ninguno definido.

| `type` | Orden                     |
| ------ | ------------------------- |
| 1      | Fecha de emisión original |
| 2      | Absoluto                  |
| 3      | DVD                       |
| 4      | Digital                   |
| 5      | Arco argumental           |
| 6      | Producción                |
| 7      | TV                        |

amodb solo devuelve esta lista. No ofrece `GET /3/tv/episode_group/{id}`, así que los episodios dentro de un grupo no están disponibles. Usa los endpoints de temporada para los datos de episodios.

## Cómo se compara

| Capacidad                  | Hacer scraping de páginas de episodios | API de metadatos con nivel gratuito | amodb                                                  |
| -------------------------- | -------------------------------------- | ----------------------------------- | ------------------------------------------------------ |
| Temporada completa         | Una página por cada temporada          | Consulta su documentación           | Una llamada, con el array `episodes` incluido          |
| Serie completa             | Rastrear cada temporada                | Consulta su documentación           | Una llamada por temporada, listadas en `seasons`       |
| Fechas de emisión          | Analizar texto                         | Consulta su documentación           | `air_date` más `next_episode_to_air`                   |
| Imágenes de episodio       | Descargar y redimensionar              | Consulta su documentación           | Tamaños fijos en `img.amodb.dev`, sin clave            |
| Otros órdenes de episodios | No disponible                          | Consulta su documentación           | Lista `episode_groups`, sin el contenido de los grupos |
| Idiomas                    | Un idioma por sitio                    | Consulta su documentación           | 14 idiomas con `language`                              |

## Precios

Los planes son prepago por 1, 3, 6, 12 o 24 meses, con 0, 10, 20, 30 o 40 por ciento de descuento en los periodos más largos, y nunca se renuevan solos. Los planes de 20, 40 y 120 solicitudes por minuto devuelven todos los endpoints de esta página. Actualizar una serie cuesta una solicitud para los detalles y una por temporada. No hay nivel gratuito. Elige un plan en [precios](https://amodb.dev/es/pricing/).

## Preguntas y respuestas

### ¿Cómo listo todos los episodios de una serie de TV?

Lee number_of_seasons de GET /3/tv/{tv_id} y luego llama a GET /3/tv/{tv_id}/season/{season_number} para cada temporada. Cada respuesta de temporada trae el array episodes completo, así que no necesitas una llamada aparte por episodio. Unas pocas temporadas llegan con el array episodes vacío cuando no hay datos de episodios.

### ¿Puedo obtener varias temporadas en una sola solicitud?

No. amodb ignora los valores del tipo season/1 en append_to_response, así que cada temporada es una solicitud propia. Una serie con 10 temporadas cuesta 11 solicitudes, una para los detalles y una por temporada.

### ¿Qué es un grupo de episodios?

Un grupo de episodios es un orden alternativo de los mismos episodios, como el orden DVD, el absoluto o el de arcos argumentales. GET /3/tv/{tv_id}/episode_groups los lista con nombre, tipo y número de episodios. amodb no sirve los episodios dentro de un grupo.

### ¿Cómo sé cuándo se emite el próximo episodio?

GET /3/tv/{tv_id} devuelve next_episode_to_air con su air_date, season_number y episode_number. El valor es null cuando no hay nada anunciado. last_episode_to_air da el más reciente.

### ¿De dónde salen las imágenes de los episodios?

Cada episodio tiene un still_path. Únelo a https://img.amodb.dev/t/p/{size}, por ejemplo w300 para las filas de una lista. Las imágenes no necesitan clave. Un still_path puede ser null, así que ten listo un marcador de posición.

## Páginas relacionadas

- [API de temporadas y episodios de TV](https://amodb.dev/es/tv-seasons-episodes/): API de temporadas y episodios de TV con las mismas rutas y JSON que TMDB v3. Lee una temporada con todos sus episodios, o un episodio con fecha y duración.
- [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 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.
- [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 series de TV para temporadas y episodios](https://amodb.dev/es/tv-show-api/): API de series de TV con estado, cadenas, temporadas, episodios y next_episode_to_air. JSON de TMDB v3 en 14 idiomas, desde 20 solicitudes por minuto.
- [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/episode-guide-api/
