Trakt API
trakt · Company
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 own site or app. The Trakt API was made just for this purpose. It is very easy to use, you basically call a URL and get some JSON back. More complex API calls (such as adding a movie or show to your collection) involve sending us data. These are still easy to use, you simply POST some JSON data to a
Authentication
Sample Requests
Construct then redirect to this URL. The Trakt website will request permissions for your app, which the user needs to approve. If the user isn't signed into Trakt, it will ask them to do so. Send `signup=true` if you prefer the account sign up page to be the default. **Note:** You should use the no
Hover any highlighted part to learn what it does
curl -X GET "https://api.apis.guru/v2/specs/trakt.tv/1.0.0/oauth/authorize?state=example&client_id=example&redirect_uri=example&response_type=example"
import requests
params = {
"state": "example",
"client_id": "example",
"redirect_uri": "example",
"response_type": "example"
}
response = requests.get(
"https://api.apis.guru/v2/specs/trakt.tv/1.0.0/oauth/authorize",
params=params,
)
print(response.json())const url = new URL('https://api.apis.guru/v2/specs/trakt.tv/1.0.0/oauth/authorize');
url.searchParams.set('state', 'example');
url.searchParams.set('client_id', 'example');
url.searchParams.set('redirect_uri', 'example');
url.searchParams.set('response_type', 'example');
const response = await fetch(url);
const data = await response.json();
console.log(data);package main
import (
"fmt"
"io"
"net/http"
"net/url"
)
func main() {
baseURL, _ := url.Parse("https://api.apis.guru/v2/specs/trakt.tv/1.0.0/oauth/authorize")
q := baseURL.Query()
q.Set("state", "example")
q.Set("client_id", "example")
q.Set("redirect_uri", "example")
q.Set("response_type", "example")
baseURL.RawQuery = q.Encode()
targetURL := baseURL.String()
req, _ := http.NewRequest("GET", targetURL, nil)
client := &http.Client{}
resp, _ := client.Do(req)
defer resp.Body.Close()
body, _ := io.ReadAll(resp.Body)
fmt.Println(string(body))
}require "net/http"
require "json"
uri = URI("https://api.apis.guru/v2/specs/trakt.tv/1.0.0/oauth/authorize")
uri.query = URI.encode_www_form({
"state" => "example",
"client_id" => "example",
"redirect_uri" => "example",
"response_type" => "example"
})
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = uri.scheme == "https"
req = Net::HTTP::Get.new(uri)
res = http.request(req)
puts JSON.parse(res.body)<?php
$url = "https://api.apis.guru/v2/specs/trakt.tv/1.0.0/oauth/authorize?" . http_build_query([
"state" => "example",
"client_id" => "example",
"redirect_uri" => "example",
"response_type" => "example"
]);
$opts = ["http" => [
"method" => "GET",
]];
$ctx = stream_context_create($opts);
$res = file_get_contents($url, false, $ctx);
print_r(json_decode($res, true));#### 🔒 OAuth Required ✨ Extended Info Movie recommendations for a user. By default, `10` results are returned. You can send a `limit` to get up to `100` results per page. Set `ignore_collected=true` to filter out movies the user has already collected or `ignore_watchlisted=true` to f
Hover any highlighted part to learn what it does
curl -X GET "https://api.apis.guru/v2/specs/trakt.tv/1.0.0/recommendations/movies?ignore_collected=true&ignore_watchlisted=true"
import requests
params = {
"ignore_collected": "true",
"ignore_watchlisted": "true"
}
response = requests.get(
"https://api.apis.guru/v2/specs/trakt.tv/1.0.0/recommendations/movies",
params=params,
)
print(response.json())const url = new URL('https://api.apis.guru/v2/specs/trakt.tv/1.0.0/recommendations/movies');
url.searchParams.set('ignore_collected', 'true');
url.searchParams.set('ignore_watchlisted', 'true');
const response = await fetch(url);
const data = await response.json();
console.log(data);package main
import (
"fmt"
"io"
"net/http"
"net/url"
)
func main() {
baseURL, _ := url.Parse("https://api.apis.guru/v2/specs/trakt.tv/1.0.0/recommendations/movies")
q := baseURL.Query()
q.Set("ignore_collected", "true")
q.Set("ignore_watchlisted", "true")
baseURL.RawQuery = q.Encode()
targetURL := baseURL.String()
req, _ := http.NewRequest("GET", targetURL, nil)
client := &http.Client{}
resp, _ := client.Do(req)
defer resp.Body.Close()
body, _ := io.ReadAll(resp.Body)
fmt.Println(string(body))
}require "net/http"
require "json"
uri = URI("https://api.apis.guru/v2/specs/trakt.tv/1.0.0/recommendations/movies")
uri.query = URI.encode_www_form({
"ignore_collected" => "true",
"ignore_watchlisted" => "true"
})
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = uri.scheme == "https"
req = Net::HTTP::Get.new(uri)
res = http.request(req)
puts JSON.parse(res.body)<?php
$url = "https://api.apis.guru/v2/specs/trakt.tv/1.0.0/recommendations/movies?" . http_build_query([
"ignore_collected" => "true",
"ignore_watchlisted" => "true"
]);
$opts = ["http" => [
"method" => "GET",
]];
$ctx = stream_context_create($opts);
$res = file_get_contents($url, false, $ctx);
print_r(json_decode($res, true));#### 🔒 OAuth Required ✨ Extended Info TV show recommendations for a user. By default, `10` results are returned. You can send a `limit` to get up to `100` results per page. Set `ignore_collected=true` to filter out shows the user has already collected or `ignore_watchlisted=true` to
Hover any highlighted part to learn what it does
curl -X GET "https://api.apis.guru/v2/specs/trakt.tv/1.0.0/recommendations/shows?ignore_collected=true&ignore_watchlisted=true"
import requests
params = {
"ignore_collected": "true",
"ignore_watchlisted": "true"
}
response = requests.get(
"https://api.apis.guru/v2/specs/trakt.tv/1.0.0/recommendations/shows",
params=params,
)
print(response.json())const url = new URL('https://api.apis.guru/v2/specs/trakt.tv/1.0.0/recommendations/shows');
url.searchParams.set('ignore_collected', 'true');
url.searchParams.set('ignore_watchlisted', 'true');
const response = await fetch(url);
const data = await response.json();
console.log(data);package main
import (
"fmt"
"io"
"net/http"
"net/url"
)
func main() {
baseURL, _ := url.Parse("https://api.apis.guru/v2/specs/trakt.tv/1.0.0/recommendations/shows")
q := baseURL.Query()
q.Set("ignore_collected", "true")
q.Set("ignore_watchlisted", "true")
baseURL.RawQuery = q.Encode()
targetURL := baseURL.String()
req, _ := http.NewRequest("GET", targetURL, nil)
client := &http.Client{}
resp, _ := client.Do(req)
defer resp.Body.Close()
body, _ := io.ReadAll(resp.Body)
fmt.Println(string(body))
}require "net/http"
require "json"
uri = URI("https://api.apis.guru/v2/specs/trakt.tv/1.0.0/recommendations/shows")
uri.query = URI.encode_www_form({
"ignore_collected" => "true",
"ignore_watchlisted" => "true"
})
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = uri.scheme == "https"
req = Net::HTTP::Get.new(uri)
res = http.request(req)
puts JSON.parse(res.body)<?php
$url = "https://api.apis.guru/v2/specs/trakt.tv/1.0.0/recommendations/shows?" . http_build_query([
"ignore_collected" => "true",
"ignore_watchlisted" => "true"
]);
$opts = ["http" => [
"method" => "GET",
]];
$ctx = stream_context_create($opts);
$res = file_get_contents($url, false, $ctx);
print_r(json_decode($res, true));Postman Setup Guide
- See official documentation for authentication and setup.
What can you build with Trakt API?
Trakt API is a Company API. Developers commonly use company APIs for:
- enriching CRM records with company firmographics
- building lead-generation and prospecting tools
- verifying business identity and registration details
- monitoring competitors and market intelligence
- powering B2B data enrichment pipelines
No authentication required. This API is open — no signup or key needed. Ideal for quick prototypes and public-facing features. Trakt API is free to use, making it a low-risk choice to experiment with.
New to APIs? Read our beginner's guide · Learn about API keys · What is REST?