Returns full details of a folder (metadata + aggregates like videos_count, storage_size, length, attached funnel and DRM groups).
| Time | Status | User Agent | |
|---|---|---|---|
Retrieving recent requests… | |||
GET /folders/{folder_id}
{folder_id}Returns a specific folder with its metadata and the list of videos it contains. The videos array is paginated and comes with a pagination object describing the current page.
Breaking change — the video list is now paginatedThis endpoint used to return every video of the folder in a single
videosarray. It now returns 50 videos per page by default, plus apaginationobject.If your integration reads
videosexpecting the full list, it will silently receive fewer items — there is no error. Loop over the pages usingpage(and readpagination.has_next) to restore the previous behaviour.In the same change, each
descriptionis shortened to 252 characters followed by...(255 in total). The full text is still available fromGET /videos/{video_id}.
AuthorizationRequires a valid Panda API token sent in the
Authorizationheader (no Bearer prefix).
HTTP Method & Path
GET /folders/{folder_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 |
|---|---|---|---|---|
folder_id | string (uuid) | Yes | Unique identifier of the folder. | uuid |
Query Parameters
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
page | integer | No | 1 | Page of the videos list to return. |
limit | integer | No | 50 | Videos per page. Values above 100 are capped at 100 (no error is returned). |
Response
Success Response (200)
{
"id": "aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee",
"name": "My folder",
"user_id": "ffffffff-1111-2222-3333-444444444444",
"parent_folder_id": null,
"status": true,
"created_at": "2026-06-01T11:12:38.000Z",
"updated_at": "2026-06-01T11:12:38.000Z",
"videos": [
{
"id": "11111111-2222-3333-4444-555555555555",
"title": "Lesson 01.mp4",
"description": null,
"status": "CONVERTED",
"user_id": "ffffffff-1111-2222-3333-444444444444",
"folder_id": "aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee",
"library_id": "99999999-8888-7777-6666-555555555555",
"live_id": null,
"video_external_id": "7b2c2f77-8d02-4ac1-823f-9f59de2df7db",
"converted_at": null,
"created_at": "2026-06-01T11:38:12.000Z",
"updated_at": "2026-06-28T12:24:43.000Z",
"storage_size": 23236772,
"length": 164.133333,
"video_player": "https://player-vz-163a34ba-25b.tv.pandavideo.com.br/embed/?v=7b2c2f77-8d02-4ac1-823f-9f59de2df7db",
"video_hls": "https://b-vz-163a34ba-25b.tv.pandavideo.com.br/7b2c2f77-8d02-4ac1-823f-9f59de2df7db/playlist.m3u8"
}
],
"pagination": {
"page": 1,
"limit": 50,
"total_count": 95,
"total_pages": 2,
"has_next": true,
"has_prev": false
}
}Response Schema
| Field | Type | Description |
|---|---|---|
id | string (uuid) | Folder ID. |
name | string | Folder name. |
user_id | string (uuid) | Owner user ID. |
parent_folder_id | string | null | Parent folder ID, or null for root-level folders. |
status | boolean | true = active, false = inactive (soft-deleted). |
created_at | string | ISO 8601 timestamp of creation. |
updated_at | string | ISO 8601 timestamp of last update. |
videos | object[] | Videos in this folder — one page only, see pagination. Empty when none. |
pagination | object | Pagination state of the videos array. |
funnel | object | null | Only present when a funnel is attached to this folder — { id }. |
drm_group_ids | array | Only present when the library uses DRM — each { drm_group_id, active }. |
videos[] item
videos[] item| Field | Type | Description |
|---|---|---|
id | string (uuid) | Internal video ID — use it on the /videos endpoints. |
title | string | Video title. |
description | string | null | Video description — shortened here: 252 characters plus a literal ... (255 in total). Use GET /videos/{video_id} for the full text. |
status | string | Processing status (e.g. CONVERTED, CONVERTING, DRAFT). Videos being deleted are excluded. |
user_id | string (uuid) | Owner user ID. |
folder_id | string (uuid) | Folder the video belongs to. |
library_id | string (uuid) | Library the video belongs to. |
live_id | string | null | Source live ID when the video came from a live stream. |
video_external_id | string (uuid) | External ID used by the player and the CDN — this is the value the embed expects, not id. |
converted_at | string | null | ISO 8601 timestamp of the end of processing. |
created_at | string | ISO 8601 timestamp of creation. |
updated_at | string | ISO 8601 timestamp of last update. |
storage_size | integer | Storage used by the video, in bytes (0 when not computed yet). |
length | number | Duration in seconds (0 when not computed yet). |
video_player | string (url) | Ready-to-use embed URL for this video. |
video_hls | string (url) | HLS playlist URL (playlist.m3u8). |
live_v2 | boolean | Only present (and true) when the source live is a Live V2 stream. |
pagination object
pagination object| Field | Type | Description |
|---|---|---|
page | integer | Current page — echoes the page you sent. |
limit | integer | Page size actually applied (capped at 100). |
total_count | integer | Total number of videos in the folder, across all pages. |
total_pages | integer | Number of pages for the current limit. |
has_next | boolean | true when there is a page after the current one. |
has_prev | boolean | true when there is a page before the current one. |
Important
- Asking for a page beyond
total_pagesreturns 200 with an emptyvideosarray — not a 404. Checkpagination.has_nextinstead of probing.limitabove100is silently reduced to100; the response echoes the applied value inpagination.limit.- This endpoint does not return the folder aggregates
videos_count,storage_sizeandlength— those come fromGET /folders(List user folders). Usepagination.total_countfor the number of videos.- Videos in
DELETINGstatus are never listed.descriptionis shortened in this response only. A description of 300 characters comes back as 252 characters +...;GET /videos/{video_id}still returns all 300. Do not use this field to detect changes or to re-save a description — you would persist the shortened text.
Error Responses
- 401 Unauthorized — Missing or invalid API token.
- 404 Not Found — Folder not found, or it does not belong to the authenticated user.
- 500 Internal Server Error — Server-side error.
Example Usage
cURL — first page (default: 50 videos)
curl -X GET \
'https://api-v2.pandavideo.com.br/folders/<folder_id>' \
-H 'Authorization: your_api_token_here' \
-H 'Accept: application/json'cURL — walking through the pages
curl -X GET \
'https://api-v2.pandavideo.com.br/folders/<folder_id>?page=2&limit=100' \
-H 'Authorization: your_api_token_here' \
-H 'Accept: application/json'