---
title: "Set or clear one cast member's look direction and age at project level."
method: PATCH
path: "/story-projects/{projectId}/cast-look"
tags: ["Projects"]
---

# Set or clear one cast member's look direction and age at project level.

`PATCH /story-projects/{projectId}/cast-look`

## Request

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

Sets `lookDirection` (how they should look on camera, in the writer's words) and/or `age` (the age they are played at) on the person's cast canon entry, without an episode. Every headshot and portrait candidate drawn for them from then on reads it, outranking the Series Bible's appearance where they differ; body shots and sheets are drawn from the headshot and carry it through it. A field not sent is left alone; `null` or "" clears it. A Series Bible character the canon does not hold yet is added to it. Nothing is drawn; free. Unlike a Series Bible edit, it does not re-open Bible coverage. Scope: `story:write`.

## Request body

- CastLookPatch
  - `character` string, required: The person, by canon name, alias, cue or Series Bible name.
  - `lookDirection` string, nullable: How they should look on camera. null or "" clears it; omitted leaves it alone.
  - `age` string, nullable: The age they are played at. null or "" clears it; omitted leaves it alone.

## Response `200`

The person's look as saved.

- CastLookSaved
  - `projectId` string, required
  - `person` CastLookEntry, required
    - `name` string, required
    - `id` string, nullable, required: The cast canon person's stable id; null for a Series Bible character the canon does not hold yet.
    - `aliases` string[], required
    - `lookDirection` string, nullable, required
    - `age` string, nullable, required
    - `inCanon` boolean, required
    - `bible` object, nullable, required: What the Series Bible says they look like; the look outranks it where they differ.
      - `appearance` string, nullable, required
      - `wardrobe` string, nullable, required
  - `note` string, required

## 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`: Nobody in the project's cast canon or Series Bible answers to that name (`character_not_found`), or the project is not yours (`project_not_found`). Nothing was changed or charged.
- `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)
