Which one fits a TV project

TheTVDB is TV focused and keeps several episode orderings for a show, including aired, DVD and absolute, behind an API key model. Check their docs for licensing before you plan a commercial product. Pick amodb when you want TV, movies and people from one key, TMDB v3 paths and 14 languages. Pick TheTVDB when exact alternate numbering is the center of your app, because amodb lists the episode groups of a show but does not serve what is inside them.

How TV data maps between the two

The concepts line up, but the names differ. This table covers what a TV app usually reads.

NeedTheTVDB approachamodb call
One seriesSeries record by TVDB idGET /3/tv/1396, after a tvdb_id lookup
Season listCheck their docsseasons array in series details
One season with episodesCheck their docsGET /3/tv/1396/season/1
One episodeCheck their docsGET /3/tv/1396/season/1/episode/1
Which orderings existAired, DVD and absolute orderingsGET /3/tv/1396/episode_groups
Episodes inside one orderingCheck their docsNot offered, /3/tv/episode_group/{id} answers 404
Next episode to airCheck their docsnext_episode_to_air in series details

Episode fields use the TMDB names: air_date, episode_number, season_number, runtime and still_path. Season and episode external_ids are all null, so a TVDB id of a single season or episode cannot be read from amodb. Join on season_number and episode_number instead. Details are on seasons and episodes.

What the episode group list returns

The list call shows which orderings exist for a series. It does not return the episodes inside them.

FieldMeaning
idId of the group, a string
nameName of the ordering, such as DVD / PVOD
descriptionText from the source, often empty
typeA number that says which kind of ordering it is
episode_countEpisodes in the ordering
group_countBlocks in the ordering, such as seasons
networkAn object with the network, or null

This is a real reply for Breaking Bad.

JSON
{
  "id": 1396,
  "results": [
    {
      "description": "Seasons grouped as they appear on DVD, as well as paid video-on-demand services, such as Prime Video and YouTube.",
      "episode_count": 62,
      "group_count": 6,
      "id": "69f50757054263b7bc87e32a",
      "name": "DVD / PVOD",
      "network": null,
      "type": 3
    }
  ]
}

Some shows return one aired order and others several, and some return an empty results array. Test the shows you care about. Because the contents of a group are not offered, an app that needs the DVD or absolute number of each episode cannot get it from amodb.

Feature comparison

FeatureTheTVDBamodb
Pricing modelAPI key model, check their docs for licensingPrepaid periods of 1 to 24 months
Free tierCheck their docsNone, and no trial
AuthenticationAPI key, check their docs for the flowapi_key or Bearer header
Response formatJSON, check their docsJSON in TMDB v3 shape
LanguagesCheck their docs14 interface languages
MoviesCheck their docsYes
TVYes, its main focusYes, with seasons and episodes
PeopleCheck their docsYes
ImagesCheck their docsimg.amodb.dev, no key needed
RatingsCheck their docsIMDb and four other sources where known
Rate limitCheck their docs20, 40 or 120 per minute per key
Commercial useCheck their docs for licensingPaid plans, see pricing
CompatibilityIts own APITMDB v3 reads and OMDb

Where amodb differs

  • One key for the whole catalog. A series, its cast, its trailers and a movie that shares an actor all use the same base URL and the same limit.
  • Ratings next to the episode guide. append_to_response=ratings on series details adds IMDb and other scores in one call.
  • Plain headers for pacing. X-RateLimit-Remaining and X-RateLimit-Reset tell a sync job how many requests are left in the 60 second window.
  • Original names preserved. A series keeps original_name while name follows your language, which helps when you show a native title.

Where TheTVDB is a better fit

  • Ordering is the product. If your users argue about DVD against aired against absolute order, TheTVDB treats that as a core part of its model. amodb names the orderings of a show but does not return their episodes, and which groups exist differs by show.
  • Existing integrations. If your pipeline already stores TheTVDB ids and reads its orderings, keep that part and add amodb for the extra data.
  • TV focus. If you never show movies or people, a source built around TV has less to learn.

Migrate to amodb

Map your stored TVDB ids once. After that, use the amodb id for every call. The find endpoint resolves series ids only. Its tv_season_results and tv_episode_results arrays are always empty, so map seasons and episodes by number.

JavaScript
const key = process.env.AMODB_KEY;
const headers = { Authorization: `Bearer ${key}` };
const base = 'https://api.amodb.dev/3';

async function getJson(path) {
  const res = await fetch(`${base}${path}`, { headers });
  if (!res.ok) throw new Error(`${path} returned ${res.status}`);
  return res.json();
}

const found = await getJson('/find/81189?external_source=tvdb_id');
const show = found.tv_results[0];
console.log(show.id, show.name);

const groups = await getJson(`/tv/${show.id}/episode_groups`);
for (const g of groups.results) {
  console.log(g.name, g.type, g.episode_count);
}

The first request returns Breaking Bad with id 1396. The second lists the orderings that exist for that show, with their sizes. To compare numbering with what you store now, read the aired order from /tv/{id}/season/{n} and keep any alternate order on the TheTVDB side. Do that check on your ten most watched shows before you move the rest.

Each call counts as one request in the 60 second window, and a 429 carries Retry-After. See find by external id and rate limits.

Pricing

amodb is prepaid with no automatic renewal. Choose 1, 3, 6, 12 or 24 months and one of three plans at 20, 40 or 120 requests per minute. Longer periods take 10, 20, 30 or 40 percent off, and every plan gets all data. There is no free tier. Amounts are on pricing.