Find an API

Search public APIs with auth details & Postman guides

← All APIs

Trakt API

trakt · Company

Company No Auth Free & Open API

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

No authentication requiredFree to use with no key needed.

Sample Requests

GET Authorize Application

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

https://api.apis.guru/v2/specs/trakt.tv/1.0.0/oauth/authorize?state=example&client_id=example&redirect_uri=example&response_type=example

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));
GET Get movie recommendations

#### &#128274; OAuth Required &#10024; 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

https://api.apis.guru/v2/specs/trakt.tv/1.0.0/recommendations/movies?ignore_collected=true&ignore_watchlisted=true

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));
GET Get show recommendations

#### &#128274; OAuth Required &#10024; 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

https://api.apis.guru/v2/specs/trakt.tv/1.0.0/recommendations/shows?ignore_collected=true&ignore_watchlisted=true

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

Get Postman ↗
  1. 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?

Open documentation ↗