A channel's schedule
A TV channel's day slot by slot: start and stop in UTC, title, description, category, and the series and episode where we matched it.
Free key and every planLive data
GEThttps://api.tvguideapi.com/v1/channels/{id}/schedule
Try itRuns the real call with your key
200 OK
Parameters
| Parameter | In | Type | Required | Description | Example |
|---|---|---|---|---|---|
| id | path | string | required | The channel id. Ids come from Find a channel. | ch_jw83a3xg |
| date | query | date | optional | The day, YYYY-MM-DD. Defaults to today. | 2026-10-07 |
| tz | query | string | optional | Which local day to cut, as an IANA zone. The times in the answer stay UTC. See Times and days. | Europe/London |
| fields | query | list | optional | Only these fields, comma separated. | start,title,episode |
A day is cut at midnight in the zone you give with
tz, or UTC. A slot that crosses midnight is in both days. The episode object is joined in, never sent by the channel; episode.matched_by says how: airtime, episode-number, episode-title or same-description. Where the channel's own guide sent no description, episode title, number, picture or category, it is taken from another guide feed's slot for the same programme (same channel, start and title), and borrowed lists which fields and from which feed; a slot matched to its TVmaze episode that still had no episode title, number or picture takes them from that episode, marked tvmaze in borrowed. genres gives the same genre names for every feed (news, sport, film, drama, comedy, kids, documentary and so on), mapped from each guide's own categories in its own language, or, where the guide sent none, from the genres of the TVmaze show the slot is joined to.Request
curl -H "Authorization: Bearer $TVG_KEY" \ "https://api.tvguideapi.com/v1/channels/ch_jw83a3xg/schedule"
$ch = curl_init("https://api.tvguideapi.com/v1/channels/ch_jw83a3xg/schedule");
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ["Authorization: Bearer " . getenv("TVG_KEY")],
]);
$answer = json_decode(curl_exec($ch), true);
const r = await fetch("https://api.tvguideapi.com/v1/channels/ch_jw83a3xg/schedule", {
headers: { Authorization: `Bearer ${process.env.TVG_KEY}` },
});
const { data, meta } = await r.json();
import os, requests
r = requests.get(
"https://api.tvguideapi.com/v1/channels/ch_jw83a3xg/schedule",
headers={"Authorization": f"Bearer {os.environ['TVG_KEY']}"},
)
data = r.json()["data"]
Sample response
{
"data": [
{
"id": "ls_shr78fcp",
"channel": "ch_jw83a3xg",
"start": "2026-10-07T19:00:00Z",
"stop": "2026-10-07T19:30:00Z",
"title": "EastEnders",
"sub_title": "Episode 7012",
"category": [
"Soap"
],
"episode": {
"show_id": "sh_e29nzc1x",
"episode_id": "ep_610mmeyh",
"season": 41,
"number": 157,
"name": "Episode 7012",
"orig_air": "2026-10-07",
"matched_by": "airtime",
"source": "tvmaze"
},
"flags": {
"new": true,
"live": false,
"repeat": false
}
},
{
"id": "ls_shr78fcp",
"channel": "ch_jw83a3xg",
"start": "2026-10-07T19:30:00Z",
"stop": "2026-10-07T20:00:00Z",
"title": "The One Show",
"category": [
"Magazine"
],
"flags": {
"new": true,
"live": true,
"repeat": false
}
}
],
"meta": {
"count": 38,
"next": "c_8f21a0",
"took_ms": 41
}
}