Retrieves playlist details for password-protected playlists
| Time | Status | User Agent | |
|---|---|---|---|
Retrieving recent requests… | |||
POST /playlist_details/{playlist_id}
{playlist_id}Returns the public view of a playlist — title, description, branding and the ordered list of videos with playable URLs. Used by the public viewer page.
Public endpoint — no auth headerThis endpoint does not require an API Key (the route is not behind the authorizer). Anyone holding the public link can call it. When the playlist is
anyone_with_password, the visitor's password is sent in the body and validated server‑side.
Why POST and not GET?The endpoint is POST because the password must travel in the body (not in a URL or header). For open playlists you may send an empty body
{}.
HTTP Method & Path
POST /playlist_details/{playlist_id}
Base URL: https://api-v2.pandavideo.com.br
Path Parameters
| Name | Type | Required | Description |
|---|---|---|---|
playlist_id | string (uuid) | yes | Playlist identifier. |
Request Body
Content-Type: application/json
| Field | Type | Required | Description |
|---|---|---|---|
password | string | conditional | Required when the playlist's access_type === "anyone_with_password". Plain text — the server compares it against the AES‑256‑CBC‑encrypted stored value. |
{ "password": "secret123" }For anyone_with_link playlists send {} (or omit body).
Response
Success Response (200)
{
"id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"name": "Onboarding Series",
"description": "Internal onboarding for new hires.",
"hide_views": false,
"creator_name": "Panda Education",
"external_button": { "text": "Open course", "url": "https://example.com/course", "size": "medium" },
"image_url": "https://cdn.pandavideo.com.br/images/playlist-logo.png",
"videos": [
{
"id": "f1f2f3f4-aaaa-bbbb-cccc-d1d2d3d4d5d6",
"title": "Episode 1 — Welcome",
"duration": 720,
"thumbnail_url": "https://b-myzone.tv.pandavideo.com.br/abc123/thumbnail.jpg",
"views": 120,
"order": 0,
"description": "Kickoff episode",
"video_player": "https://player-myzone.tv.pandavideo.com.br/embed/?v=abc123"
}
]
}Response Schema
| Field | Type | Description |
|---|---|---|
id / name / description / creator_name | — | Playlist metadata. |
hide_views | boolean | When true, each video's views is returned as null. |
external_button | object | null | { text, url, size } shown on the public page. |
image_url | string | null | Composed from image.cdn_base + storage_path. |
videos[] | array | Sorted by order ASC. |
videos[].id / title / description | — | Video metadata. |
videos[].duration | integer | Seconds (from metadata.length). |
videos[].thumbnail_url | string | Derived (see get_playlists-playlist-id-videos). |
videos[].views | integer | null | null when hide_views=true. |
videos[].order | integer | Position in the playlist. |
videos[].video_player | string | Ready‑to‑embed player URL: https://player-{pullzone}.tv.pandavideo.com.br/embed/?v={external_id}. |
Caching. Response is cached in Memcache for 24 seconds (playlist_details_{playlist_id}) outside dev. Mutations on the playlist (PUT, delete, add/remove video) invalidate the key.
Error Responses
- 400 —
"Playlist not found","Password required", or"Invalid password". - 500 — internal error.
Example Usage
cURL
Open playlist:
curl --request POST \
--url 'https://api-v2.pandavideo.com.br/playlist_details/a1b2c3d4-e5f6-7890-abcd-ef1234567890' \
--header 'Content-Type: application/json' \
--data '{}'Password‑protected playlist:
curl --request POST \
--url 'https://api-v2.pandavideo.com.br/playlist_details/a1b2c3d4-e5f6-7890-abcd-ef1234567890' \
--header 'Content-Type: application/json' \
--data '{ "password": "secret123" }'