Listings for the week, every show's usual slot, how often it repeats and where it airs, counted from years of schedules across 179 countries. One key, one shape, JSON.
Free key reads yesterday's listings. Live from $39 a month, Complete with no call limit at $79.
What you get
Three layers under one key. Listings tell you what is on. Shows tell you what it is. Patterns tell you when it usually airs and how often it comes back.
Every channel's day, slot by slot, with start and stop in UTC, title, episode, category and description. 7 days back to 7 days ahead.
GET /v1/channels/{id}/schedule/{date}GET /v1/countries/{cc}/schedule/{date}Find any show by title and get its genre, network, the channels it airs on and its airings this week, with first runs told apart from repeats.
GET /v1/shows/search/{q}GET /v1/shows/{id}/airingsA show's usual slot, its day by hour fingerprint, repeat share and airing counts by channel and country. 90 days on Live, all time on Complete.
GET /v1/shows/{id}/patternGET /v1/shows/{id}/statsThe free key
No card, no sandbox, no made-up rows. Sign in with Google, get a key, and call yesterday's schedule for any channel. Build against real data, then upgrade on the same key when you go live.
{
"data": [
{
"id": "ls_px2n8qey",
"channel": "ch_jw83a3xg",
"start": "2026-11-03T20:00:00Z",
"stop": "2026-11-03T21:00:00Z",
"title": "MasterChef: The Professionals",
"category": [
"reality",
"culinair"
],
"flags": {
"new": false,
"live": false
},
"episode": {
"show_id": "sh_a8m2rhpm",
"episode_id": "ep_c9g3t3m0",
"season": 19,
"number": 1,
"name": "Episode 1",
"orig_air": "2026-11-02"
}
}
],
"meta": {
"count": 38,
"plan": "free",
"note": "Today and the week ahead are on Live."
}
}
Depth
Channels held, programmes listed today, and how full each field is. Counted from the data every day, never claimed.
| Country | Channels |
|---|---|
US United StatesUS |
8,653 |
DE GermanyDE |
1,187 |
FR FranceFR |
843 |
TH ThailandTH |
164 |
AU AustraliaAU |
823 |
For developers
JSON over HTTPS, the same ids everywhere, UTC times, and paid fields that come back empty on lower plans rather than vanishing.
# A show's usual slot and fingerprint
curl https://api.tvschedule.org/v1/shows/sh_e29nzc1x/pattern \
-H "Authorization: Bearer <your key>"
# pip install requests
import requests
r = requests.get(
"https://api.tvschedule.org/v1/shows/sh_e29nzc1x/pattern",
headers={"Authorization": "Bearer <your key>"},
)
print(r.json()["data"]["usual"])
const r = await fetch(
"https://api.tvschedule.org/v1/shows/sh_e29nzc1x/pattern",
{ headers: { Authorization: "Bearer <your key>" } }
);
const { data } = await r.json();
console.log(data.usual);
$ch = curl_init("https://api.tvschedule.org/v1/shows/sh_e29nzc1x/pattern");
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ["Authorization: Bearer <your key>"],
]);
$data = json_decode(curl_exec($ch), true)["data"];
echo $data["usual"];
Built on it
From a guide in a media centre to an assistant that knows when the next episode is on.
An XMLTV file per channel for a home server or player, refreshed for the week.
Tell people when the next episode airs and where, with repeats marked.
Airing counts, repeat shares and channel make-up, ready for a report.
An MCP server so an assistant can answer "when is it on" for real.
MCP server
Add the server to Claude, ChatGPT or Cursor, sign in once, and your assistant reads the schedule and patterns with your own key and plan.
Plans
One key from the first call. Upgrade and the same key opens the new plan at once. Annual is twelve months for the price of ten.
Real listings for yesterday, to build against.
The week ahead and every show's pattern, for live products.
Everything in Live, with no call limit and all-time depth.
Questions
Yes. Real listings for yesterday on every channel, 200 calls a day, reset at 00:00 UTC. Today and the week ahead, shows and patterns are on Live and Complete.
From the show's airings over the window you read: the days and local hours it airs most, the channel that carries it most, and how many of those airings were repeats. It is counted every night.
No monthly call allowance and no overage charge. A pace limit of 600 calls a minute protects the service for everyone, and sharing a key or reselling the data is not allowed.
Yes, in your own apps, sites and screens. Reselling or republishing the data itself, as a feed or API of your own, is not allowed.
Any time from your account. An upgrade opens at once on the same key; a move down applies at the end of the period you have paid for.
Real listings on the first call. Upgrade on the same key when you go live.