character on media.images.generate. Four methods, one per route. API detail: Characters.
Wherever a parameter is called ref, it takes a chr_ id or the character’s name — the API resolves both.
create—POST /v1/characters, answering202with the character intraining.CharacterCreateis{ name, description?, image_urls, persona?, style_pack?, consent }:name1–100 characters and unique among your characters,image_urlsone to sixteen photos of the same person, each a stored file’sfil_id or a publichttp(s)URL, andconsent— required,{ attested: true }— your confirmation that the person in the photos is you, or has given you permission to create an AI likeness of them, and is not a public figure (kept on the character asmetadata.consent, with who and when). Photos of a recognizable public figure are refused (validation_failedonimage_urls) before anything is billed. Paid: the balance must cover one training first (insufficient_creditsotherwise), and it is billed once, when the trainer accepts the photos. The client sends the requiredIdempotency-Keyfor you — passopts.idempotencyKeyto hold one across your own retries, so a retried create is the same training, never a second paid one; a second create under a name you already hold is refused before anything is trained.list—GET /v1/characters, your own newest first, then the prebuilt ones, cursor-paginated;statusnarrows it, andscopekeeps only your own (organization) or only the prebuilt ones (platform).get—GET /v1/characters/{ref}. Each read advances the status from the trainer, so it is what you poll untilready.delete—DELETE /v1/characters/{ref}. A soft delete that frees the name; files it rendered keep theirsource.character_id. A prebuilt character cannot be deleted (409 state_conflict).
Character is the character object: id, name, description, status, scope, persona, style_pack, sheet, source_images (as you gave them), thumbnail_url, reason, metadata, created_at, updated_at.