---
title: "Remake one location plate (metered — TWO CALLS, price first)."
method: POST
path: "/artifacts/{artifactId}/location-plates/{plateKey}/remake"
tags: ["Artifacts"]
---

# Remake one location plate (metered — TWO CALLS, price first).

`POST /artifacts/{artifactId}/location-plates/{plateKey}/remake`

## Request

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

The writer's escape hatch for a bad accepted plate, not a review step. METERED: one still image per attempt, at most 3 attempts. Sent WITHOUT `confirmed` it PRICES the remake and makes nothing (`quotedOnly: true`, `credits`, `balanceAfter`, `sufficient`, and a `note` to show the writer; when `sufficient` is false the caller must not confirm); sent again with `confirmed: true` it holds one credit line per attempt and queues ONE capped round — the same cap and judge as every plate — which keeps the least defective attempt and replaces the stored plate as soon as the round ends. The writer pays only for the attempts made; there is no approval step and nothing waits on the writer. Preconditions run above the price: an unknown key is 404 `location_plate_not_found`; a plate not made yet, a remake already running, a missing source plate, or no image model bound is 409 `location_plate_precondition_failed`, with nothing priced. A confirmed call answers with a `chatToolJobId`; read the location plates until the plate's `remake` leaves `pending`. Scope: `artifact:publish`. Idempotency-Key is required.

## Headers

- `Idempotency-Key` string, required

## Request body

- LocationPlateRemakeRequest
  - `confirmed` boolean: Omit (or false) to PRICE the remake and make nothing. True only after the writer has seen that price and said go.

## Response `200`

The price (no `confirmed`) or the queued remake.

- LocationPlateRemakeEnvelope
  - `quotedOnly` boolean, required: true when this call only PRICED the remake: nothing reserved, nothing queued.
  - `artifactId` string
  - `scriptUploadId` string, required
  - `plateKey` string, required
  - `maxAttempts` integer, required: The most attempts the capped round can take.
  - `creditsPerAttempt` integer: Quote only.
  - `credits` integer, required: The most the remake can cost: every attempt the cap allows. Only the attempts made are charged.
  - `costLabel` string, nullable: Quote only.
  - `balanceAfter` integer: Quote only. Studio Credits the writer would have left once this is spent: the balance available now (as Billing shows it) minus the price. Negative means they are that many short.
  - `sufficient` boolean: Quote only. True when the available balance covers the price. False means the writer must top up first (the note names the Billing link) — do not confirm; the reserve would refuse.
  - `note` string: Quote only — the price, what it would leave (or how short the writer is, with the top-up link), and that only the attempts made are charged. Show it to the writer.
  - `caveat` string: Quote only — the remake's own sentence: the price covers every attempt the cap allows, only the attempts made are charged, the new plate replaces the old one with no approval step, and which plates cropped from this one it leaves as they are.
  - `croppedInto` string[]: Quote only — the ready plates made from crops of this one. A remake leaves them as they are, so they can differ from the new plate until they are remade too.
  - `queued` boolean: Confirmed calls only.
  - `chatToolJobId` string: Confirmed calls only. Read the location plates until this plate's `remake` leaves `pending`.
  - `message` string: Confirmed calls only.

## Other responses

- `400`: Request payload failed validation. The error message names the offending field.
- `401`: Missing, malformed, revoked, or expired API key.
- `402`: Not enough Studio Credits to reserve this job (`insufficient_credits`), and nothing was reserved. `details` is InsufficientCreditsDetails: `required` and `available`, and `autoTopup` when auto top-up is on but did not cover it — `pending` (retry in a moment), `over_cap` (raise the monthly spending cap), `too_small` (buy a bigger pack) or `failed`.
- `403`: API key is valid but lacks the scope, is blocked by IP allowlist, or the account is disabled.
- `404`: No artifact with that id, or the script behind it stores no location plate at that key (`location_plate_not_found`). Read the location plates for the keys it does store; a plate not made yet is made when a video renders.
- `409`: The plate cannot be remade yet, and nothing was priced or charged: it is not ready, a remake is already running for it, the plate it is cropped from is missing, or no image model is bound. The message says which; the identical call succeeds once the plate is put right.
- `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)
