---
title: "Create a persona photo"
method: POST
path: "/personas/{id}/shots"
tags: ["Personas"]
---

# Create a persona photo

`POST /personas/{id}/shots`

## Request

- Base URL: `https://api.cut.pro/api/v1`
- URL: `https://api.cut.pro/api/v1/personas/{id}/shots`
- Auth: API key in header `X-Api-Key`

Draws a saved persona into a ready `template` scene or into a `scene` you write, optionally holding a product from `product.photo_ids`. A template also decides what the persona does with the product: it is held up to the camera, or used with one hand on `street`. A written `scene` replaces the template, and there `product.action` is `show` (holds it up to the camera, the default) or `use` (uses it with one hand); with neither, a template is picked at random. A written scene that needs both hands on the product (spreading, pouring, opening, eating) is refused with `SCENE_ACTION_UNSUPPORTED` before anything is charged. Costs `pricing.scene_photo_credits` of `GET /personas/catalog`, twice that with a `style`, even on a workspace with unlimited usage, and is refunded automatically if it fails; send that price in `credits`, or the server answers `409 PRICE_CHANGED` with the right one in `extra`.

Responds `202`. Poll `GET /personas/{id}/shots/{shotId}` every 5 seconds until `ready` or `failed`.

## Path parameters

- `id` string, required

## Request body

- object
  - `template` 'mirror' | 'kitchen' | 'bathroom' | 'sofa' | 'cafe' | 'gym' | 'street' | 'closeup' | 'story' | 'bedroom': A ready scene: `mirror` mirror selfie, `kitchen` home kitchen, `bathroom` by the bathroom sink, `sofa` on the living room sofa, `cafe` at a café table, `gym` on a gym bench, `street` walking down a city street, `closeup` close selfie with the product near the face, `story` talking to the front camera, `bedroom` on the edge of the bed.
  - `scene` string: Where the persona is and what they do, in any language. Replaces `template`.
  - `aspect_ratio` '9:16' | '4:5' | '1:1' | '16:9', required
  - `credits` union, required: The price from `GET /personas/catalog`.
    - string, integer
    - integer: The price from `GET /personas/catalog`.
  - `version_id` string: A persona version id from `versions`. Defaults to the current version.
  - `style` 'cel' | 'felt' | 'yarn' | 'sketch' | 'toy' | 'grotesque' | 'painterly' | 'graphic' | 'gouache' | 'sculptural' | 'lowpoly' | 'toon' | 'cinematic' | 'flat' | 'neon' | 'editorial' | 'comic' | 'pixel' | 'plush' | 'embroidery' | 'mosaic' | 'stainedglass' | 'chalk' | 'silent' | 'thermal' | 'hologram': Redraws the whole video, people and scene, in an animation, illustration, material or camera look while keeping its camera and motion, for example `cel` (hand-painted 2D animation), `felt` (felt puppet stop motion), `toy` (rounded toy 3D), `pixel` (pixel art), `stainedglass` (stained glass) or `silent` (1920s silent film). The whole person is replaced, whatever `replace` says, unless it is `none`. Not available at `quality: high` past `video_mid_max_seconds`.
  - `product` object
    - `name` string, required
    - `description` string
    - `price` string
    - `action` 'show' | 'use': Only with a written `scene`; a template decides it.
    - `photo_ids` string[], required: Ids from `POST /personas/{id}/shots/product` or `POST /personas/{id}/shots/photos`.

## Response `202`

Response for status 202

- object
  - `id` string, required: Persona photo id.
  - `status` 'processing', required
  - `credits_charged` number, required

## Other responses

- `400`: Response for status 400
- `402`: Response for status 402
- `404`: Response for status 404
- `409`: Response for status 409
- `502`: Response for status 502

---

[API](https://skmtc.dev/cut/apis/cutpro-api.md) · [All operations](https://skmtc.dev/cut/apis/cutpro-api/llms.txt) · [OpenAPI document](https://skmtc.dev/cut/apis/cutpro-api/revisions/89d0bafe529c?raw)
