At Trakt, we collect lots of interesting information about what tv shows and movies everyone is watching. Part of the fun with such data is making it available for anyone to mash up and use on their o
Full LLM thinking from the 4-phase benchmark pipeline.
{
"service_type": "platform",
"base_url": "https://api.trakt.tv",
"auth_method": "oauth2",
"auth_config": {
"authorization_url": "https://trakt.tv/oauth/authorize",
"token_url": "https://api.trakt.tv/oauth/token",
"grant_types": ["authorization_code", "refresh_token", "client_credentials"],
"client_id_required": true,
"client_secret_required": true,
"redirect_uri_required": true,
"notes": "OAuth2 device flow also supported. Client credentials used for public/first-party app identification on some endpoints."
},
"endpoints": [
{
"name": "OAuth Token",
"method": "POST",
"path": "/oauth/token"
},
{
"name": "OAuth Revoke",
"method": "POST",
"path": "/oauth/revoke"
},
{
"name": "Search",
"method": "GET",
"path": "/search/{type}?query={query}"
},
{
"name": "Trending Movies",
"method": "GET",
"path": "/movies/trending"
},
{
"name": "Popular Movies",
"method": "GET",
"path": "/movies/popular"
},
{
"name": "Movie Summary",
"method": "GET",
"path": "/movies/{id}"
},
{
"name": "Trending Shows",
"method": "GET",
"path": "/shows/trending"
},
{
"name": "Popular Shows",
"method": "GET",
"path": "/shows/popular"
},
{
"name": "Show Summary",
"method": "GET",
"path": "/shows/{id}"
},
{
"name": "Show Seasons",
"method": "GET",
"path": "/shows/{id}/seasons"
},
{
"name": "Season Episodes",
"method": "GET",
"path": "/shows/{id}/seasons/{season}/episodes"
},
{
"name": "Episode Summary",
"method": "GET",
"path": "/shows/{id}/seasons/{season}/episodes/{episode}"
},
{
"name": "User Profile",
"method": "GET",
"path": "/users/{id}"
},
{
"name": "User Watched History",
"method": "GET",
"path": "/users/{id}/watched/movies|shows"
},
{
"name": "User Watchlist",
"method": "GET",
"path": "/users/{id}/watchlist"
},
{
"name": "User Ratings",
"method": "GET",
"path": "/users/{id}/ratings"
},
{
"name": "Sync Watched",
"method": "POST",
"path": "/sync/history"
},
{
"name": "Sync Collection",
"method": "POST",
"path": "/sync/collection"
},
{
"name": "Sync Ratings",
"method": "POST",
"path": "/sync/ratings"
},
{
"name": "Sync Watchlist",
"method": "POST",
"path": "/sync/watchlist"
},
{
"name": "Scrobble Start",
"method": "POST",
"path": "/scrobble/start"
},
{
"name": "Scrobble Pause",
"method": "POST",
"path": "/scrobble/pause"
},
{
"name": "Scrobble Stop",
"method": "POST",
"path": "/scrobble/stop"
},
{
"name": "Calendars My Shows",
"method": "GET",
"path": "/calendars/my/shows"
},
{
"name": "Recommendations Movies",
"method": "GET",
"path": "/recommendations/movies"
},
{
"name": "Recommendations Shows",
"method": "GET",
"path": "/recommendations/shows"
}
],
"pricing_model": {
"type": "freemium",
"details": {
"free": "API access is free for developers; Trakt VIP subscription exists for end users (ad-free, advanced lists, etc.) but the API itself is free to use.",
"vip": "Trakt VIP adds user-facing features and higher personal data limits, not required for API access.",
"developer_program": "No paid API tiers; fair-use limits apply."
}
},
"rate_limits": {
"authenticated": "1000 requests per 5 minutes per OAuth client (documented baseline)",
"unauthenticated": "Lower unauthenticated limits apply based on client_id; exact numbers may vary",
"headers": ["X-Ratelimit", "X-Ratelimit-... (rate limit info returned in response headers)"],
"notes": "Trakt documents API rate limits on their developer site. Exceeding limits returns HTTP 429. POST sync/scrobble endpoints have separate/special considerations."
},
"capabilities": [
"Movie and TV show metadata (titles, IDs, summaries, images, ratings)",
"Trending, popular, anticipated, and box office data",
"User profiles, watch history, collections, ratings, and watchlists",
"Scrobbling playback events (start, pause, stop)",
"Two-way sync of watched history, collections, ratings, and lists",
"Personalized recommendations",
"User calendars for upcoming episodes",
"Search across movies, shows, episodes, people, and lists",
"Comments, likes, and social/follower data",
"OAuth2 authentication for user-authorized access",
"Integration with media centers (Kodi, Plex, Jellyfin via third-party plugins)",
"Open data mashing via public metadata endpoints",
"ID mapping across TMDB, TVDB, IMDB, and slug identifier0/3 tests passed
| Test | Endpoint | Status | Latency |
|---|---|---|---|
| website_uptime | GET / | 412 | 119ms |
| robots_txt | GET /robots.txt | 403 | 27ms |
| llms_txt | GET /llms.txt | 403 | 29ms |
{
"overall": 68,
"dimensions": {
"token_efficiency": 8.0,
"first_try_success": 6.0,
"response_parseability": 9.0,
"error_clarity": 6.0,
"doc_quality": 8.0,
"auth_simplicity": 5.0,
"latency": 9.0,
"consistency": 5.0
},
"pricing_normalized": {
"model": "freemium",
"api_tier": "free",
"notes": "API is free; Trakt VIP is a user-facing entitlement, not an API gate. Fair-use limits apply but no published paid API tier."
},
"issues": [
"Automated probes returned 412/403 on website, robots.txt, and llms.txt — likely Cloudflare bot protection or WAF, which will block naive agent probes and some crawlers.",
"No llms.txt means agents cannot discover platform capabilities via the emerging LLM-friendly convention.",
"OAuth2 required for any user-scoped data; agents cannot act on a user's behalf without human-in-the-loop consent flow.",
"Rate limits and fair-use terms are not surfaced in the metadata, only vaguely referenced.",
"API behavior under bot-protection (e.g., default user agents) is unclear, risking silent 403s in agent stacks."
],
"recommendations": [
"Publish llms.txt with a concise capability map and link to OpenAPI spec — high leverage for agent discovery.",
"Document exact rate limits, WAF/bot-policy behavior, and required User-Agent strings so agent frameworks don't get 412/403.",
"Provide a public OpenAPI/JSON schema so agents can generate typed clients and parse responses deterministically.",
"Clarify the OAuth2 flow (device code grant? PKCE?) so agents can support headless onboarding where possible.",
"Expose a status page reference and historical uptime in docs to reduce perceived reliability risk from WAF responses."
]
}Show your live agent-readiness score on your own site. Free, no auth — it updates as your score changes.
<a href="https://prowl.world/service/trakt-api">
<img src="https://prowl.world/badge/trakt-api.svg" height="56" alt="Agent-readiness on Prowl">
</a>
See operational metrics, LLM evaluations, agent readiness, and more.
Open in Dashboard