# Ендпоінт, сумісний з OMDb

> GET https://api.amodb.dev/omdb/ відповідає на запити у стилі OMDb з тими самими назвами параметрів і полів. Шукайте фільм за IMDb id через i або за назвою через t, чи робіть пошук через s. Посилання на постери ведуть на img.amodb.dev. Обслуговуються лише r=json, фільми та серіали. Змініть базовий URL і ключ, і типовий клієнт продовжить працювати.

## Ендпоінт

`GET /omdb/`

```bash
curl "https://api.amodb.dev/omdb/?i=tt0137523&plot=short&apikey=$AMODB_KEY"
```

Відповідь:

```json
{
  "Title": "Fight Club",
  "Year": "1999",
  "Rated": "R",
  "Released": "15 Oct 1999",
  "Runtime": "139 min",
  "Genre": "Crime, Drama, Thriller",
  "Director": "David Fincher",
  "Writer": "Chuck Palahniuk, Jim Uhls",
  "Actors": "Brad Pitt, Edward Norton, Meat Loaf",
  "Plot": "A nameless first-person narrator attends support groups in an attempt to subdue his emotional state and relieve his insomniac state.",
  "Language": "English",
  "Country": "United States, Germany",
  "Awards": "Nominated for 1 Oscar. 12 wins & 38 nominations total",
  "Poster": "https://img.amodb.dev/t/p/w300/pfPob0mrC1KiPVP9NXZnqvpks9u.jpg",
  "Ratings": [
    {
      "Source": "Internet Movie Database",
      "Value": "8.8/10"
    },
    {
      "Source": "Rotten Tomatoes",
      "Value": "81%"
    },
    {
      "Source": "Metacritic",
      "Value": "67/100"
    }
  ],
  "Metascore": "67",
  "imdbRating": "8.8",
  "imdbVotes": "2,669,989",
  "imdbID": "tt0137523",
  "Type": "movie",
  "DVD": "N/A",
  "BoxOffice": "$38,003,039",
  "Production": "N/A",
  "Website": "N/A",
  "Response": "True"
}
```

## Пошук фільму за IMDb id або назвою

`GET https://api.amodb.dev/omdb/` повертає один фільм чи серіал як плоский JSON з іменами полів OMDb. Передайте `i` для IMDb id, наприклад `tt0137523`, або `t` для назви. Автентифікація виконується параметром запиту `apikey`. У відповіді `Response` має значення `True` у разі успіху і `False` у разі помилки.

Приклад завантажує Fight Club за IMDb id і зупиняється з текстом помилки OMDb, коли `Response` дорівнює `False`.

```bash
curl -sf "https://api.amodb.dev/omdb/?i=tt0137523&plot=short&apikey=$AMODB_KEY"
```

```js
const params = new URLSearchParams({ i: 'tt0137523', plot: 'short', apikey: process.env.AMODB_KEY });
const res = await fetch(`https://api.amodb.dev/omdb/?${params}`);
if (!res.ok) throw new Error(`amodb returned ${res.status}`);
const data = await res.json();
if (data.Response === 'False') throw new Error(data.Error);
console.log(data.Title, data.Year, data.imdbRating);
```

```python
import os
import requests

r = requests.get(
    "https://api.amodb.dev/omdb/",
    params={"i": "tt0137523", "plot": "short", "apikey": os.environ["AMODB_KEY"]},
    timeout=10,
)
r.raise_for_status()
data = r.json()
if data["Response"] == "False":
    raise SystemExit(data["Error"])
print(data["Title"], data["Year"], data["imdbRating"])
```

```php
<?php
$query = http_build_query(['i' => 'tt0137523', 'plot' => 'short', 'apikey' => getenv('AMODB_KEY')]);
$ch = curl_init('https://api.amodb.dev/omdb/?' . $query);
curl_setopt_array($ch, [CURLOPT_RETURNTRANSFER => true, CURLOPT_TIMEOUT => 10]);
$body = curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
if ($status !== 200) {
    throw new RuntimeException("amodb returned $status");
}
$data = json_decode($body, true);
if ($data['Response'] === 'False') {
    throw new RuntimeException($data['Error']);
}
echo $data['Title'], ' ', $data['Year'], ' ', $data['imdbRating'], PHP_EOL;
```

```go
package main

import (
	"encoding/json"
	"fmt"
	"net/http"
	"net/url"
	"os"
	"time"
)

type Title struct {
	Title      string `json:"Title"`
	Year       string `json:"Year"`
	ImdbRating string `json:"imdbRating"`
	Response   string `json:"Response"`
	Error      string `json:"Error"`
}

func main() {
	q := url.Values{"i": {"tt0137523"}, "plot": {"short"}, "apikey": {os.Getenv("AMODB_KEY")}}
	client := &http.Client{Timeout: 10 * time.Second}
	res, err := client.Get("https://api.amodb.dev/omdb/?" + q.Encode())
	if err != nil {
		panic(err)
	}
	defer res.Body.Close()
	if res.StatusCode != http.StatusOK {
		panic(res.Status)
	}
	var t Title
	if err := json.NewDecoder(res.Body).Decode(&t); err != nil {
		panic(err)
	}
	if t.Response == "False" {
		panic(t.Error)
	}
	fmt.Println(t.Title, t.Year, t.ImdbRating)
}
```

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

| Параметр | Де           | Обов'язковий          | Опис                                                               |
| -------- | ------------ | --------------------- | ------------------------------------------------------------------ |
| `apikey` | рядок запиту | так                   | Ваш ключ amodb.                                                    |
| `i`      | рядок запиту | один із `i`, `t`, `s` | IMDb id фільму: `tt` плюс від 7 до 9 цифр, наприклад `tt0137523`.  |
| `t`      | рядок запиту | один із `i`, `t`, `s` | Назва для пошуку, повертає найкращий збіг.                         |
| `s`      | рядок запиту | один із `i`, `t`, `s` | Пошуковий текст щонайменше з 3 літер, повертає список.             |
| `type`   | рядок запиту | ні                    | `movie` або `series`. `episode` нічого не знаходить.               |
| `y`      | рядок запиту | ні                    | Рік виходу.                                                        |
| `plot`   | рядок запиту | ні                    | `short` або `full`. За замовчуванням `short`.                      |
| `page`   | рядок запиту | ні                    | Сторінка результатів пошуку, від 1 до 100. Використовується з `s`. |
| `r`      | рядок запиту | ні                    | Лише `json`. Будь-яке інше значення повертає HTTP 400.             |

Параметри `Season`, `Episode`, `callback` і `v` з оригінального OMDb API не підтримуються й ігноруються.

### Поля відповіді

| Поле                                             | Примітки                                                                                                                     |
| ------------------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------- |
| `Title`, `Year`, `Rated`, `Released`, `Runtime`  | Текст. `Released` має вигляд `15 Oct 1999`.                                                                                  |
| `Genre`, `Director`, `Writer`, `Actors`          | Імена через кому.                                                                                                            |
| `Plot`, `Language`, `Country`, `Awards`          | Текст.                                                                                                                       |
| `Poster`                                         | Адреса на `https://img.amodb.dev/t/p/w300/`.                                                                                 |
| `Ratings`                                        | Масив об'єктів із `Source` і `Value`.                                                                                        |
| `Metascore`, `imdbRating`, `imdbVotes`, `imdbID` | Текст, зокрема кількість голосів із комами.                                                                                  |
| `Type`                                           | `movie` або `series`.                                                                                                        |
| `DVD`, `BoxOffice`, `Production`, `Website`      | Лише для фільмів. `BoxOffice` містить значення, коли воно відоме. `DVD`, `Production` і `Website` завжди мають вигляд `N/A`. |
| `totalSeasons`                                   | Лише для серіалів, як текст. Відповіді для серіалів не мають `DVD`, `BoxOffice`, `Production` чи `Website`.                  |
| `Response`                                       | `True` або `False`, завжди рядок.                                                                                            |

Поля відповідають OMDb, тому наявний парсер OMDb не потребує змін, крім базового URL.

### Приклад відповіді

```json
{
  "Title": "Fight Club",
  "Year": "1999",
  "Rated": "R",
  "Released": "15 Oct 1999",
  "Runtime": "139 min",
  "Genre": "Crime, Drama, Thriller",
  "Director": "David Fincher",
  "Writer": "Chuck Palahniuk, Jim Uhls",
  "Actors": "Brad Pitt, Edward Norton, Meat Loaf",
  "Plot": "A nameless first-person narrator attends support groups in an attempt to subdue his emotional state and relieve his insomniac state.",
  "Language": "English",
  "Country": "United States, Germany",
  "Awards": "Nominated for 1 Oscar. 12 wins & 38 nominations total",
  "Poster": "https://img.amodb.dev/t/p/w300/qkrH7rjYKU4KOwwIl6wF6H3ISvm.jpg",
  "Ratings": [
    { "Source": "Internet Movie Database", "Value": "8.8/10" },
    { "Source": "Rotten Tomatoes", "Value": "81%" },
    { "Source": "Metacritic", "Value": "67/100" }
  ],
  "Metascore": "67",
  "imdbRating": "8.8",
  "imdbVotes": "2,669,989",
  "imdbID": "tt0137523",
  "Type": "movie",
  "DVD": "N/A",
  "BoxOffice": "$38,003,039",
  "Production": "N/A",
  "Website": "N/A",
  "Response": "True"
}
```

Для серіалу, наприклад The Wire (`i=tt0306414`), відповідь закінчується `"Type": "series"`, `"totalSeasons": "5"` і `"Response": "True"`.

## Пошук через s

Надішліть `s`, щоб отримати список замість одного фільму. Кожна сторінка містить 10 елементів, а `totalResults` дає повну кількість як рядок. Запитайте `page=2` для елементів з 11 по 20 і продовжуйте, доки не прочитаєте `totalResults` елементів. Сторінка за останньою відповідає `Movie not found!`.

```bash
curl -sf "https://api.amodb.dev/omdb/?s=Matrix&type=movie&page=1&apikey=$AMODB_KEY"
```

| Поле           | Примітки                                                              |
| -------------- | --------------------------------------------------------------------- |
| `Search`       | Масив до 10 елементів із `Title`, `Year`, `imdbID`, `Type`, `Poster`. |
| `totalResults` | Кількість усіх збігів, як рядок.                                      |
| `Response`     | `True` або `False`.                                                   |

```json
{
  "Search": [
    {
      "Title": "The Matrix",
      "Year": "1999",
      "imdbID": "tt0133093",
      "Type": "movie",
      "Poster": "https://img.amodb.dev/t/p/w300/kEDbym5htJgDQNenjUtSJxAHysB.jpg"
    },
    {
      "Title": "The Matrix Reloaded",
      "Year": "2003",
      "imdbID": "tt0234215",
      "Type": "movie",
      "Poster": "https://img.amodb.dev/t/p/w300/d0xVNNxIYxId2qHkqpgE39soOvD.jpg"
    }
  ],
  "totalResults": "20",
  "Response": "True"
}
```

Список скорочено до 2 із 10 елементів.

## Читання масиву Ratings

`Ratings` містить по одному об'єкту на джерело, кожен із `Source` і `Value`, а `Value` є текстом, наприклад `8.8/10`. Джерела: `Internet Movie Database`, `Rotten Tomatoes` і `Metacritic`, причому перелічено лише ті, що відомі для фільму. Плоскі поля `imdbRating`, `imdbVotes` і `Metascore` повторюють частину тих самих даних. Розділіть `Value` за скісною рискою, якщо потрібне число. Для типізованих чисел та оцінок Kinopoisk і TMDB використовуйте натомість ендпоінт із розділу [рейтинги](https://amodb.dev/uk/ratings/).

## Помилки

Помилки пошуку повертають `{"Response":"False","Error":"..."}`. Більшість із них приходить з HTTP 200, тому читайте `Error` і розгалужуйте за текстом, а не лише за статусом HTTP.

| Текст `Error`                                 | HTTP | Коли                                                                                                                     |
| --------------------------------------------- | ---- | ------------------------------------------------------------------------------------------------------------------------ |
| `Movie not found!`                            | 200  | Жоден фільм не збігається з `t`, значення `i` коректне, але невідоме, або сторінка пошуку за останньою.                  |
| `Incorrect IMDb ID.`                          | 200  | Значення `i` не має форми IMDb id.                                                                                       |
| `Too many results.`                           | 200  | Пошуковий текст коротший за 3 літери або збігається з надто багатьма фільмами. Подовжте текст або додайте `type` чи `y`. |
| `Something went wrong.`                       | 200  | Жодного з `i`, `t` і `s` не надіслано.                                                                                   |
| `Only r=json is supported.`                   | 400  | `r` має будь-яке значення, крім `json`.                                                                                  |
| `No API key provided.` або `Invalid API key!` | 401  | `apikey` відсутній або хибний.                                                                                           |
| `Request limit reached!`                      | 429  | Перевищено ліміт запитів на хвилину. Зачекайте кількість секунд із `Retry-After`.                                        |

Тариф, що закінчився, відповідає HTTP 402. Дивіться [помилки](https://amodb.dev/uk/errors/) і [ліміти запитів](https://amodb.dev/uk/rate-limits/).

## Міграція клієнта OMDb

Міграція складається з двох змін: базовий URL і ключ. Більше нічого в запиті не змінюється.

```js
// Before: the base URL and key of your current OMDb setup.
// After:
const OMDB_BASE = 'https://api.amodb.dev/omdb/';
const OMDB_KEY = process.env.AMODB_KEY;
```

Приберіть `r=xml`, якщо ви його надсилаєте. Клієнту, що читає серії, `Season` чи `callback`, для цих частин потрібне інше джерело. Ліміт запитів діє на ключ, тому виклики у стилі OMDb і [виклики у стилі TMDB](https://amodb.dev/uk/movies/) ділять один бюджет у 20, 40 або 120 запитів на хвилину.

## Практичні поради

- Вважайте кожне значення текстом. Самі перетворюйте `Year`, `imdbRating` і `totalResults`, а `N/A` вважайте відсутнім значенням.
- Використовуйте `plot=full` лише тоді, коли показуєте довгий опис сюжету. `short` робить відповіді меншими.
- Пошук за `i` або `t` кешується довше, ніж пошук через `s`, тому повторний запит повертає збережену відповідь.
- Щоб отримати id TMDB за IMDb id, викличіть [пошук за зовнішнім ID](https://amodb.dev/uk/find-by-external-id/).
- Постери мають розмір `w300`. Для інших розмірів побудуйте адресу з `poster_path` у стилі TMDB і списку розмірів з розділу [API зображень](https://amodb.dev/uk/images-api/).
- Тримайте ключ на сервері. `apikey` в URL сторінки видно кожному відвідувачу.

## Запитання й відповіді

### Чи потрібен окремий ключ для ендпоінта OMDb?

Ні. Той самий 32-символьний ключ працює і на шляхах у стилі TMDB, і на ендпоінті OMDb. Передавайте його як параметр запиту apikey, точно так, як це робить клієнт OMDb сьогодні.

### Чи можна запитати XML?

Ні. Обслуговується лише r=json. Запит із r=xml повертає HTTP 400 з текстом Only r=json is supported., тому приберіть цей параметр або встановіть json, перш ніж змінювати базовий URL.

### Чому всі значення є рядками?

Тіло повторює OMDb поле в поле, а цей формат надсилає числа, як-от Year, imdbRating і totalResults, рядками. Перетворюйте їх у власному коді. Невідомі значення мають вигляд N/A.

### Чи підтримуються сезони й серії?

Ні. Параметри Season, Episode, callback і v ігноруються, а type=episode нічого не знаходить. Відповідь для серіалу має totalSeasons, але не має даних про серії. Для сезонів використовуйте ендпоінти tv у стилі TMDB.

### Звідки беруться постери?

Поле Poster містить адресу на img.amodb.dev розміру w300. Зображення не потребують ключа, тож адресу можна підставити прямо в тег img.

## Пов'язані сторінки

- [Альтернатива OMDb API](https://amodb.dev/uk/omdb-api-alternative/): Добовий ліміт OMDb тісний або потрібен не один запис на виклик? amodb відповідає на запити у стилі OMDb і обслуговує ендпоінти TMDB v3 на одному ключі.
- [Пошук за зовнішнім ID](https://amodb.dev/uk/find-by-external-id/): Знайдіть фільм, серіал чи персону за id IMDb, TVDB, Wikidata або Kinopoisk через find TMDB, а також прочитайте зовнішні id і факти Wikidata про проєкт.
- [API деталей фільму](https://amodb.dev/uk/movies/): API деталей фільму з тими самими шляхами та JSON, що в TMDB v3. Отримайте фільм за id, додайте акторів, рейтинги й настрої через append_to_response, 14 мовами.
- [API зображень і хост зображень](https://amodb.dev/uk/images-api/): API зображень фільмів зі шляхами TMDB v3: списки постерів, фонів, логотипів і кадрів проєкту, а потім завантаження з img.amodb.dev у 10 розмірах без ключа.
- [Автентифікація](https://amodb.dev/uk/authentication/): Як надсилати ключ amodb: api_key у запиті, заголовок Authorization Bearer або apikey для викликів OMDb. Формат ключа, зберігання, заміна та помилки 401.
- [Швидкий старт](https://amodb.dev/uk/quickstart/): Перший виклик amodb: отримайте ключ, запросіть деталі фільму в curl, JavaScript, Python, PHP чи Go і завантажте постер з img.amodb.dev. Менш ніж за 2 хвилини.

Оновлено: 2026-10-18. Source: https://amodb.dev/uk/omdb-endpoint/
