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 UTC 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 UTC. The same day from the API: GET /v1/channels/ch_xb89ekqj/schedule?date=2026-10-17&tz=UTC
| Time | Programme | Episode | Category | Length |
|---|---|---|---|---|
| 23:00 | 西甲西甲 萊萬特 vs 塞維利亞 (10/13/26) | 2h | ||
| 01:00 | 2026日本職棒高潮系列賽2026日本職棒高潮系列賽 軟銀 vs 第一輪勝隊 G3 (10/16/26) | 3h | ||
| 04:00 | 麻將大師麻將大師 第八季 EP18 | 1h | ||
| 05:00 | 企業排球聯賽企業排球聯賽 冠軍賽 雲林美津濃 vs 屏東台電(3/21/26) | 2h | ||
| 07:00 | 2026中華企業射箭聯賽2026中華企業射箭聯賽 新北凱撒 vs 彰化銀行 (9/13/26) | 1h 55m | ||
| 08:55 | (LIVE)2026日本職棒高潮系列賽(LIVE)2026日本職棒高潮系列賽 軟銀 vs 第一輪勝隊 G4 (10/17/26) | 3h 5m | ||
| 12:00 | (首)2026好球特區(首)2026好球特區 EP14 | 15m | ||
| 12:15 | 2026好球特區2026好球特區 EP13 | 15m | ||
| 12:30 | 鍵盤球探鍵盤球探 EP124 退役後的另一條棒球路 國體大林衛宣教練訪談 上 | 30m | ||
| 13:00 | 鍵盤球探鍵盤球探 EP125 退役後的另一條棒球路 國體大林衛宣教練訪談 下 | 30m | ||
| 13:30 | 2026好球特區2026好球特區 EP14 | 15m | ||
| 13:45 | (首)西甲新星報到(首)西甲新星報到 EP1 | 15m | ||
| 14:00 | 西甲西甲 皇家馬德里 vs 比利亞雷亞爾 (10/11/26) | 2h | ||
| 16:00 | 西甲主場漫遊西甲主場漫遊 EP1 Nahuel Tenaglia | 25m | ||
| 16:25 | (LIVE)西甲(LIVE)西甲 皇家貝提斯 vs 巴塞隆納(10/18/26) | 2h | ||
| 18:25 | 鍵盤球探鍵盤球探 EP125 退役後的另一條棒球路 國體大林衛宣教練訪談 下 | 30m | ||
| 18:55 | (LIVE)西甲(LIVE)西甲 瓦倫西亞 vs 畢爾包競技(10/18/26) | 2h | ||
| 20:55 | 西甲回顧西甲回顧 EP3 | 35m | ||
| 21:30 | 野球名人房野球名人房 S2 EP195 | 30m | ||
| 22:00 | 麻將大師麻將大師 第八季 EP2 | 1h | ||
| 23:00 | 西甲西甲 拉科魯尼亞 vs 萊萬特(10/17/26) | 2h |
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_xb89ekqj/schedule?date=2026-10-17&tz=UTC" # what is on now, and next curl -H "Authorization: Bearer $TVG_KEY" \ "https://api.tvguideapi.com/v1/channels/ch_xb89ekqj/now" # any past day (Archive plan) curl -H "Authorization: Bearer $TVG_KEY" \ "https://api.tvguideapi.com/v1/channels/ch_xb89ekqj/history?from=2025-10-13T00:00:00Z&to=2025-10-14T00:00:00Z"
$ch = curl_init("https://api.tvguideapi.com/v1/channels/ch_xb89ekqj/schedule?date=2026-10-17&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_xb89ekqj/schedule?date=2026-10-17&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_xb89ekqj/schedule", params={"date": "2026-10-17", "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_xb89ekqj/schedule?date=2026-10-17, the first programme { "data": [ { "id": "ls_mpfr2vc3", "channel": "ch_xb89ekqj", "start": "2026-10-16T23:00:00Z", "stop": "2026-10-17T01:00:00Z", "title": "西甲", "sub_title": null, "description": "西甲 萊萬特 vs 塞維利亞 (10/13/26)", "category": [], "flags": { "new": false, "live": false } } ], "meta": { "count": 21, "date": "2026-10-17", "tz": "UTC" } }
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 |
|---|---|---|
| 23:00 | Sendepause | Verschiedenes, Programmende |
| 06:00 | UEFA World Cup Qualifiers 2026 Canada/Mexico/United States | Fußball-wm |
| 08:00 | Bundesliga 2025/2026 | Sport, Fußball |
| 12 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 154 countries.