---
title: "Read the sound map a sound pass is placed from."
method: GET
path: "/trailers/{jobId}/storyboard/sound-map"
tags: ["Trailer"]
---

# Read the sound map a sound pass is placed from.

`GET /trailers/{jobId}/storyboard/sound-map`

## Request

- Base URL: `https://docs.sleeperhit.studio/api/v1`
- URL: `https://docs.sleeperhit.studio/api/v1/trailers/{jobId}/storyboard/sound-map`
- Auth: HTTP bearer

For every beat, or one (`sceneIndex`, 0-based): its length in the master (`cutSeconds`, the window a cue's offset is measured in), every shot's `fromSeconds`/`toSeconds` with its framing, who is on camera and its setup and action, every spoken line's speaker and seconds (`how`: on_camera, laid, narration or approx), what the cut already carries under each call (`cutSound[].heard`: silence, cast_lines, room_tone or scene_sound) and the compiled `roomTone`, whether it plays its own sound (`keepsSceneSound`: a capture's recorded track, a cut that kept its takes' sound, a chapter's kept scene sound; its spans in `cutSound` as scene_sound, the spans the score's cue sheet lists as `ownSound`) and what the music does under it (`scoreUnderOwnSound`: duck, out or hold; null when it plays none), its own mix (`chapterMixLufs`: voice, kept scene sound and score without the sound effects, measured on the master at its last stitch; `chapterHeardLufs` with them; null until a stitch measured it), each scene's narrator over the music (`voiceOverBed`: `gapLu` in LU — how far the narrator clears the music, negative when the music plays over the voice; `clear` at the ~6 LU floor; null until measured), and the levels a new bed and spot take under it (`suggestedLevels`), the sound-effect cues already placed on the timeline (`cueId`, kind, offset, length, level, fades, muted; how loud each really is: `assetLufs`, `normGainDb`, `mixLufs`; where it sits against its own mix: `underChapterMixDb` and `targetLevel`, the level that lands it in the middle of the map's `targets` — a bed 10–14 dB, a spot 3–8 dB under; a bed's `continuity`; `insideLine` for a spot inside a spoken line; and `loudnessFlag` too_quiet, clipped, gappy or unmeasured). A capture beat's own click sounds are listed as their own cues too (`source: capture_click`, one per press: its label, its offset within the beat, its `level` and these same loudness fields) — the beat's picture's own sound, never a cue placed on the timeline. `masterLufs` is context only; `chapterMix` names the master the mixes were measured on and whether it is still the current one and the music sounding over it, plus the bell lane. Lay cues with POST `/trailers/{jobId}/storyboard/audio-timeline` (`generate-sfx-cue`) and re-balance them in one write (`update-sfx-cues`). Read-only. Scope: `story:read`.

## Query parameters

- `sceneIndex` integer

## Response `200`

The sound map: `masterLufs`, `targets`, `chapterMix`, `scenes` (one entry per beat) and `bell`.

- object

## 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/4534f5d25540?raw)
