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_q61r3ghf/schedule?date=2026-10-19&tz=UTC
| Time | Programme | Episode | Category | Length |
|---|---|---|---|---|
| 23:00 | Richie AndersonRichie Anderson is live from Salford with your Monday Motivation to kick-start a brand new week, plus Secret Star and This Week in Songs. | 3h | ||
| 02:00 | Alternative Sounds of the 90s with Dermot O'LearyDermot celebrates the greatest movie soundtrack of the 90s - Trainspotting - with songs from Iggy Pop, Sleeper, Underworld, Blur, Pulp and Leftfield. | 1h | ||
| 03:00 | Owain Wyn EvansWelcome! It's Early Breakfast with Owain Wyn Evans, featuring Airdrum Anthems. | 2h 30m | ||
| 05:30 | The Sara Cox Breakfast ShowSara is joined by the biggest guests, with all sorts of fun and games, unexpected surprises and the best music from across the decades. | 3h | ||
| 08:30 | Vernon KayVernon invites a new guest to choose ten songs from their life across the show this week in Tracks Of My Years. | 2h 30m | ||
| 11:00 | Jeremy VineJeremy and guests discuss the news headlines and talk to the people making them. | 2h | ||
| 13:00 | Trevor NelsonTrevor brings you some of the best music from across the decades to get you through the afternoon. | 2h | ||
| 15:00 | Radio 2 Drivetime with Gary DaviesGary Davies with amazing tunes plus the latest news and travel to help you home. | 3h | ||
| 18:00 | Jo Whiley's Shiny Happy PlaylistJo brings her Shiny Happy Playlist, 30 minutes of feelgood music from 7-7.30pm to soundtrack listeners' weekday evening. | 30m | ||
| 18:30 | Jo WhileyJo hand-picks her favourite new music from all genres of the musical spectrum. | 1h 30m | ||
| 20:00 | The Blues Show with Cerys MatthewsCerys welcomes American blues band GA-20 to play some songs from their latest album 'Blues Now' live on the show. | 1h | ||
| 21:00 | The Good Groove with DJ SpoonyFeelgood tunes to groove and soothe your soul. Dr Beat is also on hand to prescribe a perfect tune for a listener whose week hasn't got off to the ... | 2h | ||
| 23:00 | OJ BorgOJ is live through the night from the Salford Riviera with Midnight Mastermind, Wish You Were There and the first Midnight Caller of the week. | 2h 30m |
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_q61r3ghf/schedule?date=2026-10-19&tz=UTC" # what is on now, and next curl -H "Authorization: Bearer $TVG_KEY" \ "https://api.tvguideapi.com/v1/channels/ch_q61r3ghf/now" # any past day (Archive plan) curl -H "Authorization: Bearer $TVG_KEY" \ "https://api.tvguideapi.com/v1/channels/ch_q61r3ghf/history?from=2025-10-13T00:00:00Z&to=2025-10-14T00:00:00Z"
$ch = curl_init("https://api.tvguideapi.com/v1/channels/ch_q61r3ghf/schedule?date=2026-10-19&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_q61r3ghf/schedule?date=2026-10-19&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_q61r3ghf/schedule", params={"date": "2026-10-19", "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_q61r3ghf/schedule?date=2026-10-19, the first programme { "data": [ { "id": "ls_bnshkz6d", "channel": "ch_q61r3ghf", "start": "2026-10-18T23:00:00Z", "stop": "2026-10-19T02:00:00Z", "title": "Richie Anderson", "sub_title": null, "description": "Richie Anderson is live from Salford with your Monday Motivation to kick-star...", "category": [], "flags": { "new": false, "live": false } } ], "meta": { "count": 13, "date": "2026-10-19", "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 |
|---|---|---|
| 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.
A free key in a minute, with Google. No card. Yesterday and today on every channel in 150 countries.