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 Europe/Lisbon 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/Lisbon. The same day from the API: GET /v1/channels/ch_rv05wmnb/schedule?date=2026-10-14&tz=Europe/Lisbon
| Time | Programme | Episode | Category | Length |
|---|---|---|---|---|
| 23:57 | 24 HorasOu00a0essencial da informau00e7u00e3o u00e0 meia-noite e as primeiras pu00e1ginas dos jornais com anu00e1lise em antena. | News | 1h 4m | |
| 01:01 | Notu00edcias do Atlu00e2nticoA aproximau00e7u00e3o da diu00e1spora com origem nas regiu00f5es autu00f3nomas dos Au00e7ores e da Madeira, com os assuntos que marcam a atualidade... | News | 1h 2m | |
| 02:03 | Sinais de Vida | News | 43m | |
| 02:46 | Sinais de Vida | News | 42m | |
| 03:28 | Negu00f3cio FechadoCada objeto tem uma histu00f3ria, cada histu00f3ria tem um valor e cada negociau00e7u00e3o pode acabar num Negu00f3cio Fechado. | News | 49m | |
| 04:17 | Sociedade CivilComo Nos Apaixonamos Hoje em Dia. | News | 1h 6m | |
| 05:23 | Grande Reportagem RTPAs Margens da Memu00f3ria. | News | 37m | |
| 06:00 | Bom Dia PortugalE porque u00e9 de manhu00e3 que comeu00e7a o dia, entu00e3o inicie-o na nossa companhia! | News | 4h | |
| 10:00 | Prau00e7a da AlegriaOtimismo, entusiasmo e muita energia nas manhu00e3s de Portugal! | News | 2h 58m | |
| 12:58 | Jornal da TardeAssim que a tarde comeu00e7a, ju00e1 temos para si as notu00edcias do dia. | News | 1h 17m | |
| 14:15 | Sinais de Vida | News | 45m | |
| 15:00 | Sinais de Vida | News | 30m | |
| 15:30 | Negu00f3cio FechadoCada objeto tem uma histu00f3ria, cada histu00f3ria tem um valor e cada negociau00e7u00e3o pode acabar num Negu00f3cio Fechado. | News | 1h | |
| 16:30 | Agarra-me Se PuderesO novo concurso da RTP com apresentau00e7u00e3o de Josu00e9 Pedro Vasconcelos. | News | 1h | |
| 17:30 | Portugal em RedePrograma de informau00e7u00e3o centrado no pau00eds e nas regiu00f5es, com Sandra Fernandes Pereira. | News | 1h 37m | |
| 19:07 | O Preu00e7o CertoNo. | News | 51m | |
| 19:58 | TelejornalA mais rigorosa seleu00e7u00e3o de notu00edcias, todos os dias u00e0s 20h00. | News | 1h 3m | |
| 21:01 | Primeira PessoaAbordagens distintas e plurais de diferentes figuras da nossa sociedade com Fu00e1tima Campos Ferreira. | News | 44m | |
| 21:45 | Hu00f3quei em Patins: Campeonato do Mundo de Seniores MasculinosItu00e1lia x Portugal. | News | 2h | |
| 23:45 | ModaLisboa Priority | News | 12m | |
| 23:57 | 24 HorasOu00a0essencial da informau00e7u00e3o u00e0 meia-noite e as primeiras pu00e1ginas dos jornais com anu00e1lise em antena. | News | 1h 3m |
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_rv05wmnb/schedule?date=2026-10-14&tz=Europe/Lisbon" # what is on now, and next curl -H "Authorization: Bearer $TVG_KEY" \ "https://api.tvguideapi.com/v1/channels/ch_rv05wmnb/now" # any past day (Archive plan) curl -H "Authorization: Bearer $TVG_KEY" \ "https://api.tvguideapi.com/v1/channels/ch_rv05wmnb/history?from=2025-10-13T00:00:00Z&to=2025-10-14T00:00:00Z"
$ch = curl_init("https://api.tvguideapi.com/v1/channels/ch_rv05wmnb/schedule?date=2026-10-14&tz=Europe/Lisbon"); 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_rv05wmnb/schedule?date=2026-10-14&tz=Europe/Lisbon", { 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_rv05wmnb/schedule", params={"date": "2026-10-14", "tz": "Europe/Lisbon"}, headers={"Authorization": f"Bearer {os.environ['TVG_KEY']}"}, ) for slot in r.json()["data"]: print(slot["start"], slot["title"])
// GET /v1/channels/ch_rv05wmnb/schedule?date=2026-10-14, the first programme { "data": [ { "id": "ls_e6bqzsw6", "channel": "ch_rv05wmnb", "start": "2026-10-13T22:57:00Z", "stop": "2026-10-14T00:01:00Z", "title": "24 Horas", "sub_title": null, "description": "Ou00a0essencial da informau00e7u00e3o u00e0 meia-noite e as primeiras pu00e1g...", "category": [ "news" ], "flags": { "new": false, "live": false } } ], "meta": { "count": 21, "date": "2026-10-14", "tz": "Europe/Lisbon" } }
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 155 countries.