73.8M listings
Every country's schedule under one key, one shape and one set of ids.
GET /v1/now
What every channel in a country is showing this minute, with the next programme after it.
MIT, no lock-in
Every lab tool reads only the public API with your own key, so it runs on the free key.
Working normally
Checked every minute from outside our own servers.
The full schedule in UTC time, what is on now and next, and the same data in your app with one call.
All times UTC. The same day from the API: GET /v1/channels/ch_yhzvhc16/schedule?date=2026-10-11&tz=UTC
| Time | Programme | Episode | Category | Length |
|---|---|---|---|---|
| 02:12 | 999: Rescue SquadA major fire breaks out in a haulage depot in Brighouse and a serious accident at an illegal off-road biking site leads to a rider needing urgent h... | 53m | ||
| 03:05 | 999: Rescue SquadA skier falls over on a steep slope and suffers a suspected brain injury in Wakefield and a DIY enthusiast's attempts to fix the heating in his chi... | 54m | ||
| 03:59 | 999: Rescue SquadThe start of the new school term leads of a spate of stabbing's and a forester is badly injured in an accident involving a chainsaw deep in woods n... | 53m | ||
| 04:52 | Director's Short CutBringing the best in television. | 8m | ||
| 05:00 | 999: Rescue SquadThe team joins the search for a missing aeroplane pilot and passenger. A man digging for antique bottles in a South Yorkshire tip is buried alive, ... | 53m | ||
| 05:53 | 999: Rescue SquadA student climber plunges from a cliff face in Wharfedale and the team fears he has broken his neck. The medics are also called to treat the victim... | 52m | ||
| 06:45 | 999: Rescue SquadThe medics spring into action when a cyclist plunges down a cliff in a freak accident. A homeowner's booby trap, designed to deter burglars, sparks... | 53m |
Copy, add your key, run. The free key reads yesterday and today on every channel, 500 calls a day.
curl -H "Authorization: Bearer $TVG_KEY" \ "https://api.tvguideapi.com/v1/channels/ch_yhzvhc16/schedule?date=2026-10-11&tz=UTC" # what is on now, and next curl -H "Authorization: Bearer $TVG_KEY" \ "https://api.tvguideapi.com/v1/channels/ch_yhzvhc16/now" # any past day (Archive plan) curl -H "Authorization: Bearer $TVG_KEY" \ "https://api.tvguideapi.com/v1/channels/ch_yhzvhc16/history?from=2026-10-06T00:00:00Z&to=2026-10-07T00:00:00Z"
$ch = curl_init("https://api.tvguideapi.com/v1/channels/ch_yhzvhc16/schedule?date=2026-10-11&tz=UTC"); curl_setopt_array($ch, [ CURLOPT_RETURNTRANSFER => true, CURLOPT_HTTPHEADER => ["Authorization: Bearer " . getenv("TVG_KEY")], ]); foreach (json_decode(curl_exec($ch), true)["data"] as $slot) { echo $slot["start"], " ", $slot["title"], "\n"; }
const r = await fetch("https://api.tvguideapi.com/v1/channels/ch_yhzvhc16/schedule?date=2026-10-11&tz=UTC", { headers: { Authorization: `Bearer ${process.env.TVG_KEY}` }, }); const { data } = await r.json(); data.forEach(s => console.log(s.start, s.title, s.flags.live ? "LIVE" : ""));
import os, requests r = requests.get( "https://api.tvguideapi.com/v1/channels/ch_yhzvhc16/schedule", params={"date": "2026-10-11", "tz": "UTC"}, headers={"Authorization": f"Bearer {os.environ['TVG_KEY']}"}, ) for slot in r.json()["data"]: print(slot["start"], slot["title"])
// GET /v1/channels/ch_yhzvhc16/schedule?date=2026-10-11, the first programme { "data": [ { "id": "ls_vqad8khw", "channel": "ch_yhzvhc16", "start": "2026-10-11T02:12:00Z", "stop": "2026-10-11T03:05:00Z", "title": "999: Rescue Squad", "sub_title": null, "description": "A major fire breaks out in a haulage depot in Brighouse and a serious acciden...", "category": [], "flags": { "new": false, "live": false } } ], "meta": { "count": 7, "date": "2026-10-11", "tz": "UTC" } }
8 calls cover a channel from its details to its past. Each one opens in the documentation with Try it.
A free key in a minute, with Google. No card. Yesterday and today on every channel in 150 countries.