Identities
Upload, generate, preprocess, and reuse model identities across jobs
An identity represents the model/person used by generation jobs and is referenced with identity_code.
There are two ways to add an identity to your library:
- Upload an existing photo of a person. The system validates that it contains exactly one clearly visible face and starts preprocessing automatically.
- Generate a new identity from a brief or a reference image, then promote one of the drafts. See Create an identity for the full walkthrough.
Identity names must be unique per user. If you upload (or promote) with an existing name, the API returns 409.
Processing status
Identities move through a preprocessing lifecycle (pending, processing, completed, failed).
Useful fields during and after preprocessing:
| Field | Description |
|---|---|
preprocessing_status | Current status: pending, processing, completed, or failed |
preprocessing_time | How long preprocessing took (seconds) |
quality_score | Quality rating of the processed identity |
error_message | Reason for failure, if any |
Visibility and sharing
Identities can be:
private: only you can see itshared: visible to members of your groupsdefault: platform-provided identities available based on your plan
Generating identities
Beyond uploading photos, you can generate brand-owned identities from a brief or a reference image. The flow runs in two stages:
- Creation job:
POST /identity/createaccepts a list of structured instructions (or a free-form prompt) and dispatches an async job that produces N draft images. Drafts are not identities yet: they live asImageResultrows on aBatchJobof typeidentity_creation. They consume credits but no identity slot. - Promotion: pick the draft you want and call
POST /identity/promote-generatedon itsimage_result_id. The API copies the draft image into the canonical identity path, creates theIdentityrecord, and dispatches the standard preprocessing pipeline (POV/augmentation). This step charges 50 credits and counts toward your identity slot cap.
Once preprocessing completes, the new identity behaves exactly like an uploaded one: usable in Model Swap, Flat-to-Model, and any other job that takes an identity_code.
See Create an identity for the end-to-end walkthrough with Python examples.
API endpoints
Upload an identity POST
/identity/uploadGenerate identity drafts POST
/identity/createPromote a generated draft to a full identity POST
/identity/promote-generatedList identities GET
/identityGet preprocessing status GET
/identity/{identity_code}/statusGet the preprocessed images GET
/identity/{identity_code}/resultsShare an identity with a group POST
/identity/{identity_code}/share/{group_name}Unshare an identity from a group DELETE
/identity/{identity_code}/share/{group_name}