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 Asia/Dubai 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 Asia/Dubai. The same day from the API: GET /v1/channels/ch_1s16nk2n/schedule?date=2026-10-16&tz=Asia/Dubai
| Time | Programme | Episode | Category | Length |
|---|---|---|---|---|
| 23:59 | Dead Meat - S7 Ep1 - Lost In La PampaChef Scott and friend's first stop on their S. American tour is La Pampa, Argentina for red stag and vizcacha. | 29m | ||
| 00:29 | Dead Meat - S7 Ep 2 - Piranha EmpanadasPopular Argentina fish are targeted, along with one species that horror movies are made of. | 29m | ||
| 00:59 | Fight To Survive S1 EP3 - ATV Nightmare - SEG1No Desription Available. | 6m | ||
| 01:05 | Fight To Survive S1 EP3 - ATV Nightmare - SEG2No Desription Available. | 6m | ||
| 01:12 | Fight To Survive S1 EP3 - ATV Nightmare - SEG3No Desription Available. | 8m | ||
| 01:20 | Fight To Survive S1 EP3 - ATV Nightmare - SEG4No Desription Available. | 8m | ||
| 01:29 | Fight To Survive S1 EP4 - Trapped Glacier - SEG1No Desription Available. | 8m | ||
| 01:37 | Fight To Survive S1 EP4 - Trapped Glacier - SEG2No Desription Available. | 6m | ||
| 01:44 | Fight To Survive S1 EP4 - Trapped Glacier - SEG3No Desription Available. | 9m | ||
| 01:53 | Fight To Survive S1 EP4 - Trapped Glacier - SEG4No Desription Available. | 6m | ||
| 01:59 | Carter's W.A.R. S1 E01 - Rhino Wars - SEG1No Desription Available. | 7m | ||
| 02:06 | Carter's W.A.R. S1 E01 - Rhino Wars - SEG2No Desription Available. | 5m | ||
| 02:12 | Carter's W.A.R. S1 E01 - Rhino Wars - SEG3No Desription Available. | 10m | ||
| 02:22 | Carter's W.A.R. S1 E01 - Rhino Wars - SEG4No Desription Available. | 6m | ||
| 02:28 | Carter's W.A.R. S1 E01 - Rhino Wars - SEG5No Desription Available. | 5m | ||
| 02:34 | Carter's W.A.R. S1 E01 - Rhino Wars - SEG6No Desription Available. | 5m | ||
| 02:40 | Carter's W.A.R. S1 E01 - Rhino Wars - SEG7No Desription Available. | 10m | ||
| 02:50 | Carter's W.A.R. S1 E01 - Rhino Wars - SEG8No Desription Available. | 8m | ||
| 02:59 | Alaska's Wild Gourmet S1 E05 - Fisherman Catch - Seg1No Desription Available. | 7m |
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_1s16nk2n/schedule?date=2026-10-16&tz=Asia/Dubai" # what is on now, and next curl -H "Authorization: Bearer $TVG_KEY" \ "https://api.tvguideapi.com/v1/channels/ch_1s16nk2n/now" # any past day (Archive plan) curl -H "Authorization: Bearer $TVG_KEY" \ "https://api.tvguideapi.com/v1/channels/ch_1s16nk2n/history?from=2026-01-15T00:00:00Z&to=2026-01-16T00:00:00Z"
$ch = curl_init("https://api.tvguideapi.com/v1/channels/ch_1s16nk2n/schedule?date=2026-10-16&tz=Asia/Dubai"); 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_1s16nk2n/schedule?date=2026-10-16&tz=Asia/Dubai", { 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_1s16nk2n/schedule", params={"date": "2026-10-16", "tz": "Asia/Dubai"}, headers={"Authorization": f"Bearer {os.environ['TVG_KEY']}"}, ) for slot in r.json()["data"]: print(slot["start"], slot["title"])
// GET /v1/channels/ch_1s16nk2n/schedule?date=2026-10-16, the first programme { "data": [ { "id": "ls_0wav7f5m", "channel": "ch_1s16nk2n", "start": "2026-10-15T19:59:00Z", "stop": "2026-10-15T20:28:00Z", "title": "Dead Meat - S7 Ep1 - Lost In La Pampa", "sub_title": null, "description": "Chef Scott and friend's first stop on their S. American tour is La Pampa, Arg...", "category": [], "flags": { "new": false, "live": false } } ], "meta": { "count": 19, "date": "2026-10-16", "tz": "Asia/Dubai" } }
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 | Thursday 15 January 2026 | Category |
|---|---|---|
| 04:03 | Trev Gowdy's Monster Fish 2019 EP2 - Monster Bluefin Of Georges Bank - SEG3 | Trev gowdy's monster fish |
| 04:10 | Trev Gowdy's Monster Fish 2019 EP2 - Monster Bluefin Of Georges Bank - SEG4 | Trev gowdy's monster fish |
| 04:18 | Trev Gowdy's Monster Fish 2018 E07 - King Salmon vs. Thresher - SEG1 | |
| 160 more programmes that day, on Archive | ||
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 155 countries.