72.1M 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 Australia/Sydney time, what is on now and next, and the same data in your app with one call. Search any past day on the Archive plan.
All times Australia/Sydney. The same day from the API: GET /v1/channels/ch_xxxynzzz/schedule?date=2026-10-15&tz=Australia/Sydney
| Time | Programme | Episode | Category | Length |
|---|---|---|---|---|
| 23:19 | No listing available | 1h 30m | ||
| 00:49 | No listing available | 10m | ||
| 01:00 | Murder, They Hope: A Midsummer Night'sGemma and Terry can only marry if they solve the murder of a wedding guest; Gemma's mum turns out to be an obstruction that the couple can really d... | 45m | ||
| 01:45 | Mudtown: Fly Away HomePete struggles to hold onto his power and gives Claire a final chance to find his money. Beca and Sonny fight for their own survival across the str... | 45m | ||
| 02:30 | Rosemary & Thyme: And No Birds SingRosemary Boxer and Laura Thyme, two plant and flower lovers, meet and hit it off while searching for the cause of two mysterious accidents concerni... | 50m | ||
| 03:20 | Foyle's War: Broken SoulsTo ease the boredom of the blackout, Foyle has taken up chess. When a colleague of his chess tutor is found murdered, Foyle is called upon to inves... | 1h 45m | ||
| 05:05 | Hustle: Diamond SeekerA motley group of London con artists pulls off a series of daring and intricate stings. | 1h | ||
| 06:05 | GrantchesterWhen Amanda's engagement ring is stolen on the same night a murder is committed, Sidney & Geordie investigate whether there might be a connection b... | 55m | ||
| 07:00 | Vera: DirtyThe murder of a cleaner whose death occurred several hours after the killer blow landed puts DCI Vera Stanhope on an intriguing trail, piecing toge... | 1h 45m | ||
| 08:45 | Murder, They Hope: A Midsummer Night'sGemma and Terry can only marry if they solve the murder of a wedding guest; Gemma's mum turns out to be an obstruction that the couple can really d... | 55m | ||
| 09:40 | Mudtown: Fly Away HomePete struggles to hold onto his power and gives Claire a final chance to find his money. Beca and Sonny fight for their own survival across the str... | 55m | ||
| 10:35 | Foyle's War: Broken SoulsTo ease the boredom of the blackout, Foyle has taken up chess. When a colleague of his chess tutor is found murdered, Foyle is called upon to inves... | 1h 50m | ||
| 12:25 | Hustle: PoliticsA motley group of London con artists pulls off a series of daring and intricate stings. | 1h 10m | ||
| 13:35 | Rosemary & Thyme: And No Birds SingRosemary Boxer and Laura Thyme, two plant and flower lovers, meet and hit it off while searching for the cause of two mysterious accidents concerni... | 1h | ||
| 14:35 | Vera: The Escape TurnAll is not as it seems when DCI Vera Stanhope investigates the case of a wealthy betting shop tycoon, murdered during a home invasion in front of h... | 1h 45m | ||
| 16:20 | GrantchesterAfter the death of two elderly sisters, Sidney and Geordie try to track down a man on the run. Will they be able to catch the killer before he stri... | 55m | ||
| 17:15 | Agatha Christie's Marple: The Pale HorseMiss Marple's friend - a Catholic priest - is battered to death after visiting a woman dying under strange circumstances. Seeking justice, she beco... | 1h 45m | ||
| 19:00 | Spaced: MettleWhen Tim and Mike make it to the quarter-finals of Robot Wars, a rival team sabotages their robot. Meanwhile, Brian accidentally knocks himself out... | 30m | ||
| 19:30 | Downton AbbeyChange is in the air as an exciting opportunity for Alfred creates tension between Ivy and Daisy. Anna's secret is causing more tension between her... | 1h | ||
| 20:30 | Downton AbbeyA birthday party is planned for Robert, but Rose's contribution ruffles feathers above and below stairs. A new farming venture on the estate comes ... | 1h | ||
| 21:30 | The Coroner: Napoleon's ViolinWhen the patriarch of the local aristocratic family is found stabbed, Jane investigates. | 1h | ||
| 22:30 | GrantchesterAfter the death of two elderly sisters, Sidney and Geordie try to track down a man on the run. Will they be able to catch the killer before he stri... | 1h | ||
| 23:30 | Vera: The Escape TurnAll is not as it seems when DCI Vera Stanhope investigates the case of a wealthy betting shop tycoon, murdered during a home invasion in front of h... | 1h 35m |
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_xxxynzzz/schedule?date=2026-10-15&tz=Australia/Sydney" # what is on now, and next curl -H "Authorization: Bearer $TVG_KEY" \ "https://api.tvguideapi.com/v1/channels/ch_xxxynzzz/now" # any past day (Archive plan) curl -H "Authorization: Bearer $TVG_KEY" \ "https://api.tvguideapi.com/v1/channels/ch_xxxynzzz/history?from=2025-10-13T00:00:00Z&to=2025-10-14T00:00:00Z"
$ch = curl_init("https://api.tvguideapi.com/v1/channels/ch_xxxynzzz/schedule?date=2026-10-15&tz=Australia/Sydney"); 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_xxxynzzz/schedule?date=2026-10-15&tz=Australia/Sydney", { 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_xxxynzzz/schedule", params={"date": "2026-10-15", "tz": "Australia/Sydney"}, headers={"Authorization": f"Bearer {os.environ['TVG_KEY']}"}, ) for slot in r.json()["data"]: print(slot["start"], slot["title"])
// GET /v1/channels/ch_xxxynzzz/schedule?date=2026-10-15, the first programme { "data": [ { "id": "ls_ezc7jvp9", "channel": "ch_xxxynzzz", "start": "2026-10-14T12:19:54Z", "stop": "2026-10-14T13:49:54Z", "title": "No listing available", "sub_title": null, "description": null, "category": [], "flags": { "new": false, "live": false } } ], "meta": { "count": 23, "date": "2026-10-15", "tz": "Australia/Sydney" } }
What was on, on any date we hold: for research, catch-up, clip finding or proving a broadcast. Any window up to 31 days with /v1/channels/{id}/history on the Archive plan.
| Time | Monday 13 October 2025 | Category |
|---|---|---|
| Nothing held for that day. Try another date. | ||
8 calls cover a channel from its details to its past. Each one opens in the documentation with Try it.