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 Europe/Brussels 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 Europe/Brussels. The same day from the API: GET /v1/channels/ch_xv4yfc1q/schedule?date=2026-10-15&tz=Europe/Brussels
| Time | Programme | Episode | Category | Length |
|---|---|---|---|---|
| 23:47 | Medical DetectivesA suitcase leads to the gruesome discovery of a nearly perfect crime, leaving investigators feeling confused. | 25m | ||
| 00:12 | Medical DetectivesThe body of a young woman is discovered in a remote area, leading forensic investigators on a search for clues to identify her and her killer. | 26m | ||
| 00:39 | Medical DetectivesAfter the brutal slaying of a young couple on a road trip, the victims' families begin receiving disturbing letters. | 27m | ||
| 01:06 | Medical DetectivesA fire leads investigators to re-examine an unusual death, which means digging up the victim who had been buried for years. | 27m | ||
| 01:33 | Medical DetectivesInvestigators think they know who killed a young woman, but new forensic technology turns the case upside down. | 27m | ||
| 02:00 | Medical DetectivesA small community is shocked when a woman is shot and killed in a church. Police are left with few pieces of evidence and no suspects. | 26m | ||
| 02:26 | Medical DetectivesInvestigators search for clues to find the person behind a gruesome murder, after a body is discovered in a watery grave. | 27m | ||
| 02:53 | Medical DetectivesAfter a young mom is found murdered in her home, investigators find startling clues on her cell phone. | 27m | ||
| 03:20 | Medical DetectivesA healthy young mother mysteriously dies after a minor traffic accident, triggering an investigation into the cause of her death. | 27m | ||
| 03:47 | Medical DetectivesA popular handyman in a New Hampshire town is found murdered and investigators follow forensic clues to a shocking conclusion. | 28m | ||
| 04:15 | Medical DetectivesThe sudden and mysterious death of a health-conscious woman triggers an investigation into what killed her. | 27m | ||
| 04:42 | Medical DetectivesA healthy young mother mysteriously dies after a minor traffic accident, triggering an investigation into the cause of her death. | 27m |
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_xv4yfc1q/schedule?date=2026-10-15&tz=Europe/Brussels" # what is on now, and next curl -H "Authorization: Bearer $TVG_KEY" \ "https://api.tvguideapi.com/v1/channels/ch_xv4yfc1q/now" # any past day (Archive plan) curl -H "Authorization: Bearer $TVG_KEY" \ "https://api.tvguideapi.com/v1/channels/ch_xv4yfc1q/history?from=2026-06-25T00:00:00Z&to=2026-06-26T00:00:00Z"
$ch = curl_init("https://api.tvguideapi.com/v1/channels/ch_xv4yfc1q/schedule?date=2026-10-15&tz=Europe/Brussels"); 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_xv4yfc1q/schedule?date=2026-10-15&tz=Europe/Brussels", { 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_xv4yfc1q/schedule", params={"date": "2026-10-15", "tz": "Europe/Brussels"}, headers={"Authorization": f"Bearer {os.environ['TVG_KEY']}"}, ) for slot in r.json()["data"]: print(slot["start"], slot["title"])
// GET /v1/channels/ch_xv4yfc1q/schedule?date=2026-10-15, the first programme { "data": [ { "id": "ls_y482qt3n", "channel": "ch_xv4yfc1q", "start": "2026-10-14T21:47:26Z", "stop": "2026-10-14T22:12:54Z", "title": "Medical Detectives", "sub_title": null, "description": "A suitcase leads to the gruesome discovery of a nearly perfect crime, leaving...", "category": [], "flags": { "new": false, "live": false } } ], "meta": { "count": 12, "date": "2026-10-15", "tz": "Europe/Brussels" } }
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 25 June 2026 | Category |
|---|---|---|
| 23:49 | Medical Detectives |
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.