TMDB popular
The Movie Database's "What's popular" lists (streaming, on TV, for rent, in theatres) and "Free to watch" films or series: position, id, type, title, date, link and poster. Or browse every film or series with your own filters (the site's Movies and TV Shows pages): give any of sort_by, with_genres, with_original_language, vote_average.gte, vote_average.lte, vote_count.gte, release_date.gte, release_date.lte (not together with category); type is then movie (default) or tv, 20 a page with page and next_page, and the response echoes the applied filters.
Every response includes credits_used: the credits this call cost.
Parameters
| name | type | description |
|---|---|---|
category | streaming | on_tv | for_rent | in_theatres | free_movies | free_tv | Which list (default streaming). Example: streaming |
type | all | movie | tv | Only films or only series (default all). With the filtered browse: movie (default) or tv. |
language | string | Page language (default en-US), e.g. de-DE, fr-FR, es-ES. |
sort_by | string | Filtered browse: order, e.g. popularity.desc (default), vote_average.desc, vote_count.desc, primary_release_date.desc (movies), first_air_date.desc (TV), revenue.desc (movies), title.asc (movies), name.asc (TV); each also .asc/.desc. |
with_genres | string | Filtered browse: comma-separated genre ids (all must match), e.g. 18 (Drama), 28 (Action), 35 (Comedy), 16 (Animation), 878 (Science Fiction). |
with_original_language | string | Filtered browse: original language, two-letter ISO 639-1 code, e.g. en, ko, ja, fr. |
vote_average.gte | number | Filtered browse: minimum user score, 0 to 10. |
vote_average.lte | number | Filtered browse: maximum user score, 0 to 10. |
vote_count.gte | integer | Filtered browse: minimum number of votes. |
release_date.gte | string | Filtered browse: released (first aired, for TV) on or after this date, YYYY-MM-DD. |
release_date.lte | string | Filtered browse: released (first aired, for TV) on or before this date, YYYY-MM-DD. |
page | integer | Filtered browse: page number (default 1). Pass next_page back; null on the last page. |
Every endpoint also takes fresh, raw, fields (see lean responses and caching).
Example
curl "https://api.api.sh/tmdb/v1/popular?category=streaming" \
-H "x-api-key: $APISH_KEY" import os, requests
res = requests.get(
"https://api.api.sh/tmdb/v1/popular",
params={"category": "streaming"},
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/tmdb/v1/popular");
url.searchParams.set("category", "streaming");
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).