# Generi e liste di riferimento

> Gli endpoint di generi e liste di riferimento restituiscono piccole liste da caricare una volta: ID dei generi con nomi in 14 lingue, più paesi, lingue, mestieri della troupe, classificazioni per età e piattaforme di streaming. Usano percorsi e strutture TMDB v3, non richiedono paginazione e cambiano di rado, quindi tienile in cache per un giorno.

## Endpoint

`GET /3/genre/movie/list`

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

Risposta:

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

## Ottenere la lista dei generi dei film

`GET /3/genre/movie/list` restituisce ogni genere di film come `id` e `name`. Gli ID sono i numeri che `genre_ids` porta sugli elementi delle liste e che `with_genres` si aspetta in [discover](https://amodb.dev/it/discover/). I nomi seguono il parametro `language`.

L'esempio carica la lista e costruisce una mappa da ID a nome, la prima cosa che serve alla maggior parte delle app.

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

### Parametri

| Parametro  | In    | Obbligatorio | Descrizione                                                                                             |
| ---------- | ----- | ------------ | ------------------------------------------------------------------------------------------------------- |
| `api_key`  | query | uno dei due  | La tua chiave. Usa questa o l'header `Authorization: Bearer`.                                           |
| `language` | query | no           | Tag TMDB come `en-US`, `ru-RU` o `pt-BR`. I nomi sono restituiti in questa lingua. Predefinito `en-US`. |

### Campi della risposta

| Campo           | Tipo    | Note                                                    |
| --------------- | ------- | ------------------------------------------------------- |
| `genres`        | array   | L'intera lista in una sola risposta, senza paginazione. |
| `genres[].id`   | intero  | ID del genere, stabile.                                 |
| `genres[].name` | stringa | Nome del genere nella lingua richiesta.                 |

### Risposta di esempio

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

La risposta contiene 27 generi ordinati per ID. Questa è tagliata ai primi 4.

## ID dei generi

Entrambi i percorsi dei generi restituiscono questi 27 generi, ordinati per ID. I nomi qui sotto sono quelli inglesi. Le altre lingue restituiscono gli stessi ID con nomi tradotti.

| ID    | Nome               |
| ----- | ------------------ |
| 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           |

## Lista dei generi delle serie TV

`GET /3/genre/tv/list` accetta lo stesso parametro `language` e restituisce la lista identica, quindi un'unica mappa da ID a nome copre film e serie TV. Nei dati delle liste, gli ID `10759` e da `10762` a `10768` compaiono solo sugli elementi delle serie TV, mentre ID come `28`, `12` e `878` compaiono sugli elementi dei film. Quando filtri le serie TV in [discover](https://amodb.dev/it/discover/), usa gli ID delle serie TV, per esempio `10765` per Sci-Fi e Fantasy.

## Liste di riferimento

Questi percorsi restituiscono dati di riferimento per moduli, filtri e schermate delle impostazioni. Tutti richiedono la chiave; nessuno accetta `page`.

| Metodo e percorso                         | Parametri                  | Ogni elemento o struttura                                                                 |
| ----------------------------------------- | -------------------------- | ----------------------------------------------------------------------------------------- |
| `GET /configuration/countries`            | nessuno                    | Array di `{ iso_3166_1, english_name, native_name }`                                      |
| `GET /configuration/languages`            | nessuno                    | Array di `{ iso_639_1, english_name, name }`                                              |
| `GET /configuration/primary_translations` | nessuno                    | Array di 14 stringhe come `ru-RU`                                                         |
| `GET /configuration/jobs`                 | nessuno                    | Array di `{ department, jobs }` dove `jobs` elenca i titoli dei mestieri                  |
| `GET /certification/movie/list`           | nessuno                    | `{ certifications }` indicizzato per codice paese, 10 paesi                               |
| `GET /certification/tv/list`              | nessuno                    | `{ certifications }` indicizzato per codice paese, una chiave per ogni paese del catalogo |
| `GET /watch/providers/regions`            | `language`                 | `{ results }` di `{ iso_3166_1, english_name, native_name }`                              |
| `GET /watch/providers/movie`              | `language`, `watch_region` | `{ results }` di piattaforme                                                              |
| `GET /watch/providers/tv`                 | `language`, `watch_region` | `{ results }` di piattaforme                                                              |

`/configuration/countries` e `/configuration/languages` ignorano `language` e restituiscono sempre gli stessi nomi. `native_name` nella lista delle regioni segue `language`. amodb non offre `/configuration/timezones`.

Una voce di classificazione nomina la classificazione, cosa significa e il suo ordine. Le voci sono raggruppate per codice paese, quindi una sola chiamata copre ogni mercato. La lista dei film contiene i testi delle classificazioni. Nella lista delle serie TV `meaning` è una stringa vuota.

```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'esempio è tagliato a 2 delle 6 voci degli Stati Uniti. La lista dei film copre AU, BR, CA, DE, ES, FR, GB, IT, RU e US.

Una voce di piattaforma ha `provider_id`, `provider_name`, `logo_path`, `display_priority` e `display_priorities`, una mappa da codice paese a priorità. Senza `watch_region` ottieni tutte le piattaforme. Con `watch_region=US` tieni solo le piattaforme che servono quel paese. Una regione sconosciuta restituisce un array `results` vuoto. Passa un codice da `/watch/providers/regions`. I loghi delle piattaforme si caricano dall'host delle immagini, vedi [immagini](https://amodb.dev/it/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
}
```

Questa è una voce di `/watch/providers/movie?watch_region=US`.

## Errori

| HTTP | status_code | Quando                                                                   |
| ---- | ----------- | ------------------------------------------------------------------------ |
| 401  | 7           | La chiave manca o è sbagliata.                                           |
| 402  | 36          | Il periodo del piano è terminato.                                        |
| 404  | 34          | Il percorso non esiste, per esempio `/genre/book/list`.                  |
| 405  | 37          | Hai usato un metodo di scrittura su un percorso di riferimento.          |
| 429  | 25          | Hai superato le richieste al minuto. Attendi i secondi di `Retry-After`. |

I dettagli di ogni codice sono nella pagina [errori](https://amodb.dev/it/errors/). I limiti dei piani sono in [limiti di richieste](https://amodb.dev/it/rate-limits/).

## Note pratiche

- Carica le liste una volta per lingua all'avvio e tienile in memoria o in un file. L'edge mette in cache i percorsi `/configuration` per 24 ore, quindi basta un aggiornamento giornaliero da parte tua.
- Salva gli ID dei generi nel tuo database, non i nomi. Un nome cambia con la lingua, un ID no.
- Entrambi i percorsi dei generi restituiscono le stesse 27 voci, quindi una sola mappa copre film e serie TV. Gli ID 10759 e da 10762 a 10768 compaiono solo sugli elementi delle serie TV.
- `with_genres=28,12` in [discover](https://amodb.dev/it/discover/) significa Azione e Avventura insieme. `with_genres=28|12` significa l'uno o l'altro.
- I nomi dei generi seguono il parametro `language`. Un tag fuori dalle 14 lingue di base in [lingue](https://amodb.dev/it/languages/) ripiega sull'inglese, e alcuni nomi restano in inglese in certe lingue, per esempio `10759` in italiano.

## Domande e risposte

### Gli ID dei generi cambiano tra le lingue?

No. L'ID resta lo stesso e viene tradotto solo il nome. Richiedi la lista nella lingua che mostri, poi tieni nella tua app una mappa da ID a nome per ogni lingua.

### Film e serie TV usano ID di genere diversi?

Condividono lo stesso spazio di ID. Entrambi i percorsi dei generi restituiscono gli stessi 27 generi. Le voci dei film usano ID come 28 e 12, mentre le voci delle serie TV usano ID unificati come 10759 per Azione e Avventura. Una sola mappa copre entrambi.

### Come filtro per due generi insieme?

Passa with_genres a discover. Una virgola tra gli ID significa tutti, quindi 28,12 è Azione e Avventura insieme. Una barra verticale significa uno qualsiasi. Usa without_genres per escludere.

### Le liste di riferimento richiedono la paginazione?

No. Ogni percorso di riferimento restituisce la lista completa in una sola risposta. Caricale all'avvio e tienile in cache per un giorno. I percorsi di configurazione restano in cache sull'edge per 24 ore.

## Pagine correlate

- [API Discover](https://amodb.dev/it/discover/): API Discover con gli stessi filtri di TMDB v3. Elenca film e serie TV per genere, cast, società, parola chiave, anno, voto, durata e piattaforma.
- [API dei dettagli del film](https://amodb.dev/it/movies/): API dettagli film con gli stessi percorsi e JSON di TMDB v3. Ottieni un film per ID, aggiungi crediti, valutazioni e mood con append_to_response, in 14 lingue.
- [API delle serie TV](https://amodb.dev/it/tv-series/): API serie TV con gli stessi percorsi e JSON di TMDB v3. Ottieni una serie per ID con stagioni, emittenti e prossimo episodio, più classificazioni e piattaforme.
- [Lingue](https://amodb.dev/it/languages/): amodb serve titoli, trame e nomi in 14 lingue. Passa un tag in stile TMDB come ru-RU o pt-BR in language; qualsiasi altro tag ripiega sull'inglese.
- [API delle immagini e host delle immagini](https://amodb.dev/it/images-api/): API immagini dei film con percorsi TMDB v3: elenca locandine, sfondi, loghi e fermi immagine di ogni titolo e caricali da img.amodb.dev in 10 dimensioni.
- [Avvio rapido](https://amodb.dev/it/quickstart/): Fai la prima chiamata ad amodb: ottieni una chiave, richiedi i dettagli di un film in curl, JavaScript, Python, PHP o Go, carica la locandina. Meno di 2 minuti.

Aggiornato: 2026-10-18. Source: https://amodb.dev/it/genres/
