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
| Job | Trakt | amodb |
|---|---|---|
| Watch history | Core feature | Not offered, store it yourself |
| Watchlists and lists | Core feature | Not offered, writes return 405 |
| User ratings | Core feature | Not offered, writes return 405 |
| Calendars | Per user, check their docs | next_episode_to_air per show and schedule lists |
| Sign in | OAuth | Key only, no user login |
| Title metadata | Public endpoints, check their docs for limits | Detail endpoints in 14 languages |
| Cast and crew | Check their docs | /credits for a title, combined_credits for a person |
| Images | Check their docs | img.amodb.dev, no key needed |
| Trailers | Check their docs | /videos with type and official |
| Changed since a date | Check their docs | Not 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
| Feature | Trakt | amodb |
|---|---|---|
| Pricing model | Check their docs | Prepaid periods of 1 to 24 months |
| Free tier | Check their docs | None, and no trial |
| Authentication | OAuth for user data, check their docs for public calls | api_key or Bearer header |
| Response format | JSON, check their docs | JSON in TMDB v3 shape |
| Languages | Check their docs | 14 interface languages |
| Movies | Yes | Yes |
| TV | Yes | Yes, with seasons and episodes |
| People | Check their docs | Yes |
| Images | Check their docs | img.amodb.dev, same size tokens as TMDB |
| Ratings | User ratings, check their docs | Scores from IMDb, Kinopoisk, Metacritic, Rotten Tomatoes and TMDB where known |
| Rate limit | Check their docs for limits | 20, 40 or 120 per minute per key |
| Commercial use | Check their docs | Paid plans, see pricing |
| Compatibility | Its own API | TMDB 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
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.