---
title: "Re-burn Instagram-style captions from the clean Full Cut (repair"
method: POST
path: "/api/v1/videos/{video_id}/captions/rebuild"
tags: ["Videos"]
---

# Re-burn Instagram-style captions from the clean Full Cut (repair

`POST /api/v1/videos/{video_id}/captions/rebuild`

## Request

- Base URL: `https://api.avatarfactory.io` (the document declares no server; this is the origin it was published from)
- URL: `https://api.avatarfactory.io/api/v1/videos/{video_id}/captions/rebuild`
- Auth: one of:
  - API key in cookie `session`
  - HTTP bearer

path for "Download with captions" when no honest subtitled cut exists).<br/><br/>Async on celery: status flips to `burning_captions`, then the fresh<br/>subtitled cut + `captions_ready=true` arrive via the detail poll.<br/>409 while a burn is running, mid-render, or while `needs_rebuild` is<br/>set (rebuild burns its own captions).

## Path parameters

- `video_id` integer, required

## Response `200`

OK

- RebuildVideoResponse: Response for `POST /api/v1/videos/:id/rebuild`. The rebuild runs async (stitch + caption), so the new `final_video_file` arrives via the status/detail poll once `needs_rebuild` clears; `message` is the toast.
  - `message` string, required
  - `success` boolean, required
  - `video_id` integer, required

## Other responses

- `404`: Not Found
- `409`: Conflict
- `422`: Unprocessable Entity

---

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