---
title: "Read the earlier cuts a trailer beat has played."
method: GET
path: "/trailers/{jobId}/storyboard/takes"
tags: ["Trailer"]
---

# Read the earlier cuts a trailer beat has played.

`GET /trailers/{jobId}/storyboard/takes`

## Request

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

Reads the cuts a beat played BEFORE the one it plays now — newest first, capped at `takesKept`. A beat's cut is assembled from its calls' selected takes, so each earlier cut stands for an earlier selection. NOT metered, and not a mutation: it hands back urls that already exist. Pass `beat` to narrow to one beat, or omit it to see which beats in the whole cut have anything to compare. Call this before `restore-take`, which needs an exact url. The per-call takes themselves are on GET /trailers/{jobId}/beats. Scope: `story:read`.

## Query parameters

- `beat` integer

## Response `200`

Each beat's current cut and the earlier cuts behind it.

- TrailerBeatTakes: The cut history of a trailer: what each beat plays now, and the earlier cuts behind it. (The per-call takes are on the beats read.)
  - `jobId` string, required
  - `takesKept` integer, required: How many earlier cuts a beat remembers, so a caller can tell "it has three" from "the oldest fell off the list".
  - `beats` object[], required
    - `beatIndex` integer, required
    - `clipUrl` string, nullable, required: The cut playing now; null when this beat has no footage yet.
    - `durationMs` integer, nullable, required
    - `takes` TrailerBeatTake[], required: Earlier cuts, newest first. Empty when this beat has never been re-assembled.
      - `url` string, required: The earlier cut's storage url — pass this to `storyboard/restore-take`.
      - `replacedAt` string, date-time, required: When this cut was replaced.
      - `durationMs` integer, nullable, required: How long this cut runs, when it was recorded.
  - `reviewUrl` string, nullable, required: Logged-in browser link to watch them — motion cannot play in a terminal.

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