List 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
TimeStatusUser Agent
Retrieving recent requests…
LoadingLoading…

GET /lives

Lists the lives in your account, 100 per page.

📘

Authorization

Requires a valid Panda API token sent in the Authorization header (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 SchemeHeaderNote
API KeyAuthorizationPanda API token (without Bearer prefix)

Parameters

NameInTypeRequiredDescription
AuthorizationheaderstringYesPanda API token (without Bearer prefix)

Query Parameters

FieldTypeRequiredDescription
pageintegerNoPage number. 100 items per page.
limitintegerNoPage size.
statusstringNoOptional 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 carry ingest_endpoint, ingest_hostname, playback_url, latency_type, config, chat_id, chat_status or view_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)

FieldTypeDescription
idstring (uuid)Unique identifier of the live.
titlestringTitle of the live stream.
statusstringCurrent status — see the table below.
stream_key_idstring (uuid)Stream key attached to this live.
stream_keystring (uuid)Stream key value.
user_idstring (uuid)Owner of the live.
regionstringIngest region of this live: us or br.
quality_packagestringDerived from bitrate — not the value stored at creation, so it may not match what was requested.
save_vodbooleanWhether this live is being recorded.
bitratearray of stringsEnabled video qualities.
active_dvrbooleanWhether DVR is enabled.
folder_idstring (uuid) | nullFolder where the recorded video is saved.
rtmpstringIngest server without the key.
live_hlsstringLegacy playback URL.
live_playerstringPlayer URL to embed the live.
scheduled_atstring | nullScheduled start, with no timezone suffix.
started_atstring | nullWhen the broadcast actually started.
ended_atstring | nullWhen the broadcast ended.
vod_idstring | nullRecording identifier.
video_idstring | nullVideo created from the recording, once ready.
created_atstringCreation timestamp.
video_heightintegerPresent once the recording became a video.
video_widthintegerPresent once the recording became a video.

Live status values

StatusMeaningFinal?
provisioningThe live is being prepared — it does not accept the encoder yet.No — moves to offline
offlineReady, waiting for the signal from your encoder.No
onlineOn air.No
finishingEnd requested, still finalizing.No — moves to finished
finishedEnded.Yes
finished_importedEnded, and the video of the recording has been created.Yes
expiredBecame ready but no signal ever arrived — it never went on air.No — it is recoverable
canceledCanceled.Yes
📘

expired is not a failure. Lives that were never fed a signal pile up in this list as expired. Instead of creating a new live for each attempt, call POST /lives/{live_id}/regenerate — the same live goes back to provisioning, 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 ?? [])
Query Params
integer
≥ 1
Defaults to 1

Page number for pagination. Defaults to 1.

integer
≥ 1
Defaults to 100

Page size (lives per page). Defaults to 100.

string
enum

Optional filter by live status.

Allowed:
Responses

Language
Credentials
Header
LoadingLoading…
Response
Click Try It! to start a request and see the response here! Or choose an example:
application/json