---
title: "Read a planned draft trailer's plan check (its approval gate)."
method: GET
path: "/trailers/{jobId}/product-plan-coverage"
tags: ["Trailer"]
---

# Read a planned draft trailer's plan check (its approval gate).

`GET /trailers/{jobId}/product-plan-coverage`

## Request

- Base URL: `https://docs.sleeperhit.studio/api/v1`
- URL: `https://docs.sleeperhit.studio/api/v1/trailers/{jobId}/product-plan-coverage`
- Auth: HTTP bearer

What the cut covers (the scope's features with the beats, 1-based, that cover each) and every finding with its fix; a `blocked` check refuses `approve_trailer_plan` (409 `trailer_state_invalid`, `details.refusal.code: product_video_plan_blocked`) and reserves nothing. It is LIVE: computed from the draft as it stands now, so a beat edited since the plan refreshes it on the next read. A trailer not planned from a feature map answers `coverage: null` with a note — never a 404. Planning a product video turns one feature of the project's feature map, or a named release and its features, and the project's recorded captures into an ordinary `draft` trailer — each beat names its capture, the stretch of it it plays, a narrated line, whether the beat keeps its own sound, and its depth — and it is free: it answers at once, the run is polled until it is `ready`, and the result is an ordinary capture-only draft trailer approved with `approve_trailer_plan`. A read: it never plans, renders or edits. Scope: `story:read`.

## Response `200`

The plan check of the draft trailer.

- ProductVideoPlanCoverageEnvelope: One draft trailer's plan check. A trailer not planned from a feature map answers `coverage: null` with a note — never a 404.
  - `jobId` string, required
  - `coverage` ProductVideoPlanCoverage, required: The plan check of one planned draft: what it covers, what is wrong, and whether it may be approved. Blocking findings gate `approve_trailer_plan`.
    - `status` 'pass' | 'warn' | 'blocked', required: `blocked` when anything blocks, otherwise `warn` when anything warns, otherwise `pass`.
    - `totalSeconds` number, required: The length the plan cuts to.
    - `targetSeconds` number, required: The length the request aimed for.
    - `features` object[], required: The scope's features, with the beats (1-based) that cover each.
      - `featureId` string, required
      - `name` string, required
      - `availability` string, required
      - `beats` integer[], required
      - `covered` boolean, required
    - `findings` object[], required: Everything the check found, each with its fix. Blocking findings exist for an unplayable capture, a blank beat, a feature outside the Bible or now `planned`, a scope feature or release covered by no beat, and a cut over 90 seconds; the rest warn.
      - `severity` 'blocking' | 'warning', required
      - `code` 'capture_unplayable' | 'blank_beat' | 'feature_not_in_bible' | 'feature_planned' | 'feature_uncovered' | 'release_uncovered' | 'over_max_seconds' | 'release_feature_uncovered' | 'narration_too_long' | 'keeps_sound_silent' | 'beat_unlinked' | 'feature_beta' | 'narrator_missing' | 'runtime_off_target' | 'pace_off_reference', required
      - `beat` integer: The 1-based beat number, when one beat is named.
      - `featureId` string: The feature id, when one feature is named.
      - `message` string, required
      - `fix` string, required: What puts it right.
  - `note` string, 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/86e084144cef?raw)
