get
https://api-v2.pandavideo.com.br/lives/
Lists the lives in your account, 100 per page. On a normal account the response is a plain list; on a trial account it becomes an object with lives and trial_limit_reached. The item of the list is smaller than the response of the create.
Recent Requests
Log in to see full request history
| Time | Status | User Agent | |
|---|---|---|---|
Retrieving recent requests… | |||
Loading…
GET /lives
Lists the lives in your account, 100 per page.
AuthorizationRequires a valid Panda API token sent in the
Authorizationheader (no Bearer prefix).
The response type changes with the state of the account. On a normal account this endpoint returns a plain list — no envelope. On a trial account it returns an object instead:{ "lives": [...], "trial_limit_reached": true }. Handle both shapes.
HTTP Method & Path
GET /lives
Base URL: https://api-v2.pandavideo.com.br
Authentication Requirements
| Security Scheme | Header | Note |
|---|---|---|
| API Key | Authorization | Panda API token (without Bearer prefix) |
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
Authorization | header | string | Yes | Panda API token (without Bearer prefix) |
Query Parameters
| Field | Type | Required | Description |
|---|---|---|---|
page | integer | No | Page number. 100 items per page. |
limit | integer | No | Page size. |
status | string | No | Optional filter by live status. |
Response
Success Response (200) — normal account
A plain list, with no envelope:
[
{
"id": "{live_id}",
"title": "Aula ao vivo 01",
"status": "finished_imported",
"stream_key_id": "{stream_key_id}",
"stream_key": "{stream_key}",
"user_id": "USER_ID",
"region": "us",
"quality_package": "hd",
"save_vod": true,
"bitrate": ["360p", "480p", "720p"],
"active_dvr": true,
"folder_id": null,
"rtmp": "rtmp://vz-{hash}.us.pandavideo.live/live",
"live_hls": "https://b-vz-{hash}.tv.pandavideo.com.br/{live_id}/playlist.m3u8.live",
"live_player": "https://player-vz-{hash}.tv.pandavideo.com.br/embed/live/?v={live_id}",
"scheduled_at": null,
"started_at": "2026-09-07T02:45:10.000Z",
"ended_at": "2026-09-07T03:02:44.000Z",
"vod_id": "{vod_id}",
"video_id": "{video_id}",
"created_at": "2026-09-07T02:37:22.591Z"
}
]Success Response (200) — trial account
{
"lives": [ { "...": "the same items as above" } ],
"trial_limit_reached": true
}
The item of the list is smaller than the response of the create. It does not carryingest_endpoint,ingest_hostname,playback_url,latency_type,config,chat_id,chat_statusorview_metrics. If you are listing in order to get the publish address, you will not find it here — fetch the live by its id instead.
Response Schema (item)
| Field | Type | Description |
|---|---|---|
id | string (uuid) | Unique identifier of the live. |
title | string | Title of the live stream. |
status | string | Current status — see the table below. |
stream_key_id | string (uuid) | Stream key attached to this live. |
stream_key | string (uuid) | Stream key value. |
user_id | string (uuid) | Owner of the live. |
region | string | Ingest region of this live: us or br. |
quality_package | string | Derived from bitrate — not the value stored at creation, so it may not match what was requested. |
save_vod | boolean | Whether this live is being recorded. |
bitrate | array of strings | Enabled video qualities. |
active_dvr | boolean | Whether DVR is enabled. |
folder_id | string (uuid) | null | Folder where the recorded video is saved. |
rtmp | string | Ingest server without the key. |
live_hls | string | Legacy playback URL. |
live_player | string | Player URL to embed the live. |
scheduled_at | string | null | Scheduled start, with no timezone suffix. |
started_at | string | null | When the broadcast actually started. |
ended_at | string | null | When the broadcast ended. |
vod_id | string | null | Recording identifier. |
video_id | string | null | Video created from the recording, once ready. |
created_at | string | Creation timestamp. |
video_height | integer | Present once the recording became a video. |
video_width | integer | Present once the recording became a video. |
Live status values
| Status | Meaning | Final? |
|---|---|---|
provisioning | The live is being prepared — it does not accept the encoder yet. | No — moves to offline |
offline | Ready, waiting for the signal from your encoder. | No |
online | On air. | No |
finishing | End requested, still finalizing. | No — moves to finished |
finished | Ended. | Yes |
finished_imported | Ended, and the video of the recording has been created. | Yes |
expired | Became ready but no signal ever arrived — it never went on air. | No — it is recoverable |
canceled | Canceled. | Yes |
expiredis not a failure. Lives that were never fed a signal pile up in this list asexpired. Instead of creating a new live for each attempt, callPOST /lives/{live_id}/regenerate— the same live goes back toprovisioning, keeping its id, its stream key and its player URL.
Error Responses
- 401 Unauthorized — missing or invalid API token.
- 500 Internal Server Error — server-side error.
Example Usage
cURL
curl -X GET "https://api-v2.pandavideo.com.br/lives?page=1" \
-H "Authorization: {api_key}"Reading both shapes
const resp = await fetch('/lives?page=1', { headers: { Authorization: apiKey } }).then(r => r.json())
const items = Array.isArray(resp) ? resp : (resp.lives ?? [])