---
title: "Price, then repair, one take of a beat's call in place."
method: POST
path: "/trailers/{jobId}/beats/{beatIndex}/repair-take"
tags: ["Trailer"]
---

# Price, then repair, one take of a beat's call in place.

`POST /trailers/{jobId}/beats/{beatIndex}/repair-take`

## Request

- Base URL: `https://docs.sleeperhit.studio/api/v1`
- URL: `https://docs.sleeperhit.studio/api/v1/trailers/{jobId}/beats/{beatIndex}/repair-take`
- Auth: HTTP bearer

Every rendered take is watched with its sound after its checks. A cut nobody asked for at the start or end of an otherwise good take is trimmed off first, before any new take: free, frame for frame, only where the cut is measured in the file, outside every spoken line (each kept whole with a breath after it), and only when what is left keeps its chapter or beat within a quarter of its planned length. When the shot's automatic new take is spent and the take it plays still has such a cut outside its line, that end is trimmed as a last resort: past the quarter, as long as the line stays whole, at least 2 seconds are left and the chapter or beat keeps half its planned length. A cut inside a spoken line is never trimmed. A speaker whose lips keep moving past the take's last line, where nothing is heard, is trimmed half a second after the line, free and frame for frame. Lips moving where no line is heard are never retaken on their own: the same staging brings them back, so the shot is offered for restaging (one face, framed closer), a trim, or your call. Any other defect is remedied by rule during processing, at our cost: first a new take told what to avoid; a repair in place when the same problem comes back after a new take, or when the take passed every other check and only something removable (a period anachronism, garbled lettering, a stray or doubled person) or the light is wrong. Camera movement and its speed (a move that rushes, or dies into a hold at the end), timing, cuts and a crowd moving as one (extras in step, everyone turning or looking down at once, repeated faces) are only ever fixed by a new take, or by the free trim when they sit only at an end of the take. A made-up screen or app the shot never had (a display or app window painted into the picture where none was filmed) is only ever fixed by a new take, or by the free trim when it sits only at an end of the take; spoken shots are not repaired in place. A line the speaker's mouth did not speak on two takes is no longer retaken on camera: the next take stages it as a voice-over, the speaker seen from behind, the line heard over the picture. Every take plays its own sound under its own picture, so the lips follow what is heard: a line said in the take's own reading is kept, and only a line not heard, or said in a voice too like another character's, is a defect (a new take). Where a speaker's mouth cannot be measured (or the face is too small to trust a miss), the watcher's own judgment of the lips decides the line: a mouth it saw not speak is a miss, one it saw speak is uncertain. Each shot gets at most one automatic new take, one automatic repair in place and one automatic voice-over re-stage, so a new take whose removable defect came back is repaired in the same pass; a repaired or trimmed take is never remedied again on its own. A repair that fails on the repair service's own side (never one declined at its content check) and cost nothing is sent again once; if that fails too, a new take instead. A repaired take keeps the take's own sound, is judged again, and is kept as a new take linked to the one it repairs; it plays only when it passes. A trimmed take plays over the take it came from when it passes, or when it shows only part of what that take showed, with the same speech and faces: it is judged by time window, so anything seen inside the span it keeps counts as that take's own footage too, and it wins when the trim cut something off. This is the writer's own repair of one take. TWO CALLS, PRICE FIRST: sent WITHOUT `confirmed` it prices the repair (the seconds it sends — the whole take, or only the shots its defect sits in — at the repair rung, two seconds at least) and reserves nothing (`quotedOnly: true`, `credits`, `summary`, `note`); sent again with `confirmed: true` it reserves exactly that line and queues the repair as a new take linked to the one it repairs (`repairTake`). The repaired take keeps the take's own sound, is checked again, and plays only if it passes; a repair that does not land is released (nothing charged). Refused before anything is reserved: the project's spend gate (`project_precondition_failed`), a take that is not an accepted take of the call, a repair of a repair (`repair_of_a_repair`), a take whose repair was declined at the content check (`repair_refused_before`, never sent again unchanged), a spoken shot (`repair_spoken_shot_held`: not repaired in place yet), repair not set up (`repair_unavailable`), a length the repair cannot take (`repair_not_possible`) — each a 409 with the fixing sentence. To render a new take instead, use the unit's render-clip with `callId`: a new take is told what the watcher saw on the takes before it. Review or complete only. Requires `Idempotency-Key`. Scope: `artifact:publish`.

## Headers

- `Idempotency-Key` string, required

## Request body

- TakeRepairRequest: Repair one take of one call in place. TWO CALLS: without `confirmed` it is priced; with `confirmed: true` it is reserved and queued.
  - `callId` string, required: One of this unit's call ids (from the beats or chapters read).
  - `take` integer, required: The take to repair: an accepted take of the call.
  - `confirmed` boolean: Send true only once the writer has seen the price and said go.

## Response `200`

The repair's price (no `confirmed`) or the queued repair.

- TakeRepairAnswer: The repair's price (`quotedOnly: true`; nothing reserved) or the queued repair (`quotedOnly: false`, `repairTake`).
  - `quotedOnly` boolean, required
  - `jobId` string, required
  - `callId` string, required
  - `take` integer, required
  - `repairTake` integer: Confirmed call only: the take number the repair is recorded as.
  - `seconds` number: Quote only: the seconds sent.
  - `credits` integer, required
  - `costLabel` string, nullable
  - `summary` string: Quote only: what the repair will do, in plain words.
  - `note` string: Quote only: the price in the writer's words and how to proceed.
  - `balanceAfter` integer: Quote only. Studio Credits the writer would have left once this is spent: the balance available now (as Billing shows it) minus the price. Negative means they are that many short.
  - `sufficient` boolean: Quote only. True when the available balance covers the price. False means the writer must top up first (the note names the Billing link) — do not confirm; the reserve would refuse.
  - `queued` boolean
  - `message` string

## Other responses

- `400`: Request payload failed validation. The error message names the offending field.
- `401`: Missing, malformed, revoked, or expired API key.
- `402`: Not enough Studio Credits to reserve this job (`insufficient_credits`), and nothing was reserved. `details` is InsufficientCreditsDetails: `required` and `available`, and `autoTopup` when auto top-up is on but did not cover it — `pending` (retry in a moment), `over_cap` (raise the monthly spending cap), `too_small` (buy a bigger pack) or `failed`.
- `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 trailer exists and the request is well-formed, but the trailer, its beat, its cast or its plates are not in a state that allows it (`trailer_state_invalid`), and nothing was reserved: a plan approved outside draft, a take chosen or a beat rendered outside review/complete, an export before the finish, a finish while a call has no selected take, a narrated cut with no narrator, a render the compile blocked, or a finish while the master failed its video coverage (`trailer_video_coverage_failed`, with `details.videoCoverage`). `details.refusal` is `{ code, action, fix }` (see TrailerRefusalDetails): `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 beat a blocked compile could not render. The identical request succeeds once the trailer 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)
