Channels

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.

List channels

GET /channels channels

Every TV channel, in channel order, with its sources.

Parameters

  • limit integer query

    Page size, 1–200.

    1–200. Default 50

  • cursor string query

    The next_cursor of the previous page.

  • group string query

    Only this group (group-title).

  • q string query

    Name 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)
  • items object[] required
    7 fields in items
    • id string required
    • name string required
    • number integer or null
    • group string or null
    • logo_url string or null
    • tvg_id string or null

      The EPG key (tvg-id, else tvg-name).

    • sources object[] required
      3 fields in sources
      • transport string required

        One of multicast, hls, dash, rtsp, http

      • url string required
      • venue_ids string[] or null required

        The venues this source works in (a multicast network); null = everywhere.

  • next_cursor string or null required

    Pass as cursor for the next page; null on the last page.

curl "https://www.wunderframe.com/api/v1/channels?limit=50" \
  -H "Authorization: Bearer $WUNDERFRAME_API_KEY"
Response 200
{
  "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
Response 401
{
  "error": {
    "code": "unauthorized",
    "message": "Missing or invalid API key."
  }
}

Get a stage’s channel

GET /stages/{id}/channel channels

Parameters

  • id string required path

    The 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_id string or null required

    Null: no channel set — each video plays its default.

  • name string or null
  • by string or null required

    One of operator, rule, null

  • rule string or null

    The rule’s name when a rule chose it.

  • set_by string or null

    Who set it, for an operator’s pick.

  • why string required

    The 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"
Response 200
{
  "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
Response 401
{
  "error": {
    "code": "unauthorized",
    "message": "Missing or invalid API key."
  }
}

Switch a stage’s channel

PUT /stages/{id}/channel channels

Sets 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

  • id string required path

    The stage id.

Request body required

  • channel_id string or null required

Responses

  • 200 The stage’s channel after the change.
  • 400 The request is invalid — details.field names 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_id string or null required

    Null: no channel set — each video plays its default.

  • name string or null
  • by string or null required

    One of operator, rule, null

  • rule string or null

    The rule’s name when a rule chose it.

  • set_by string or null

    Who set it, for an operator’s pick.

  • why string required

    The 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"
}'
Response 200
{
  "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
Response 400
{
  "error": {
    "code": "invalid",
    "message": "The request is invalid — `details.field` names the field when there is one."
  }
}