Upload existing ref images or synthesize 4 ref poses from a description.
Documentation Index
Fetch the complete documentation index at: https://docs.aurous-labs.com/llms.txt
Use this file to discover all available pages before exploring further.
POST /v1/characters creates a character — a reusable identity asset you can attach to any image generation via character_id. There are two mutually exclusive flows:
upload_ids (1–6) collected from POST /v1/characters/uploads/init. The platform moves the bytes to character storage and the response comes back with status: ready — immediately usable.generate: true plus an attributes object describing who the character is. The platform dispatches a multi-image generation task that produces 4 ref poses (portrait, front, side, back). The response returns status: synthesizing while generation is in flight, or status: reviewing if synthesis completed before the response returned (typical for fast runs). Either way, poll GET /v1/characters/{id} until status: reviewing, then call POST /v1/characters/{id}/save to mark it ready.upload_ids or generate: true — never both, never neither.
Sending both or neither returns 400 parameter_invalid_combination.upload_id per file via POST /v1/characters/uploads/init, PUT the bytes, then create the character.
attributes object is locked at v1.0 to a small set of typed fields plus a free-text additional_details catch-all. Synthesize burns credits at create time (4 generation dispatches), so prefer to estimate cost via POST /v1/images/estimate on the equivalent prompt if you need a budget guardrail in your UI.
| Flow | Initial | After processing | Customer action |
|---|---|---|---|
| Upload | ready | — | Use immediately on POST /v1/images. |
| Synthesize | synthesizing (or reviewing if synth completed before the 201 returned) | reviewing | Poll GET /v1/characters/{id}. When reviewing, call POST /v1/characters/{id}/save to publish; or call POST /v1/characters/{id}/resynthesize to retry. |
| Synthesize (failed) | synthesizing | failed | error_message populated. Call POST /v1/characters/{id}/resynthesize to retry. |
characters_synthesize — 6 requests/min sustained, 12 burst per team. Both flows ride this bucket since the synthesize discriminator is decided server-side after the request lands.Idempotency-Key (any opaque value, 1–256 chars). Same key + same body within 24h replays the cached response with Aurous-Idempotent-Replayed: true. Same key + different body returns 409 idempotency_key_in_use. See Idempotency for details.Idempotency-Key on synthesize-flow create — it dispatches
4 paid generations, so a network retry without a key can double-charge.| Code | HTTP | When |
|---|---|---|
parameter_invalid_combination | 400 | Sent both upload_ids and generate: true, or neither. |
upload_invalid | 400 | One of the upload_ids is unknown, expired, or already consumed. |
insufficient_credits | 402 | Synthesize-flow dispatch when team credits < cost. |
idempotency_key_in_use | 409 | Same Idempotency-Key was used with a different body. |
rate_limit_exceeded | 429 | Burst > 12 or sustained > 6/min. |
ready — either automatically (upload flow) or via POST /v1/characters/{id}/save (synthesize flow). Calling POST /v1/images with a synthesizing or reviewing character_id returns 400 character_not_ready.attributes to anchor identity. Don’t pass empty attributes.attributes schema is locked for v1.0; new attributes go into additional_details until a v1.1 bump introduces them as typed fields.Your team API key (starts with al_live_).
Optional API version pin (YYYY-MM-DD). Defaults to your team's pinned version, or the system default 2026-05-15 for unauthenticated requests.
^\d{4}-\d{2}-\d{2}$"2026-05-15"
Stripe-style idempotency key (1-256 chars). Same key + same canonical-JSON body returns the cached response with Aurous-Idempotent-Replayed: true. Same key against a different route (e.g. previously used on /v1/images) returns 409 invalid_request / idempotency_key_in_use. Replay window is 24 hours. Absent header is treated as non-idempotent (each call processes anew).
Display name for the character (1-80 chars).
1 - 80"Aurora the Adventurer"
Selects the synthesize flow when true (the platform generates 4 ref poses from attributes). When omitted/false, upload_ids must be provided to attach customer-supplied refs. Mutually exclusive with upload_ids.
false
Upload tickets from POST /v1/characters/uploads/init (1-6). When set, the upload flow is used and the server moves bytes from upload storage to character storage on create (uploads are consumed). Mutually exclusive with generate: true.
1 - 6 elements["upl_01HXMQ7Z3K8Y2NABCDEFGHJKMR"]Character attributes used by the synthesize flow. Required when generate: true. Optional on the upload flow (used as descriptive metadata only).
Character created
Opaque character ID.
"char_01HXMQ7Z3K8Y2NABCDEFGHJKMR"
Discriminator
character "character"
Display name.
"Aurora the Adventurer"
Lifecycle state. synthesizing: synthesize flow running. reviewing: synthesize completed, awaiting POST /:id/save. ready: usable on POST /v1/images. failed: synthesize failed; use POST /:id/resynthesize to retry. deleted: soft-deleted (filtered out of list endpoint).
synthesizing, reviewing, ready, failed, deleted "ready"
Reference images (typically 4 poses).
Creation timestamp (ISO 8601).
"2026-05-08T10:00:00Z"
Last-update timestamp (ISO 8601).
"2026-05-08T10:00:00Z"
Character attributes. Null when unset.
Error message when status is failed. Null otherwise.
null
API contract version applied at the time this row was minted (D25 — frozen for replay across future version bumps).
"2026-05-15"