---
title: "Read a show episode."
method: GET
path: "/publishing-series/{seriesId}/show/episodes/{episodeId}"
tags: ["Shows"]
---

# Read a show episode.

`GET /publishing-series/{seriesId}/show/episodes/{episodeId}`

## Request

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

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.

## Response `200`

The episode.

- ShowEpisode: 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

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