Trakt API alternative

Trakt centers on user data: watch history, watchlists, ratings, calendars and OAuth. amodb does not store user activity. It is a paid metadata API for movies, TV, people, images and ratings. Many apps use both: keep user state in Trakt or your own database, and read title data from amodb.

Different jobs, different tools

Trakt centers on user data: watch history, watchlists, ratings, calendars and OAuth sign in. It also has public metadata endpoints, and its docs state the limits that apply. amodb has one job: metadata for movies, TV and people, returned as JSON in TMDB v3 shape. Choose Trakt for what your users did. Choose amodb for what a title is. Most apps that need both call each service for its own half.

User data against title data

JobTraktamodb
Watch historyCore featureNot offered, store it yourself
Watchlists and listsCore featureNot offered, writes return 405
User ratingsCore featureNot offered, writes return 405
CalendarsPer user, check their docsnext_episode_to_air per show and schedule lists
Sign inOAuthKey only, no user login
Title metadataPublic endpoints, check their docs for limitsDetail endpoints in 14 languages
Cast and crewCheck their docs/credits for a title, combined_credits for a person
ImagesCheck their docsimg.amodb.dev, no key needed
TrailersCheck their docs/videos with type and official
Changed since a dateCheck their docsNot offered, there are no changes feeds

For schedules, GET /3/tv/airing_today and GET /3/tv/on_the_air list shows by air date, and each series record carries its own next_episode_to_air. For a show that has ended, that field is null. Both lists are described on trending and lists. The calendar for one user is something you assemble from your own watch records.

Feature comparison

FeatureTraktamodb
Pricing modelCheck their docsPrepaid periods of 1 to 24 months
Free tierCheck their docsNone, and no trial
AuthenticationOAuth for user data, check their docs for public callsapi_key or Bearer header
Response formatJSON, check their docsJSON in TMDB v3 shape
LanguagesCheck their docs14 interface languages
MoviesYesYes
TVYesYes, with seasons and episodes
PeopleCheck their docsYes
ImagesCheck their docsimg.amodb.dev, same size tokens as TMDB
RatingsUser ratings, check their docsScores from IMDb, Kinopoisk, Metacritic, Rotten Tomatoes and TMDB where known
Rate limitCheck their docs for limits20, 40 or 120 per minute per key
Commercial useCheck their docsPaid plans, see pricing
CompatibilityIts own APITMDB v3 reads and OMDb

Where amodb differs

  • No login screen for your users. A server side key is enough. Nobody connects an account, so there is no token to refresh and no consent screen to explain.
  • Breadth of fields. Runtime, genres, production companies, certifications, translations and keywords all come from the detail endpoints, in the language you ask for.
  • Published limits. The plan limit is a number per minute, and each reply shows what is left. You can size a background sync from those numbers.
  • Mood meters and soundtracks. The extensions on moods and soundtracks add data that is not part of TMDB v3.

Where Trakt is a better fit

  • Anything personal. Scrobbling, history sync, social lists and per user calendars are Trakt features. amodb has no accounts and no write methods.
  • Cross device state. If a user expects the same watched marks on a phone and a TV, the state must live in a user service, and amodb is not one.
  • Existing OAuth apps. If your app already holds Trakt tokens, you keep them. Add amodb only for the title data you now fetch elsewhere.

Migrate to amodb: join your records

You do not migrate user data, because amodb does not hold any. You replace metadata calls. Trakt items carry ids for other databases (check their docs for the exact fields), so store the TMDB id or the IMDb id next to each watch record and use it here.

PHP
<?php
declare(strict_types=1);

function amodb(string $path): array
{
    $ch = curl_init('https://api.amodb.dev/3' . $path);
    curl_setopt_array($ch, [
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_TIMEOUT => 10,
        CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . getenv('AMODB_KEY')],
    ]);
    $body = curl_exec($ch);
    $status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
    curl_close($ch);
    if ($status !== 200) {
        throw new RuntimeException("amodb returned $status");
    }
    return json_decode($body, true);
}

$show = amodb('/tv/1396?language=en-US');
$next = $show['next_episode_to_air'] ?? null;
echo $show['name'], ' ', $show['status'], PHP_EOL;
echo $next ? 'Next: ' . $next['air_date'] : 'No episode scheduled', PHP_EOL;

When you hold only an IMDb id, call /3/find/tt0903747?external_source=imdb_id once and keep the tv_results id. A 429 includes Retry-After, as described on rate limits.

Sizing a refresh job

A user library of 200 shows needs 200 detail requests to refresh once. At 20 requests per minute that takes 10 minutes, at 40 it takes 5, and at 120 it takes under 2. The key check runs before the edge cache, so repeated calls count too. amodb has no changes feeds, so it cannot tell you which ids changed since a date. Read status and next_episode_to_air from the details reply instead. Refresh the shows that are still running often, and refresh ended shows rarely. Details stay cached for 6 hours, so a refresh more often than that returns the same data.

Pricing

amodb is prepaid and does not renew by itself. Pick 1, 3, 6, 12 or 24 months, which earn 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 there is no free tier. Amounts are on pricing.

Questions and answers

Can amodb replace Trakt watch history and watchlists?

No. amodb stores no user activity, and TMDB style account, session, rating and list write methods return 405 with status_code 37. Keep watch history in Trakt or in your own database.

Do I need OAuth to call amodb?

No. Each request carries your key in the api_key query parameter or in an Authorization Bearer header. There is no user login flow because the API serves metadata, not personal data.

How do I join Trakt records with amodb titles?

Trakt items list ids for other databases such as IMDb and TMDB (check their docs for the exact fields). A TMDB id works directly on amodb, and an IMDb id resolves through /3/find with external_source=imdb_id.

Is there a calendar of upcoming episodes?

Series details give next_episode_to_air for each show you track, and /tv/airing_today and /tv/on_the_air list shows by schedule. amodb does not build a calendar for a specific user.

What are the rate limits compared with Trakt?

Check their docs for Trakt limits on public metadata endpoints. amodb allows 20, 40 or 120 requests per minute per key, depending on the plan, and shows the remaining count in response headers.