---
title: "Fix one line of a show episode."
method: POST
path: "/publishing-series/{seriesId}/show/episodes/{episodeId}/fix-line"
tags: ["Shows"]
---

# Fix one line of a show episode.

`POST /publishing-series/{seriesId}/show/episodes/{episodeId}/fix-line`

## Request

- Base URL: `https://docs.sleeperhit.studio/api/v1`
- URL: `https://docs.sleeperhit.studio/api/v1/publishing-series/{seriesId}/show/episodes/{episodeId}/fix-line`
- Auth: HTTP bearer

Fix one line of a made episode (published, held or a preview) exactly, without a rewrite: `find` is the text as it stands in the script and `replaceWith` what it becomes. Only that text changes: text not in the script, or in it more than once, is refused with the lines that come closest (`lines`). Two calls: without `userConfirmed` it returns the price and the line before and after, changing nothing; with it, the line is re-voiced, and once it is the episode is mixed again by itself (its sounds and theme on the new line), and a published episode's feed audio is replaced. The re-voice costs the same as revising a table read (TABLE_READ_REFINE); the re-mix after it is free. Requires `Idempotency-Key`.

## Headers

- `Idempotency-Key` string, required

## Request body

- FixShowEpisodeLineRequest
  - `find` string, required: The text to change, exactly as it stands in the episode's script (part of one line is enough when it names one place).
  - `replaceWith` string, required: What that text becomes.
  - `userConfirmed` boolean: Omit to get the price and the line before and after, changing nothing. true re-voices the line, after the user agrees.

## Response `200`

Quoted, queued, or the text is not in the script exactly once.

- FixShowEpisodeLineResponse
  - `status` 'quoted' | 'queued' | 'not_found' | 'ambiguous', required: `quoted`: the price, nothing changed. `queued`: the line is being re-voiced, then the episode is re-mixed by itself. `not_found` / `ambiguous`: the text is not in the script exactly once; `lines` are the closest.
  - `quotedOnly` true
  - `episodeId` string, required
  - `before` string: The script line as it stands.
  - `after` string: The script line as it would read.
  - `credits` integer
  - `balanceAfter` integer
  - `sufficient` boolean
  - `storyJobId` string: Queued only: the re-voice job.
  - `lines` string[]: Refused only: the script lines that come closest, or that hold the text.
  - `note` string, required

## 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.
- `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)
