---
title: "Re-assemble a deck whose assembly failed, or rebuild its master in review or complete (free)."
method: POST
path: "/pitch-decks/{jobId}/reassemble"
tags: ["Pitch Deck"]
---

# Re-assemble a deck whose assembly failed, or rebuild its master in review or complete (free).

`POST /pitch-decks/{jobId}/reassemble`

## Request

- Base URL: `https://docs.sleeperhit.studio/api/v1`
- URL: `https://docs.sleeperhit.studio/api/v1/pitch-decks/{jobId}/reassemble`
- Auth: HTTP bearer

Puts a FAILED deck back together from the takes it already has. A deck whose assembly failed for good — `assemble`, the 480p preview, or `finish_assemble`, the finished master — lost nothing it paid for: every call's takes (and their finished upscales) are kept. This re-runs THAT stage: the deck goes back to `rendering` (then `review`) or `finishing` (then `complete`). NOT metered and NOT confirmed: nothing is rendered, upscaled or reserved. Refused with 409 `pitch_deck_state_invalid` (`details.refusal.code`: `pitch_deck_reassemble_not_failed`, `pitch_deck_reassemble_not_an_assembly_failure`, `pitch_deck_reassemble_pass_incomplete`, `pitch_deck_reassemble_missing_takes`) for a deck that is not failed, one that failed while its shots were being sent to render or to be finished, a finished master missing a finished take, or a preview with no footage chapter whose takes are all in hand — GET /pitch-decks/{jobId}/chapters `reassembly` says which before you call. The PREVIEW follows the master's own rule: a chapter whose shot has no accepted take has no footage, so it is LEFT OUT of the master (the master plays the chapters around it) rather than refusing — the answer names each one in `leftOut` and in `message` (`reassembly.leftOut` says so before you call); tell the writer which chapter is missing, and render it again to put it back. The finished master never leaves a chapter out. A deck in `review` or `complete` has its master REBUILT the same way, free and FRESH, with the current sound rules (the only voices in a master are the cast's): in review the preview assembly runs (`stage: assemble`) — every cut an older recipe made is re-cut with the current one — and the deck STAYS in review; complete, the finished master is stitched again at its class (`stage: restitch`): the finished cuts as they are (the master draws the words over them), the narration, a black's sound and the score laid again with the current rules, and the deck STAYS complete (a new finish re-cuts the finished cuts). The answer's `status` is where the deck stays (`review` / `complete`). The selected takes are never changed; the new master is watched for video coverage at our cost. A rebuild is refused with 409 `pitch_deck_reassemble_assembly_in_flight` while a master is already being assembled for the deck (queued or running), `pitch_deck_reassemble_take_in_flight` while a shot has a take being rendered or finished, and `pitch_deck_reassemble_missing_takes` for a finished deck whose selected take is not finished at its class (finish it again). Requires `Idempotency-Key`. Scope: `story:write`.

## Headers

- `Idempotency-Key` string, required

## Response `200`

The stage it runs and the status the deck is in while it runs (where it stays, for a rebuild).

- RenderReassembleAck: The re-assembly (or the rebuild) started. Nothing was rendered, upscaled or reserved.
  - `jobId` string, required
  - `queued` true, required
  - `stage` 'assemble' | 'finish_assemble' | 'restitch', required: The stage it runs: the 480p preview (`assemble`), the failed finished master (`finish_assemble`), or a complete cut's finished master stitched again at its class (`restitch`).
  - `status` 'rendering' | 'finishing' | 'review' | 'complete', required: Where the cut is while it runs: a failed cut goes `rendering` then `review`, or `finishing` then `complete`; a rebuilt master leaves the cut where it is (`review` or `complete`).
  - `credits` 0, required: Always 0.
  - `message` string, required: What runs, and each chapter the re-assembled preview leaves out of the master.
  - `leftOut` RenderReassemblyLeftOut[]: A deck's preview only: the chapters with no accepted take, LEFT OUT of the master it re-assembles (render each again to put it back). Absent or empty otherwise.
    - `name` string, required: How a person names it: "chapter 4".
    - `number` integer, nullable, required: Its place in the deck from 1 (the chapterNumber a person says).
    - `reason` string, required: Why it has no footage: the shot with no accepted take.
    - `message` string, required: The sentence to show: "Chapter 4 is left out of the master: … Render it again to put it back."

## Other responses

- `401`: Missing, malformed, revoked, or expired API key.
- `403`: API key is valid but lacks the scope, is blocked by IP allowlist, or the account is disabled.
- `404`: The named project or source does not exist or is owned by another account.
- `409`: The pitch deck exists and the request is well-formed, but the deck, its chapter, its cast or its plates are not in a state that allows it (`pitch_deck_state_invalid`), and nothing was reserved: a plan approved outside draft, a take chosen, a chapter edited or rendered outside review/complete, an export before the finish, a finish while a call has no selected take or a footage chapter has not rendered, a text-only chapter asked for footage, a changed chapter asked for one call, a delivery class changed mid-pass, a render the compile blocked, or a finish while the master failed its video coverage (`pitch_deck_video_coverage_failed`, with `details.videoCoverage`). `details.refusal` is `{ code, action, fix }` (see PitchDeckRefusalDetails): `action` is what unblocks it — `recast_figure`, `add_signature_items`, `recast_voice` or `remake_location_plate` — and `fix` names the MCP tool and CLI command that take it; `details.blocked[]` lists every chapter a blocked compile could not render. The identical request succeeds once the deck is put right.
- `429`: Rate limit for this API key + IP + route family was exceeded.
- `500`: The API failed unexpectedly. Safe to retry with the same Idempotency-Key.

---

[API](https://skmtc.dev/sleeperhit/apis/sleeper-hit-studio-story-api.md) · [All operations](https://skmtc.dev/sleeperhit/apis/sleeper-hit-studio-story-api/llms.txt) · [OpenAPI document](https://skmtc.dev/sleeperhit/apis/sleeper-hit-studio-story-api/revisions/4534f5d25540?raw)
