---
title: "Generate outline coverage."
method: POST
path: "/story-projects/{projectId}/outline-map/coverage"
tags: ["Projects"]
---

# Generate outline coverage.

`POST /story-projects/{projectId}/outline-map/coverage`

## Request

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

Queues a structural report for the exact current outline-map revision, grading the same beats the season planner hands the script writer. Requires at least one planned episode with an outline (`readiness.canScore` on the read; GET /story-projects/{projectId}/outline-map shows them); otherwise it refuses with 400 `validation_failed` carrying `readiness.reason`, and nothing is queued or charged. Nothing waits on the result. Requires Idempotency-Key. A product project is refused with 409 `project_not_story` (`details.work: outline`): its Bible lists features, not episodes.

## Headers

- `Idempotency-Key` string, required

## Request body

- OutlineCoverageGenerateRequest
  - `focusPrompt` string

## Response `200`

Queued outline coverage envelope.

- OutlineCoverageEnvelope
  - `coverage` OutlineCoverageStatus, required
    - `status` 'missing' | 'generating' | 'complete' | 'failed', required
    - `current` boolean, required
    - `stale` boolean, required
    - `reportId` string, nullable, required
    - `documentVersion` integer, required
    - `reportVersion` integer, nullable, required
    - `overallScore` number, nullable, required
    - `progressDetail` string, nullable, required
    - `failureMessage` string, nullable, required: Why the run stopped, as one plain sentence for the writer — never a provider's or the database's raw wording. Populated when `status: failed`.
    - `report` OutlineCoverageReport, required
      - `overallScore` number, required
      - `verdict` 'pass' | 'revise' | 'rebuild', required
      - `oneLineDiagnosis` string, required
      - `structuralSummary` string, required
      - `dimensions` object, required
        - `structuralIntegrity` OutlineCoverageDimension, required
          - `score` number, required
          - `finding` string, required
          - `evidence` string[], required
          - `nextMove` string, required
        - `causalChain` OutlineCoverageDimension, required
          - `score` number, required
          - `finding` string, required
          - `evidence` string[], required
          - `nextMove` string, required
        - `escalation` OutlineCoverageDimension, required
          - `score` number, required
          - `finding` string, required
          - `evidence` string[], required
          - `nextMove` string, required
        - `characterAgency` OutlineCoverageDimension, required
          - `score` number, required
          - `finding` string, required
          - `evidence` string[], required
          - `nextMove` string, required
        - `setupAndPayoff` OutlineCoverageDimension, required
          - `score` number, required
          - `finding` string, required
          - `evidence` string[], required
          - `nextMove` string, required
        - `episodeDistinctness` OutlineCoverageDimension, required
          - `score` number, required
          - `finding` string, required
          - `evidence` string[], required
          - `nextMove` string, required
        - `seasonMomentum` OutlineCoverageDimension, required
          - `score` number, required
          - `finding` string, required
          - `evidence` string[], required
          - `nextMove` string, required
      - `episodeNotes` object[], required
        - `bibleEpisodeId` string, required
        - `episodeLabel` string, required
        - `score` number, required
        - `finding` string, required
        - `nextMove` string, required
      - `strengths` string[], required
      - `risks` string[], required
      - `priorityFixes` object[], required
        - `priority` integer, required
        - `fix` string, required
        - `why` string, required
        - `acceptanceTest` string, required
    - `unoutlinedEpisodeIds` string[], required: Bible episode ids that had no outline when this report was produced.
    - `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.
    - `createdAt` string, date-time, nullable, required
    - `updatedAt` string, date-time, nullable, 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/64c1102ccb2f?raw)
