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 Asia/Seoul 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 Asia/Seoul. The same day from the API: GET /v1/channels/ch_dz9q6dj1/schedule?date=2026-10-18&tz=Asia/Seoul
| Time | Programme | Episode | Category | Length |
|---|---|---|---|---|
| 00:00 | 소녀어부 | 취미/레저, 낚시 | 30m | |
| 00:30 | 리포터 현장출동 | 취미/레저, 낚시 | 30m | |
| 01:00 | 향란이의 뻐니뻐니 | 취미/레저, 낚시 | 30m | |
| 01:30 | 귀리2 | 취미/레저, 낚시 | 30m | |
| 02:00 | 테크니션즈 | 취미/레저, 낚시 | 30m | |
| 02:30 | 체이서 더 포인트맨 | 취미/레저, 낚시 | 30m | |
| 03:00 | 일격 나이트호크 | 취미/레저, 낚시 | 30m | |
| 03:30 | 노가리한상 | 취미/레저, 낚시 | 30m | |
| 04:00 | 루어액션 | 취미/레저, 낚시 | 1h | |
| 05:00 | 바다포커스 | 취미/레저, 낚시 | 1h | |
| 06:00 | 낚시 왔구나2 | 취미/레저, 낚시 | 30m | |
| 06:30 | NEW대물낚시 300일 | 취미/레저, 낚시 | 30m | |
| 07:00 | 풍경이 있는 낚시터 | 취미/레저, 낚시 | 30m | |
| 07:30 | 버킷리스트 | 취미/레저, 낚시 | 30m | |
| 08:00 | 선 굵은 낚시 | 취미/레저, 낚시 | 30m | |
| 08:30 | DRAG2 | 취미/레저, 낚시 | 30m | |
| 09:00 | 어나더 | 취미/레저, 낚시 | 30m | |
| 09:30 | 낚시가 좋다 | 취미/레저, 낚시 | 30m | |
| 10:00 | 대포붕어 | 취미/레저, 낚시 | 30m | |
| 10:30 | 시그널 2 | 취미/레저, 낚시 | 30m | |
| 11:00 | 생활의 달인수십년간 한 분야에 종사하며 부단한 열정과 노력으로 달인의 경지에 이르게 된 사람들. 삶의 스토리와 리얼리티가 담겨 있는 ‘생활 달인’은 그 자체가 다큐... | 교양/정보, 일반 | 1h | |
| 12:00 | 마이티조2 in 대마도 | 취미/레저, 낚시 | 30m | |
| 12:30 | 맨 인 블랙박스천만 개의 블랙박스로 포착한 연출 불가능한 세상에 단 하나밖에 없는 날것 그대로의 영상을 활용해 정보가 가득한 리얼리티쇼를 제작한다. | 교양/정보, 일반 | 30m | |
| 13:00 | TV동물농장인간사만큼이나 무궁무진한 동물들 삶의 애환과 고뇌, 기적과 운명이 교차하는 동물의 세계를 그들의 입장에서 이해하고 공감하도록 유도하는 동물 전문 프로... | 교양/정보, 일반 | 1h 30m | |
| 14:30 | 팀뻐니피싱 | 취미/레저, 낚시 | 30m | |
| 15:00 | 어장관리 | 취미/레저, 낚시 | 30m | |
| 15:30 | 한반도 쏘가리 NEVER END | 취미/레저, 낚시 | 30m | |
| 16:00 | 오늘의 한판승부 | 취미/레저, 낚시 | 30m | |
| 16:30 | 타이밍 | 취미/레저, 낚시 | 30m | |
| 17:00 | 붕어낚시의 미야 | 취미/레저, 낚시 | 30m | |
| 17:30 | 외바늘 시즌2 | 취미/레저, 낚시 | 30m | |
| 18:00 | 체이서 더 포인트맨 | 취미/레저, 낚시 | 30m | |
| 18:30 | TV동물농장인간사만큼이나 무궁무진한 동물들 삶의 애환과 고뇌, 기적과 운명이 교차하는 동물의 세계를 그들의 입장에서 이해하고 공감하도록 유도하는 동물 전문 프로... | 교양/정보, 일반 | 1h 30m | |
| 20:00 | 붕어낚시의 저력 | 취미/레저, 낚시 | 30m | |
| 20:30 | 피싱데이즈 | 취미/레저, 낚시 | 30m | |
| 21:00 | 테크니션즈 | 취미/레저, 낚시 | 30m | |
| 21:30 | 어영차 바다야바다와 함께 살아가는 사람들의 생생한 이야기를 아름다운 소리꾼이 풀어낸다. | 교양/정보, 일반 | 1h | |
| 22:30 | 파인드 | 취미/레저, 낚시 | 30m | |
| 23:00 | 장어 사냥꾼 | 취미/레저, 낚시 | 30m | |
| 23:30 | 붕어낚시의 월야 | 취미/레저, 낚시 | 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_dz9q6dj1/schedule?date=2026-10-18&tz=Asia/Seoul" # what is on now, and next curl -H "Authorization: Bearer $TVG_KEY" \ "https://api.tvguideapi.com/v1/channels/ch_dz9q6dj1/now" # any past day (Archive plan) curl -H "Authorization: Bearer $TVG_KEY" \ "https://api.tvguideapi.com/v1/channels/ch_dz9q6dj1/history?from=2025-10-13T00:00:00Z&to=2025-10-14T00:00:00Z"
$ch = curl_init("https://api.tvguideapi.com/v1/channels/ch_dz9q6dj1/schedule?date=2026-10-18&tz=Asia/Seoul"); 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_dz9q6dj1/schedule?date=2026-10-18&tz=Asia/Seoul", { 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_dz9q6dj1/schedule", params={"date": "2026-10-18", "tz": "Asia/Seoul"}, headers={"Authorization": f"Bearer {os.environ['TVG_KEY']}"}, ) for slot in r.json()["data"]: print(slot["start"], slot["title"])
// GET /v1/channels/ch_dz9q6dj1/schedule?date=2026-10-18, the first programme { "data": [ { "id": "ls_p9md096g", "channel": "ch_dz9q6dj1", "start": "2026-10-17T15:00:00Z", "stop": "2026-10-17T15:30:00Z", "title": "소녀어부", "sub_title": null, "description": null, "category": [ "취미/레저", "낚시" ], "flags": { "new": false, "live": false } } ], "meta": { "count": 40, "date": "2026-10-18", "tz": "Asia/Seoul" } }
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:49 | 타이밍 | 취미/레저, 낚시 |
| 00:15 | 수초와 수초 사이 | 취미/레저, 낚시 |
| 00:43 | 수초 사이로 | 취미/레저, 낚시 |
| 34 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 150 countries.