Skip to main content
A generation is a job. You start it, it costs credits, and you poll it until media comes out. Nothing about it blocks: a photo takes around 30 seconds and a video several minutes.

Tools, not models

You address a tool (ugc-video, text-to-photo, lipsync), and the platform picks the right model and pipeline. Pass model only when you specifically want to override it.
Read the catalog, don’t hardcode it. GET /v1/models returns every tool, every model, and the exact inputs and parameters each accepts. When we add a model, your code can use it without a change on your side. Narrow with ?tool=ugc-video or ?model=<id>.

Video

ugc-video · short-clip · scene-video · motion-control · hook-captions

Photo

text-to-photo · photo-edit

Audio

text-to-speech · lipsync · change-voice · add-audio · dialogue

Generating as a creator

Pass account_id and the run inherits that creator’s look, voice and persona, and the output lands on their wall in the studio. Without it, the run is workspace-scoped and generic.

Inputs and parameters

object
Slot key → asset id(s) or public https URL(s). A URL is adopted as an asset automatically, so there is no upload step when your media is already on the internet. Which slots a model takes — and which are required — is in its catalog entry.
object
Model parameters like aspect_ratio, duration, resolution. Validated against the model’s schema.
An unknown parameter is a 400, never a silent drop. A typo’d parameter quietly ignored on a paid call is the worst possible outcome, so we refuse the call instead.

Uploading your own media

Bytes never pass through the API. Three steps, and the asset id is usable the moment the PUT succeeds:
1

Ask for a presigned upload

POST /v1/uploads with content_type and size_bytes. You get upload_url, headers and the asset_id it will become.
2

PUT the bytes

Straight to storage, with the headers you were given.
3

Complete it

POST /v1/uploads/{id}/complete. This starts thumbnailing and transcoding, and hands you the finished asset.
Limits: images 25 MB, video 100 MB, audio 50 MB. The CLI does all three for you — --image ./face.png just works.

Cost

Free to call, available to read keys, and priced by the same function that performs the debit — so an estimate cannot disagree with the charge. Credits are taken at kick-off; a run that terminally fails, including a moderation rejection, is refunded automatically.

Polling

Poll GET /v1/generations/{id} every few seconds. On succeeded, output[] holds the assets:
Media URLs are time-limited. Download the bytes; do not persist the link.
On failed, error carries the reason — a moderation rejection reads differently from a provider failure — and your credits are already back.

Next

Publish it

Turn finished media into a post on your creator’s social accounts.

Full reference

Every field, with a live playground.