---
title: "Commit a whole theater scene as a motion-graphics canvas."
method: POST
path: "/artifacts/{artifactId}/theater-canvas"
tags: ["Artifacts"]
---

# Commit a whole theater scene as a motion-graphics canvas.

`POST /artifacts/{artifactId}/theater-canvas`

## Request

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

Designs a whole table-read theater scene as one immersive canvas: an ordered list (1–12) of full-canvas motion-graphic beats anchored to spoken lines and baked into the durable theater video. Returns `shareUrl`. Requires `Idempotency-Key`. Scope: `artifact:publish`.

## Headers

- `Idempotency-Key` string, required

## Request body

- TheaterCanvasRequest: A whole theater scene canvas: the scene plus its ordered motion-graphic beats.
  - `sceneIndex` integer, required: Zero-based scene index whose canvas this commits.
  - `beats` TheaterCanvasBeat[], required: Ordered beats composing the scene canvas.
    - `entryIndex` integer, required: Zero-based script entry (spoken line) this beat occupies.
    - `compositionKind` 'motion-only' | 'motion-over-clip' | 'performance-motion-overlay', required
    - `captionText` string: On-screen copy the motion layers render.
    - `direction` string: Full-canvas motion direction (where elements sit + how the text moves).
    - `durationSeconds` number: This beat's render duration in seconds.
    - `backgroundClipPrompt` string: For a motion-over-clip beat: the background clip look (generated separately).

## Response `200`

The committed canvas + a shareable theater video link.

- TheaterMotionResult: The committed motion beat plus a shareable link to the enhanced theater video.
  - `artifactId` string, required
  - `shareUrl` string: Watchable link to the enhanced theater video.

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