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 element | On amodb |
|---|---|
apikey | Same parameter, filled with your amodb key |
i and t | Look up by IMDb id or by title |
s and page | Search with 10 results per page and a totalResults count, page up to 100 |
type and y | Filter by movie or series and by year |
plot | short or full |
r | Only json is accepted |
| Body fields | Named as in OMDb, from Title to Response |
Ratings | An 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=xmlreturns 400 with{"Response":"False","Error":"Only r=json is supported."}. - Seasons and episodes.
SeasonandEpisodeare ignored, andtype=episodefinds nothing. A request withi=tt0903747&Season=1returns the series record, not a season. Use/3/tv/{id}/season/{n}for episodes. - Other parameters.
callbackis ignored. - Fields without data.
DVD,ProductionandWebsiteare always"N/A". Series records havetotalSeasonsand leave outDVD,BoxOffice,ProductionandWebsite. - Posters. The
Posterfield points tohttps://img.amodb.dev/t/p/w300/...instead of another host. Swapw300forw780to 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.
{
"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
| Feature | OMDb | amodb |
|---|---|---|
| Pricing model | Free key plus a paid supporter tier, check their site | Prepaid periods, 1 to 24 months |
| Free tier | Free key with a daily cap of 1,000, check their site | None, and no trial |
| Authentication | apikey parameter | apikey on /omdb/, api_key or Bearer on /3 |
| Response format | JSON or XML | JSON |
| Languages | Check their docs | 14 interface languages on /3 paths |
| Movies | Yes | Yes |
| TV | Series and episodes, check their docs for fields | Series records on /omdb/, seasons and episodes on /3 paths |
| People | Names as text in each record | Profiles, filmography and images on /3 paths |
| Images | Poster link in each record | Poster link plus image lists, img.amodb.dev |
| Ratings | Ratings, Metascore and imdbRating fields | The same fields, plus a ratings object on /3 paths |
| Rate limit | Daily cap on the free key, check their site | 20, 40 or 120 per minute per key |
| Commercial use | Check their site | Sold as a paid API, see pricing |
| Compatibility | Defines the OMDb protocol | OMDb 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
/3paths you can ask for the same title with credits, videos and translations in one call, and theimdbIDfinds the record through/3/find. - Larger images. OMDb style records give one poster link. The image host serves ten size tokens, from
w92tooriginal. - More rating sources. The
/3/movie/{id}/ratingsextension 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/3paths 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.
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 -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.