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 America/New_York time, what is on now and next, and the same data in your app with one call.
All times America/New_York. The same day from the API: GET /v1/channels/ch_fpajkztn/schedule?date=2026-10-12&tz=America/New_York
| Time | Programme | Episode | Category | Length |
|---|---|---|---|---|
| 23:58 | Close to HomeConlon suspects that the wife of a preacher murdered him. | 51m | ||
| 00:48 | Close to HomeAnnabeth charges a father and his two sons with murder. | 50m | ||
| 01:39 | Close to HomeA courthouse shooting leaves a lawyer dead and another hurt. | 52m | ||
| 02:31 | Close to HomeAnnabeth suspects an alcoholic of a pattern of violence. | 52m | ||
| 03:23 | Close to HomeAnnabeth doubts a professor's claim of self-defense. | 51m | ||
| 04:14 | Close to HomeAnnabeth believes a doctor intentionally killed his patient. | 50m | ||
| 05:04 | Close to HomeAnnabeth discovers a corrupt college gambling operation. | 47m | ||
| 05:52 | Close to HomeA biological mother is charged with murdering a surrogate. | 50m | ||
| 06:41 | Close to HomeAnnabeth prosecutes a prep-school dean for murder. | 49m | ||
| 07:30 | Close to HomeWhen Conlon's mentor is killed, capital punishment is debated. | 51m | ||
| 08:20 | Close to HomeAnnabeth wants to prosecute a man who date-raped a woman. | 50m | ||
| 09:10 | Close to HomeA woman retracts her statement blaming her son for a murder. | 47m | ||
| 09:58 | Close to HomeAnnabeth uncovers a possible case of police corruption. | 51m | ||
| 10:48 | Close to HomeAnnabeth tries a corrupt cop who was acquitted of murder. | 50m | ||
| 11:38 | Close to HomeA corruption case turns shocking when someone is murdered. | 50m | ||
| 12:28 | AlcatrazSeries premiere of the chilling new drama. | 52m | ||
| 13:20 | AlcatrazMadsen and Hauser work together to stop a series of sniper murders by an Alcatraz prisoner. | 52m | ||
| 14:12 | AlcatrazThe team races to catch a vile child killer from the past. | 49m | ||
| 15:02 | AlcatrazA notorious bank robber reappears. | 50m | ||
| 15:52 | AlcatrazFor the first time, an Alcatraz guard reappears. | 49m | ||
| 16:41 | AlcatrazA convicted bomber reappears to cause chaos in San Francisco. | 50m | ||
| 17:30 | AlcatrazMadsen and Hauser hunt down a killer chemist. | 52m | ||
| 18:22 | Alcatraz On nowViolent brothers once kept behind bars make their reappearance. | 50m | ||
| 19:12 | AlcatrazAn ultra-violent felon returns to the present. | 50m | ||
| 20:02 | AlcatrazThe only innocent man on Alcatraz returns to the present. | 51m | ||
| 20:53 | AlcatrazAn unknown serial killer from 1963 returns to kill again. | 52m | ||
| 21:45 | AlcatrazLives hang in the balance in the first part of the season finale. | 50m | ||
| 22:35 | AlcatrazLives hang in the balance in the second part of the season finale. | 52m | ||
| 23:27 | Jack & BobbyAs Bobby begins high school, Jack feels burdened by his little brother. | 54m |
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_fpajkztn/schedule?date=2026-10-12&tz=America/New_York" # what is on now, and next curl -H "Authorization: Bearer $TVG_KEY" \ "https://api.tvguideapi.com/v1/channels/ch_fpajkztn/now" # any past day (Archive plan) curl -H "Authorization: Bearer $TVG_KEY" \ "https://api.tvguideapi.com/v1/channels/ch_fpajkztn/history?from=2026-10-05T00:00:00Z&to=2026-10-06T00:00:00Z"
$ch = curl_init("https://api.tvguideapi.com/v1/channels/ch_fpajkztn/schedule?date=2026-10-12&tz=America/New_York"); 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_fpajkztn/schedule?date=2026-10-12&tz=America/New_York", { 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_fpajkztn/schedule", params={"date": "2026-10-12", "tz": "America/New_York"}, headers={"Authorization": f"Bearer {os.environ['TVG_KEY']}"}, ) for slot in r.json()["data"]: print(slot["start"], slot["title"])
// GET /v1/channels/ch_fpajkztn/schedule?date=2026-10-12, the first programme { "data": [ { "id": "ls_4m0kfkxg", "channel": "ch_fpajkztn", "start": "2026-10-12T03:58:10Z", "stop": "2026-10-12T04:48:55Z", "title": "Close to Home", "sub_title": null, "description": "Conlon suspects that the wife of a preacher murdered him.", "category": [], "flags": { "new": false, "live": false } } ], "meta": { "count": 29, "date": "2026-10-12", "tz": "America/New_York" } }
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.