# API guide des épisodes

> L'API de guide des épisodes liste chaque épisode d'une série avec GET /3/tv/{tv_id}/season/{season_number}. Chaque épisode a un nom, un résumé, une date de diffusion, une durée et une image. La liste episode_groups nomme les ordres alternatifs comme DVD ou absolu. Chemins et JSON suivent TMDB v3 : un client existant n'a besoin que d'une nouvelle URL de base.

## Obtenir tous les épisodes d'une saison

`GET /3/tv/{tv_id}/season/{season_number}` renvoie une saison avec son tableau `episodes` complet. Chaque épisode a `episode_number`, `name`, `overview`, `air_date`, `runtime` et `still_path`. Les identifiants sont les identifiants numériques qu'utilise TMDB, par exemple `1396` pour Breaking Bad.

Vous obtenez des saisons, des épisodes avec dates et durées, des images, le prochain et le dernier épisode diffusés d'une série, ainsi que la liste des ordres d'épisodes alternatifs. Les champs de texte suivent le paramètre `language`, et un résumé reste vide quand il n'existe pas de traduction.

## Les données obtenues

| Point de terminaison                                                | Renvoie                                                                                          |
| ------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------ |
| `GET /3/tv/{tv_id}`                                                 | Le résumé `seasons`, `number_of_seasons`, `status`, `next_episode_to_air`, `last_episode_to_air` |
| `GET /3/tv/{tv_id}/season/{season_number}`                          | Une saison avec tous ses `episodes`                                                              |
| `GET /3/tv/{tv_id}/season/{season_number}/episode/{episode_number}` | Un épisode avec `crew` et `guest_stars`                                                          |
| `GET /3/tv/{tv_id}/episode_groups`                                  | Le nom, le `type` et le nombre d'épisodes de chaque ordre alternatif défini pour la série        |

Champs d'un épisode :

| Champ                             | Type           | Remarques                                                                                                                                               |
| --------------------------------- | -------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `id`, `show_id`                   | entier         | Identifiant de l'épisode et de la série. `show_id` figure dans les listes de saisons et dans `next_episode_to_air`, pas sur le chemin d'un seul épisode |
| `episode_number`, `season_number` | entier         | Position dans la saison                                                                                                                                 |
| `episode_type`                    | chaîne         | Par exemple `standard`                                                                                                                                  |
| `name`, `overview`                | chaîne         | Localisés avec `language`                                                                                                                               |
| `air_date`                        | chaîne ou null | `YYYY-MM-DD`, vide ou null quand non annoncé                                                                                                            |
| `runtime`                         | entier ou null | Minutes                                                                                                                                                 |
| `still_path`                      | chaîne ou null | À ajouter à `https://img.amodb.dev/t/p/{size}`                                                                                                          |
| `vote_average`, `vote_count`      | nombre, entier | Actuellement `0` sur les épisodes                                                                                                                       |
| `production_code`                 | chaîne         | Code du studio, souvent vide                                                                                                                            |
| `crew`, `guest_stars`             | tableau        | Personnes créditées sur l'épisode, avec les mêmes champs qu'un membre de la distribution                                                                |

## Démarrer en 3 étapes

1. Choisissez une offre sur les [tarifs](https://amodb.dev/fr/pricing/). Toutes les offres renvoient les mêmes données d'épisodes, seul le débit de requêtes diffère.
2. Créez une clé dans le tableau de bord de votre compte et stockez-la dans une variable d'environnement.
3. Demandez `/3/tv/{tv_id}/season/1` avec la clé en en-tête Bearer ou dans `api_key`.

## Exemple de requête

L'exemple récupère la saison 1 de Breaking Bad (id de série `1396`) en anglais. Le programme Go la décode dans des structures typées et affiche une ligne par épisode avec la date de diffusion, la durée et l'URL de l'image.

```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)
	}
}
```

Réponse abrégée : 2 des 7 épisodes, avec un membre d'équipe et une vedette invitée chacun.

```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
}
```

## Récupérer toute une série

amodb n'accepte pas les valeurs de type `season/1` dans `append_to_response`, donc les appels de saisons restent séparés. Lisez d'abord `number_of_seasons` et la liste `seasons` dans les détails de la série, puis demandez chaque saison dans une boucle.

```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` inclut la saison 0 quand la série a des épisodes spéciaux, donc Breaking Bad coûte 1 appel de détails plus 6 appels de saisons. Une série de 10 saisons coûte 11 requêtes. Les détails sont mis en cache 6 heures en périphérie : stockez le résultat et actualisez-le selon un calendrier.

## Dates de diffusion et suite

`GET /3/tv/{tv_id}` contient `next_episode_to_air` et `last_episode_to_air`, des objets d'épisode complets avec `name`, `air_date`, `season_number`, `episode_number`, `runtime` et `still_path`. `next_episode_to_air` vaut `null` quand rien n'est annoncé. Combinez-le avec `status` (par exemple `Returning Series`, `Ended` ou `Canceled`) pour décider d'afficher ou non un compte à rebours.

`air_date` est une date du calendrier sans heure. Comparez-la à la date du jour pour repérer les nouveaux épisodes. Pour une programmation de ce qui est diffusé, les listes `airing_today` et `on_the_air` sur [tendances et listes](https://amodb.dev/fr/trending-lists/) sont mises en cache 30 minutes.

## Images et durées

Utilisez `w185` ou `w300` pour les lignes de liste et `original` pour la taille réelle. Les tailles d'images d'épisodes sont `w92`, `w185`, `w300` et `original`. Un épisode peut ne pas avoir d'image : affichez une image de remplacement quand `still_path` vaut `null`. L'hôte d'images n'exige aucune clé, voir [images](https://amodb.dev/fr/images-api/).

`runtime` est en minutes et peut valoir `null`. Pour afficher la durée d'un marathon sur une saison, additionnez `runtime` sur `episodes` en comptant `null` comme 0. Ajoutez `append_to_response=credits,images` au chemin d'un seul épisode pour obtenir un objet `credits` et une liste `stills`. Le tableau `cast` de l'épisode est vide, et les personnes se trouvent dans `crew` et `guest_stars`. Les détails sont sur [saisons et épisodes](https://amodb.dev/fr/tv-seasons-episodes/) et [crédits](https://amodb.dev/fr/credits/).

## Ordres alternatifs avec les groupes d'épisodes

Certaines séries se regardent dans un autre ordre que celui de leur diffusion. `GET /3/tv/{tv_id}/episode_groups` liste les ordres définis pour une série. Chaque entrée a `id`, `name`, `description`, `type`, `episode_count`, `group_count` et `network`. Le tableau `results` est vide quand aucun n'est défini.

| `type` | Ordre                       |
| ------ | --------------------------- |
| 1      | Date de diffusion d'origine |
| 2      | Absolu                      |
| 3      | DVD                         |
| 4      | Numérique                   |
| 5      | Arc narratif                |
| 6      | Production                  |
| 7      | Télévision                  |

amodb ne renvoie que cette liste. Il ne propose pas `GET /3/tv/episode_group/{id}`, donc les épisodes à l'intérieur d'un groupe ne sont pas disponibles. Utilisez les points de terminaison de saisons pour les données d'épisodes.

## Comparaison

| Capacité                 | Extraire les pages d'épisodes   | API de métadonnées avec offre gratuite | amodb                                                 |
| ------------------------ | ------------------------------- | -------------------------------------- | ----------------------------------------------------- |
| Saison complète          | Une page à récupérer par saison | Voir leur documentation                | Un seul appel, tableau `episodes` inclus              |
| Série entière            | Parcourir chaque saison         | Voir leur documentation                | Un appel par saison, listées dans `seasons`           |
| Dates de diffusion       | Analyser du texte               | Voir leur documentation                | `air_date` plus `next_episode_to_air`                 |
| Images                   | Télécharger et redimensionner   | Voir leur documentation                | Tailles fixes sur `img.amodb.dev`, sans clé           |
| Autres ordres d'épisodes | Non disponible                  | Voir leur documentation                | Liste `episode_groups`, contenu des groupes non servi |
| Langues                  | Une langue par site             | Voir leur documentation                | 14 langues via `language`                             |

## Tarifs

Les offres sont prépayées pour 1, 3, 6, 12 ou 24 mois, avec 0, 10, 20, 30 ou 40 pour cent de réduction pour les périodes plus longues, et elles ne se renouvellent jamais toutes seules. Les offres à 20, 40 et 120 requêtes par minute renvoient tous les points de terminaison de cette page. Actualiser une série coûte une requête pour les détails et une par saison. Il n'y a pas d'offre gratuite. Choisissez une offre sur les [tarifs](https://amodb.dev/fr/pricing/).

## Questions et réponses

### Comment lister tous les épisodes d'une série ?

Lisez number_of_seasons dans GET /3/tv/{tv_id}, puis appelez GET /3/tv/{tv_id}/season/{season_number} pour chaque saison. Chaque réponse de saison contient le tableau episodes complet, donc aucun appel séparé par épisode n'est nécessaire. Quelques saisons reviennent avec un tableau episodes vide quand aucune donnée d'épisode n'est détenue.

### Puis-je obtenir plusieurs saisons en une seule requête ?

Non. amodb ignore les valeurs de type season/1 dans append_to_response, donc chaque saison est une requête à part. Une série de 10 saisons coûte 11 requêtes, une pour les détails et une par saison.

### Qu'est-ce qu'un groupe d'épisodes ?

Un groupe d'épisodes est un ordre alternatif des mêmes épisodes, comme l'ordre DVD, absolu ou par arc narratif. GET /3/tv/{tv_id}/episode_groups les liste avec leur nom, leur type et leur nombre d'épisodes. amodb ne sert pas les épisodes à l'intérieur d'un groupe.

### Comment savoir quand le prochain épisode est diffusé ?

GET /3/tv/{tv_id} renvoie next_episode_to_air avec son air_date, son season_number et son episode_number. La valeur est null quand rien n'est annoncé. last_episode_to_air donne le plus récent.

### D'où viennent les images d'épisodes ?

Chaque épisode a un still_path. Ajoutez-le à https://img.amodb.dev/t/p/{size}, par exemple w300 pour les lignes de liste. Les images n'exigent aucune clé. Un still_path peut valoir null : gardez une image de remplacement prête.

## Pages liées

- [API des saisons et épisodes de séries TV](https://amodb.dev/fr/tv-seasons-episodes/): API de saisons et d'épisodes aux chemins et au JSON de TMDB v3. Lisez une saison avec tous ses épisodes, ou un épisode avec date de diffusion, durée et image.
- [API des séries TV](https://amodb.dev/fr/tv-series/): API de séries TV aux chemins et au JSON de TMDB v3 : une série par id avec saisons, chaînes et prochain épisode, plus classifications et plateformes.
- [API d'images et hôte d'images](https://amodb.dev/fr/images-api/): API d'images de films aux chemins TMDB v3 : listez affiches, fonds, logos et images par titre, puis chargez-les depuis img.amodb.dev en 10 tailles sans clé.
- [API des crédits](https://amodb.dev/fr/credits/): API crédits aux chemins et au JSON de TMDB v3. Distribution et équipe des films, séries, saisons et épisodes, avec les champs order, department et job.
- [API de séries TV pour les séries, les saisons et les épisodes](https://amodb.dev/fr/tv-show-api/): API de séries TV avec statut, chaînes, saisons, épisodes et next_episode_to_air. JSON compatible TMDB v3 en 14 langues, dès 20 requêtes par minute.
- [Démarrage rapide](https://amodb.dev/fr/quickstart/): Faites votre premier appel amodb : obtenez une clé, demandez un film en curl, JavaScript, Python, PHP ou Go, puis chargez l'affiche. En moins de 2 minutes.

Mis à jour: 2026-10-18. Source: https://amodb.dev/fr/episode-guide-api/
