Skip to main content
POST

Overview

Saves a character to your team, the same as Studio → Characters → New character in the dashboard. Pass its id in characterIds of Create Cinematic Video to cast it. A character has a name (how the story calls it, up to 60 characters), a visual description, a voiceProfile (how it sounds, in words) and a presetId (the visual style of a generated portrait, cinematic by default; any id of the visual-styles catalog or your own custom-<id>). Only name is required.

The photo

Send at most one of these. Without any, the character has no photo, and Cinematic draws a portrait for it when it is cast. With imageUrl or generatePortrait the answer is 202 and imageStatus is PROCESSING. Poll Get Character until it is COMPLETED (imageUrl is set) or FAILED. A failed portrait gives its credits back.
A portrait is charged like the dashboard’s Generate button: a BYOK team needs its OpenRouter key (otherwise 402 missing_credentials, nothing saved), and a managed team needs a plan and the credits for one image (otherwise 402, nothing saved).

Errors

A URL that cannot be downloaded, a file that is not an image or a portrait the model refuses do not answer an error here: imageStatus becomes FAILED. Set another photo with Update Character.

Authorizations

x-api-key
string
header
required

Headers

Idempotency-Key
string

Makes the request safe to retry. 1-255 printable ASCII characters, one per operation (your job id, or a UUID you store), reused on every retry. Within 24 hours the same key with the same body answers with the first response and the header Idempotent-Replayed: true, without running or charging again. Keys are scoped to your team and the endpoint. 5xx answers and refusals before anything ran (401, 402, 403, 409, 429) are not kept. See Idempotency.

Required string length: 1 - 255
Pattern: ^[\x20-\x7E]+$

Body

application/json
name
string
required

How the story calls the character (and its @mention).

Maximum string length: 60
description
string

What the character looks like. Required with generatePortrait.

Maximum string length: 2000
voiceProfile
string

How the character sounds, in words.

Maximum string length: 500
presetId
string

Visual style of a generated portrait: a visual-styles catalog id or your custom-<id>. Default cinematic.

mediaId
string

An image of your media library (from List Media or an import), COMPLETED. Free.

imageUrl
string<uri>

A public https JPEG, PNG, WEBP or GIF. It is imported into your library after the response (free, counted against your storage); imageStatus is PROCESSING until then.

generatePortrait
boolean

true generates a portrait from description in the character's style, after the response. Charged one image at imageModel (4 credits with the default); given back if it fails.

imageModel
string

Image model for generatePortrait (an image-models catalog id). Default gpt_image_2.

Response

Character created, with its photo (or none)

success
boolean
required
data
object
required

The character as saved, and what it cost.

message
string