---
title: "Read the location plates of the script behind a table-read artifact."
method: GET
path: "/artifacts/{artifactId}/location-plates"
tags: ["Artifacts"]
---

# Read the location plates of the script behind a table-read artifact.

`GET /artifacts/{artifactId}/location-plates`

## Request

- Base URL: `https://docs.sleeperhit.studio/api/v1`
- URL: `https://docs.sleeperhit.studio/api/v1/artifacts/{artifactId}/location-plates`
- Auth: HTTP bearer

The empty rooms every video render places the cast into, as capped canon assets. Every room the script stores or walks through, each lighting variant of it (the same room by day and by night is ONE room with two variants), and per variant the master, medium and close plate in the landscape and portrait pools: `status` (`ready`, or `missing` — made when a video renders), `imageUrl`, `description` (the room as the plate shows it, written when the plate was accepted), the judge record `note` (advisory), the accepted `verdict`, any `remake` in flight, and `canRemake`. `duplicates` lists rooms stored under two spellings in one light; the read reports them and renames nothing. Plates are never approved. COSTS NOTHING and NEVER makes a plate. Scope: `artifact:read`.

## Response `200`

Location plates envelope.

- LocationPlatesEnvelope
  - `artifactId` string
  - `scriptUploadId` string, required
  - `rooms` object[], required
    - `room` string, required: The normalized room, without its light.
    - `label` string, required
    - `variants` object[], required
      - `key` string, required: The room in one light, e.g. `INT_KARAMAZOV_HOUSE_ENTRANCE_HALL@NIGHT`. DAY is the default and is not written.
      - `lighting` 'DAY' | 'NIGHT' | 'EVENING' | 'MORNING', required
      - `label` string, required
      - `exterior` boolean, required
      - `storedKeys` string[], required: The keys this room-in-this-light is stored under; more than one is a duplicate.
      - `description` string, nullable, required
      - `plates` LocationPlate[], required
        - `plateKey` string, required: The key a remake takes.
        - `rung` 'wide' | 'medium' | 'close', required
        - `pool` 'landscape' | 'portrait', required
        - `status` string, required: `ready`, `draft`, `failed`, or `missing` — made when a video renders; a read never makes one.
        - `label` string, nullable, required
        - `imageUrl` string, nullable, required
        - `description` string, nullable, required: The room as this plate shows it, in one sentence, written when it was accepted. The render declares the plate with it and stages against it.
        - `judgement` object, nullable, required: The capped round's record: `acceptance`, `retries`, `maxRetries`, `note`, `pendingRound`. Advisory, never a gate.
        - `verdict` object, nullable, required: The accepted attempt's verdict (`singleFrame`, `humanFigures`, `framing`, `reason`). Advisory.
        - `note` string, required: One line for the writer.
        - `remake` object, nullable, required: The latest remake: `chatToolJobId`, `status` (pending | completed | failed), `requestedAt`, `note`, `error`.
        - `canRemake` boolean, required: True when a priced remake can start now. There is no approve action.
        - `croppedInto` string[], required: The ready plates of this room made from crops of this one (its medium, close and vertical plates down the crop chain). A remake replaces this plate only; these keep the room as it is now.
  - `duplicates` object[], required
    - `key` string, required
    - `storedKeys` string[], required
    - `note` string, required
  - `counts` object, required
    - `rooms` integer, required
    - `variants` integer, required
    - `plates` integer, required
    - `ready` integer, required
    - `missing` integer, required
    - `duplicates` integer, required
  - `remake` object, required
    - `creditsPerAttempt` integer, required
    - `maxAttempts` integer, required
    - `maxCredits` integer, required
  - `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 story artifact 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)
