---
title: "Set the look a story film's product moments play."
method: PUT
path: "/story-projects/{projectId}/story-films/{storyId}/look"
tags: ["Story Films"]
---

# Set the look a story film's product moments play.

`PUT /story-projects/{projectId}/story-films/{storyId}/look`

## Request

- Base URL: `https://docs.sleeperhit.studio/api/v1`
- URL: `https://docs.sleeperhit.studio/api/v1/story-projects/{projectId}/story-films/{storyId}/look`
- Auth: HTTP bearer

`{ look }` sets every product moment of the film; `{ momentId, look }` one moment. `look` is a screen-look preset or `none` (the full frame); a look the film does not know is refused by name (400 `validation_failed`), and a moment with no screen beat yet is 404. Answers every product moment with the look it now plays. The next cut planned from the film's script uses it. Free. Scope: `story:write`.

## Request body

- SetStoryFilmLookRequest: The look a story film's product moments play: `{ look }` for every product moment of the film, `{ momentId, look }` for one.
  - `look` 'screen' | 'flat' | 'subtle' | 'cinematic' | 'showcase' | 'hero' | 'none', required: A screen-look preset, or `none` for the full frame.
  - `momentId` string: One product moment of the film (moments[].id). Omitted: every product moment.

## Response `200`

Every product moment with the look it now plays, and a note.

- StoryFilmLook: Every product moment of the film with the look it now plays.
  - `projectId` string, required
  - `storyId` string, required
  - `moments` object[], required
    - `momentId` string, required
    - `featureId` string, required
    - `stage` 'brand' | 'scene' | 'null', nullable, required: Where the moment stands: on the brand stage, or in the scene's room.
    - `look` string, required: The look it plays.
  - `note` string, required: What changed and when it applies, to read out.

## Other responses

- `400`: Request payload failed validation. The error message names the offending field.
- `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.

## Changes

- **2026-10-20** `4534f5d25540`: 1 info
  - added the new `screen` enum value to the request property `look`

[Operation history](https://skmtc.dev/sleeperhit/apis/sleeper-hit-studio-story-api/changes/story-projects/:projectId/story-films/:storyId/look/put.md)

---

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