---
title: "Streaming API v2: Slow path: get-playback-url"
description: "Ask the panel for a playback URL when direct playback is not possible."
---

## 7.5 Slow path: `get-playback-url`

Use it when the node is not `direct`, after a `403` from the node, or when
the panel lacks direct playback. It costs a round trip through your gateway
to the panel.

```http
GET /api/v2/get-playback-url?type=channel&id=123&ext=m3u8
Authorization: Bearer <session_token>
```

| Parameter | |
|---|---|
| `type` | `channel`, `vod` or `saga` |
| `id` | The channel, movie or episode `id` |
| `ext` | `ts` (default), `m3u8`, or the container extension |

```json
{
  "playback_token": "eyAbCd…gzWx.qRsTuV…",
  "url_path": "/eyAbCd…gzWx.qRsTuV…~<session_token>",
  "urls": ["https://lb1.example.com:443/eyAbCd…~<session_token>",
           "http://203.0.113.6:80/eyAbCd…~<session_token>"],
  "ttl": 300,
  "session": { "session_token": "…", "session_id": "…", "playback_key": "…",
               "exp_user": "…", "exp_token": "…", "server_time": 1755079200 }
}
```

- Try `urls` in order: one per node, with the node's first host. `url_path`
  is the same path, if you build the host yourself from the routes (for
  example to fall back to a node's IP).
- `session` is present only when the panel renewed the session (for example
  the first play of a line whose clock starts on first use): replace the
  stored session token and `playback_key`.
- Errors: `invalid_parameter`, `not_in_package`, `account_expired`,
  `account_disabled`, `restreamer_not_allowed`, and the session errors of
  section 4.
