---
title: "Read the pitch deck's score to picture."
method: GET
path: "/pitch-decks/{jobId}/score-to-picture"
tags: ["Pitch Deck"]
---

# Read the pitch deck's score to picture.

`GET /pitch-decks/{jobId}/score-to-picture`

## Request

- Base URL: `https://docs.sleeperhit.studio/api/v1`
- URL: `https://docs.sleeperhit.studio/api/v1/pitch-decks/{jobId}/score-to-picture`
- Auth: HTTP bearer

The score composed to the pitch deck's cut and whether one can be composed now: `status` (none, waiting_for_master, queued, composing, laid, failed, reverted), `canScore` and `blocked` (why not — music the writer placed is never replaced), `runtimeMs`, `fitsCut` (false when the cut changed after the score was composed: it still plays, off the cuts) and the `cueSheet`: its concept and palette, its sections by cut number with their windows in ms, mood, instrumentation and intensity, its hit points (the cuts the music lands on), its intensity curve and where speech sits; and `silentGap` (null unless it happened): the laid score fell silent when it was first composed (under −50 dBFS for longer than 1.5 s, the ending's fade-out aside), so it was composed again — or what stayed silent was filled from the music beside it — with where (`found`, ms of the master), the cue-sheet `sections`, the `action` (`recomposed` / `filled`) and the writer's `note`, which also ends `message`. A score with dead air is never laid. Before any master, `plannedCut` is true (`runtimeMs` and `cuts` are the planned cut, every unit at its planned length) and `sketch` is the sketch composed to it for a score that waits for the master: `status` (`composing`, `ready`, `failed`), `url` to listen to, `composedAt`, `fitsCut` (false when the plan changed since) and `error` — never laid, never charged; null once the score is on its way to the real cut. On a deck whose title sequence cuts on the bell's beat grid, the `cueSheet` carries `beatGrid` (the beat, the tempo, and the required bell strikes: every intro cut and the title, with hit points marked `required`), and `beatAlignment` (null otherwise) is the score check: each strike's cut, the nearest bell onset measured in the laid score, the offset in ms and in frames and whether it is within a frame (`aligned`), the constant `shiftMs` applied to put them on the cuts (a shift, never a retime), and the `note` — a `warning` ("Intro bell strikes not on the cuts: …") when they are not, which also ends `message`. Nothing is composed again for it: scoring again is the writer's priced choice. When `status` is failed, `error` is why (the Details). A score asked for with a `direction` that could not be composed is NEVER replaced by the table read's scene beds: they come off the cut, the bell lane and the sound effects stay, and `message` says so plainly — "The score couldn't be composed (reason in Details). The bell plays alone. Score to picture to try again." (with no bell lane, no music plays under the cut; music the writer placed is named as still on it). Say that to the writer. Scoring to picture again without a new `direction` keeps the one it had; a score asked for without a direction that fails still leaves the scene beds. Scope: `story:read`.

## Response `200`

The score's state and its cue sheet.

- object

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