Change feed
Every TV listing that moved, appeared or disappeared since a time you give, to keep your own copy of the guide in step.
Paid plansLive data
GEThttps://api.tvguideapi.com/v1/changes
Try itRuns the real call with your key
200 OK
Parameters
| Parameter | In | Type | Required | Description | Example |
|---|---|---|---|---|---|
| since | query | datetime | required | UTC; up to 7 days back. | 2026-10-07T00:00:00Z |
| country | query | list | optional | Country codes, ISO 3166-1 alpha-2, comma separated. | GB |
| cursor | query | string | optional | The cursor from the previous answer's meta.next. See Paging and fields. |
Call again with
since set to the previous answer's meta.until. A moved slot shows its old start in was.Request
curl -H "Authorization: Bearer $TVG_KEY" \ "https://api.tvguideapi.com/v1/changes?since=2026-10-07T00%3A00%3A00Z"
$ch = curl_init("https://api.tvguideapi.com/v1/changes?since=2026-10-07T00%3A00%3A00Z");
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/changes?since=2026-10-07T00%3A00%3A00Z", {
headers: { Authorization: `Bearer ${process.env.TVG_KEY}` },
});
const { data, meta } = await r.json();
import os, requests
r = requests.get(
"https://api.tvguideapi.com/v1/changes?since=2026-10-07T00%3A00%3A00Z",
headers={"Authorization": f"Bearer {os.environ['TVG_KEY']}"},
)
data = r.json()["data"]
Sample response
{
"data": [
{
"op": "moved",
"id": "ls_shr78fcp",
"channel": "ch_jw83a3xg",
"start": "2026-10-07T22:40:00Z",
"was": "2026-10-07T22:35:00Z"
},
{
"op": "added",
"channel": "ch_7qk3m2xa",
"start": "2026-10-08T00:05:00Z",
"title": "Late Football"
}
],
"meta": {
"count": 2400,
"next": "c_8f21a0",
"took_ms": 41
}
}