# API деталей фильма

> Эндпоинт деталей фильма возвращает один фильм по ID: GET /3/movie/{movie_id}. JSON совпадает с TMDB v3, поэтому существующим клиентам нужен только новый базовый URL. Через append_to_response одним запросом приходят credits, videos, images и дополнения amodb: ratings, moods, soundtracks, wikidata и showtimes.

## Эндпоинт

`GET /3/movie/{movie_id}`

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

Ответ:

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

## Получение деталей фильма

`GET /3/movie/{movie_id}` возвращает основную запись об одном фильме: названия, описание, продолжительность, жанры, дату выхода, бюджет, сборы, продюсерские компании и пути к изображениям. ID тот же числовой ID, что использует TMDB, поэтому фильм, который у вас хранится как `550`, сохраняет этот ID и здесь.

В примере ниже фильм запрашивается на английском, а его рейтинги добавляются в том же вызове.

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

### Параметры

| Параметр             | Где   | Обязателен   | Описание                                                                                                |
| -------------------- | ----- | ------------ | ------------------------------------------------------------------------------------------------------- |
| `movie_id`           | path  | да           | Числовой ID фильма, например `550`.                                                                     |
| `api_key`            | query | один из двух | Ваш ключ. Используйте его или заголовок `Authorization: Bearer`.                                        |
| `language`           | query | нет          | Тег TMDB, например `en-US`, `ru-RU` или `pt-BR`. Обслуживаются 14 базовых языков. По умолчанию `en-US`. |
| `append_to_response` | query | нет          | Список до 20 подресурсов через запятую, которые нужно добавить в ответ.                                 |

### Поля ответа

| Поле                           | Тип                | Примечания                                                                                                 |
| ------------------------------ | ------------------ | ---------------------------------------------------------------------------------------------------------- |
| `id`                           | целое число        | ID фильма.                                                                                                 |
| `imdb_id`                      | строка или null    | ID IMDb, например `tt0137523`.                                                                             |
| `title`, `original_title`      | строка             | Локализованное и оригинальное название.                                                                    |
| `original_language`            | строка             | Код языка, например `en`.                                                                                  |
| `overview`, `tagline`          | строка             | Локализованный текст, пустой, если перевода нет.                                                           |
| `homepage`                     | строка             | Официальный сайт, пустая строка, если неизвестен.                                                          |
| `release_date`                 | строка             | `YYYY-MM-DD`, пустая строка, если дата неизвестна.                                                         |
| `status`                       | строка             | Состояние релиза, например `Released` или `In Production`.                                                 |
| `runtime`                      | целое число        | Минуты.                                                                                                    |
| `budget`, `revenue`            | целое число        | Доллары США, `0`, если неизвестно.                                                                         |
| `genres`                       | массив             | Объекты с `id` и `name`.                                                                                   |
| `belongs_to_collection`        | объект или null    | `id`, `name`, `poster_path`, `backdrop_path`. См. [коллекции](https://amodb.dev/ru/collections/).          |
| `production_companies`         | массив             | `id`, `logo_path`, `name`, `origin_country`.                                                               |
| `production_countries`         | массив             | `iso_3166_1`, `name`.                                                                                      |
| `spoken_languages`             | массив             | `english_name`, `iso_639_1`, `name`.                                                                       |
| `origin_country`               | массив             | Коды стран, например `US`.                                                                                 |
| `poster_path`, `backdrop_path` | строка или null    | Добавляется к `https://img.amodb.dev/t/p/{size}`. См. [API изображений](https://amodb.dev/ru/images-api/). |
| `popularity`                   | число              | Относительная оценка, по которой строится список популярных.                                               |
| `vote_average`, `vote_count`   | число, целое число | Совокупная оценка пользователей.                                                                           |
| `adult`, `video`               | логическое         | Оба равны `false`. Фильмы для взрослых не отдаются никогда.                                                |

### Пример ответа

`GET /3/movie/550?language=en-US&append_to_response=ratings`, длинные массивы и тексты сокращены:

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

Блок `ratings` появился благодаря `append_to_response`. Каждый источник представлен объектом `{value, votes}` или `null`, как описано на странице [рейтинги](https://amodb.dev/ru/ratings/).

## Объединение данных через append_to_response

Один вызов может заменить шесть. Перечислите нужные подресурсы, и каждый придет под своим ключом. Работают стандартные значения TMDB: `credits`, `videos`, `images`, `keywords`, `translations`, `external_ids`, `release_dates`, `alternative_titles`, `recommendations`, `similar`, `reviews`, `lists` и `watch/providers`. amodb добавляет еще пять.

| Значение      | Что добавляет                                              | Подробнее                                                         |
| ------------- | ---------------------------------------------------------- | ----------------------------------------------------------------- |
| `ratings`     | Оценки IMDb, Kinopoisk, Metacritic, Rotten Tomatoes и TMDB | [Рейтинги](https://amodb.dev/ru/ratings/)                         |
| `moods`       | Шкалы настроения                                           | [Настроения](https://amodb.dev/ru/moods/)                         |
| `soundtracks` | Треки, звучащие в фильме                                   | [Саундтреки](https://amodb.dev/ru/soundtracks/)                   |
| `wikidata`    | ID Wikidata, бюджет, сборы, награды, места съемок          | [Поиск по внешнему ID](https://amodb.dev/ru/find-by-external-id/) |
| `showtimes`   | Сеансы в кинотеатрах, где они известны                     | [Сеансы](https://amodb.dev/ru/showtimes/)                         |

Каждый добавленный блок входит в один HTTP-запрос. Запрос с десятью добавленными значениями по-прежнему расходует один из ваших 20, 40 или 120 запросов в минуту. Добавленные блоки `ratings`, `moods` и `soundtracks` не содержат ключ `id`, который возвращают отдельные пути.

## Связанные эндпоинты фильма

Все пути ниже используют базу `https://api.amodb.dev/3` и параметр `language`.

| Метод и путь                               | Возвращает                                   | Дополнительные параметры |
| ------------------------------------------ | -------------------------------------------- | ------------------------ |
| `GET /movie/{movie_id}/alternative_titles` | `{id, titles}`, часто пустой массив          | нет                      |
| `GET /movie/{movie_id}/release_dates`      | Даты выхода и возрастные рейтинги по странам | нет                      |
| `GET /movie/{movie_id}/recommendations`    | Список из 20 рекомендуемых фильмов           | нет                      |
| `GET /movie/{movie_id}/similar`            | Список из 20 похожих фильмов                 | нет                      |
| `GET /movie/{movie_id}/reviews`            | `results` пуст для большинства тайтлов       | нет                      |
| `GET /movie/{movie_id}/lists`              | Публичные списки, содержащие фильм           | `page`                   |
| `GET /movie/{movie_id}/watch/providers`    | Стриминговые сервисы и прокат по странам     | нет                      |
| `GET /movie/latest`                        | Самая новая добавленная запись фильма        | нет                      |

Списки recommendations и similar всегда возвращают страницу 1 с 20 элементами. Ответ `lists` разбит на страницы параметром `page`, по 20 списков на странице. Постраничные списки в остальных местах API принимают `page` от 1 до 500.

У актерского состава, изображений, видео, переводов, ключевых слов и внешних ID есть свои страницы: [актеры и съемочная группа](https://amodb.dev/ru/credits/), [API изображений](https://amodb.dev/ru/images-api/), [видео и трейлеры](https://amodb.dev/ru/videos-trailers/), [переводы](https://amodb.dev/ru/translations/), [ключевые слова](https://amodb.dev/ru/keywords/) и [поиск по внешнему ID](https://amodb.dev/ru/find-by-external-id/). Пути TMDB `changes` в amodb не предоставляются.

## Ошибки

Ошибки используют тело TMDB, например `{"success": false, "status_code": 34, "status_message": "The resource you requested could not be found."}`.

| HTTP | status_code | Когда                                                                      |
| ---- | ----------- | -------------------------------------------------------------------------- |
| 401  | 7           | Ключ отсутствует или неверен.                                              |
| 402  | 36          | Период тарифа закончился.                                                  |
| 404  | 34          | Нет фильма с таким ID, путь не предоставляется или это фильм для взрослых. |
| 405  | 37          | Вы вызвали метод записи, например оценку фильма.                           |
| 429  | 25          | Вы превысили лимит запросов в минуту. Подождите `Retry-After` секунд.      |

Полный список на странице [ошибки](https://amodb.dev/ru/errors/), а лимиты по тарифам на странице [лимиты запросов](https://amodb.dev/ru/rate-limits/).

## Практические советы

- Храните `id` и `imdb_id` вместе. По любому из них фильм можно найти снова через [поиск по внешнему ID](https://amodb.dev/ru/find-by-external-id/).
- Запрашивайте тот язык, который показываете. Текстовое поле может быть пустым, если перевода на этот язык нет, поэтому проверяйте пустую строку и при необходимости запасного варианта повторяйте запрос с `en-US`.
- Кэшируйте детали у себя на несколько часов. Серверный кэш уже хранит их 6 часов, поэтому более короткий клиентский кэш ничего не дает.
- Чтобы получить список фильмов, а не читать один, смотрите [поиск](https://amodb.dev/ru/search/), [discover](https://amodb.dev/ru/discover/) и [списки трендов](https://amodb.dev/ru/trending-lists/).

## Вопросы и ответы

### Нужно ли менять код моего клиента TMDB?

Нет, для путей, которые обслуживает amodb. Пути, параметры запроса и поля JSON такие же, как в TMDB v3. Замените базовый URL на https://api.amodb.dev/3 и передайте ключ amodb в api_key или в заголовке Bearer.

### Сколько подзапросов можно объединить через append_to_response?

До 20 значений в одном списке через запятую, как в TMDB. Весь вызов выполняется одним HTTP-запросом и учитывается в лимите запросов в минуту один раз. Неизвестные имена игнорируются без ошибки.

### Какой язык используется, если не указать параметр language?

Английский (en-US). Параметр language принимает теги TMDB, например ru-RU или pt-BR. Обслуживаются только 14 базовых языков, любой другой тег откатывается на английский.

### Поддерживаются ли методы записи TMDB, например оценка фильма?

Нет. Методы записи для аккаунта, сессии, оценок и списков возвращают 405 с status_code 37 в теле ошибки TMDB. Пути чтения тайтлов, людей, списков и поиска работают. Некоторые пути TMDB, например changes, не предоставляются.

### Насколько свежие данные?

Детали фильма кэшируются на 6 часов, а эндпоинт самого нового фильма на 10 минут. Изменение записи может появиться в запросе деталей не сразу, до 6 часов.

## Связанные страницы

- [API сериалов](https://amodb.dev/ru/tv-series/): API сериалов с теми же путями и JSON, что в TMDB v3. Сериал по id с сезонами, телесетями и следующей серией, а также возрастные рейтинги и сервисы просмотра.
- [API актеров и съемочной группы](https://amodb.dev/ru/credits/): API credits с теми же путями и JSON, что в TMDB v3. Актерский состав и съемочная группа фильмов, сериалов, сезонов и серий с полями order, department, job.
- [API изображений и хост изображений](https://amodb.dev/ru/images-api/): API изображений фильмов с путями TMDB v3: списки постеров, фонов, логотипов и кадров для каждого проекта, загрузка с img.amodb.dev в 10 размерах без ключа.
- [Рейтинги фильмов и сериалов](https://amodb.dev/ru/ratings/): API рейтингов фильмов: оценки IMDb, Kinopoisk, Metacritic, Rotten Tomatoes и TMDB для тайтла одним запросом, с null для источника, о котором нет данных.
- [Эндпоинты трендов и списков](https://amodb.dev/ru/trending-lists/): API фильмов в тренде с путями TMDB v3: чарты за день и неделю, а также списки идущих в кино, популярных, лучших и скорых фильмов и сериалов, кэш 30 минут.
- [Быстрый старт](https://amodb.dev/ru/quickstart/): Первый вызов amodb: получите ключ, запросите детали фильма через curl, JavaScript, Python, PHP или Go и загрузите постер с img.amodb.dev. Меньше 2 минут.

Обновлено: 2026-10-18. Source: https://amodb.dev/ru/movies/
