API
The catalog lists every record, most popular first: in one file per type for bulk downloads, and in pages of 250 for browsing. It's rebuilt daily in a new folder, so a build's files never change; only the manifest does.
Files
https://api.watchittrackit.com/v1/catalog/manifest.jsonhttps://api.watchittrackit.com/v1/catalog/{build}/{type}/all.jsonhttps://api.watchittrackit.com/v1/catalog/{build}/{type}/{n}.json
Reading it
- Read
v1/catalog/manifest.jsonfor the current build id, the page size and each type's record and page counts. - Download
v1/catalog/{build}/{type}/all.jsonfor every record of a type, orv1/catalog/{build}/{type}/{n}.jsonfor page n (starting at 1).
The full files are large: roughly 7 MB each for TV and movies and 30 MB for people, a third of that or less when compressed.
Entries
Each entry is an array:
| Position | Type | Description |
|---|---|---|
| 0 | number | Record id. |
| 1 | string | Record slug. |
| 2 | string | English name, or another name when there's no English one. |
| 3 | number | null | Year, for titles. |
| 4 | number | TheTVDB popularity score. The list is sorted by it. |
| 5 | string | null | Thumbnail path. |
Example
const BASE = "https://api.watchittrackit.com/v1/catalog"
const manifest = await fetch(`${BASE}/manifest.json`).then((r) => r.json())
// { "build": "20261001-063000", "pageSize": 250,
// "types": { "tv": { "count": 70734, "pages": 283 }, "movie": { … }, "person": { … } } }
// Page 1 of TV shows, most popular first
const page = await fetch(`${BASE}/${manifest.build}/tv/1.json`).then((r) => r.json())
// [[81189, "breaking-bad", "Breaking Bad", 2008, 3287090, "/images/tv/81189/….t.jpg"], …]
// Every movie at once
const movies = await fetch(`${BASE}/${manifest.build}/movie/all.json`).then((r) => r.json())