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 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_7h9k34c2/schedule?date=2026-10-11&tz=America/New_York
| Time | Programme | Episode | Category | Length |
|---|---|---|---|---|
| 23:35 | Los Asesinatos de MidsomerBarnaby no está feliz cuando Sarah lo arrastra a la boda de un amigo de la familia. | S20 E5, Till Death Do Us Part | Drama, Series | 1h 45m |
| 01:20 | Los Asesinatos de MidsomerLas cosas toman un giro espantoso cuando el circo Ferrabees llega a la ciudad. | S20 E6, Send in the Clowns | Drama, Series | 1h 45m |
| 03:05 | Prime SuspectDCI Tennison hereda un caso de asesinato que resulta más complejo de lo que parece a primera vista. | Precio a Pagar (Parte 1) | Drama, Series | 2h 2m |
| 05:07 | Prime SuspectLa DCI Jane Tennison continúa su búsqueda para atrapar al sospechoso de asesinato George Marlow. | Precio a Pagar (Parte 2) | Drama, Series | 1h 58m |
| 07:05 | Prime SuspectDespués de que un cadáver es descubierto en un vecindario afro-caribeño, DCI Tennison dirige la investigación. | Operación Nadine (Parte 1) | Series, Drama | 1h 58m |
| 09:03 | Prime SuspectEl principal sospechoso del equipo confiesa, pero sigue prófugo el verdadero asesino? | Operación Nadine (Parte 2) | Series, Drama | 2h 2m |
| 11:05 | Prime SuspectDCI Jane Tennison y su equipo tienen la nueva tarea de "limpiar las calles" de Soho. | Guardián de las Almas (Parte 1) | Series, Drama | 2h 1m |
| 13:06 | Prime SuspectA medida que el caso continúa, cada oficial con rango advierte a Jane que abandone la investigación. | Guardián de las Almas (Parte 2) | Series, Drama | 2h 1m |
| 15:07 | Prime SuspectJane Tennison regresa a Southampton Row para dirigir una investigación sobre el asesinato de un niño pequeño. | El Niño Perdido | Drama, Series | 1h 59m |
| 17:06 | Prime SuspectDS Tennison viaja a un suburbio para investigar un asesinato que se ha organizado para parecer suicidio. | Círculos Internos | Drama, Series | 2h |
| 19:06 | Prime SuspectJane descubre cómo su vida se desmorona cuando una serie de asesinatos conduce a su antiguo adversario. | El Aroma de la Oscuridad | Drama, Series | 1h 59m |
| 21:05 | Prime SuspectUn sospechoso confiesa un asesinato, pero las pruebas y los instintos apuntan en una dirección diferente. | Errores de Juicio (Parte 1) | Drama, Series | 2h 2m |
| 23:07 | Prime SuspectCon "The Street" logrando mantenerse un paso por delante de la investigación, DS Tennison sospecha de un topo. | Errores de Juicio (Parte 2) | Drama, Series | 1h 55m |
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_7h9k34c2/schedule?date=2026-10-11&tz=America/New_York" # what is on now, and next curl -H "Authorization: Bearer $TVG_KEY" \ "https://api.tvguideapi.com/v1/channels/ch_7h9k34c2/now" # any past day (Archive plan) curl -H "Authorization: Bearer $TVG_KEY" \ "https://api.tvguideapi.com/v1/channels/ch_7h9k34c2/history?from=2026-10-06T00:00:00Z&to=2026-10-07T00:00:00Z"
$ch = curl_init("https://api.tvguideapi.com/v1/channels/ch_7h9k34c2/schedule?date=2026-10-11&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_7h9k34c2/schedule?date=2026-10-11&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_7h9k34c2/schedule", params={"date": "2026-10-11", "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_7h9k34c2/schedule?date=2026-10-11, the first programme { "data": [ { "id": "ls_nfgzm6nj", "channel": "ch_7h9k34c2", "start": "2026-10-11T03:35:00Z", "stop": "2026-10-11T05:20:00Z", "title": "Los Asesinatos de Midsomer", "sub_title": "Hasta que la muerte nos separe", "description": "Barnaby no está feliz cuando Sarah lo arrastra a la boda de un amigo de la fa...", "category": [ "drama", "series" ], "flags": { "new": false, "live": false } } ], "meta": { "count": 13, "date": "2026-10-11", "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 150 countries.