---
title: "Read the cut's narrator."
method: GET
path: "/trailers/{jobId}/narrator"
tags: ["Trailer"]
---

# Read the cut's narrator.

`GET /trailers/{jobId}/narrator`

## Request

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

Returns the voice that narrates this cut and the cut's audio policy. A `narrate` trailer speaks each beat's `narrationText` in ONE voice, rendered as a separate per-beat track and mixed over the finished picture. The narrator is the voice cast for this cut, else — by default — the cast canon's NARRATOR (`source`: `override` or `cast_canon`; `overridden` true for the first). `voiceId: null` means neither exists — correct for a caption-carried (`suppress`) cut, and blocking for a narrated one, because every beat's voiceover is gated on a narrator existing. Scope: `story:read`.

## Response `200`

The cut's narrator and audio policy.

- object
  - `narrator` TrailerNarrator, required: The voice a trailer's narrated beats are spoken in: the voice cast for this cut, else the cast canon's NARRATOR. Show `voiceName`, never the id.
    - `voiceId` string, nullable, required: The voice every narrated beat is spoken in; null when neither the cut nor the canon casts one (correct for a `suppress` cut, blocking for a `narrate` one).
    - `voiceName` string, nullable, required: The voice's name, as the writer is shown it; null when nothing names it. Show this, never the id.
    - `provider` string, nullable, required: Its TTS provider.
    - `source` 'override' | 'cast_canon' | 'null', nullable, required: Where it comes from: `override` (cast for this cut) or `cast_canon` (the canon's NARRATOR); null when there is none.
    - `overridden` boolean, required: True when this cut casts its own narrator.
    - `audioPolicy` string, required: The cut's audio policy: `narrate` speaks each beat's narration in this voice; `suppress` lets the on-screen text carry it.

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