---
title: "Character Swap: the person in your video becomes a character or the person in your photos. Motion, camera, room and the original audio are kept; lips stay in sync. 3-60 s"
method: POST
path: "/videos/character-swap"
tags: ["Videos"]
---

# Character Swap: the person in your video becomes a character or the person in your photos. Motion, camera, room and the original audio are kept; lips stay in sync. 3-60 s

`POST /videos/character-swap`

## Request

- Base URL: `https://app.makeaivideo.ai/api/v1`
- URL: `https://app.makeaivideo.ai/api/v1/videos/character-swap`
- Auth: HTTP bearer

## Request body

- object
  - `source_video_key` string, required: From /uploads/video-avatar or /uploads/video-from-url
  - `character_id` integer: A preset or your own character. Send this OR photo_keys
  - `photo_keys` string[]: 1-4 photos of the new person (face-on first). Send this OR character_id
  - `direction` string
  - `duration_seconds` number, required: Length of the source clip, 3-60
  - `rights_confirmed` boolean, required: Must be true: you own the video (or have permission) and have the right to use the likeness
  - `title` string
  - `idempotency_key` string

## Response `202`

Accepted

- object
  - `data` VideoCreated
    - `video_id` string
    - `status` 'generating' | 'draft'
    - `title` string, nullable
    - `scene_count` integer, nullable
    - `poll_after_seconds` integer, nullable
    - `next` string
  - `error` unknown
  - `meta` Meta
    - `request_id` string
    - `timestamp` string, date-time

## Other responses

- `402`: Not enough credits

---

[API](https://skmtc.dev/makeaivideo/apis/makeaivideo-api.md) · [All operations](https://skmtc.dev/makeaivideo/apis/makeaivideo-api/llms.txt) · [OpenAPI document](https://skmtc.dev/makeaivideo/apis/makeaivideo-api/revisions/8c6351087d6d?raw)
