---
title: "List a persona's videos"
method: GET
path: "/personas/{id}/videos"
tags: ["Personas"]
---

# List a persona's videos

`GET /personas/{id}/videos`

## Request

- Base URL: `https://api.cut.pro/api/v1`
- URL: `https://api.cut.pro/api/v1/personas/{id}/videos`
- Auth: API key in header `X-Api-Key`

Returns the videos made with this persona, newest first, with signed download URLs for the finished ones. `version_id` keeps only the videos made from that version.

## Path parameters

- `id` string, required

## Query parameters

- `page` number: Page number (default: 1)
- `limit` number: Items per page (default: 20, max: 100)
- `version_id` string: Only the videos made from this persona version.

## Response `200`

Response for status 200

- object
  - `videos` object[], required
    - `id` string, required
    - `type` 'swap' | 'product' | 'motion' | 'control', required: What kind of video this is. `swap` replaces the person in a library video with the persona; `product` is a product ad the persona talks in, made on the web app.
    - `quality` 'economy' | 'standard' | 'high', required: `economy` is `standard` at a lower resolution, upscaled to 1080p, and the cheapest. `standard` follows the persona's traits, up to `video_limits.standard.max_seconds`. `high` also follows the persona's photos, keeps the face closest to them and takes longer videos, at a higher price; prefer it for personas made from face photos.
    - `replace` 'head' | 'person' | 'none', required: What of the video's main person becomes the persona: `head` changes only the head and hair and keeps the body and outfit, `person` replaces the whole person, body and outfit included, `none` replaces nobody and only applies the `style`, which then is required.
    - `style` 'cel' | 'felt' | 'yarn' | 'sketch' | 'toy' | 'grotesque' | 'painterly' | 'graphic' | 'gouache' | 'sculptural' | 'lowpoly' | 'toon' | 'cinematic' | 'flat' | 'neon' | 'editorial' | 'comic' | 'pixel' | 'plush' | 'embroidery' | 'mosaic' | 'stainedglass' | 'chalk' | 'silent' | 'thermal' | 'hologram', nullable, required: Redraws the whole video, people and scene, in an animation, illustration, material or camera look while keeping its camera and motion, for example `cel` (hand-painted 2D animation), `felt` (felt puppet stop motion), `toy` (rounded toy 3D), `pixel` (pixel art), `stainedglass` (stained glass) or `silent` (1920s silent film). The whole person is replaced, whatever `replace` says, unless it is `none`. Not available at `quality: high` past `video_mid_max_seconds`.
    - `status` 'processing' | 'ready' | 'failed', required
    - `version_id` string, nullable, required: The persona version (from the persona's `versions`) whose photo the video was made from.
    - `duration_seconds` number, required: Measured duration of the source video, which is what was priced.
    - `credits_charged` number, required: Credits debited for this video. Refunded automatically when it fails.
    - `edit_id` string, nullable, required: Edit created from the result, ready for `POST /renders` and `POST /posts`. Set once `ready`.
    - `download_url` string, nullable, required: Signed URL of the resulting MP4, valid for six hours. Set once `ready`; once handed out, the video counts as downloaded and its credits can no longer be asked back.
    - `thumbnail_url` string, nullable, required: Signed URL of the cover image, valid for six hours.
    - `expected_seconds` number, nullable, required: Expected seconds from `created_at` until the video is ready, refined as the job advances. Only while `processing`.
    - `error_code` 'MEDIA_REJECTED' | 'COPYRIGHT_BLOCKED' | 'REAL_FACES_BLOCKED' | 'SAFETY_BLOCKED' | 'MEDIA_FAILED' | 'MEDIA_UNAVAILABLE' | 'INSUFFICIENT_CREDITS' | 'TIMEOUT' | 'OUTPUT_CHECK_FAILED', nullable, required: Why the last generation failed, `null` otherwise: `COPYRIGHT_BLOCKED` (the scene looks like copyrighted material), `REAL_FACES_BLOCKED` (a real face is too prominent), `SAFETY_BLOCKED` (the provider's content rules) and `MEDIA_REJECTED` (refused for another reason); for any refusal change the traits, the photos or the video. `MEDIA_FAILED` and `MEDIA_UNAVAILABLE` (generation broke, retry), `INSUFFICIENT_CREDITS`, `TIMEOUT`, `OUTPUT_CHECK_FAILED` (the video did not keep the persona on the right person even after one free redo; try another video or pick the person). Credits of a failed generation are refunded automatically.
    - `feedback` 'up' | 'down', nullable, required: `up` liked, `down` disliked, `null` not rated.
    - `feedback_reason` string, nullable, required: Set with a `down` vote; one of the video feedback reasons.
    - `created_at` string, required
  - `pagination` object, required
    - `current_page` number, required: Current page number (1-based)
    - `total_pages` number, required: Total number of pages
    - `total_count` number, required: Total number of items across all pages
    - `has_next_page` boolean, required
    - `has_previous_page` boolean, required
    - `limit` number, required: Items per page used for this response

---

[API](https://skmtc.dev/cut/apis/cutpro-api.md) · [All operations](https://skmtc.dev/cut/apis/cutpro-api/llms.txt) · [OpenAPI document](https://skmtc.dev/cut/apis/cutpro-api/revisions/89d0bafe529c?raw)
