---
title: "Read every planned episode's outline."
method: GET
path: "/story-projects/{projectId}/outline-map"
tags: ["Projects"]
---

# Read every planned episode's outline.

`GET /story-projects/{projectId}/outline-map`

## Request

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

Every episode of the season map, in order, with its outline and where it came from: `outline_map` when one was written for the episode (its Outline tab, Slug, or PATCH here), `season_map` when nothing is written yet and the episode's season-map note lays it out act by act or scene by scene, so the note stands in. A season-map synopsis or a written screenplay is not an outline. Also `readiness`, exactly what outline coverage reports: whether the outlines can be scored now and, when not, why. Read-only. Scope: `story:read`. A product project is refused with 409 `project_not_story` (`details.work: outline`): its Bible lists features, not episodes.

## Response `200`

The outline map.

- OutlineMapEnvelope
  - `outlineMap` OutlineMap, required
    - `projectId` string, required
    - `currentVersion` integer, required: The outline map's revision; it moves on every saved outline.
    - `episodes` OutlineMapEpisode[], required: Every planned episode, in season-map order.
      - `episodeId` string, required
      - `label` string, required
      - `title` string, required
      - `source` 'outline_map' | 'season_map', nullable, required: `outline_map`: written for the episode. `season_map`: its season-map note, standing in because it lays the episode out act by act or scene by scene. Null: no outline.
      - `outline` object, nullable, required: The outline document (the Outline tab's fields, with scene cards).
      - `words` integer, required
    - `progress` object, required
      - `total` integer, required
      - `outlined` integer, required
      - `missing` string[], required
      - `complete` boolean, required
    - `words` integer, required
    - `readiness` OutlineCoverageReadiness, required: What can be scored right now, read off the outlines GET /story-projects/{projectId}/outline-map returns. An episode is outlined once an outline is written for it (its Outline tab, Slug, or PATCH outline-map), or — with nothing written — when its season-map note lays it out act by act or scene by scene. A season-map synopsis or a written screenplay is not an outline. When `canScore` is false, a generate call refuses with 400 `validation_failed` carrying `reason` word for word, so read this first instead of queueing.
      - `plannedEpisodes` integer, required: Episodes in the Series Bible's season map.
      - `outlinedEpisodes` integer, required: Planned episodes with an outline: written for the episode, or its season-map note when that lays out acts or scenes.
      - `canScore` boolean, required: True when at least one planned episode is outlined, so a report can be queued.
      - `reason` string, nullable, required: Why a report cannot be queued yet; null when `canScore` is true.
    - `updatedAt` 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/64c1102ccb2f?raw)
