# API dei dettagli del film

> L'endpoint dei dettagli restituisce un film per ID su GET /3/movie/{movie_id}. Il JSON segue TMDB v3, quindi i client esistenti richiedono solo un nuovo URL di base. Aggiungi append_to_response per ottenere crediti, video, immagini e gli extra di amodb ratings, moods, soundtracks, wikidata e showtimes in una richiesta.

## Endpoint

`GET /3/movie/{movie_id}`

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

Risposta:

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

## Ottenere i dettagli di un film

`GET /3/movie/{movie_id}` restituisce la scheda di base di un film: titoli, trama, durata, generi, data di uscita, budget, incassi, società di produzione e percorsi delle immagini. L'ID è lo stesso ID numerico usato da TMDB, quindi un film che già salvi come `550` mantiene quell'ID qui.

L'esempio qui sotto chiede il film in inglese e aggiunge le sue valutazioni nella stessa chiamata.

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

### Parametri

| Parametro            | In       | Obbligatorio | Descrizione                                                                                    |
| -------------------- | -------- | ------------ | ---------------------------------------------------------------------------------------------- |
| `movie_id`           | percorso | sì           | ID numerico del film, per esempio `550`.                                                       |
| `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`. Sono servite 14 lingue di base. Predefinito `en-US`. |
| `append_to_response` | query    | no           | Elenco separato da virgole di al massimo 20 sottorisorse da unire alla risposta.               |

### Campi della risposta

| Campo                          | Tipo           | Note                                                                                                 |
| ------------------------------ | -------------- | ---------------------------------------------------------------------------------------------------- |
| `id`                           | intero         | ID del film.                                                                                         |
| `imdb_id`                      | stringa o null | ID IMDb come `tt0137523`.                                                                            |
| `title`, `original_title`      | stringa        | Titolo localizzato e titolo originale.                                                               |
| `original_language`            | stringa        | Codice di lingua come `en`.                                                                          |
| `overview`, `tagline`          | stringa        | Testo localizzato, vuoto quando non esiste una traduzione.                                           |
| `homepage`                     | stringa        | Sito ufficiale, vuoto quando non noto.                                                               |
| `release_date`                 | stringa        | `YYYY-MM-DD`, vuota quando non nota.                                                                 |
| `status`                       | stringa        | Stato di uscita, per esempio `Released` o `In Production`.                                           |
| `runtime`                      | intero         | Minuti.                                                                                              |
| `budget`, `revenue`            | intero         | Dollari statunitensi, `0` quando non noto.                                                           |
| `genres`                       | array          | Oggetti con `id` e `name`.                                                                           |
| `belongs_to_collection`        | oggetto o null | `id`, `name`, `poster_path`, `backdrop_path`. Vedi [collezioni](https://amodb.dev/it/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          | Codici paese come `US`.                                                                              |
| `poster_path`, `backdrop_path` | stringa o null | Da accodare a `https://img.amodb.dev/t/p/{size}`. Vedi [immagini](https://amodb.dev/it/images-api/). |
| `popularity`                   | numero         | Punteggio relativo usato dalla lista dei popolari.                                                   |
| `vote_average`, `vote_count`   | numero, intero | Punteggio aggregato degli utenti.                                                                    |
| `adult`, `video`               | booleano       | Entrambi sono `false`. I titoli per adulti non vengono mai serviti.                                  |

### Risposta di esempio

`GET /3/movie/550?language=en-US&append_to_response=ratings`, con array e testi lunghi accorciati:

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

Il blocco `ratings` viene da `append_to_response`. Ogni fornitore è un oggetto `{value, votes}` oppure `null`, come descritto nella pagina [valutazioni](https://amodb.dev/it/ratings/).

## Combinare i dati con append_to_response

Una chiamata ne può sostituire sei. Elenca le sottorisorse che ti servono e ciascuna arriva sotto la propria chiave. Funzionano i valori TMDB standard: `credits`, `videos`, `images`, `keywords`, `translations`, `external_ids`, `release_dates`, `alternative_titles`, `recommendations`, `similar`, `reviews`, `lists` e `watch/providers`. amodb ne aggiunge altri cinque.

| Valore        | Aggiunge                                                     | Dettagli                                                            |
| ------------- | ------------------------------------------------------------ | ------------------------------------------------------------------- |
| `ratings`     | Punteggi IMDb, Kinopoisk, Metacritic, Rotten Tomatoes e TMDB | [Valutazioni](https://amodb.dev/it/ratings/)                        |
| `moods`       | Indicatori di mood                                           | [Mood](https://amodb.dev/it/moods/)                                 |
| `soundtracks` | Brani presenti nel film                                      | [Colonne sonore](https://amodb.dev/it/soundtracks/)                 |
| `wikidata`    | ID Wikidata, budget, incassi, premi, luoghi delle riprese    | [Ricerca per ID esterno](https://amodb.dev/it/find-by-external-id/) |
| `showtimes`   | Orari delle proiezioni al cinema quando noti                 | [Orari delle proiezioni](https://amodb.dev/it/showtimes/)           |

Ogni blocco aggiunto conta come parte di una sola richiesta HTTP. Una richiesta con dieci valori aggiunti usa comunque una delle tue 20, 40 o 120 richieste al minuto. I blocchi `ratings`, `moods` e `soundtracks` aggiunti omettono la chiave `id` che i percorsi autonomi restituiscono.

## Endpoint dei film correlati

Tutti i percorsi qui sotto condividono la base `https://api.amodb.dev/3` e il parametro `language`.

| Metodo e percorso                          | Restituisce                                       | Parametri aggiuntivi |
| ------------------------------------------ | ------------------------------------------------- | -------------------- |
| `GET /movie/{movie_id}/alternative_titles` | `{id, titles}`, spesso un array vuoto             | nessuno              |
| `GET /movie/{movie_id}/release_dates`      | Date di uscita e classificazioni per paese        | nessuno              |
| `GET /movie/{movie_id}/recommendations`    | Una lista di 20 film consigliati                  | nessuno              |
| `GET /movie/{movie_id}/similar`            | Una lista di 20 film simili                       | nessuno              |
| `GET /movie/{movie_id}/reviews`            | `results` è vuoto per la maggior parte dei titoli | nessuno              |
| `GET /movie/{movie_id}/lists`              | Liste pubbliche che contengono il film            | `page`               |
| `GET /movie/{movie_id}/watch/providers`    | Piattaforme di streaming e noleggio per paese     | nessuno              |
| `GET /movie/latest`                        | L'ultima scheda di film aggiunta                  | nessuno              |

Le liste di consigliati e simili restituiscono sempre la pagina 1 con 20 elementi. La risposta di `lists` è paginata con `page`, 20 liste per pagina. Le liste paginate altrove nell'API accettano `page` da 1 a 500.

Crediti, immagini, video, traduzioni, parole chiave e ID esterni hanno le proprie pagine: [crediti](https://amodb.dev/it/credits/), [immagini](https://amodb.dev/it/images-api/), [video e trailer](https://amodb.dev/it/videos-trailers/), [traduzioni](https://amodb.dev/it/translations/), [parole chiave](https://amodb.dev/it/keywords/) e [ricerca per ID esterno](https://amodb.dev/it/find-by-external-id/). amodb non offre i percorsi `changes` di TMDB.

## Errori

Gli errori usano il corpo TMDB, per esempio `{"success": false, "status_code": 34, "status_message": "The resource you requested could not be found."}`.

| HTTP | status_code | Quando                                                                     |
| ---- | ----------- | -------------------------------------------------------------------------- |
| 401  | 7           | La chiave manca o è sbagliata.                                             |
| 402  | 36          | Il periodo del piano è terminato.                                          |
| 404  | 34          | Nessun film con quell'ID, un percorso non offerto, o un titolo per adulti. |
| 405  | 37          | Hai chiamato un metodo di scrittura come valutare un film.                 |
| 429  | 25          | Hai superato le richieste al minuto. Attendi i secondi di `Retry-After`.   |

L'elenco completo è nella pagina [errori](https://amodb.dev/it/errors/), e i limiti per piano sono in [limiti di richieste](https://amodb.dev/it/rate-limits/).

## Note pratiche

- Salva insieme `id` e `imdb_id`. L'uno o l'altro ritrova il film tramite la [ricerca per ID esterno](https://amodb.dev/it/find-by-external-id/).
- Richiedi la lingua che mostri. Un campo di testo può essere vuoto quando in quella lingua non esiste una traduzione, quindi controlla la stringa vuota e richiedi di nuovo in `en-US` se ti serve un ripiego.
- Tieni in cache i dettagli dalla tua parte per qualche ora. La cache del server li tiene già per 6 ore, quindi una cache client più breve non porta nulla.
- Per elencare film invece di leggerne uno, vedi [ricerca](https://amodb.dev/it/search/), [discover](https://amodb.dev/it/discover/) e [tendenze e liste](https://amodb.dev/it/trending-lists/).

## Domande e risposte

### Devo cambiare il codice del mio client TMDB?

No, per i percorsi che amodb serve. Percorsi, parametri di query e campi JSON sono gli stessi di TMDB v3. Cambia l'URL di base in https://api.amodb.dev/3 e usa la tua chiave amodb in api_key o in un header Bearer.

### Quante sotto-richieste può combinare append_to_response?

Fino a 20 valori in un elenco separato da virgole, come in TMDB. L'intera chiamata è una sola richiesta HTTP, quindi conta una volta sola nel tuo limite di richieste al minuto. I nomi sconosciuti vengono ignorati senza errore.

### Quale lingua viene usata se ometto il parametro language?

L'inglese (en-US). Il parametro language accetta tag TMDB come ru-RU o pt-BR. Sono servite solo le 14 lingue di base, e qualsiasi altro tag ripiega sull'inglese.

### I metodi di scrittura di TMDB, come valutare un film, sono supportati?

No. I metodi di scrittura per account, sessioni, valutazioni e liste restituiscono 405 con status_code 37 nel corpo di errore TMDB. Sono serviti i percorsi di lettura per titoli, persone, liste e ricerca. Alcuni percorsi TMDB come changes non sono offerti.

### Quanto sono freschi i dati?

I dettagli del film restano in cache per 6 ore, e l'endpoint del film più recente per 10 minuti. Una modifica a una scheda può impiegare fino a 6 ore per comparire in una chiamata di dettagli.

## Pagine correlate

- [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.
- [API dei crediti](https://amodb.dev/it/credits/): API crediti con gli stessi percorsi e JSON di TMDB v3. Ottieni cast e troupe di film, serie, stagioni ed episodi, con i campi order, department e job.
- [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.
- [Valutazioni di film e serie TV](https://amodb.dev/it/ratings/): API valutazioni film: punteggi IMDb, Kinopoisk, Metacritic, Rotten Tomatoes e TMDB di un titolo in una chiamata, con null per le fonti non note.
- [Tendenze e endpoint delle liste](https://amodb.dev/it/trending-lists/): API tendenze con percorsi TMDB v3: classifiche giorno e settimana, più liste di film e serie in sala, popolari, più votati e in arrivo, cache di 30 minuti.
- [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-19. Source: https://amodb.dev/it/movies/
