# Genres et listes de référence

> Les genres et listes de référence sont de petites listes à charger une fois : identifiants de genres de films et de séries avec noms en 14 langues, plus pays, langues, métiers, classifications par âge et plateformes. Ils suivent les chemins TMDB v3, sans pagination, changent rarement : mettez-les en cache un jour.

## Point de terminaison

`GET /3/genre/movie/list`

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

Réponse:

```json
{
  "genres": [
    {
      "id": 28,
      "name": "Action"
    },
    {
      "id": 12,
      "name": "Adventure"
    },
    {
      "id": 16,
      "name": "Animation"
    }
  ]
}
```

## Obtenir la liste des genres de films

`GET /3/genre/movie/list` renvoie chaque genre de film sous forme d'un `id` et d'un `name`. Les identifiants sont les nombres que porte `genre_ids` sur les éléments de liste et que `with_genres` attend dans [découverte](https://amodb.dev/fr/discover/). Les noms suivent le paramètre `language`.

L'exemple charge la liste et construit une table identifiant vers nom, la première chose dont la plupart des applications ont besoin.

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

```js
const url = 'https://api.amodb.dev/3/genre/movie/list?language=en-US';
const res = await fetch(url, { headers: { Authorization: `Bearer ${process.env.AMODB_KEY}` } });
if (!res.ok) throw new Error(`amodb returned ${res.status}`);
const { genres } = await res.json();
const names = new Map(genres.map((g) => [g.id, g.name]));
console.log(names.get(878), names.size);
```

```python
import os
import requests

r = requests.get(
    "https://api.amodb.dev/3/genre/movie/list",
    params={"language": "en-US"},
    headers={"Authorization": f"Bearer {os.environ['AMODB_KEY']}"},
    timeout=10,
)
r.raise_for_status()
names = {g["id"]: g["name"] for g in r.json()["genres"]}
print(names[878], len(names))
```

```php
<?php
$url = 'https://api.amodb.dev/3/genre/movie/list?language=en-US';
$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");
}
$names = [];
foreach (json_decode($body, true)['genres'] as $g) {
    $names[$g['id']] = $g['name'];
}
echo $names[878], ' ', count($names), PHP_EOL;
```

```go
package main

import (
	"encoding/json"
	"fmt"
	"net/http"
	"os"
	"time"
)

type Genres struct {
	Genres []struct {
		ID   int    `json:"id"`
		Name string `json:"name"`
	} `json:"genres"`
}

func main() {
	url := "https://api.amodb.dev/3/genre/movie/list?language=en-US"
	req, _ := http.NewRequest("GET", url, nil)
	req.Header.Set("Authorization", "Bearer "+os.Getenv("AMODB_KEY"))
	client := &http.Client{Timeout: 10 * time.Second}
	res, err := client.Do(req)
	if err != nil {
		panic(err)
	}
	defer res.Body.Close()
	if res.StatusCode != http.StatusOK {
		panic(res.Status)
	}
	var g Genres
	if err := json.NewDecoder(res.Body).Decode(&g); err != nil {
		panic(err)
	}
	names := map[int]string{}
	for _, x := range g.Genres {
		names[x.ID] = x.Name
	}
	fmt.Println(names[878], len(names))
}
```

### Paramètres

| Paramètre  | Dans    | Requis        | Description                                                                                                  |
| ---------- | ------- | ------------- | ------------------------------------------------------------------------------------------------------------ |
| `api_key`  | requête | l'un des deux | Votre clé. Utilisez-la ou l'en-tête `Authorization: Bearer`.                                                 |
| `language` | requête | non           | Balise TMDB comme `en-US`, `ru-RU` ou `pt-BR`. Les noms sont renvoyés dans cette langue. Par défaut `en-US`. |

### Champs de la réponse

| Champ           | Type    | Remarques                                               |
| --------------- | ------- | ------------------------------------------------------- |
| `genres`        | tableau | La liste entière en une seule réponse, sans pagination. |
| `genres[].id`   | entier  | Identifiant de genre stable.                            |
| `genres[].name` | chaîne  | Nom du genre dans la langue demandée.                   |

### Exemple de réponse

```json
{
  "genres": [
    { "id": 12, "name": "Adventure" },
    { "id": 14, "name": "Fantasy" },
    { "id": 16, "name": "Animation" },
    { "id": 18, "name": "Drama" }
  ]
}
```

La réponse contient 27 genres triés par identifiant. Celle-ci est réduite aux 4 premiers.

## Identifiants de genres

Les deux chemins de genres renvoient ces 27 genres, triés par identifiant. Les noms ci-dessous sont les noms anglais. Les autres langues renvoient les mêmes identifiants avec des noms traduits.

| Id    | Nom                |
| ----- | ------------------ |
| 12    | Adventure          |
| 14    | Fantasy            |
| 16    | Animation          |
| 18    | Drama              |
| 27    | Horror             |
| 28    | Action             |
| 35    | Comedy             |
| 36    | History            |
| 37    | Western            |
| 53    | Thriller           |
| 80    | Crime              |
| 99    | Documentary        |
| 878   | Science Fiction    |
| 9648  | Mystery            |
| 10402 | Music              |
| 10749 | Romance            |
| 10751 | Family             |
| 10752 | War                |
| 10759 | Action & Adventure |
| 10762 | Kids               |
| 10763 | News               |
| 10764 | Reality            |
| 10765 | Sci-Fi & Fantasy   |
| 10766 | Soap               |
| 10767 | Talk               |
| 10768 | War & Politics     |
| 10770 | TV Movie           |

## Liste des genres de séries

`GET /3/genre/tv/list` accepte le même paramètre `language` et renvoie la liste identique : une seule table identifiant vers nom couvre donc les films et les séries. Dans les données de listes, les identifiants `10759` et `10762` à `10768` n'apparaissent que sur des éléments de séries, et des identifiants comme `28`, `12` et `878` apparaissent sur des éléments de films. Quand vous filtrez les séries dans [découverte](https://amodb.dev/fr/discover/), utilisez les identifiants de séries, par exemple `10765` pour Sci-Fi et Fantasy.

## Listes de référence

Ces chemins renvoient des données de référence pour les formulaires, les filtres et les écrans de réglages. Tous demandent la clé ; aucun n'accepte `page`.

| Méthode et chemin                         | Paramètres                 | Chaque élément ou forme                                                    |
| ----------------------------------------- | -------------------------- | -------------------------------------------------------------------------- |
| `GET /configuration/countries`            | aucun                      | Tableau de `{ iso_3166_1, english_name, native_name }`                     |
| `GET /configuration/languages`            | aucun                      | Tableau de `{ iso_639_1, english_name, name }`                             |
| `GET /configuration/primary_translations` | aucun                      | Tableau de 14 chaînes comme `ru-RU`                                        |
| `GET /configuration/jobs`                 | aucun                      | Tableau de `{ department, jobs }` où `jobs` liste les intitulés de métiers |
| `GET /certification/movie/list`           | aucun                      | `{ certifications }` indexé par code pays, 10 pays                         |
| `GET /certification/tv/list`              | aucun                      | `{ certifications }` indexé par code pays, une clé par pays du catalogue   |
| `GET /watch/providers/regions`            | `language`                 | `{ results }` de `{ iso_3166_1, english_name, native_name }`               |
| `GET /watch/providers/movie`              | `language`, `watch_region` | `{ results }` de plateformes                                               |
| `GET /watch/providers/tv`                 | `language`, `watch_region` | `{ results }` de plateformes                                               |

`/configuration/countries` et `/configuration/languages` ignorent `language` et renvoient toujours les mêmes noms. `native_name` dans la liste des régions suit `language`. amodb ne propose pas `/configuration/timezones`.

Une entrée de classification nomme la classification, ce qu'elle signifie et son ordre de tri. Les entrées sont regroupées par code pays : un appel couvre donc tous les marchés. La liste des films contient les textes des classifications. Dans la liste des séries, `meaning` est une chaîne vide.

```json
{
  "certifications": {
    "US": [
      { "certification": "PG", "meaning": "Some material may not be suitable for children under 10.", "order": 3 },
      { "certification": "R", "meaning": "Under 17 requires accompanying parent or adult guardian.", "order": 5 }
    ]
  }
}
```

L'exemple est réduit à 2 des 6 entrées des États-Unis. La liste des films couvre AU, BR, CA, DE, ES, FR, GB, IT, RU et US.

Une entrée de plateforme a `provider_id`, `provider_name`, `logo_path`, `display_priority` et `display_priorities`, une table code pays vers priorité. Sans `watch_region`, vous obtenez toutes les plateformes. Avec `watch_region=US`, vous ne gardez que les plateformes qui servent ce pays. Une région inconnue renvoie un tableau `results` vide. Passez un code de `/watch/providers/regions`. Les logos des plateformes se chargent depuis l'hôte d'images, voir [images](https://amodb.dev/fr/images-api/).

```json
{
  "display_priorities": { "AT": 1, "DE": 1, "GB": 1, "JP": 1, "US": 3 },
  "display_priority": 3,
  "logo_path": "/gMZdpavHmxFNnLpMHwVxfqeux2g.png",
  "provider_name": "Amazon Prime Video",
  "provider_id": 9
}
```

Voici une entrée de `/watch/providers/movie?watch_region=US`.

## Erreurs

| HTTP | status_code | Quand                                                                              |
| ---- | ----------- | ---------------------------------------------------------------------------------- |
| 401  | 7           | La clé est absente ou fausse.                                                      |
| 402  | 36          | La période de l'offre est terminée.                                                |
| 404  | 34          | Le chemin n'existe pas, par exemple `/genre/book/list`.                            |
| 405  | 37          | Vous avez utilisé une méthode d'écriture sur un chemin de référence.               |
| 429  | 25          | Vous avez dépassé vos requêtes par minute. Attendez les secondes de `Retry-After`. |

Les détails de chaque code sont sur [erreurs](https://amodb.dev/fr/errors/). Les limites des offres sont sur [limites de débit](https://amodb.dev/fr/rate-limits/).

## Remarques pratiques

- Chargez les listes une fois par langue au démarrage et gardez-les en mémoire ou dans un fichier. La périphérie met en cache les chemins `/configuration` 24 heures : une actualisation quotidienne de votre côté suffit donc.
- Stockez les identifiants de genres dans votre base de données, pas les noms. Un nom change avec la langue, un identifiant non.
- Les deux chemins de genres renvoient les mêmes 27 entrées : une seule table couvre donc les films et les séries. Les identifiants 10759 et 10762 à 10768 n'apparaissent que sur des éléments de séries.
- `with_genres=28,12` dans [découverte](https://amodb.dev/fr/discover/) signifie Action et Aventure ensemble. `with_genres=28|12` signifie l'un ou l'autre.
- Les noms de genres suivent le paramètre `language`. Une balise en dehors des 14 langues de base de [langues](https://amodb.dev/fr/languages/) se replie sur l'anglais, et quelques noms restent en anglais dans certaines langues, par exemple `10759` en italien.

## Questions et réponses

### Les identifiants de genres changent-ils selon la langue ?

Non. L'identifiant reste le même et seul le nom est traduit. Demandez la liste dans la langue que vous affichez, puis gardez dans votre application une table identifiant vers nom par langue.

### Les films et les séries utilisent-ils des identifiants de genres différents ?

Ils partagent un même espace d'identifiants. Les deux chemins de genres renvoient les mêmes 27 genres. Les éléments de films utilisent des identifiants comme 28 et 12, tandis que les éléments de séries utilisent des identifiants fusionnés comme 10759 pour Action et Aventure. Une seule table couvre les deux.

### Comment filtrer par deux genres à la fois ?

Passez with_genres à discover. Une virgule entre des identifiants signifie tous, donc 28,12 est Action et Aventure ensemble. Une barre verticale signifie n'importe lequel. Utilisez without_genres pour exclure.

### Les listes de référence demandent-elles une pagination ?

Non. Chaque chemin de référence renvoie la liste complète en une seule réponse. Chargez-les au démarrage et mettez-les en cache un jour. Les chemins de configuration sont mis en cache 24 heures en périphérie.

## Pages liées

- [API Discover](https://amodb.dev/fr/discover/): API Discover avec les mêmes filtres que TMDB v3. Listez films et séries par genre, distribution, société, mot-clé, année, note, durée et plateforme.
- [API de détails de film](https://amodb.dev/fr/movies/): API de détails de film aux chemins et au JSON de TMDB v3. Obtenez un film par id, ajoutez crédits, notes et ambiances avec append_to_response, en 14 langues.
- [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.
- [Langues](https://amodb.dev/fr/languages/): amodb sert titres, résumés et noms en 14 langues. Passez une balise TMDB comme ru-RU ou pt-BR dans language ; toute autre balise se replie sur l'anglais.
- [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é.
- [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/genres/
