# API szczegółów filmu

> Endpoint szczegółów filmu zwraca jeden film po ID pod GET /3/movie/{movie_id}. JSON odpowiada TMDB v3, więc istniejący klienci potrzebują tylko nowego bazowego URL. Dodaj append_to_response, by w jednym żądaniu pobrać obsadę, wideo, obrazy oraz dodatki amodb: oceny, nastroje, ścieżki dźwiękowe, wikidata i seanse.

## Endpoint

`GET /3/movie/{movie_id}`

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

Odpowiedź:

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

## Pobieranie szczegółów filmu

`GET /3/movie/{movie_id}` zwraca podstawowy rekord jednego filmu: tytuły, opis, czas trwania, gatunki, datę premiery, budżet, przychody, firmy produkcyjne i ścieżki obrazów. ID to to samo numeryczne ID, którego używa TMDB, więc film zapisany już jako `550` zachowuje tu to ID.

Poniższy przykład prosi o film po angielsku i w tym samym wywołaniu dołącza jego oceny.

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

### Parametry

| Parametr             | Gdzie | Wymagany      | Opis                                                                                                           |
| -------------------- | ----- | ------------- | -------------------------------------------------------------------------------------------------------------- |
| `movie_id`           | path  | tak           | Numeryczne ID filmu, na przykład `550`.                                                                        |
| `api_key`            | query | jeden z dwóch | Twój klucz. Użyj go albo nagłówka `Authorization: Bearer`.                                                     |
| `language`           | query | nie           | Tag TMDB, na przykład `en-US`, `ru-RU` lub `pt-BR`. Obsługiwanych jest 14 języków bazowych. Domyślnie `en-US`. |
| `append_to_response` | query | nie           | Lista do 20 podzasobów oddzielonych przecinkami, scalanych z odpowiedzią.                                      |

### Pola odpowiedzi

| Pole                           | Typ             | Uwagi                                                                                               |
| ------------------------------ | --------------- | --------------------------------------------------------------------------------------------------- |
| `id`                           | integer         | ID filmu.                                                                                           |
| `imdb_id`                      | string lub null | ID z IMDb, na przykład `tt0137523`.                                                                 |
| `title`, `original_title`      | string          | Tytuł zlokalizowany i oryginalny.                                                                   |
| `original_language`            | string          | Kod języka, na przykład `en`.                                                                       |
| `overview`, `tagline`          | string          | Tekst zlokalizowany, pusty, gdy tłumaczenie nie istnieje.                                           |
| `homepage`                     | string          | Oficjalna strona, pusta, gdy nieznana.                                                              |
| `release_date`                 | string          | `YYYY-MM-DD`, puste, gdy nieznana.                                                                  |
| `status`                       | string          | Stan premiery, na przykład `Released` lub `In Production`.                                          |
| `runtime`                      | integer         | Minuty.                                                                                             |
| `budget`, `revenue`            | integer         | Dolary amerykańskie, `0`, gdy nieznane.                                                             |
| `genres`                       | array           | Obiekty z `id` i `name`.                                                                            |
| `belongs_to_collection`        | object lub null | `id`, `name`, `poster_path`, `backdrop_path`. Zobacz [kolekcje](https://amodb.dev/pl/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           | Kody krajów, na przykład `US`.                                                                      |
| `poster_path`, `backdrop_path` | string lub null | Dołącz do `https://img.amodb.dev/t/p/{size}`. Zobacz [obrazy](https://amodb.dev/pl/images-api/).    |
| `popularity`                   | number          | Względny wskaźnik używany przez listę popularnych.                                                  |
| `vote_average`, `vote_count`   | number, integer | Zbiorcza ocena użytkowników.                                                                        |
| `adult`, `video`               | boolean         | Oba są `false`. Tytuły dla dorosłych nigdy nie są udostępniane.                                     |

### Przykładowa odpowiedź

`GET /3/movie/550?language=en-US&append_to_response=ratings`, z długimi tablicami i tekstami skróconymi:

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

Blok `ratings` pochodzi z `append_to_response`. Każdy dostawca to obiekt `{value, votes}` albo `null`, jak opisuje strona [oceny](https://amodb.dev/pl/ratings/).

## Łączenie danych przez append_to_response

Jedno wywołanie może zastąpić sześć. Wypisz potrzebne podzasoby, a każdy przyjdzie pod własnym kluczem. Działają standardowe wartości TMDB: `credits`, `videos`, `images`, `keywords`, `translations`, `external_ids`, `release_dates`, `alternative_titles`, `recommendations`, `similar`, `reviews`, `lists` i `watch/providers`. amodb dodaje pięć kolejnych.

| Wartość       | Dodaje                                                      | Szczegóły                                                                   |
| ------------- | ----------------------------------------------------------- | --------------------------------------------------------------------------- |
| `ratings`     | Oceny z IMDb, Kinopoisk, Metacritic, Rotten Tomatoes i TMDB | [Oceny](https://amodb.dev/pl/ratings/)                                      |
| `moods`       | Mierniki nastroju                                           | [Nastroje](https://amodb.dev/pl/moods/)                                     |
| `soundtracks` | Utwory słyszane w filmie                                    | [Ścieżki dźwiękowe](https://amodb.dev/pl/soundtracks/)                      |
| `wikidata`    | ID Wikidata, budżet, przychody, nagrody, miejsca zdjęć      | [Wyszukiwanie po zewnętrznym ID](https://amodb.dev/pl/find-by-external-id/) |
| `showtimes`   | Seanse kinowe, gdzie są znane                               | [Seanse](https://amodb.dev/pl/showtimes/)                                   |

Każdy dołączony blok liczy się jako część jednego żądania HTTP. Żądanie z dziesięcioma dołączonymi wartościami nadal zużywa jedno z twoich 20, 40 lub 120 żądań na minutę. Dołączone bloki `ratings`, `moods` i `soundtracks` pomijają klucz `id`, który zwracają samodzielne ścieżki.

## Powiązane endpointy filmów

Wszystkie poniższe ścieżki mają wspólną bazę `https://api.amodb.dev/3` i parametr `language`.

| Metoda i ścieżka                           | Zwraca                                            | Dodatkowe parametry |
| ------------------------------------------ | ------------------------------------------------- | ------------------- |
| `GET /movie/{movie_id}/alternative_titles` | `{id, titles}`, często pusta tablica              | brak                |
| `GET /movie/{movie_id}/release_dates`      | Daty premier i klasyfikacje wiekowe według krajów | brak                |
| `GET /movie/{movie_id}/recommendations`    | Lista 20 polecanych filmów                        | brak                |
| `GET /movie/{movie_id}/similar`            | Lista 20 podobnych filmów                         | brak                |
| `GET /movie/{movie_id}/reviews`            | `results` jest puste dla większości tytułów       | brak                |
| `GET /movie/{movie_id}/lists`              | Publiczne listy zawierające film                  | `page`              |
| `GET /movie/{movie_id}/watch/providers`    | Dostawcy streamingu i wypożyczeń według krajów    | brak                |
| `GET /movie/latest`                        | Najnowszy dodany rekord filmu                     | brak                |

Listy rekomendacji i podobnych zawsze zwracają stronę 1 z 20 pozycjami. Odpowiedź `lists` ma paginację przez `page`, po 20 list na stronę. Listy z paginacją w innych miejscach API przyjmują `page` od 1 do 500.

Obsada, obrazy, wideo, tłumaczenia, słowa kluczowe i zewnętrzne ID mają własne strony: [obsada i ekipa](https://amodb.dev/pl/credits/), [obrazy](https://amodb.dev/pl/images-api/), [wideo i zwiastuny](https://amodb.dev/pl/videos-trailers/), [tłumaczenia](https://amodb.dev/pl/translations/), [słowa kluczowe](https://amodb.dev/pl/keywords/) i [wyszukiwanie po zewnętrznym ID](https://amodb.dev/pl/find-by-external-id/). amodb nie udostępnia ścieżek `changes` z TMDB.

## Błędy

Błędy używają treści TMDB, na przykład `{"success": false, "status_code": 34, "status_message": "The resource you requested could not be found."}`.

| HTTP | status_code | Kiedy                                                                               |
| ---- | ----------- | ----------------------------------------------------------------------------------- |
| 401  | 7           | Brakuje klucza lub jest błędny.                                                     |
| 402  | 36          | Okres planu dobiegł końca.                                                          |
| 404  | 34          | Brak filmu o tym ID, ścieżka, która nie jest udostępniana, lub tytuł dla dorosłych. |
| 405  | 37          | Wywołano metodę zapisu, na przykład ocenianie filmu.                                |
| 429  | 25          | Przekroczono limit żądań na minutę. Poczekaj tyle sekund, ile podaje `Retry-After`. |

Pełna lista jest na stronie [błędy](https://amodb.dev/pl/errors/), a limity według planów na stronie [limity żądań](https://amodb.dev/pl/rate-limits/).

## Praktyczne uwagi

- Zapisuj `id` i `imdb_id` razem. Którekolwiek pozwala znaleźć film ponownie przez [wyszukiwanie po zewnętrznym ID](https://amodb.dev/pl/find-by-external-id/).
- Żądaj języka, który wyświetlasz. Pole tekstowe może być puste, gdy w tym języku nie ma tłumaczenia, więc sprawdź pusty ciąg i w razie potrzeby zapytaj ponownie z `en-US`.
- Zapisuj szczegóły w cache u siebie na kilka godzin. Cache serwera trzyma je 6 godzin, więc krótszy cache klienta nic nie daje.
- Aby wypisać filmy zamiast czytać jeden, zobacz [wyszukiwanie](https://amodb.dev/pl/search/), [discover](https://amodb.dev/pl/discover/) i [trendy i listy](https://amodb.dev/pl/trending-lists/).

## Pytania i odpowiedzi

### Czy muszę zmieniać kod mojego klienta TMDB?

Nie, dla ścieżek, które udostępnia amodb. Ścieżki, parametry zapytania i pola JSON są takie same jak w TMDB v3. Zmień bazowy URL na https://api.amodb.dev/3 i użyj swojego klucza amodb w api_key albo w nagłówku Bearer.

### Ile podżądań może połączyć append_to_response?

Do 20 wartości na jednej liście oddzielonej przecinkami, tak jak w TMDB. Całe wywołanie to jedno żądanie HTTP, więc liczy się raz do limitu żądań na minutę. Nieznane nazwy są ignorowane bez błędu.

### Jaki język jest używany, gdy pominę parametr language?

Angielski (en-US). Parametr language przyjmuje tagi TMDB, takie jak ru-RU lub pt-BR. Obsługiwanych jest tylko 14 języków bazowych, a każdy inny tag wraca do angielskiego.

### Czy metody zapisu TMDB, takie jak ocenianie filmu, są obsługiwane?

Nie. Metody zapisu konta, sesji, ocen i list zwracają 405 z status_code 37 w treści błędu TMDB. Udostępniane są ścieżki odczytu tytułów, osób, list i wyszukiwania. Kilka ścieżek TMDB, na przykład changes, nie jest dostępnych.

### Jak świeże są dane?

Szczegóły filmów są w cache przez 6 godzin, a endpoint najnowszego filmu przez 10 minut. Zmiana rekordu może pojawić się w szczegółach nawet po 6 godzinach.

## Powiązane strony

- [API szczegółów serialu](https://amodb.dev/pl/tv-series/): API szczegółów serialu z tymi samymi ścieżkami i JSON co TMDB v3. Serial po ID z sezonami, sieciami, klasyfikacją wiekową i dostawcami streamingu.
- [API obsady i ekipy](https://amodb.dev/pl/credits/): API obsady i ekipy z tymi samymi ścieżkami i JSON co TMDB v3. Pobierz obsadę i ekipę filmów, seriali, sezonów i odcinków z polami order, department i job.
- [API obrazów i host obrazów](https://amodb.dev/pl/images-api/): API obrazów filmów ze ścieżkami TMDB v3: wypisz plakaty, tła, loga i kadry każdego tytułu, a potem ładuj je z img.amodb.dev w 10 rozmiarach bez klucza.
- [Oceny filmów i seriali](https://amodb.dev/pl/ratings/): API ocen filmów zwraca wyniki z IMDb, Kinopoisk, Metacritic, Rotten Tomatoes i TMDB dla tytułu jednym wywołaniem, z null dla każdego nieznanego źródła.
- [Trendy i listy](https://amodb.dev/pl/trending-lists/): API trendów filmowych ze ścieżkami TMDB v3: wykresy dzienne i tygodniowe oraz listy now playing, popular, top rated i upcoming, w cache 30 minut.
- [Szybki start](https://amodb.dev/pl/quickstart/): Pierwsze wywołanie amodb: zdobądź klucz, pobierz szczegóły filmu w curl, JavaScript, Python, PHP lub Go, potem załaduj plakat z img.amodb.dev. Poniżej 2 minut.

Zaktualizowano: 2026-10-19. Source: https://amodb.dev/pl/movies/
