A character is the media sibling of an identity: an identity is who an agent is being to the world (an inbox, a number); a character is who it renders as on screen.
POST /v1/characters does not wait: it answers 202 with the character in training, and you read it back until it is ready. An agent does the same with the create_character family of tools; a character made here is one a session can render as, and the other way round.
The character object
string
chr_….string
Always
character.string
How a person and an agent address it, up to 100 characters. Unique among the organization’s live characters, ignoring case.
string | null
Who the character is — looks, age, vibe, wardrobe — up to 1,024 characters. Read by the model when it renders as them.
string
training → ready | failed. ready is the only state a render can pin.string[]
The reference stills it was trained from, as you gave them: a
fil_ id or a public URL. Never the short-lived signed link the trainer was handed.string | null
Reserved for a trained preview. Always
null today: render a still with the character to see it.string | null
Why a
failed training failed; null otherwise.object
Arbitrary key/value pairs.
string
Creation timestamp.
string
When its status or fields last changed.
Create a character
POST /v1/characters → 202 Accepted — scope agents:write, Idempotency-Key required.
string
required
A short, unique name, such as
Ava. 1–100 characters. A name a live character already holds is validation_failed before anything is trained or billed.string
Who the character is. Up to 1,024 characters. Defaults to
null.string[]
required
One to sixteen reference photos of the same person, each a stored file’s
fil_ id (an upload, or an image a render filed) or a public http(s) URL. More, varied angles train a stronger likeness. A fil_ this organization does not hold is not_found; one that is not an image, a private or loopback host, and a data: or file: URL are validation_failed.Idempotency-Key answers the character the first request made — it is not trained or billed twice. Once that character is deleted, a replay of its key is 409 idempotency_conflict; send a new key to train another.
Retrieve a character
GET /v1/characters/{id} → 200 OK — scope agents:read. {id} is the chr_ id or the name; an exact id wins over a name. Poll it after a create: each read advances the status from the trainer, so training turns into ready or failed on the read that sees it. A training takes a few minutes.
List characters
GET /v1/characters → 200 OK, cursor-paginated, newest first — scope agents:read. { data: Character[], has_more, next_cursor }.
string
training, ready or failed.number
Page size, 1–100.
string
The
next_cursor of the previous page.Delete a character
DELETE /v1/characters/{id} → 200 OK — scope agents:write. {id} is the chr_ id or the name. A soft delete: the character can no longer be rendered as and its name is free for a new one, while every file it rendered keeps its source.character_id.
Response
Rendering as a character
Passcharacter — the chr_ id or name of a ready character — to POST /v1/media/images. The render is routed to a model that pins one, and the same face carries across every image. character and image_urls are not combined: the character is the reference.
Video takes no character. A character carries into video through the still it renders: generate an image as the character, and pass the still’s fil_ id as the image_urls first frame of POST /v1/media/videos.
Billing
A training costs dollars, not cents, so unlike a render it is admitted first: the organization’s prepaid balance must cover one training, else402 insufficient_credits before anything is bought. It is then billed once, on the media tier, when the trainer accepts the photos — under the character the request’s idempotency key names, so a replay charges nothing. A request refused before training (a taken name, an unreadable photo) is not billed. A training that later ends failed is refunded — credited back to the organization on the read that sees it fail. Reads, lists and deletes are free. See Pricing.
Errors
In a session
create_character, get_character, list_characters and delete_character — the same lifecycle as agent tools.