Panda Video
Video hosting: upload, organize and configure videos, analytics, AI subtitles and Shorts.
| Endpoint | https://mcp.pandavideo.com/mcp (streamable-http) |
|---|---|
| Registry version | 2.1.0 |
| Now | 216 tools · grade D (59) · pin ts_c5138dde04b4b2eca6bd20c5e462d70c · protocol 2025-06-18 |
| First / last listed | 2026-11-11 00:15 UTC / 2026-11-11 00:15 UTC |
| Grade over time | 2026-11-11: D (59), 216 tools |
Is this your server? Own a server? ToolFit hosted watch re-checks it every 24 h ($0.25 per 30 days) or 6 h ($0.60) and sends you an HMAC-signed webhook when its tools or grade change: POST https://api.youraitools.co/toolfit/v1/watch. To opt out, see About & opt-out.
Tools: panda_list_videos panda_get_video panda_update_video panda_delete_videos panda_get_videos_status panda_get_videos_ai_resources panda_move_videos panda_duplicate_video panda_reencode_video panda_upload_video_from_url panda_list_folders panda_create_folder panda_get_folder panda_update_folder panda_delete_folder panda_list_playlists panda_create_playlist panda_get_playlist panda_update_playlist panda_delete_playlist panda_get_playlist_videos panda_add_videos_to_playlist panda_remove_video_from_playlist panda_list_profiles panda_create_profile panda_get_profile panda_update_profile panda_delete_profile panda_apply_profile_to_videos panda_duplicate_profile panda_restore_profile panda_set_default_profile panda_list_lives panda_create_live panda_get_live panda_regenerate_live panda_finish_live panda_delete_lives panda_list_stream_keys panda_create_stream_key panda_get_live_viewers panda_get_account_analytics panda_get_video_analytics panda_get_retention_analytics panda_get_ranking_analytics panda_get_realtime_analytics panda_get_bandwidth_analytics panda_get_unwatched_videos panda_get_best_times panda_get_best_times_by_videos panda_get_viewers_by_videos panda_list_funnels panda_create_funnel panda_get_funnel panda_update_funnel panda_delete_funnel panda_add_videos_to_funnel panda_remove_videos_from_funnel panda_get_watermark_status panda_enable_watermark panda_disable_watermark panda_list_watermark_groups panda_create_watermark_group panda_get_watermark_group panda_update_watermark_group panda_delete_watermark_group panda_manage_drm_group_items panda_get_thumbnails panda_add_thumbnail panda_add_pause_thumbnail panda_add_end_thumbnail panda_delete_thumbnail panda_get_subtitles panda_get_subtitle_by_language panda_delete_subtitle panda_generate_ai_subtitles panda_update_subtitle_visibility panda_download_subtitle panda_get_videos_count panda_get_custom_fields panda_create_custom_field panda_list_users panda_create_user panda_update_user panda_delete_user panda_request_download panda_check_download_status panda_list_shorts panda_import_video_for_shorts panda_list_short_segments panda_delete_short panda_save_segment_to_library panda_list_ai_assistants panda_get_ai_assistant panda_create_ai_assistant panda_get_ai_assistant_purchase_overview panda_update_ai_assistant panda_update_ai_assistant_video_bindings panda_update_ai_assistant_chat_visibility panda_delete_ai_assistant panda_generate_tutor_file_upload_url panda_confirm_tutor_file_upload panda_delete_tutor_file panda_add_tutor_videos panda_remove_tutor_video panda_create_ai_dubbing panda_delete_dubbing_audio panda_generate_ai_resource panda_get_ai_resource_content panda_update_ai_resource panda_regenerate_ai_resource panda_delete_ai_resource panda_create_ai_resource panda_set_ai_resource_download panda_get_ai_ebook_upload_url panda_confirm_ai_ebook_pdf panda_list_ai_works panda_get_ai_ebook_images panda_get_referrals_summary panda_get_credits_balance panda_get_credits_history panda_get_auto_recharge_settings panda_enable_auto_recharge panda_update_auto_recharge panda_disable_auto_recharge panda_list_comparisons panda_create_comparison panda_start_comparison panda_finish_comparison panda_delete_comparisons panda_get_player_config panda_update_player_config panda_get_video_player_config panda_update_video_config panda_set_video_offline panda_add_cta panda_update_cta panda_delete_cta panda_get_ai_workflows panda_delete_ai_workflow panda_get_subscription panda_get_plan_usage panda_list_invoices panda_list_plans panda_list_subaccounts panda_update_subaccount panda_delete_subaccount panda_transfer_credits panda_list_notices panda_update_notice_status panda_request_partial_deletion panda_list_partial_deletions panda_cancel_partial_deletion panda_update_sign_language_display panda_encrypt_videos panda_get_hls_encryption_batches panda_list_hls_encrypted_videos panda_get_new_uploads_encryption panda_set_new_uploads_encryption panda_get_exclusive_playback panda_set_exclusive_playback panda_get_library_qualities panda_update_library_qualities panda_help_search panda_help_get_article panda_get_business_rules panda_list_refer panda_list_refer_all panda_list_folder_refer panda_list_folder_refer_inherited panda_create_refer panda_create_folder_refer panda_set_refer_status panda_delete_refer panda_delete_folder_refer panda_update_folder_refer panda_set_block_none_refer panda_action_move_videos_by_folder panda_action_delete_folder_videos panda_action_reencode_folder_videos panda_action_duplicate_folder_videos panda_action_set_folder_videos_offline panda_action_rename_folder panda_action_create_folder_path panda_action_create_playlist_from_folder panda_action_add_folder_videos_to_playlist panda_action_apply_profile_to_folder panda_action_apply_video_config_to_folder panda_action_configure_folder_profile panda_action_set_folder_player_control panda_action_generate_subtitles_for_folder panda_action_set_default_subtitle_for_folder panda_action_remove_subtitle_language_from_folder panda_action_dub_folder_videos panda_action_create_tutor_from_folder panda_action_add_folder_videos_to_tutor panda_action_enable_ai_package_for_folder panda_action_folder_ai_status panda_action_generate_shorts_from_folder panda_action_set_custom_field_for_folder panda_action_apply_watermark_group_to_folder panda_action_create_watermark_group_for_folder panda_action_add_folder_videos_to_funnel panda_action_schedule_lives panda_action_set_anti_download panda_action_set_allowed_domains panda_action_request_folder_downloads panda_action_export_folder_analytics panda_action_create_ab_test panda_action_credit_preflight panda_action_preview_storage_reduction panda_action_transfer_credits_to_subaccount panda_action_provision_user panda_action_create_review_link_for_folder panda_action_set_webhook panda_action_set_forms_integration
panda_list_videos | List videos. Each video has: id, video_external_id, title, status, created_at, length (seconds), folder_id, config. `id` is what most tools take as video_id; video_external_id is what panda_get_best_times_by_videos / panda_get_viewers_by_videos take. Results are returned newest first by default. There is NO server-side date filter or sorting — to find videos created on a specific date, fetch video params: page, limit, title, folder_id, status |
panda_get_video | Get full properties of a video by its ID, including video_external_id, config (config.ctas holds the pause/end thumbnail CTAs), profile, status, duration, folder, subtitles, etc. params: video_id* |
panda_update_video | Update basic metadata of a video: title, description text, or move to a different folder. Do NOT use this for player settings, chapters, subtitles, thumbnails, or any playback configuration — use the specific tools for those. params: video_id*, title, description, folder_id |
panda_delete_videos | Delete one or more videos by ID. Sends to trash for 30 days. params: video_ids* |
panda_get_videos_status | Processing status of up to 100 videos in one call. Each item: {id, status, available_resolutions, pending_resolutions, encoding_resolutions, playable, conversion_percentage, estimated_time, ...}. No titles (use panda_get_video or panda_list_videos). IDs that don't exist or aren't yours come back in not_found. Returns {videos, not_found}. params: video_ids* |
panda_get_videos_ai_resources | Which AI Package resources (e.g. eBook, quiz, mind map; one entry per type and language) up to 100 videos already have, in one call. Subtitles and dubbing are not included. Each item: {id, ai_resources: [{type, srclang}]} (type: abstract = eBook, mindmap, questions = quiz). A video that only has resources from the old AI package (legacy) comes back with an empty list here; panda_get_ai_resource_co params: video_ids* |
panda_move_videos | Move one or more videos to a folder params: video_ids*, folder_id* |
panda_duplicate_video | Create a copy of a video. Only works for CONVERTED, non-external, non-funnel videos. params: video_id* |
panda_reencode_video | Re-encode a video with a compression mode (no credit cost). The video is processed again from its original file (backup): without the backup the API refuses. Its current qualities are replaced by the re-encoded ones and it stays in processing until done. Encryption (HLS) is kept. To encrypt videos use panda_encrypt_videos. params: video_id*, compression_mode* |
panda_upload_video_from_url | Import a video from an external URL (YouTube, Vimeo, S3, generic HTTPS) params: url*, source, title, folder_id, access_key, secret_key |
panda_list_folders | List all folders. Returns array of {id, name, parent_folder_id, status, created_at, videos_count}. params: all_status |
panda_create_folder | Create a new folder. Returns the created {id, name, parent_folder_id}. params: name*, parent_folder_id |
panda_get_folder | Get a folder's details and one page of its videos. Returns {id, name, parent_folder_id, status, videos: [...], pagination: {page, limit, total_count, total_pages, has_next, has_prev}}. Only videos directly in this folder; subfolders are not included (use panda_list_folders). To list every video of a large folder, keep calling with page+1 while pagination.has_next is true. Default 20 videos per pag params: folder_id*, page, limit |
panda_update_folder | Update folder properties (name, parent). Also used to recover deleted folders with status=true. params: folder_id*, name, parent_folder_id, status |
panda_delete_folder | Delete a folder by ID. WARNING: All videos and subfolders inside are also deleted (cascade). Goes to trash for 30 days. params: folder_id* |
panda_list_playlists | List all playlists. Returns array of {id, name, videos_quantity, duration, access_type, updated_at}. params: none |
panda_create_playlist | Create a new playlist. Videos are REFERENCES — removing from playlist does NOT delete the video. Returns the created {id, name, description, access_type}. params: name*, description, creator_name, access_type, password |
panda_get_playlist | Get details of a specific playlist. Returns {id, name, description, videos_quantity, access_type, creator_name, duration, updated_at}. params: playlist_id* |
panda_update_playlist | Update a playlist's properties params: playlist_id*, name, description, creator_name, access_type, password, image_id |
panda_delete_playlist | Delete a playlist. Videos are NOT deleted — only the collection is removed. params: playlist_id* |
panda_get_playlist_videos | List all videos in a playlist. Returns array of {id, video_id, order, video: {id, title, duration}}. params: playlist_id* |
panda_add_videos_to_playlist | Add videos to a playlist with order. Returns the updated playlist video entries [{video_id, playlist_id, order}]. params: playlist_id*, videos* |
panda_remove_video_from_playlist | Remove a video from a playlist. Does NOT delete the video. params: playlist_id*, video_id* |
panda_list_profiles | List the account's player profiles (GET /profile). 'Profiles' are player UI configs, not user accounts. Returns an array of {id, name, pullzone_name, is_default, updated_at, videos_count, feature_tags, colors, availableQualities}. The default profile ('Padrão') has is_default=true. Exclusive profiles (a single video's own customized player) are NOT listed. Use panda_get_profile for a profile's ful params: none |
panda_create_profile | Create a player profile (POST /profile) already configured — colors, controls, caption appearance (colors.captionsColor / captionsBackgroundColor + captionsSize), VSL, save progress, general (speed, theme, gear menu, offline) and availableQualities, all in one call. Send only what you want to set; the rest uses the player defaults. `name` is any label (3–100 chars). The new profile has no videos: params: name*, exclusive, controls, hideControlsOnStart, colors, captionsSize, vsl, saveProgress, general, availableQualities |
panda_get_profile | Get one player profile with all its settings: controls, colors (incl. caption colors and captionsFontSize), vsl, saveProgress, hideControlsOnStart, general (speed, theme, gear menu, offline, caption size), availableQualities, is_default and feature_tags. params: profile_id* |
panda_update_profile | Update a player profile's settings. Changes EVERY video linked to the profile. Covers: player colors (colors.primaryColor / controlsColor), enabled controls list, smart autoplay (vsl.smartAutoplay), VSL mode (vsl.disablePause / disableForward / alternativeProgress), playback speed (general.default_speed), save progress, theme and gear menu (general.theme / general.settingsControls), offline (gener params: profile_id*, name, exclusive, controls, hideControlsOnStart, colors, captionsSize, vsl, saveProgress, general, availableQualities |
panda_delete_profile | Delete a player profile. The default profile ('Padrão') cannot be deleted. A profile with no videos is deleted directly. A profile WITH videos needs `strategy` — ask the user which one: 'keep' = each video keeps its current look (gets its own copy of the profile's settings); 'migrate' = the videos move to `target_profile_id`. Up to 5 videos are processed immediately; more are queued (status 'pendi params: profile_id*, strategy, target_profile_id |
panda_apply_profile_to_videos | Link a player profile to videos — pass video_ids OR folder_id (every video in that folder, any status; subfolders are not included). A video that had its own customized player (exclusive profile) loses that customization. Up to 5 video_ids are applied immediately; more videos, or any folder_id, are queued and return status 'pending' — confirm later with panda_get_profile (videos_count). Returns {s params: profile_id*, video_ids, folder_id |
panda_duplicate_profile | Copy a player profile's settings into a new profile named '<name> (2)', '(3)'… The copy has no videos and is never the default. Exclusive profiles (a single video's own player) cannot be duplicated. Returns {id, name}. params: profile_id* |
panda_restore_profile | Reset a player profile to the account's global player settings (panda_get_player_config): controls, colors, VSL, general, save progress, hideControlsOnStart and availableQualities are all replaced — this also drops the profile's theme, gear menu, caption size and offline settings unless the global has them. Changes every video linked to the profile. Returns the restored profile. params: profile_id* |
panda_set_default_profile | Make a profile the account's default player profile ('Padrão'). Exclusive profiles cannot be default. If the current default profile has videos, ASK the user what happens to them and pass unlinked_videos_strategy: 'apply-new' = they follow the new default; 'keep-current' = they stay with the current profile. Without it only the default flag changes and no video is touched. Video changes run in the params: profile_id*, unlinked_videos_strategy |
panda_list_lives | List all live streams. Returns array of {id, title, status, scheduled_at, region, quality_package, save_vod, stream_key_id, stream_key, rtmp, live_player, created_at}. Status: provisioning (channel starting), offline (waiting for signal or scheduled), online, finishing, finished, finished_imported (recording became a video), expired (no signal in time; can be regenerated). stream_key is a secret c params: page |
panda_create_live | Create a new live stream event. Trial accounts cannot create lives. A quality_package above the plan's maximum is silently lowered to the plan's maximum. Without stream_key_id the account's default stream key is used; a key held by another live (online, provisioning, expired, waiting to start or scheduled within 24h) returns 400. Omitted fields use the API defaults (region us, save_vod true). params: title*, folder_id, scheduled_at, region, quality_package, save_vod, stream_key_id |
panda_get_live | Get details of a specific live stream. Returns {id, title, status, scheduled_at, stream_key, rtmp, live_hls, created_at}. Status: provisioning (channel starting), offline (waiting for signal or scheduled), online, finishing, finished, finished_imported (recording became a video), expired (no signal in time; can be regenerated). stream_key is a secret credential: show it only when the user asks for params: live_id* |
panda_regenerate_live | Regenerate an expired live so it can be broadcast again. Only works when status is expired (otherwise 400 with the current status). Keeps the same stream key, but the RTMP server may change: update it in OBS. Start broadcasting within 15 minutes or the live expires again. Returns {id, status: provisioning, stream_key, stream_key_id, rtmp, region, started_at}. stream_key is a secret credential: sho params: live_id* |
panda_finish_live | End a live broadcast params: live_id* |
panda_delete_lives | Delete one or more live streams params: live_ids* |
panda_list_stream_keys | List all stream keys for live broadcasting. Returns array of {id, title, region, default, stream_key, in_use, in_use_by: {live_id, title, status}, created_at}. A key is held (in_use) by a live that is online, provisioning, expired, waiting to start or scheduled within 24h; an expired live holds it until regenerated or deleted. stream_key is a secret credential: show it only when the user asks for params: none |
panda_create_stream_key | Create a new stream key for OBS or other streaming software. The account's first key becomes the default. params: title*, region, set_default |
panda_get_live_viewers | Get viewer history for a live stream. Returns time-series array of viewer counts. params: live_id* |
panda_get_account_analytics | Get general analytics metrics for the whole account. Returns {views, unique_viewers, watch_time_seconds, avg_watch_percentage, plays}. params: start_date, end_date |
panda_get_video_analytics | Get analytics metrics for a specific video. Returns {views, unique_viewers, watch_time_seconds, avg_watch_percentage, plays}. params: video_id*, start_date, end_date |
panda_get_retention_analytics | Get audience retention analytics (account-wide or per video). Returns array of {percentage, viewers} showing drop-off at each point. params: video_id, start_date, end_date |
panda_get_ranking_analytics | Get ranking analytics for the account. Returns {most_watched: [{video_id, title, watch_time}], most_played: [{video_id, title, plays}]}. params: start_date, end_date |
panda_get_realtime_analytics | Get the real-time snapshot of the account: how many viewers are watching now and on which devices. Returns {total_users, devices: {mobile, desktop, others}, geojson} — geojson (the dashboard map clusters) comes empty in this account-wide snapshot; no per-viewer data (IP, browser) is returned. params: none |
panda_get_bandwidth_analytics | Get bandwidth/traffic usage by folder, by video, or DRM by video. Returns array of {name, bandwidth_bytes, video_id?} entries. params: video_id, type, start_date, end_date |
panda_get_unwatched_videos | List the account's videos that had NO access at all in a period (the inverse of the ranking). Whole account only. Only videos that already existed on start_date are considered. Returns {start_date, end_date, data: [{id, video_external_id, title, created_at}], pagination: {limit, offset, total_unwatched, has_more}, coverage: {partial_coverage, missing_days}} — when partial_coverage is true, a liste params: start_date, end_date, limit, offset |
panda_get_best_times | Which weekday and 2-hour slot the audience of the WHOLE account plays the most (or sees the player the most) in a period — "best time to publish". Weekday × 2-hour slot grid, summed over the period — the same grid as the dashboard heatmap (Analytics → Best times), with the hours exactly as Panda analytics stores them. Returns {start_date, end_date, metric, best_slots: [{weekday, hours, total}] (to params: start_date, end_date, metric |
panda_get_best_times_by_videos | Which weekday and 2-hour slot the audience of specific videos (or of every video in a folder) plays the most in a period. Weekday × 2-hour slot grid, summed over the period — the same grid as the dashboard heatmap (Analytics → Best times), with the hours exactly as Panda analytics stores them. An end_date of today counts only up to yesterday (the API clamps it). Returns {scope, start_date, end_dat params: video_external_ids, folder_id, start_date, end_date, metric |
panda_get_viewers_by_videos | Who watched specific videos (or any video of a folder) in a period: distinct viewers, identified by IP. The IP is returned MASKED (a.b.x.x) — the full list is in the dashboard (Analytics → Users). The selection only chooses WHICH viewers appear: each viewer's metrics (play, view, watch_time) cover the whole account, not only these videos. Returns {scope, start_date, end_date, total_viewers, viewer params: video_external_ids, folder_id, start_date, end_date, limit |
panda_list_funnels | List all funnels. Returns {data: [{id, name, videos_count, created_at}]}. A funnel with videos_count=0 has no videos. Funnels are NOT folders. params: none |
panda_create_funnel | Create a new video funnel params: name*, description |
panda_get_funnel | Get a funnel's details and its videos. Returns {data: {id, name, videos: [{id, title, status, is_first}]}}. Funnels are NOT folders. params: funnel_id* |
panda_update_funnel | Update a funnel's properties (rename) params: funnel_id*, id*, name, description |
panda_delete_funnel | Delete a funnel by ID. WARNING: this is destructive. The funnel is removed and the videos inside it go to the trash for 30 days (restoring the funnel's folder brings them back; the funnel does not come back). params: funnel_id* |
panda_add_videos_to_funnel | Add one or more videos to a funnel with optional coordinates. Every call must mark exactly one video with is_first: true — it becomes the entry video. To add a video without changing the entry, also send the current entry video (from panda_get_funnel) with is_first: true. params: id*, videos* |
panda_remove_videos_from_funnel | Remove one or more videos from a funnel. The videos leave the funnel and go to the library root — they are not deleted (the dashboard deletes them in a second call; this tool does not). params: id*, video_ids* |
panda_get_watermark_status | Check whether watermark/DRM is currently active on the account. Returns {active: boolean}. params: none |
panda_enable_watermark | Enable watermark protection for the account params: none |
panda_disable_watermark | Disable watermark protection for the account params: none |
panda_list_watermark_groups | List all watermark groups. Returns array of {id, name, active, video_ids: [], folder_ids: [], created_at}. params: page, limit |
panda_create_watermark_group | Create a new watermark group params: name*, video_ids |
panda_get_watermark_group | Get a watermark group's details. Returns {id, name, video_ids: [], folder_ids: [], created_at}. params: drm_group_id* |
panda_update_watermark_group | Update a watermark group params: drm_group_id*, name, video_ids |
panda_delete_watermark_group | Delete a watermark group params: drm_group_id* |
panda_manage_drm_group_items | Add or remove videos and/or folders from a DRM watermark group. Returns the updated group with current video_ids and folder_ids. params: drm_group_id*, action*, video_ids, folder_ids |
panda_get_thumbnails | Get the cover (start thumbnail) of a video. Returns {response: {active, default}}: active = the uploaded cover in use (absent when none was uploaded), default = the automatic thumbnails generated from the video. Pause and end thumbnails are NOT listed here — they are CTAs in the video's player config (panda_get_video_player_config → ctas with type 'pause' / 'end'). params: video_id* |
panda_add_thumbnail | Upload the video cover (start thumbnail) — the image shown before the user presses play. Provide `image_url` pointing to a publicly reachable image (PNG/JPG/GIF); the tool downloads it and uploads as multipart to the Panda API. Replaces any existing start thumbnail. After this returns, the cover is active immediately for the player. params: video_id*, image_url* |
panda_add_pause_thumbnail | Upload a pause thumbnail — an image shown when the viewer pauses the video. Provide `image_url` pointing to a publicly reachable JPG, PNG or GIF up to 5 MB. The upload also creates the pause CTA, so the image shows in the player right away, for the whole video. A video can have several pause thumbnails. Returns {response: {pauseThumbnail: [<thumb_name>]}} — keep that name: panda_delete_thumbnail n params: video_id*, image_url* |
panda_add_end_thumbnail | Upload an end thumbnail — an image shown after the video finishes. Provide `image_url` pointing to a publicly reachable JPG, PNG or GIF up to 5 MB. The upload also creates the end CTA, so the image shows in the player right away. A video has one end thumbnail: a new upload replaces the previous one. Returns {response: {endThumbnail: <name>}}. params: video_id*, image_url* |
panda_delete_thumbnail | Delete a thumbnail from a video (image and its player CTA). Type: 'start' (default, the cover), 'pause', 'end'. For 'pause', thumb_name is required and must be the exact file name — returned by panda_add_pause_thumbnail, or metadata.thumbId of the 'pause' CTA in panda_get_video_player_config. The tool checks the name against the video's pause thumbnails first and refuses (listing the existing name params: video_id*, type, thumb_name |
panda_get_subtitles | Get all subtitle information for a video params: video_id* |
panda_get_subtitle_by_language | Get a subtitle file for a specific language params: video_id*, srclang* |
panda_delete_subtitle | Remove a subtitle from a video by language params: video_id*, srclang* |
panda_generate_ai_subtitles | Generate subtitles for a video using Panda AI. Creates a transcription in the specified language. Costs credits based on video duration and tier. params: video_id*, from_lang*, tier, additional_langs |
panda_update_subtitle_visibility | Show or hide a subtitle language (hidden subtitles are not visible but still indexable for search) params: video_id*, srclang*, hidden* |
panda_download_subtitle | Download a subtitle file for a specific language params: video_id*, srclang* |
panda_get_videos_count | Get total video count by status (CONVERTED, CONVERTING, DRAFT, etc.) params: none |
panda_get_custom_fields | Get all custom fields for a video. Returns array of {id, key, value} metadata pairs. params: video_id* |
panda_create_custom_field | Create a custom metadata key-value field for a video (for tagging/categorization). Do NOT use this for chapters, subtitles, CTAs, or player settings — use the specific tools for those. Max 50 fields per video. params: video_id*, key*, value* |
panda_list_users | List all users in the organization. Returns array of {id, name, email, role_id, role_name, created_at}. params: none |
panda_create_user | Create a new user in the organization. Returns the created {id, name, email, role_id}. params: email*, name*, role_id |
panda_update_user | Update a user's information or role params: user_id*, name, role_id |
panda_delete_user | Remove a user from the organization params: user_id* |
panda_request_download | Request an async download for a video. Only works for CONVERTED, non-external, non-Hotmart videos. Returns {status, url?}: when status is 'ready' the response already has `url` (a temporary signed link); otherwise poll panda_check_download_status with the same format/quality/language. Lipsync dubbing is a separate video: to download it, pass the video_external_id of that language's entry in config params: video_external_id*, quality*, format*, language*, video_title* |
panda_check_download_status | Check the status of an async download request (same format/quality/language used in panda_request_download). Returns {status, url?} — `url` (a temporary signed link) is present when status is 'ready'. params: video_external_id*, format*, quality*, language* |
panda_list_shorts | List all Shorts jobs. Projects expire after ~30 days. Returns array of {job_id, status, user_context: {video_title, source_type}, completed_segments, created_at}. params: page |
panda_import_video_for_shorts | Import a video for AI shorts generation. Sources: library (video_id), youtube (source_url). Default config: vertical aspect, 30-60s duration, no captions. Video must be CONVERTED, 5min-5hrs, <50GB, no DRM. params: source_type*, video_id, source_url, video_title, aspect_ratio, duration_preset, start_time, end_time, contexts |
panda_list_short_segments | List all generated segments (clips) for a Shorts job. Each segment has viralScore, duration, transcription. params: job_id* |
panda_delete_short | Delete a Shorts job/project params: job_id* |
panda_save_segment_to_library | Save a Short segment to the video library as an independent video params: segment_id*, title, folder_id |
panda_list_ai_assistants | List all AI video assistants. Returns array of {id, name, status, videos: [{id, title}], created_at}. params: page, limit |
panda_get_ai_assistant | Get an AI assistant's details. Returns {id, name, status, videos: [{id, title}], files: [{id, file_name}], answers_count}. params: assistant_id* |
panda_create_ai_assistant | Purchase credits and create a new AI assistant for a video. Returns the created {id, name, status, video_id}. params: video_id*, name |
panda_get_ai_assistant_purchase_overview | Get credit cost overview before creating an AI assistant. Returns {credit_cost, current_balance, sufficient_credits}. params: video_id* |
panda_update_ai_assistant | Update AI assistant information (name, status, etc.) params: assistant_id*, name, status |
panda_update_ai_assistant_video_bindings | Bind videos to an AI assistant (Tutor). Additive: only videos not yet bound are added; videos already bound stay as they are and nothing is unbound (use panda_remove_tutor_video to remove one). Only CONVERTED videos: if any ID doesn't exist or isn't CONVERTED, the whole request is refused. Billing: each NEW video without a subtitle in the tutor's language gets a transcription, charged at ceil(minu params: assistant_id*, video_ids*, lang |
panda_update_ai_assistant_chat_visibility | Show or hide the AI chat widget on the video player params: assistant_id*, visible* |
panda_delete_ai_assistant | Delete an AI assistant params: assistant_id* |
panda_generate_tutor_file_upload_url | Generate a presigned URL to upload a PDF/file to a Tutor AI assistant. Returns upload_url and file_id. After uploading, call panda_confirm_tutor_file_upload. params: assistant_id*, file_name*, file_type*, file_size* |
panda_confirm_tutor_file_upload | Confirm that a file was successfully uploaded to a Tutor AI assistant (call after uploading to the presigned URL) params: file_id*, upload_success* |
panda_delete_tutor_file | Delete a file from a Tutor AI assistant params: file_id* |
panda_add_tutor_videos | Add videos to a Tutor AI assistant. Additive: only videos not yet bound are added; videos already bound stay as they are and nothing is unbound (use panda_remove_tutor_video to remove one). Only CONVERTED videos: if any ID doesn't exist or isn't CONVERTED, the whole request is refused. Billing: each NEW video without a subtitle in the tutor's language gets a transcription, charged at ceil(minutes/ params: assistant_id*, video_ids*, lang |
panda_remove_tutor_video | Remove ONE video from a Tutor AI assistant: the tutor stops using it and its knowledge is deleted from the tutor. The video stays in the library. Refused when the video isn't bound to the tutor, when it is the tutor's last video (use panda_delete_ai_assistant to delete the tutor), and while the video is still being processed by the tutor (queued/processing — try again when it finishes). Returns {a params: assistant_id*, video_id* |
panda_create_ai_dubbing | Create an AI dubbing of a video into one target language. The path follows the video's subtitles, like the dashboard: target already subtitled → audio only (DUBBING, reuses that subtitle); source subtitled → TRANSLATION + dubbing; otherwise TRANSCRIPTION + dubbing (also creates the source subtitle). Costs 5 credits/min (standard AI dubbing, HeyGen audio only) or 14 credits/min (lipsync) per langua params: video_id*, from_lang, to_lang*, is_lipsync, num_speakers, clone_original_voice, replace_existing_subtitles |
panda_delete_dubbing_audio | Delete a dubbed audio track from a video params: video_id*, audio_id* |
panda_generate_ai_resource | Generate ONE AI package resource of a video — eBook, mind map or quiz — in one or more languages, with its settings and extra instructions (same as the dashboard: Video Settings → Panda AI). PAID: 1 credit per minute of video per language (minimum 1 min; a partial minute counts only past 1 s), e.g. a 10-minute video in 2 languages = 20 credits. On an active Gold/Enterprise plan the free daily AI q params: video_id*, resource*, to_langs, from_lang, ebook_config, image_generation_count, mindmap_config, quiz_config, custom_instructions |
panda_get_ai_resource_content | Read the CONTENT of one AI package resource of a video in one language: the quiz questions and options (correct ones marked) and its options, the mind map topics, or the eBook cover, style and chapters (with `chapter`, that chapter's text; the whole text when short). Also says whether the resource can be edited (legacy = generated by the old package, not editable; uploaded PDF eBook = no content). params: video_id*, resource*, lang, chapter |
panda_update_ai_resource | Edit an existing AI package resource of a video in one language, like the dashboard editor — free. Quiz: send `questions` (the WHOLE new list, 1 to 10 questions, 2 to 5 options each, read it first with panda_get_ai_resource_content) and/or `quiz_settings`. Mind map: `mindmap_edits` (replace an excerpt that exists in one topic only) and/or `mindmap_settings`. eBook: `ebook_edits` (replace an excerp params: video_id*, resource*, lang*, questions, quiz_settings, mindmap_edits, mindmap_settings, ebook_edits, cover, ebook_config |
panda_regenerate_ai_resource | Generate AGAIN an existing AI package resource of a video in one language — PAID and cannot be undone: the current one is deleted first, including every edit made to it. Cost: 1 credit per minute of video (minimum 1 min; a partial minute counts only past 1 s); free on an active Gold/Enterprise plan while the daily AI quota lasts (checked before sending). Without new settings it reuses the previous params: video_id*, resource*, lang*, ebook_config, image_generation_count, mindmap_config, quiz_config, custom_instructions |
panda_delete_ai_resource | Delete ONE AI package resource of a video in one language (eBook, mind map or quiz) — cannot be undone: its content, PDF, images and the published file are removed, also for legacy resources. Same as the dashboard's Remove. Refused while it is still generating (checked before deleting; if that check fails nothing is deleted). Other languages and resources stay. To remove a failed generation card u params: video_id*, resource*, lang* |
panda_create_ai_resource | Create a quiz or mind map WITH CONTENT YOU PROVIDE (no AI, free) in a language that doesn't have one yet — the dashboard's "Add → Create New". Quiz: `questions` (1 to 10, 2 to 5 options each, correct ones marked) and optional `quiz_settings`. Mind map: `topics` (with optional subtopics), `mindmap_theme` (center; default the video title) and optional `mindmap_settings`. The eBook has no manual crea params: video_id*, resource*, lang, questions, quiz_settings, mindmap_theme, topics, mindmap_settings |
panda_set_ai_resource_download | Allow or block viewers from downloading a video's eBook, mind map or quiz (the dashboard's "Allow download"). Applies to every language of that resource. Free. params: video_id*, resource*, allow_download* |
panda_get_ai_ebook_upload_url | Get a temporary upload URL (valid 1 hour) to send a file of the eBook: kind=pdf — your own PDF as the eBook of a language that has no eBook yet (up to 15 MB); kind=logo — a PNG/JPEG logo for the eBook (up to 5 MB). The URL is a credential: don't show or share it. Send the file with an HTTP PUT to upload_url with the Content-Type header exactly as returned. Then: PDF → panda_confirm_ai_ebook_pdf; l params: video_id*, kind*, lang, content_type |
panda_confirm_ai_ebook_pdf | Finish the PDF upload started with panda_get_ai_ebook_upload_url (kind=pdf): the PDF is checked (exists, not empty, up to 15 MB, valid PDF) and becomes the eBook of that language. With upload_success=false the uploaded file is discarded instead. params: video_id*, lang*, upload_success |
panda_list_ai_works | List the account's AI works (subtitles, translations, dubbing, lipsync, eBook=ABSTRACT, mind map=MINDMAP, quiz=QUESTIONS) page by page, newest first, with status (QUEUE, RUNNING, FINISHED, ERROR, SKIPPED). Only the latest attempt of each video × type × language. Filters: status, updated_since, video_id, folder_id (the API doesn't filter by type). Read-only. Returns {works: [{id, video_id, type, st params: page, limit, status, updated_since, video_id, folder_id |
panda_get_ai_ebook_images | Images generated with AI in the dashboard's eBook editor for one eBook × language, with their status (QUEUED, PROCESSING, SUCCESS, ERROR), and how many free images that eBook still has (5 free per eBook × language, then 1 credit each). Generating images is done in the dashboard editor. Read-only. params: video_id*, lang* |
panda_get_referrals_summary | Get referral program summary (balance, estimated value) params: none |
panda_get_credits_balance | Get the current credits balance for the account. 1 credit = R$1. params: none |
panda_get_credits_history | Get credits transaction history for a date range. Returns {balance, history: [{id, type, amount, status, description, created_at}]}. params: start_date, end_date |
panda_get_auto_recharge_settings | Get auto-recharge configuration for credits. Returns {enabled, trigger_value, action_value}. params: none |
panda_enable_auto_recharge | Enable auto-recharge for credits. When balance drops below trigger, recharges action_value. params: trigger_value*, action_value* |
panda_update_auto_recharge | Update auto-recharge settings params: trigger_value*, action_value* |
panda_disable_auto_recharge | Disable auto-recharge for credits params: none |
panda_list_comparisons | List all A/B test comparisons. Status: DRAFT → IN_PROGRESS → COMPLETED. Returns array of {id, name, description, status, videos: [], winner_video_id, created_at}. params: none |
panda_create_comparison | Create a new A/B test. Needs at least 2 videos to start. Returns the created {id, name, status, video_ids}. params: name, video_ids |
panda_start_comparison | Start an A/B test (begin collecting data). Only from DRAFT status. Returns the updated comparison with status IN_PROGRESS. params: comparison_id* |
panda_finish_comparison | Finish an A/B test and declare a winner. PERMANENT — cannot be reversed. params: comparison_id*, winner_video_id* |
panda_delete_comparisons | Delete one or more A/B tests params: comparison_ids* |
panda_get_player_config | Get global player configuration (applies to all videos without a custom profile) params: none |
panda_update_player_config | Update the account's GLOBAL player (dashboard page Player): controls, colors, theme, caption color/background/size, resume from last position, gear-menu items, menu language and time display. Applies to every video WITHOUT a player profile — including videos uploaded later (they are born without a profile). Send only what changes; the rest is kept. Speed, autoplay and VSL options are NOT global: t params: controls, primaryColor, controlsColor, theme, captionsColor, captionsBackgroundColor, captionsSize, saveProgress, settingsControls, defaultLanguage, timeDisplayType |
panda_get_video_player_config | Get per-video player configuration (chapters, CTAs, pixels, redirect, AI features, retention markers, subtitle default, offline config) params: video_id* |
panda_update_video_config | Update per-video config (POST /player?type=video). Send only fields you want to change.
Fields: chapters, default_subtitle, default_audio, redirect_video_id, custom_pixels, on_funnel, questions (AI quiz), mindmap (AI), abstract (AI ebook), retention_markers, ai.
NOT for: controls, autoplay, Smart Autoplay, colors, speed, big play button, save progress — use panda_update_profile for those. params: video_id*, chapters, default_subtitle, default_audio, redirect_video_id, custom_pixels, on_funnel, questions, mindmap, abstract, retention_markers, ai |
panda_set_video_offline | Configure offline playback for a video (mobile app feature) params: video_id*, enabled*, expire_days, external_link_enabled, external_link_url, external_link_text |
panda_add_cta | Add a CTA (Call-to-Action) button to a video. Placement 'inside' = overlay on the video, 'outside' = below the video. Builds the same payload the dashboard's button editor sends. params: video_id*, placement*, text, url, start_time, end_time, size, position, text_color, text_hover_color, background_color, background_hover_color, append_website_query_params, custom_html |
panda_update_cta | Update a CTA on a video. Only the fields you pass are changed; everything else keeps its current value. Placement cannot be changed — delete and re-add the CTA instead. params: video_id*, placement*, cta_id*, text, url, start_time, end_time, size, position, text_color, text_hover_color, background_color, background_hover_color, append_website_query_params, custom_html |
panda_delete_cta | Delete a CTA from a video params: video_id*, placement*, cta_id* |
panda_get_ai_workflows | Get every AI work of a video (subtitles, translation, dubbing, eBook=ABSTRACT, mind map=MINDMAP, quiz=QUESTIONS) with status (QUEUE, RUNNING, FINISHED, ERROR, SKIPPED). For the whole account or a folder, page by page, use panda_list_ai_works. params: video_id* |
panda_delete_ai_workflow | Delete an AI work record (e.g. a failed or queued transcription/dubbing card; a queued one is refunded). It doesn't remove what a finished work produced: to remove an eBook, mind map or quiz use panda_delete_ai_resource. params: workflow_id* |
panda_get_subscription | Get current subscription/plan details. Returns {subscription_id, subscriptions: {name, status, active}, currency, addons}. addons.live lists live minutes billed above the plan's free minutes, per region and quality (quantity in minutes, unit_amount in cents); the plan's max live quality is subscriptions.metadata.live_max_quality. params: none |
panda_get_plan_usage | Get the current billing cycle usage and plan limits. Returns {start_period, end_period, plan_name, is_trial, storage, storage_plan, traffic, traffic_plan (all MB), play, play_plan, live, live_plan, live_count}. live = live minutes used this cycle (whole account, all regions); live_plan = free live minutes informed in the plan; live_count = lives in the cycle. Live minutes above live_plan are bille params: none |
panda_list_invoices | List all invoices. Returns array of {id, status, amount_due, amount_paid, created, due_date, invoice_pdf, hosted_invoice_url}. params: none |
panda_list_plans | List available subscription plans and pricing params: currency |
panda_list_subaccounts | List all subaccounts and their usage limits. Returns array of {organization_id, name, status, credits_balance, storage_used, limits}. params: none |
panda_update_subaccount | Update a subaccount's settings (name, limits, status) params: subaccount* |
panda_delete_subaccount | Delete a subaccount params: organization_id* |
panda_transfer_credits | Transfer credits to a subaccount params: target_organization_id*, amount* |
panda_list_notices | List the notices the Panda team sent to the account (tips, alerts, news) — the ones shown in the dashboard notice card and Notifications panel. Only the account owner and admins have notices: any other user gets an empty list (not an error). Status: 'sent' = unread, 'read' = dismissed, 'completed' = the user already acted on it (clicked its button). Returns up to 100 [{id, notice_type, title, text params: status |
panda_update_notice_status | Mark one notice as 'read' (default — same as dismissing it in the dashboard) or 'completed'. Use 'completed' ONLY when the user explicitly asks for it: in the dashboard it means the user did what the notice asked, and it is final (a completed notice never changes again). Nothing is deleted. Only the account owner and admins can mark notices. Get the id from panda_list_notices. params: notice_id*, status |
panda_request_partial_deletion | Remove some qualities and/or the original file (backup) of ONE CONVERTED video to free storage, keeping the video. The removed items disappear right away and are deleted for good after retention_days (30); until then panda_cancel_partial_deletion restores them. Videos from an external source are refused. Refused when it would leave the video with no quality: the API would send the whole video to t params: video_id*, qualities, backup |
panda_list_partial_deletions | List pending removals that can still be undone. type 'partial' = qualities/backup removed with panda_request_partial_deletion (cancel with panda_cancel_partial_deletion); 'video' = whole videos in the trash; 'all' (default) = both. Returns {retention_days, partial_deletions, pagination}. params: video_id, type, page, limit |
panda_cancel_partial_deletion | Undo a partial deletion of ONE video before it is executed: the qualities/backup come back. Without qualities and backup, everything pending for the video is restored. Refused once the final deletion has started. Does not recover videos in the trash. params: video_id*, qualities, backup |
panda_update_sign_language_display | Change how the sign language interpreter (Libras) window shows on a video's player: start time, size, position, autostart, or a free position/size. Only fields passed are changed. The interpreter clip itself is uploaded and removed on the dashboard (Video → Settings → Libras); this tool does not create or delete it. Choosing a preset size or position drops the free position (custom), like the dash params: video_id*, language, start_time, size, position, autostart, custom |
panda_encrypt_videos | Turn on Encrypted Anti-Download (HLS encryption) on existing videos, 1–100 per call (one video works too). PAID in credits, per video: ceil(duration in hours × number of current qualities), e.g. a 10-minute video in 3 qualities = 1 credit; charged when the video is queued. Cannot be undone: there is no way to decrypt a video. Only for Gold/Enterprise plans or accounts with the 'Anti-Download Cript params: video_ids* |
panda_get_hls_encryption_batches | Progress of encryption batches started with panda_encrypt_videos. With idempotency_key: that batch; without it: every batch not finished yet (including failed videos). Each video: {video_id, status, state, updated_at}; state is pending, in_progress, processed, failed or cancelled. estimated_completion_minutes estimates the whole encryption queue (all accounts), not only your batch, and may be 0 wh params: idempotency_key |
panda_list_hls_encrypted_videos | List the account's videos that are already encrypted (HLS). Videos still in an encryption batch only show up when it finishes (see panda_get_hls_encryption_batches). Returns {total, page, limit, pages, videos: [{id, title, status, folder_id, encrypted_at, available_resolutions, ...}]}. Default 25 videos per page, max 50; keep calling with page+1 while page < pages. params: page, limit |
panda_get_new_uploads_encryption | Whether new uploads are encrypted automatically (Encrypted Anti-Download / HLS encryption for future videos). Returns {library_id, status}. params: none |
panda_set_new_uploads_encryption | Turn automatic encryption (HLS) of NEW uploads on or off. No credit cost. Turning on is only for Gold/Enterprise plans or accounts with the 'Anti-Download Criptografado' add-on (checked before changing; otherwise refused). Existing videos don't change: to encrypt them use panda_encrypt_videos (paid). Turning off only affects future uploads: videos already encrypted stay encrypted, and a paid add-o params: enabled* |
panda_get_exclusive_playback | Whether Exclusive Playback is on (on-demand videos only play in the Panda Player). Returns {status}. params: none |
panda_set_exclusive_playback | Turn Exclusive Playback on or off (dashboard: Security > Anti-Download > "Reprodução Exclusiva", Beta). When ON, the on-demand videos of the account are served only to the Panda Player: the Panda Player embedded by iframe keeps working on any site allowed by domain protection (members areas that use the embed included), while custom players, scrapers or extensions that open the HLS (m3u8) link dir params: enabled* |
panda_get_library_qualities | The account's quality settings (dashboard: Settings > Qualities). Returns {encoding, playback, compression_mode, compression_label, keep_original_files}: encoding = "Conversão de Novos Uploads" (qualities new uploads are converted to); playback = "Reprodução de Todos Vídeos" (qualities the player offers, on every video, when converted in that quality); compression_mode = "Compressão de Novos Uploa params: none |
panda_update_library_qualities | Change the account's quality settings (dashboard: Settings > Qualities); send only what changes. encoding ("Conversão de Novos Uploads"): qualities NEW uploads are converted to, each one using storage. playback ("Reprodução de Todos Vídeos"): qualities the player offers on ALL videos, including the ones already uploaded, when converted in that quality. compression_mode ("Compressão de Novos Upload params: encoding, playback, compression_mode, keep_original_files |
panda_help_search | Search Panda Video help center articles to answer user questions.
Searches through ALL 146 pre-indexed articles from the official help center (https://help.pandavideo.com/pt-br/).
Use this tool whenever the user has a QUESTION about how Panda Video works, pricing, features, integrations, configuration, etc.
DO NOT use this for API execution commands — only for knowledge/support questions.
IMPORTAN params: query*, limit |
panda_help_get_article | Get the full content of a specific Panda Video help center article by slug.
Use this after searching to read the complete content of an article.
The response is the full official documentation. params: slug* |
panda_get_business_rules | Returns the platform business rules: the real consequences of actions that modify, delete or move resources (e.g., deleting a folder or a funnel sends the videos inside to the trash for 30 days).
Useful before planning such actions, so the advice given to the user matches how the platform actually behaves.
Domains: funnels, videos_and_folders, video_upload, embed_and_share, player_settings, cta_in params: domain |
panda_list_refer | List the library-level domain referrers (Domain Protection / allow-block list for playback). Returns { refers: [{ id, url, type, status }] } where type is ALLOW|BLOCK and status is one of active|inactive|pending|deleting|turning_inactive. library_id is resolved automatically when omitted. params: library_id |
panda_list_refer_all | List all of the library's domains consolidated by hostname across library and folder scopes. Returns { refers: [{ hostname, type, status, scope, library_refer_id, folders, type_inconsistency, created_at }] }. scope is library|folder|mixed; status may be 'mixed' when rows differ; library_refer_id is the library-level row id (null if folder-only); folders is an array of { folder_id, name, refer_id, params: library_id |
panda_list_folder_refer | List the domain referrers set directly on a folder. Returns { refers: [{ id, url, type, status, origin: { type, id } }] }. library_id is resolved automatically when omitted. params: folder_id*, library_id |
panda_list_folder_refer_inherited | List the effective referrers that apply to a folder using override-total semantics: the folder's own referrers if it has any, otherwise the library-level referrers. Use this to know which domains actually gate playback for videos in the folder. Returns { refers: [{ id, url, type, status, origin: { type, id } }] }. library_id is resolved automatically when omitted. params: folder_id*, library_id |
panda_create_refer | Add one or more library-level domain referrers. Each entry has a hostname and a type (ALLOW|BLOCK, default ALLOW). The same hostname cannot coexist as both ALLOW and BLOCK at the library scope (duplicate check is type-agnostic). New rows start in 'pending' (when domain protection is active) or 'inactive'. library_id is resolved automatically when omitted. On error the API returns { errCode, errMsg params: refers*, library_id |
panda_create_folder_refer | Add a domain referrer scoped to a single folder. type is ALLOW|BLOCK. The new row starts in 'pending'. A folder cannot have the same hostname twice. library_id is resolved automatically when omitted. On error the API returns { errCode, errMsg }. params: folder_id*, hostname*, type*, library_id |
panda_set_refer_status | Activate (active=true) or deactivate (active=false) a single referrer by refer_id. Activation moves inactive→pending; deactivation moves active→turning_inactive (the async worker finalizes the state). If the referrer is already in an intermediate state (pending|deleting|turning_inactive) the API returns 400 ({ errCode, errMsg }: 'Operation in progress, ...'). Works for both library- and folder-lev params: refer_id*, active*, library_id |
panda_delete_refer | Delete one or more library-level referrers by id (batch). Each referrer must be library-level (folder_id=null) and belong to the library; otherwise the API returns 400 ({ errCode, errMsg }). Rows transition to 'deleting' and are removed asynchronously. params: refer_ids*, library_id |
panda_delete_folder_refer | Delete one or more folder-level referrers by id (batch). Duplicate ids are de-duplicated; if any id is missing the API returns 404, and if any referrer is library-level it returns 400 ({ errCode, errMsg }). Rows transition to 'deleting' and are removed asynchronously. params: refer_ids*, library_id |
panda_update_folder_refer | Edit one or more existing referrers (refer_ids) in a single call: rename the hostname, change the type (ALLOW|BLOCK), and/or move them between scopes. scope='library' makes the domain apply to the whole library (omit folder_ids). scope='folder' makes it apply to the listed folder_ids (required and non-empty, the backend computes the add/remove diff). All refer_ids must belong to the same hostname. params: refer_ids*, hostname*, type*, scope*, folder_ids, library_id |
panda_set_block_none_refer | Turn the library's domain protection on or off (block_none_refer). false = protection OFF for the whole library: every request plays, with or without a referer, and even BLOCK domains are ignored. true = the ACTIVE domains apply: requests without a referer are blocked (native TV/iOS players excepted), with ALLOW domains only matching referers play, with only BLOCK domains the matching referers are params: block_none_refer*, library_id |
panda_action_move_videos_by_folder | Deterministically resolve a source and target folder and move every video from the source into the target in one call. Pass target_folder_ref='root' to move to the root (no folder). Skips videos already being deleted. Free action (no credits). dry_run=true (default) returns a preview of which videos would move. params: source_folder_ref*, target_folder_ref*, dry_run, idempotency_key |
panda_action_delete_folder_videos | Deterministically resolve a folder and send every video inside it to the trash (30-day recovery). DESTRUCTIVE. dry_run=true (default) returns a preview of what would be deleted; set dry_run=false AND confirm=true to actually delete. params: folder_ref*, dry_run, confirm, idempotency_key |
panda_action_reencode_folder_videos | Deterministically resolve a folder and re-encode every CONVERTED video with a given compression mode (no credit cost). Each video is processed again from its original file (backup): videos without the backup are refused and listed in failed. The current qualities are replaced by the re-encoded ones; encryption (HLS) is kept. dry_run=true (default) previews the affected videos. params: folder_ref*, compression_mode*, dry_run, idempotency_key |
panda_action_duplicate_folder_videos | Deterministically resolve a folder and create a copy of every CONVERTED video inside it. Duplication only works for non-external, non-funnel videos (the API rejects others, surfaced per-video). dry_run=true (default) previews the affected videos. params: folder_ref*, dry_run, idempotency_key |
panda_action_set_folder_videos_offline | Deterministically resolve a folder and enable or disable offline (mobile app) playback for every CONVERTED video inside it, in one batch call (POST /app). dry_run=true (default) previews the affected videos. params: folder_ref*, enabled*, expire_days, dry_run, idempotency_key |
panda_action_rename_folder | Deterministically resolve a folder by name/ID/URL and rename it (PUT /folders/{id}). dry_run=true (default) previews the rename. params: folder_ref*, new_name*, dry_run, idempotency_key |
panda_action_create_folder_path | Deterministically ensure a nested folder path exists (e.g. 'Courses/2026/Module 1'), creating only the missing segments and returning the leaf folder ID. Idempotent: existing segments are reused. dry_run=true (default) previews which segments would be created. params: path*, dry_run, idempotency_key |
panda_action_create_playlist_from_folder | Deterministically resolve a folder, create a new playlist, and add every CONVERTED video to it in folder order. dry_run=true (default) previews the playlist and its videos without creating anything. params: folder_ref*, playlist_name*, access_type, creator_name, password, dry_run, idempotency_key |
panda_action_add_folder_videos_to_playlist | Deterministically resolve a folder and an existing playlist (by name or ID), then append every CONVERTED folder video to the playlist after its current items. dry_run=true (default) previews the additions. params: folder_ref*, playlist_ref*, dry_run, idempotency_key |
panda_action_apply_profile_to_folder | Deterministically resolve a player profile and a folder and link the profile to ALL videos of the folder in one call (sends folder_id, like the dashboard). Subfolders are not included; videos in any status (not only converted ones) also receive the profile. Videos with their own customized player lose that customization. The work is queued: the result is status 'executed' with api_status 'pending' params: profile_ref*, folder_ref*, dry_run, idempotency_key |
panda_action_apply_video_config_to_folder | Deterministically resolve a folder and apply per-video player config to every CONVERTED video (POST /player?type=video). Supports: default_subtitle (lang code or 'false'), default_audio (dubbing language code or 'false'), on_funnel, and the AI toggles questions/mindmap/abstract. Send only the fields you want to change. dry_run=true (default) previews the affected videos. params: folder_ref*, default_subtitle, default_audio, on_funnel, questions, mindmap, abstract, dry_run, idempotency_key |
panda_action_configure_folder_profile | Deterministically apply player-profile settings to every CONVERTED video in a folder, without touching videos outside it. Covers everything a profile holds: colors (Cores) incl. caption colors, captionsSize, controls incl. the big play button 'play-large' (Controles / Botão de Play Grande), VSL, save-progress, general (speed, theme, gear menu, offline) and availableQualities — pass any subset. Per params: folder_ref*, controls, hideControlsOnStart, colors, captionsSize, vsl, saveProgress, general, availableQualities, dry_run, idempotency_key |
panda_action_set_folder_player_control | Enable or disable a single player control on every CONVERTED video in a folder, via player profiles, PRESERVING all other controls and without touching videos outside the folder. The big play button (dashboard 'Botão de Play Grande') is the 'play-large' control — disable it with control='play-large', enabled=false. Each video's controls are read-modify-written; when a profile has no explicit contr params: folder_ref*, control*, enabled*, dry_run, idempotency_key |
panda_action_generate_subtitles_for_folder | Deterministically resolve a folder, list eligible (CONVERTED) videos, estimate the AI subtitle cost in credits, and optionally generate subtitles in one or more languages. Tiers: essential (only en/pt-BR/es, 1 credit/30min), advanced (34 langs, 1 credit/5min), pro (34 langs, 1 credit/min). dry_run=true (default) returns a preview. params: folder_ref*, target_langs*, from_lang, tier, dry_run, idempotency_key |
panda_action_set_default_subtitle_for_folder | Deterministically resolve a folder and set the default subtitle language on every CONVERTED video (POST /player?type=video). Pass language 'false' to clear the default. dry_run=true (default) previews the affected videos. Note: videos lacking that subtitle simply won't show it. params: folder_ref*, language*, dry_run, idempotency_key |
panda_action_remove_subtitle_language_from_folder | Deterministically resolve a folder and delete a subtitle language from every CONVERTED video that has it (DELETE /subtitles/{id}). DESTRUCTIVE. dry_run=true (default) previews; set dry_run=false AND confirm=true to delete. Videos without that language are simply skipped by the API. params: folder_ref*, language*, dry_run, confirm, idempotency_key |
panda_action_dub_folder_videos | Deterministically resolve a folder, list eligible (CONVERTED) videos, estimate the dubbing cost in credits, and optionally create AI dubbing jobs for one or more target languages. dry_run=true (default) returns a preview without creating any job. standard mode (AI dubbing, HeyGen audio only) = 5 credits/min, lipsync = 14 credits/min, per language (minimum 1 min; a partial minute counts only past 1 params: folder_ref*, target_langs*, from_lang, mode, dry_run, idempotency_key |
panda_action_create_tutor_from_folder | Deterministically resolve a folder, estimate the credit cost via purchase_overview, and create an AI Tutor bound to every CONVERTED video in the folder. dry_run=true (default) returns the cost preview without creating anything. params: folder_ref*, name*, lang, initial_question, question_suggestions, open_new_tab, dry_run, idempotency_key |
panda_action_add_folder_videos_to_tutor | Deterministically resolve an existing AI Tutor (by name or ID) and a folder, then bind every CONVERTED folder video to the tutor (PUT /assist-ai/update_assistant_video_bind/{id}). Additive: videos already bound stay as they are and nothing is unbound. Billing: each NEW video without a subtitle in the tutor's language gets a transcription, charged at ceil(minutes/5) credits per video (Gold/Enterpri params: tutor_ref*, folder_ref*, dry_run, idempotency_key |
panda_action_enable_ai_package_for_folder | Deterministically resolve a folder and generate AI package resources — eBook, mind map and/or quiz — for every CONVERTED video, one request per video × resource (POST /aiworkflow ABSTRACT | MINDMAP | QUESTIONS, like the dashboard). Default: the three resources in each video's own language. Resources a video already has in a language (or is still generating) are skipped. PAID: 1 credit per minute o params: folder_ref*, resources, to_langs, from_lang, dry_run, idempotency_key |
panda_action_folder_ai_status | Deterministically resolve a folder and report the aggregate status of all its AI workflow jobs (subtitles, dubbing, AI package) via GET /aiworkflow?folder_id. Read-only — returns counts by status and by type. No dry_run (nothing is mutated). params: folder_ref* |
panda_action_generate_shorts_from_folder | Deterministically resolve a folder and submit each eligible video (CONVERTED, 5min–5h) for AI Shorts generation (POST /shorts/import-video). Each job consumes Shorts processing. dry_run=true (default) previews eligible videos. DRM-protected videos are rejected by the API and surfaced per-video. params: folder_ref*, aspect_ratio, duration_preset, contexts, dry_run, idempotency_key |
panda_action_set_custom_field_for_folder | Deterministically resolve a folder and set a custom metadata field (key/value) on every CONVERTED video (POST /videos/{id}?custom_fields). dry_run=true (default) previews the affected videos. params: folder_ref*, key*, value*, dry_run, idempotency_key |
panda_action_apply_watermark_group_to_folder | Deterministically resolve a watermark/DRM group (by name or ID) and a folder, then add the folder to the group so all its videos (current and future) inherit the forensic watermark (PUT /drm/videos/{id} folders.increment). dry_run=true (default) previews. params: group_ref*, folder_ref*, dry_run, idempotency_key |
panda_action_create_watermark_group_for_folder | Deterministically resolve a folder and create a new watermark/DRM group seeded with all its videos (POST /drm/videos). dry_run=true (default) previews the group and its videos. params: folder_ref*, group_name*, dry_run, idempotency_key |
panda_action_add_folder_videos_to_funnel | Deterministically resolve a funnel (by name or ID) and a folder, then add every CONVERTED folder video to the funnel (POST /funnels/add_videos). dry_run=true (default) previews the additions. params: funnel_ref*, folder_ref*, dry_run, idempotency_key |
panda_action_schedule_lives | Create one or more scheduled live streams in a single call (POST /lives), optionally recording into a resolved folder. Defaults like the dashboard: region us, quality_package hd, save_vod true. Refuses trial accounts and quality above the plan's maximum. Without stream_key_id the account's default stream key is used. dry_run=true (default) previews the lives that would be created. params: lives*, folder_ref, dry_run, idempotency_key |
panda_action_set_anti_download | Enable or disable account-wide anti-download protection (GET/PUT /block_download). Reads the current state first and only changes it if needed. Turning it on is only for plans that include it (Gold/Enterprise and others; Silver/Bronze need the "Anti-Download Simples" add-on, contracted in the dashboard; not available on Clipador/Clipper and VSL Only plans). Turning it off also turns Exclusive Play params: enabled*, dry_run, idempotency_key |
panda_action_set_allowed_domains | Add referer domains to the account's allow/block list for playback (POST /library/{id}?action=refer) and optionally turn domain protection on or off (block_none_refer). block_none_refer is applied first and rewrites the status of ALL the library's domains: true activates every domain (including ones turned off on purpose), false deactivates all of them and lets every request play; it is refused wh params: allow, block, block_none_refer, dry_run, idempotency_key |
panda_action_request_folder_downloads | Deterministically resolve a folder and request an async download for every CONVERTED video (POST /download-async/{externalId}). Without quality, each video is requested at the highest quality it has; with a quality, videos that don't have it are skipped with the reason. Results list each video's status and `url` when it is already ready (temporary signed link); poll the others with panda_check_dow params: folder_ref*, quality, format, language, dry_run, idempotency_key |
panda_action_export_folder_analytics | Deterministically resolve a folder and aggregate per-video play analytics over a date range (GET /general/{videoId} on the analytics host). Read-only — returns a per-video breakdown and folder total. No dry_run. params: folder_ref*, start_date*, end_date* |
panda_action_create_ab_test | Create an A/B comparison from 2+ videos (POST /comparison) and optionally start it immediately (PUT /comparison/{id}?type=start). dry_run=true (default) previews. params: name*, description, video_ids*, start, dry_run, idempotency_key |
panda_action_credit_preflight | Estimate the credit cost of running a paid operation (dub / subtitles / ai_package) across every CONVERTED video in a folder and compare it to the current balance — WITHOUT executing anything. ai_package = eBook + mind map + quiz in target_langs (default 1 language), 1 credit/min per resource per language, minus the free daily AI quota of an active Gold/Enterprise plan (1 use per video × resource) params: folder_ref*, operation*, target_langs, mode, tier |
panda_action_preview_storage_reduction | How much the invoice will be if the account reduces its ADDITIONAL storage — to a new total (target_total_gb) or by removing an amount (remove_gb), in GB (1 TB = 1024 GB). Without an amount, returns the current storage, what is in use and the smallest possible total. Refuses totals below what is already in use or below what the plan includes (plan storage only changes by changing plans). It never params: target_total_gb, remove_gb, dry_run |
panda_action_transfer_credits_to_subaccount | Resolve a subaccount by name or ID and transfer credits to it (POST /user/limit/transfer_credits). Checks the parent balance first. dry_run=true (default) previews the transfer. params: subaccount_ref*, credits*, dry_run, idempotency_key |
panda_action_provision_user | Create a team user, resolving the role by name (or original_name/ID) to its role_id (POST /users). dry_run=true (default) previews. Validates the email format up front. params: name*, email*, role_ref*, phone, dry_run, idempotency_key |
panda_action_create_review_link_for_folder | Deterministically resolve a folder and create a review link for every CONVERTED video (POST /video-review/{id}?action=link). dry_run=true (default) previews the links that would be created. params: folder_ref*, link_name*, allow_comment, allow_status_edit, show_resolved, expires_at, dry_run, idempotency_key |
panda_action_set_webhook | Idempotently set the account webhook URL. Reads the current webhook (GET /user/webhook); if a different one exists it is removed (DELETE /user/webhook/{id}) before creating the new one (POST /user/webhook). dry_run=true (default) previews the change. params: url*, dry_run, idempotency_key |
panda_action_set_forms_integration | Create or update a forms/CRM integration by service name. Reads existing integrations (GET /forms-integration/get); updates in place if the service already exists (PUT /forms-integration/update), otherwise creates it (POST /forms-integration/save). dry_run=true (default) previews. params: service*, name, api_url, api_key, webhook_url, dry_run, idempotency_key |
Entries describe changes in tool definitions. They are not statements about a server, its quality or its author. The grade measures how the tool definitions fit model providers (token cost, schema compatibility, confusable names) as scored by the ToolFit engine at the time of the listing. JSON: append .json. Opt-out: how or hello@youraitools.co.