JustWatch where to watch
One film, series or season by JustWatch id or link, with every offer in up to 20 countries: id, type, title, original title, link, year, release date, description, runtime, age rating, production countries, genres, IMDb and TMDB ids and scores, IMDb votes, JustWatch rating, Tomatometer, likes and dislikes, poster, upcoming releases, backdrops, trailers, cast and crew, seasons (series), streaming_chart (films and series: the title's JustWatch daily streaming chart position in the first country, with trend, best rank and days in the top 3, 10 and 100; null when not charted), and offers per country. Each offer: service (name, id, short code, icon), monetization type (subscription, free, ads, rent, buy), quality (SD, HD, 4K), price and currency, previous price and change, link, episode count, available-until date, date added, audio and subtitle languages and video/audio technology.
Every response includes credits_used: the credits this call cost.
Parameters
| name | type | description |
|---|---|---|
id | string | JustWatch id: tm… film, ts… series, tss… season, e.g. tm414170 (Parasite). Example: tm414170 |
url | string | Or a justwatch.com title link (its country is the default country). |
countries | string | Comma-separated two-letter countries to list offers for (default US, max 20). Example: US,GB,DE |
language | string | Language of titles, descriptions and genre names (default en), e.g. de, es, fr. |
Every endpoint also takes fresh, raw, fields (see lean responses and caching).
Example
curl "https://api.api.sh/justwatch/v1/title?id=tm414170" \
-H "x-api-key: $APISH_KEY" import os, requests
res = requests.get(
"https://api.api.sh/justwatch/v1/title",
params={"id": "tm414170"},
headers={"x-api-key": os.environ["APISH_KEY"]},
timeout=120,
)
res.raise_for_status()
data = res.json() const url = new URL("https://api.api.sh/justwatch/v1/title");
url.searchParams.set("id", "tm414170");
const res = await fetch(url, { headers: { "x-api-key": process.env.APISH_KEY } });
if (!res.ok) throw new Error(`${res.status} ${await res.text()}`);
const data = await res.json(); Response
A JSON object with the fields described above, plus raw (the source's own data), cached, fetched_at and credits_used. Errors return {"success": false, "error": "…"} with the HTTP status (see errors). A lookup that ran but found nothing (404) costs the price above; refused calls and errors on our side are free (what's charged).