OMDb API alternative

OMDb is a small single record API with a free key and a daily cap of 1,000 (check their site). amodb answers i, t, s, type, y, plot and page at /omdb/ with the same body fields, limits you per minute and adds TMDB v3 endpoints on one key. JSON only, no XML, no episodes.

Pick by the shape of your calls

Choose OMDb when you want one small record per title and its free key covers your volume. Choose amodb when you outgrow that, or when you want the same OMDb request style next to credits, images and translations on one key. OMDb returns JSON or XML, uses an apikey parameter and offers a free key with a daily request cap of 1,000 (check their site) plus a paid supporter tier. amodb is paid only and answers the main OMDb parameters as well as TMDB v3.

What stays the same

The OMDb endpoint is at https://api.amodb.dev/omdb/, and the trailing slash is optional. Your existing parsing code should not need edits for these elements.

OMDb elementOn amodb
apikeySame parameter, filled with your amodb key
i and tLook up by IMDb id or by title
s and pageSearch with 10 results per page and a totalResults count, page up to 100
type and yFilter by movie or series and by year
plotshort or full
rOnly json is accepted
Body fieldsNamed as in OMDb, from Title to Response
RatingsAn array of Source and Value pairs for Internet Movie Database, Rotten Tomatoes and Metacritic, when present
Errors{"Response":"False","Error":"..."} with OMDb wording, in an HTTP 200 reply

What does not carry over

  • XML. A request with r=xml returns 400 with {"Response":"False","Error":"Only r=json is supported."}.
  • Seasons and episodes. Season and Episode are ignored, and type=episode finds nothing. A request with i=tt0903747&Season=1 returns the series record, not a season. Use /3/tv/{id}/season/{n} for episodes.
  • Other parameters. callback is ignored.
  • Fields without data. DVD, Production and Website are always "N/A". Series records have totalSeasons and leave out DVD, BoxOffice, Production and Website.
  • Posters. The Poster field points to https://img.amodb.dev/t/p/w300/... instead of another host. Swap w300 for w780 to get a larger image from the same path, and no key is needed for images.

The full parameter and error list is on the OMDb endpoint page.

Example response

A request with t=Fight Club returns a flat object. The reply below is real, with only the Plot text shortened.

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 an...",
  "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"
}

Values are strings, as in OMDb, so parse imdbRating, imdbVotes and Runtime yourself. Each call counts as one request against your per minute limit, however many fields you read.

Feature comparison

FeatureOMDbamodb
Pricing modelFree key plus a paid supporter tier, check their sitePrepaid periods, 1 to 24 months
Free tierFree key with a daily cap of 1,000, check their siteNone, and no trial
Authenticationapikey parameterapikey on /omdb/, api_key or Bearer on /3
Response formatJSON or XMLJSON
LanguagesCheck their docs14 interface languages on /3 paths
MoviesYesYes
TVSeries and episodes, check their docs for fieldsSeries records on /omdb/, seasons and episodes on /3 paths
PeopleNames as text in each recordProfiles, filmography and images on /3 paths
ImagesPoster link in each recordPoster link plus image lists, img.amodb.dev
RatingsRatings, Metascore and imdbRating fieldsThe same fields, plus a ratings object on /3 paths
Rate limitDaily cap on the free key, check their site20, 40 or 120 per minute per key
Commercial useCheck their siteSold as a paid API, see pricing
CompatibilityDefines the OMDb protocolOMDb parameters above, and TMDB v3 reads

Where amodb differs

  • Per minute limits. Plans allow 20, 40 or 120 requests per minute in a sliding 60 second window. Each keyed reply has X-RateLimit-Remaining, so a batch job can slow itself down before it sees a 429.
  • A way up from single records. An OMDb record has a cast list as text. With the /3 paths you can ask for the same title with credits, videos and translations in one call, and the imdbID finds the record through /3/find.
  • Larger images. OMDb style records give one poster link. The image host serves ten size tokens, from w92 to original.
  • More rating sources. The /3/movie/{id}/ratings extension adds Kinopoisk, Metacritic, Rotten Tomatoes and TMDB values where known.

Where OMDb is a better fit

  • Small or free projects. A free key with a daily cap of 1,000 is enough for a prototype or a hobby site, and amodb has no free tier.
  • XML consumers. If a legacy system parses XML, OMDb offers it and amodb does not.
  • Season and episode lookups. The amodb /omdb/ route has no season or episode mode, so a client built on it needs the /3 paths instead.
  • Simplicity. One endpoint and a handful of parameters is easy to learn. If that is all you need, you gain little by moving.

Migrate to amodb

Only the base URL and the key change. Keep the rest of the request as it is, after you search your code for r=xml, Season, Episode and type=episode.

JavaScript
const OMDB_BASE = process.env.OMDB_BASE_URL; // before: your current OMDb base URL
const AMODB_BASE = 'https://api.amodb.dev/omdb/'; // after

async function lookup(title) {
  const url = new URL(AMODB_BASE);
  url.searchParams.set('apikey', process.env.AMODB_KEY);
  url.searchParams.set('t', title);
  url.searchParams.set('plot', 'short');
  const res = await fetch(url);
  const data = await res.json();
  if (data.Response === 'False') throw new Error(data.Error);
  return data;
}

const movie = await lookup('Fight Club');
console.log(movie.Title, movie.Year, movie.imdbRating, movie.Poster);

Keep checking the Response field, as you did with OMDb. When the value is the string "False", the Error field carries the message. For episodes, map the imdbID once with /3/find and read seasons from the /3 side:

curl
curl -s "https://api.amodb.dev/3/find/tt0903747?external_source=imdb_id&api_key=$AMODB_KEY"
curl -s "https://api.amodb.dev/3/tv/1396/season/1?api_key=$AMODB_KEY"

For the TMDB style side, see authentication and the quickstart.

Pricing

amodb is paid, and it renews only when you buy another period. The three plans differ in rate alone, at 20, 40 or 120 requests per minute, and each returns all data. Periods run 1, 3, 6, 12 or 24 months, and the longer ones take 10 to 40 percent off. Check pricing for current amounts.

Questions and answers

Do I have to rewrite my OMDb client?

Not if it uses i, t, s, type, y, plot and page. Change the base URL to https://api.amodb.dev/omdb/ and put your amodb key in the apikey parameter. The body keeps OMDb field names such as imdbRating. Season and Episode parameters and r=xml are not supported.

Does the amodb OMDb endpoint return XML?

No. It returns JSON only. A request with r=xml gets a 400 reply with the error Only r=json is supported, so remove the r parameter or set r=json before you switch.

Can I look up seasons and episodes on the OMDb endpoint?

No. The Season and Episode parameters are ignored, so a request with i and Season=1 returns the series record, and type=episode finds nothing. Read episodes from /3/tv/{id}/season/{n} with the same key.

How is the limit different from the OMDb free key?

OMDb documents a daily cap of 1,000 for its free key, so check their site for current terms. amodb limits requests per minute per key, at 20, 40 or 120 depending on the plan.

Where do the poster images load from?

The Poster field points to img.amodb.dev at the w300 size. Replace w300 with another size such as w780 in the same URL for a larger image. Images need no key.

Can I use the same key for TMDB style calls?

Yes. One key works for /omdb/ and for /3 paths. That lets you fetch credits, trailers or translations for an imdbID without a second subscription.