---
title: "Get Session Playback Url"
method: POST
path: "/v2/streaming/sessions/{session_id}/playback-url"
tags: ["v2 - Streaming"]
---

# Get Session Playback Url

`POST /v2/streaming/sessions/{session_id}/playback-url`

## Request

- Base URL: `https://api.jubjubapp.com` (the document declares no server; this is the origin it was published from)
- URL: `https://api.jubjubapp.com/v2/streaming/sessions/{session_id}/playback-url`
- Auth: HTTP bearer

Tier-2 gated playback: issue a short-lived, session-scoped signed URL.

THIS is the paywall. Before issuing anything we require, in order:
  (a) the session exists,
  (b) it belongs to THIS viewer (verified via the streaming-session token),
  (c) the session is live and paid (status == "active").
Only then do we mint a signed, expiring URL via the per-host signer. If no
signer can sign the content's host, we 422 — we never return a non-expiring
durable URL. There is no public / pre-payment path to this endpoint.

## Path parameters

- `session_id` string, required

## Headers

- `Authorization` string
- `X-JubJub-Service-Key` string
- `X-JubJub-Agent-Key` string
- `X-JubJub-Platform-Key` string
- `Origin` string
- `Referer` string
- `X-JubJub-Trial-Token` string

## Response `200`

Successful Response

- PlaybackUrlResponse
  - `url` string, required: Short-lived, session-scoped signed playback URL
  - `expires_in_seconds` integer, required: Seconds until the signed URL expires

## Other responses

- `422`: Validation Error

---

[API](https://skmtc.dev/jubjubapp/apis/jubjub-api.md) - [All operations](https://skmtc.dev/jubjubapp/apis/jubjub-api/llms.txt) - [OpenAPI document](https://skmtc.dev/jubjubapp/apis/jubjub-api/revisions/353157b296f2?raw)
