amodb vs TMDB
amodb keeps TMDB v3 paths, query parameters and JSON for most read endpoints, so a client needs a new base URL and key. Writes answer 405, and changes, aggregate credits and review lookups are not offered. Other differences are terms, 14 languages, five extensions and per-key limits.
The short comparison
amodb is an independent API that speaks the same protocol as TMDB v3. A client written for TMDB reads from amodb after you change the base URL and the key, as long as it does not call a path from the not offered table below. The choice is therefore about terms, extras and a few gaps. TMDB offers a free API for qualifying use under its own terms. amodb is a read only, paid API with 14 languages, five extra data blocks and a limit counted per key.
Endpoint parity
Each row shows a TMDB v3 read path and how it behaves on https://api.amodb.dev/3.
| Area | TMDB v3 path | On amodb |
|---|---|---|
| Movie details | /movie/{movie_id} | Same, with five more append_to_response values |
| TV details | /tv/{series_id} | Same, but no type field, and created_by is empty for most series |
| Seasons and episodes | /tv/{series_id}/season/{season_number} | Same shape. Season images, videos and translations are empty, and season and episode external_ids are null |
| People | /person/{person_id} | Same, with combined_credits, movie_credits, tv_credits, external_ids and images (profiles only) |
| Credits | /movie/{movie_id}/credits | Same. On episodes, cast is empty |
| Search | /search/multi | Same, cached 10 minutes |
| Discover | /discover/movie | Same, cached 30 minutes |
| Trending | /trending/{media_type}/{time_window} | Same, cached 30 minutes |
| Lists | /movie/popular | Same, page from 1 to 500 |
| Images | /movie/{movie_id}/images | Same shape, files load from img.amodb.dev |
| Videos | /movie/{movie_id}/videos | Same |
| Translations | /movie/{movie_id}/translations | Same, 14 languages served |
| Keywords | /movie/{movie_id}/keywords | Same |
| Reviews | /movie/{movie_id}/reviews | Answers 200, but only a few titles have reviews, so an empty list is normal |
| Collections | /collection/{collection_id} | Same, parts ordered by release date |
| Companies and networks | /company/{company_id} | Same keys. A company description is empty and parent_company is null |
| Genres | /genre/movie/list | Same |
| Configuration | /configuration | Same keys, image host is img.amodb.dev |
| Find by external id | /find/{external_id} | Same endpoint, plus kinopoisk_id. tv_episode_results and tv_season_results are always empty |
| Episode groups | /tv/{series_id}/episode_groups | Lists the groups of a show, without their contents |
Not offered on amodb
These TMDB v3 calls have no equivalent. Unknown paths answer 404 with status_code 34, and write methods answer 405 with status_code 37.
| TMDB v3 call | amodb answer |
|---|---|
/movie/changes, /tv/changes, /person/changes and changes under one id | 404, status_code 34 |
aggregate_credits under a series or a season | 404, status_code 34 |
/credit/{credit_id} and /review/{review_id} | 404, status_code 34 |
/tv/episode_group/{id} | 404, status_code 34 |
/person/{person_id}/translations, tagged_images and /person/latest | 404, status_code 34 |
images, translations and alternative_names for collections, companies and networks | 404, status_code 34 |
/configuration/timezones | 404, status_code 34 |
Everything under account, authentication, guest_session and list, and any /rating or /account_states path | 405, status_code 37 |
If you add aggregate_credits or changes to append_to_response, amodb ignores the name without an error, so the key is simply missing from the body.
Feature comparison
| Feature | TMDB | amodb |
|---|---|---|
| Pricing model | Free for qualifying use, under TMDB terms | Prepaid, 1 to 24 months per purchase |
| Free tier | Yes, for qualifying use | None, and no trial |
| Authentication | v3 key in api_key, or v4 token as Bearer | api_key or Bearer with a 32 character hex key |
| Response format | JSON | JSON, same fields on the paths it serves |
| Languages | Check their docs | 14 served, other tags fall back to en |
| Movies | Yes | Yes |
| TV | Yes | Yes |
| People | Yes | Yes |
| Images | Yes | img.amodb.dev, sizes w92 to original |
| Ratings | TMDB user score, other sources: check their docs | Five sources in one object where known |
| Write methods | Account, list and rating methods | None, they answer 405 |
| Rate limit | Check their docs | 20, 40 or 120 per minute per key |
| Commercial use | Check their terms for commercial use and attribution | Paid plans, see pricing |
| Compatibility | Defines TMDB v3 | Most TMDB v3 read paths and an OMDb route |
What differs in detail
- Terms. TMDB asks you to read its terms for commercial use and attribution. amodb is sold by prepaid period, has no automatic renewal, no free tier and no trial.
- Languages. amodb serves en, ru, uk, be, zh, pt, bg, he, cs, ro, fr, pl, it and es. It accepts TMDB tags such as
ru-RUandpt-BR. German, Japanese and Korean fall back toen, whileoriginal_titlekeeps the source title. For TMDB language coverage, check their docs. See languages. - Extensions.
append_to_responsealso takesmoods,soundtracks,ratings,wikidataandshowtimes, and each has its own path under movies and series. - External ids.
/3/findresolvesimdb_id,tvdb_id,wikidata_id,kinopoisk_id,facebook_id,twitter_idandinstagram_id. The sourcesfreebase_mid,freebase_id,tvrage_id,tiktok_idandyoutube_idare accepted but return empty arrays. A missing or unknownexternal_sourceanswers 400 withstatus_code22. - Empty by design. Season images, videos and translations and a company
descriptionare always empty. Reviews andcreated_byon a series are filled for only a few titles. Season and episodeexternal_idsare all null. - Adult titles.
include_adultis ignored. Adult titles and people are never served and answer 404. - Images. The CDN path is
https://img.amodb.dev/t/p/{size}/{file}. No key is needed and files cache for 30 days. - Limits. The window is a sliding 60 seconds per key. Headers show the remaining count, and cache hits still count because the limit check runs first.
- Independence. The catalog comes from public and open sources and our own enrichment. A shared shape does not guarantee identical values for every field of every title.
Where TMDB is a better fit
- Free qualifying use. No payment is needed, and amodb cannot match that.
- Writes. Rating a title, building a list and account sessions work on TMDB. On amodb they return 405.
- Changes feeds. TMDB lists the ids that changed. amodb has no such feed, so you refresh on your own schedule.
- Aggregate credits and credit lookups. Both answer 404 on amodb. Use
/creditson the title. - Wider language needs. If your UI needs a language outside the 14, check TMDB first.
- Existing approval. A team that has cleared TMDB with legal review should weigh the cost of a second review.
Migrate to amodb
The change is one line per request.
# before: TMDB_BASE is your current TMDB v3 base URL
curl -s "$TMDB_BASE/movie/550?api_key=$TMDB_KEY"
# after
curl -s "https://api.amodb.dev/3/movie/550?api_key=$AMODB_KEY"Before cutover, compare the shape of a few responses side by side. This script prints top level keys that one side returns and the other does not.
async function topLevelKeys(base, key, path) {
const res = await fetch(`${base}${path}?api_key=${key}`);
if (!res.ok) throw new Error(`${path} returned ${res.status}`);
return Object.keys(await res.json()).sort();
}
for (const path of ['/movie/550', '/tv/1396', '/person/31']) {
const current = await topLevelKeys(process.env.TMDB_BASE, process.env.TMDB_KEY, path);
const next = await topLevelKeys('https://api.amodb.dev/3', process.env.AMODB_KEY, path);
const missing = current.filter((k) => !next.includes(k));
console.log(path, missing.length ? `missing: ${missing.join(', ')}` : 'same keys');
}Optional fields can differ for a given title, so read a missing key as a lead to inspect, not as a verdict. Then work through this list:
- Pick a plan on pricing, then create a key in your account dashboard.
- Move the base URL and key into configuration.
- Read
images.secure_base_urlfrom/3/configuration. - Search your code for write calls and for the paths in the not offered table. Keep the writes on TMDB and replace the rest.
- Add a 429 handler that waits
Retry-Afterseconds. See rate limits and errors.
Pricing
amodb is prepaid. Pick 1, 3, 6, 12 or 24 months, which take 0, 10, 20, 30 or 40 percent off, and one of three plans at 20, 40 or 120 requests per minute. Every plan returns all data, and none renews on its own. See pricing for amounts.
Questions and answers
Are all TMDB v3 read endpoints available on amodb?
No. Most read paths keep the same path, query parameters and JSON shape, and the parity table on this page groups them by area. Writes answer 405 with status_code 37. Changes feeds, aggregate credits, credit and review lookups, episode group contents and person translations answer 404 with status_code 34.
What changes in my code when I move from TMDB?
Three things: the base URL becomes https://api.amodb.dev/3, the key becomes your amodb key, and image URLs use img.amodb.dev. Read the image base from the configuration endpoint. The paths stay the same, except for the calls listed as not offered.
Will movie and TV ids stay the same?
Ids follow the TMDB numbering. Fight Club is 550 and Breaking Bad is 1396 on both. Values of individual fields can still differ for some titles, so compare a sample from your own catalog before cutover.
Can I use both services together?
Yes. Because the protocol is the same, you can keep TMDB for account and list features, changes feeds and aggregate credits, and use amodb for catalog reads. Keep two base URLs and two keys in your configuration.
Which service is cheaper?
TMDB offers a free API for qualifying use under its own terms, so it costs nothing when you qualify. amodb is paid from the first request, with prepaid periods of 1 to 24 months and a discount up to 40 percent.