Movie and TV metadata API

Movie and TV data, TMDB and OMDb compatible

amodb is a paid movie and TV metadata API. It keeps the TMDB v3 and OMDb paths, parameters and JSON, so an existing client works after a base URL change. One key covers both styles, 14 languages and posters on img.amodb.dev. Every plan includes all data; plans differ only in requests per minute.

  • 14 languages
  • 2 API styles, TMDB v3 and OMDb
  • 1 key for both styles
  • 6 extensions on top of TMDB

GETapi.amodb.dev/3/movie/550?language=en-US

200 OKapplication/json
{
  "id": 550,
  "imdb_id": "tt0137523",
  "title": "Fight Club",
  "release_date": "1999-10-15",
  "runtime": 139,
  "genres": [{ "id": 18, "name": "Drama" }],
  "vote_average": 8.4,
  "vote_count": 30212,
  "poster_path": "/pB8BM7pdSp6B6Ih7QZ4DrQ3PmJK.jpg"
}

Same paths and JSON as TMDB v3 and OMDb. Change the base URL, keep your code.

Change the base URL, keep your code

amodb answers on the same paths as TMDB v3. A request for movie 550 returns the same JSON fields your client already parses: id, title, genres, release_date, poster_path and the rest.

Send your key as api_key in the query or as an Authorization: Bearer header. Both work on every endpoint.

curl "https://api.amodb.dev/3/movie/550?language=en-US" \
  -H "Authorization: Bearer $AMODB_KEY"
const res = await fetch("https://api.amodb.dev/3/movie/550?language=en-US", {
  headers: { Authorization: `Bearer ${process.env.AMODB_KEY}` },
});
const movie = await res.json();
console.log(movie.title, movie.release_date);
import os
import requests

res = requests.get(
    "https://api.amodb.dev/3/movie/550",
    params={"language": "en-US"},
    headers={"Authorization": f"Bearer {os.environ['AMODB_KEY']}"},
    timeout=10,
)
movie = res.json()
print(movie["title"], movie["release_date"])
JSON
{
  "id": 550,
  "imdb_id": "tt0137523",
  "title": "Fight Club",
  "release_date": "1999-10-15",
  "runtime": 139,
  "genres": [{ "id": 18, "name": "Drama" }],
  "vote_average": 8.4,
  "poster_path": "/pB8BM7pdSp6B6Ih7QZ4DrQ3PmJK.jpg"
}

One key for OMDb style lookups

The OMDb compatible endpoint lives at https://api.amodb.dev/omdb/. It takes i, t, s, type, y, plot and page, and returns Title, Year, imdbRating, Ratings and the other OMDb fields.

The Poster field points to img.amodb.dev, so posters load from the same service. Errors keep the OMDb shape: {"Response":"False","Error":"..."}.

curl "https://api.amodb.dev/omdb/?i=tt0137523&plot=short&apikey=$AMODB_KEY"
const url = new URL("https://api.amodb.dev/omdb/");
url.searchParams.set("t", "Fight Club");
url.searchParams.set("y", "1999");
url.searchParams.set("apikey", process.env.AMODB_KEY);

const film = await (await fetch(url)).json();
console.log(film.Title, film.imdbRating);
import os
import requests

film = requests.get(
    "https://api.amodb.dev/omdb/",
    params={"i": "tt0137523", "apikey": os.environ["AMODB_KEY"]},
    timeout=10,
).json()
print(film["Title"], film["imdbRating"])
JSON
{
  "Title": "Fight Club",
  "Year": "1999",
  "Runtime": "139 min",
  "Director": "David Fincher",
  "imdbRating": "8.8",
  "imdbID": "tt0137523",
  "Poster": "https://img.amodb.dev/t/p/w300/pB8BM7pdSp6B6Ih7QZ4DrQ3PmJK.jpg",
  "Response": "True"
}

Data that TMDB v3 does not return

Every key can call the amodb extensions on the same base URL. Add them with append_to_response or call them on their own.

  • Mood meters

    How tense, dark or witty a show feels, from 0 to 100, with one extra call.

    GET /3/tv/1396/moods
  • Ratings in one call

    IMDb, TMDB and three more scores with vote counts, from one endpoint.

    GET /3/movie/550/ratings
  • Rate limit you can see

    Every response tells you how many requests are left this minute.

  • One id, 14 languages

    The same movie in every language amodb serves. Unknown tags fall back to English.

    GET /3/movie/129?language=he-IL
  • Every TMDB image size

    From w92 thumbnails to original files on img.amodb.dev. No key needed.

  • Find by any external id

    Send an IMDb id or another external id and get the TMDB record back.

    GET /3/find/tt0137523?external_source=imdb_id
  • Cinema showtimes

    Showtimes by country for titles in cinemas, when they are known.

    GET /3/movie/550/showtimes?country=US
  • Soundtracks

    The songs used in a movie or a show, on the same base URL.

    GET /3/movie/550/soundtracks

Titles and overviews in 14 languages

Pass a TMDB style tag such as ru-RU or pt-BR in language. amodb serves 14 base languages and falls back to English for any other tag, so a request never fails because of a language.

  • en English
  • ru Русский
  • uk Українська
  • be Беларуская
  • zh 中文
  • pt Português
  • bg Български
  • he עברית
  • cs Čeština
  • ro Română
  • fr Français
  • pl Polski
  • it Italiano
  • es Español

Plans differ only in requests per minute

Every plan includes every endpoint, all 14 languages, images and the extensions. You pay once for 1, 3, 6, 12, or 24 months, and a longer period costs less per month. There is no free tier and no automatic renewal.

  • Lite

    20 requests per minute

    $3.11 per month

    up to 28,800 requests per day

    Get Lite
  • Pro+

    120 requests per minute

    $4.31 per month

    up to 172,800 requests per day

    Get Pro+

Built for production traffic

  • Shared edge cache

    Popular lists stay cached for 30 minutes, details for 6 hours and configuration for 24 hours.
  • Clear rate limits

    Every response carries X-RateLimit-Limit, X-RateLimit-Remaining and X-RateLimit-Reset. A 429 adds Retry-After.
  • TMDB style errors

    Errors return success, status_code and status_message, so existing error handling keeps working.
  • Images without a key

    Posters and backdrops load from img.amodb.dev/t/p/{size}/{file} in every TMDB size, cached for 30 days.

Questions and answers

Do I need to change my TMDB client code?

No. Point the base URL to https://api.amodb.dev/3 and use your amodb key as api_key or as a Bearer token. Paths, query parameters and JSON fields stay the same as TMDB v3.

Does the same key work for OMDb style calls?

Yes. Send it as apikey to https://api.amodb.dev/omdb/. The parameters i, t, s, type, y, plot and page work as in OMDb, and the response uses the OMDb field names.

Is there a free tier or a trial?

No. amodb is prepaid only. You pick a plan and a period, pay once, and the key works until the period ends. There is no automatic renewal.

What is the difference between plans?

Only the request rate: 20, 40 or 120 requests per minute. Every plan includes every endpoint, all 14 languages, images and the amodb extensions.

Which languages are served?

English, Russian, Ukrainian, Belarusian, Chinese, Portuguese, Bulgarian, Hebrew, Czech, Romanian, French, Polish, Italian and Spanish. Pass a TMDB style tag such as ru-RU; any other language falls back to English.

Start with one key

Every plan includes all endpoints, all 14 languages and images. Plans differ only in requests per minute.