---
title: "Drop a show episode: never air it."
method: POST
path: "/publishing-series/{seriesId}/show/episodes/{episodeId}/drop"
tags: ["Shows"]
---

# Drop a show episode: never air it.

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

## Request

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

Never air this episode: it leaves every list. A scheduled or extra episode's items stay covered, so they are never made again; a preview claims nothing, so dropping it claims nothing. Works on any show. Takes `userConfirmed: true` after the creator agrees.

## Request body

- ShowConfirmRequest
  - `userConfirmed` boolean: Required after the user agrees.

## Response `200`

The episode, dropped.

- ShowEpisodeAction
  - `episode` ShowEpisode, required: One episode of the show: its kind (scheduled, extra, preview, external), how it stands (queued, making, published, held with why, preview, dropped, skipped with why, failed with why), the items it covers, what it cost, its audio once made, and its release once published.
    - `episodeId` string, required
    - `seriesId` string, required
    - `kind` 'scheduled' | 'extra' | 'preview' | 'external', required
    - `outcome` 'queued' | 'making' | 'published' | 'held' | 'preview' | 'dropped' | 'skipped' | 'failed', required
    - `outcomeLabel` string, required: How it stands, in the writer's words.
    - `title` string, nullable, required
    - `heldReason` 'review' | 'hard_line' | 'off_cast' | 'voice_pin_failed' | 'voice_effect_failed' | 'sounds_failed' | 'theme_failed' | 'show_turned_off' | 'shows_not_running', nullable, required
    - `skippedReason` 'no_material' | 'not_runnable' | 'not_ready' | 'cap_reached' | 'already_covered', nullable, required
    - `failureCode` string, nullable, required
    - `failureMessage` string, nullable, required
    - `itemId` string, nullable, required
    - `items` object[], required
      - `itemKey` string, required
      - `title` string, required
      - `author` string
      - `url` string
      - `publishedAt` string, date-time
    - `creditsSpent` integer, nullable, required
    - `wornPhrasingLines` integer, nullable, required: Spoken lines of the finished script in a worn-out shape ("it's not X, it's Y" in any form, "Not X. Not Y.", podcast filler): a measure of whether the writing holds the voice rules, never acted on. Null until counted.
    - `audioUrl` string, nullable, required
    - `artifactId` string, nullable, required
    - `releaseId` string, nullable, required: Set once published: the release in the feed.
    - `runId` string, nullable, required
    - `attempts` integer, required
    - `createdAt` string, date-time, required
    - `finishedAt` string, date-time, nullable, required
  - `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.
- `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/86e084144cef?raw)
