Docs API reference
Channels
TV channels imported from your provider’s playlists (M3U / XSPF), and each stage’s current channel. Switching a stage’s channel changes only the video that shows “the stage’s channel” — the rest of the slide stays.
Every call needs an API key in the Authorization header. New to the API? Start with
the API overview.
List channels
/channels channelsEvery TV channel, in channel order, with its sources.
Parameters
limitinteger queryPage size, 1–200.
1–200. Default
50cursorstring queryThe
next_cursorof the previous page.groupstring queryOnly this group (
group-title).qstring queryName contains.
Responses
- 200 A page of channels.
- 401 Missing or invalid API key.
- 403 The key lacks the scope, or the role is read-only.
Response fields (200)
itemsobject[] required7 fields in
itemsidstring requirednamestring requirednumberinteger or nullgroupstring or nulllogo_urlstring or nulltvg_idstring or nullThe EPG key (
tvg-id, elsetvg-name).sourcesobject[] required3 fields in
sourcestransportstring requiredOne of
multicast,hls,dash,rtsp,httpurlstring requiredvenue_idsstring[] or null requiredThe venues this source works in (a multicast network);
null= everywhere.
next_cursorstring or null requiredPass as
cursorfor the next page;nullon the last page.
curl "https://www.wunderframe.com/api/v1/channels?limit=50" \
-H "Authorization: Bearer $WUNDERFRAME_API_KEY"{
"items": [
{
"id": "ch_srf1",
"name": "SRF 1",
"number": 1,
"group": "de",
"logo_url": "https://api.tv.init7.net/media/logos/1102_SRF1.ch.png",
"tvg_id": "SRF1.ch",
"sources": [
{
"transport": "multicast",
"url": "udp://@233.50.230.80:5000",
"venue_ids": [
"ven_belvedere"
]
},
{
"transport": "hls",
"url": "https://api.tv.init7.net/api/live/?channel=b87a…",
"venue_ids": null
}
]
}
],
"next_cursor": null
}Error example
{
"error": {
"code": "unauthorized",
"message": "Missing or invalid API key."
}
}Get a stage’s channel
/stages/{id}/channel channelsParameters
idstring required pathThe stage id.
Responses
- 200 The stage’s channel now, and why.
- 401 Missing or invalid API key.
- 403 The key lacks the scope, or the role is read-only.
- 404 Not found in this workspace.
Response fields (200)
channel_idstring or null requiredNull: no channel set — each video plays its default.
namestring or nullbystring or null requiredOne of
operator,rule,nullrulestring or nullThe rule’s name when a rule chose it.
set_bystring or nullWho set it, for an operator’s pick.
whystring requiredThe desk’s sentence: “Channel: SRF 1 HD · by rule “Match night””.
curl "https://www.wunderframe.com/api/v1/stages/wkFRBzMq6POZ_qYJHvgQf/channel" \
-H "Authorization: Bearer $WUNDERFRAME_API_KEY"{
"channel_id": "ch_srf2",
"name": "SRF zwei",
"by": "rule",
"rule": "Match night",
"set_by": null,
"why": "Channel: SRF zwei · by rule “Match night”"
}Error example
{
"error": {
"code": "unauthorized",
"message": "Missing or invalid API key."
}
}Switch a stage’s channel
/stages/{id}/channel channelsSets the channel every “the stage’s channel” video on this stage shows. It beats a rule until handed back with channel_id: null. Refused (403) while a live show someone else controls holds the stage.
Parameters
idstring required pathThe stage id.
Request body required
channel_idstring or null required
Responses
- 200 The stage’s channel after the change.
- 400 The request is invalid —
details.fieldnames the field when there is one. - 401 Missing or invalid API key.
- 403 The key lacks the scope, or the role is read-only.
- 404 Not found in this workspace.
Response fields (200)
channel_idstring or null requiredNull: no channel set — each video plays its default.
namestring or nullbystring or null requiredOne of
operator,rule,nullrulestring or nullThe rule’s name when a rule chose it.
set_bystring or nullWho set it, for an operator’s pick.
whystring requiredThe desk’s sentence: “Channel: SRF 1 HD · by rule “Match night””.
curl -X PUT "https://www.wunderframe.com/api/v1/stages/wkFRBzMq6POZ_qYJHvgQf/channel" \
-H "Authorization: Bearer $WUNDERFRAME_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"channel_id": "ch_srf2"
}'{
"channel_id": "ch_srf2",
"name": "SRF zwei",
"by": "rule",
"rule": "Match night",
"set_by": null,
"why": "Channel: SRF zwei · by rule “Match night”"
}Error example
{
"error": {
"code": "invalid",
"message": "The request is invalid — `details.field` names the field when there is one."
}
}