---
title: "List a project's pitch decks."
method: GET
path: "/story-projects/{projectId}/pitch-decks"
tags: ["Pitch Deck"]
---

# List a project's pitch decks.

`GET /story-projects/{projectId}/pitch-decks`

## Request

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

Lists the project's season and project-scoped pitch decks, newest first — what the Publishing page shows: each deck's `id`, `title`, `status`, `style`, `frameCount`, `published`, `renderedVideoStatus`, `renderedVideoUrl`, `pdfStatus`, `deckMode`, its scope (`scopeKind`, `scopeLabel`, `scopeBadge`), its read-only `audienceLabel` / `titleLabel` labels and `createdAt`. `?season=N` narrows it to one season; `?episode=<episodeId>` (an episode id from GET /story-projects/{projectId}/seasons) lists one story episode's decks instead, through its script (a product project has none). Other episode decks are keyed on their script's upload and are not listed here. The same read MCP `list_pitch_decks` makes. Read-only; costs no credits. Scope: `story:read`.

## Query parameters

- `season` integer
- `episode` string

## Response `200`

The project's pitch decks, newest first.

- object[]
  - `id` string, required
  - `title` string, required
  - `status` string, required: The deck's workflow status (draft / rendering / review / finishing / complete / failed).
  - `style` string, nullable
  - `frameCount` integer, nullable
  - `published` boolean
  - `renderedVideoStatus` string, nullable
  - `renderedVideoUrl` string, nullable
  - `pdfStatus` string, nullable
  - `deckMode` string, nullable
  - `scopeKind` 'episode' | 'season' | 'project', required: What the deck was made for.
  - `scopeLabel` string
  - `scopeBadge` string, nullable
  - `audienceLabel` string
  - `titleLabel` string
  - `createdAt` string, date-time

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