Returns the full properties of a video (status, playback URLs, technical metadata, folder, subtitles, audios) by internal video_id.
| Time | Status | User Agent | |
|---|---|---|---|
Retrieving recent requests… | |||
GET /videos/{video_id}
{video_id}Returns the full properties of a specific video, identified by its internal video_id. Includes playback URLs, conversion status, technical metadata (resolution, length, storage), folder placement, and any attached audio/subtitle tracks.
AuthorizationRequires a valid Panda API token sent in the
Authorizationheader (no Bearer prefix).
HTTP Method & Path
GET /videos/{video_id}
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) |
Path Parameters
| Field | Type | Required | Description | Constraints |
|---|---|---|---|---|
video_id | string (uuid) | Yes | Internal ID of the video to retrieve. | uuid |
Query Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
storage_size_details | query | boolean | No | When set to true, includes the storage_size_details object in the response, showing storage usage in bytes for each video quality, backup, and images (thumbnails/seek sprites). |
📝 Storage size details
The
storage_size_detailsobject provides a breakdown of storage consumption per encoded quality. This is useful for identifying which resolutions consume the most storage and for planning quality removal via the partial deletion endpoint. Values are in bytes. The object includes:
- Each encoded quality (e.g.
240p,360p,480p,720p,1080p)backup: the original uploaded file (0 when backup is not enabled)images: thumbnails, preview frames, and seek spritesExample request:
GET /videos/{video_id}?storage_size_details=trueExample response (excerpt):
{ "storage_size": 57482073, "storage_size_details": { "240p": 5724536, "360p": 9325263, "480p": 14832453, "720p": 25167539, "backup": 0, "images": 3057966 } }
Response
Success Response (200)
{
"id": "11111111-2222-3333-4444-555555555555",
"title": "My video",
"description": "Sample description",
"status": "CONVERTED",
"video_external_id": "9988aabb-ccdd-eeff-1122-334455667788",
"created_at": "2026-05-29T14:36:39.000Z",
"updated_at": "2026-05-29T20:15:41.000Z",
"converted_at": "2026-05-29T14:40:00.000Z",
"user_id": "aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee",
"folder_id": null,
"library_id": "ffffffff-1111-2222-3333-444444444444",
"pullzone_name": "vz-163a34ba-25b",
"storage_size": 12345678,
"length": 120,
"width": 1920,
"height": 1080,
"compression_mode": "balanced",
"video_player": "https://player.pandavideo.com.br/embed/?v=9988aabb-ccdd-eeff-1122-334455667788",
"video_hls": "https://b-vz-xxx.b-cdn.net/.../playlist.m3u8",
"thumbnail": "https://b-vz-xxx.b-cdn.net/.../thumbnail.jpg",
"preview": "https://b-vz-xxx.b-cdn.net/.../preview.webp",
"playback": ["240p", "360p", "480p", "720p", "1080p"],
"playable": true,
"backup": true,
"video_offline_enabled": false,
"original_lang": "pt",
"subtitles": [
{ "srclang": "en", "translation": true }
],
"audios": [
{ "id": "audio-uuid", "language": "en", "type": "dubbing", "status": "READY" }
],
"config": {
"thumb": "9988aabb-.../video/2050634750-...-d_1920x1080",
"ai": {
"abstract": true,
"mindmap": true,
"questions": true,
"pdf_generated": true,
"resources": [
{ "type": "abstract", "srclang": "en", "pdf_url": "https://.../abstract.en.pdf" },
{ "type": "abstract", "srclang": "pt-BR", "is_legacy": true, "pdf_url": "https://.../abstract.pdf" },
{ "type": "questions", "srclang": "pt-BR", "is_legacy": true },
{ "type": "mindmap", "srclang": "pt-BR", "is_legacy": true }
]
}
}
}Response Schema
| Field | Type | Description |
|---|---|---|
id | string (uuid) | Internal ID of the video. |
title | string | Video title. |
description | string | Video description. |
status | string | Conversion status. Enum: DRAFT, CONVERTING, CONVERTED, FAILED, BLOCKED, DELETING. |
video_external_id | string (uuid) | Public external ID (used in player URLs and webhooks). |
created_at | string | ISO 8601 timestamp of creation. |
updated_at | string | ISO 8601 timestamp of last update. |
converted_at | string | null | ISO 8601 timestamp when conversion finished, null while still converting. |
user_id | string (uuid) | Owner user ID. |
folder_id | string | null | Folder the video lives in, or null for root folder. |
library_id | string (uuid) | Library ID. |
storage_size | integer | Size in bytes of the stored asset. |
storage_size_details | object | Storage usage breakdown by quality in bytes. Only returned when storage_size_details=true query parameter is set. Keys are quality names (e.g. 360p, 720p), backup, and images. |
length | integer | Video duration in seconds. |
width / height | integer | Native video resolution in pixels. |
compression_mode | string | null | Compression profile the video was encoded with. Enum: size, balanced, quality (default balanced). null for videos encoded before this setting existed. |
video_player | string | Embeddable player URL. |
video_hls | string | HLS playback URL. |
thumbnail | string | Thumbnail image URL. |
preview | string | Hover-preview asset URL (animated webp). |
playback | array of string | Enabled playback qualities (e.g., "360p", "720p", "1080p"). |
playable | boolean | true when the video is ready to play. |
backup | boolean | true when a backup copy exists. |
video_offline_enabled | boolean | Whether secure offline viewing is enabled for the Panda app. |
original_lang | string | ISO language code of the original audio track. |
subtitles | array | Subtitle tracks. Each has srclang and flags transcription/translation. |
audios | array | Additional audio tracks (dubbings, alternate languages) with id, language, type, status. |
pullzone_name | string | Pullzone of the video library. Needed to build the URL of the public config and AI resource files. |
profile_id | uuid | null | ID of the player profile linked to this video, or null if none. See Profiles. |
player_state | string | null | How the video's player is configured. null: no profile. custom: settings exclusive to this video. default: the account's default profile. profile: a shared named profile. Note: the Folders endpoint uses a different set of values for the same field name. |
config | object | Player and content configuration attached to the video (custom thumbnail, AI resources, and other player settings). |
config.ai | object | AI resources of the video — eBook (abstract), Mind Map (mindmap) or Quiz (questions). Absent until the video gets its first AI resource; once it exists, the object stays (with resources: []) even after every resource is deleted. |
config.ai.allow_download | object | Download permission per resource, e.g. { "abstract": true, "questions": false }. Set through the set_download action. |
config.ai.abstract / config.ai.mindmap / config.ai.questions | boolean | Flags of the previous model: whether that resource exists for the video, in any language. |
config.ai.pdf_generated | boolean | true when at least one PDF (eBook or Mind Map) has been generated. |
config.ai.resources | array | Manifest of AI resources. One entry per resource per language. This is the entry point for reading AI content — see below. |
AI resources — config.ai.resources[]
config.ai.resources[]Each entry describes one resource in one language:
| Field | When it appears | Content |
|---|---|---|
type | always | abstract (eBook), mindmap (Mind Map) or questions (Quiz). |
srclang | always | Language of that resource, e.g. en, pt-BR. |
is_legacy | only for previous-model content | true. The content is read from the path without a language suffix. |
is_created | only for resources created by hand | true. The resource came from the create action instead of AI generation, and is read from the normal language-suffixed path. |
pdf_url | eBook and Mind Map only | URL of the PDF. A Quiz never has one. |
Read the manifest, don't guess the pathTo fetch AI content, read
config.ai.resources[]first and request only the languages listed there. For each entry, the content lives at:https://config.tv.pandavideo.com.br/{pullzone_name}/{video_external_id}-ai.{srclang}.jsonEntries flagged
is_legacy: trueare read at{video_external_id}-ai.json, without the language suffix. Full field reference in Get Mind Map, eBook or Quiz.
pdf_urlis only hereThe PDF URL is returned by this endpoint and is not written into the public config file. That is deliberate: inside the public file it would be a direct download link, bypassing the per-resource download permission (see AI Package Actions).
The file name follows the origin of the resource: v2 content uses
abstract.{lang}.pdf, legacy content usesabstract.pdf, with no suffix.
TipIf you only have the external_id (public ID used in player URLs), append
?external_idto the path:GET /videos/{external_id}?external_id.
Error Responses
- 400 Bad Request — Invalid
video_idformat. - 401 Unauthorized — Missing or invalid API token.
- 404 Not Found — Video not found.
- 500 Internal Server Error — Server-side error.
Example Usage
cURL
curl -X GET \
'https://api-v2.pandavideo.com.br/videos/<video_id>' \
-H 'Authorization: your_api_token_here' \
-H 'Accept: application/json'Recipes
The Recipes section provides a collection of code examples and sample implementations to help you understand and use the API effectively.
