Building blocks
First-frame images
Generate a 9:16 still of your character — the exact shot a talking-head video opens on, or the realistic photo a scene video is built from. Cheap to iterate on before you spend video credits.
Generate a still
Instant. Costs 4 credits, charged immediately (refunded if it fails). The output is always 9:16.
| Field | Type | Description |
|---|---|---|
| character_id | uuid required | From POST /characters. |
| kind | "talking_head" | "moving_scene" | talking_head (default): the opening frame of a talking-head video. moving_scene: the realistic photo for a scene video. |
| scene_description | string ≤2000 | The brief — where the character is and what the shot shows. One of scene_description / scene_prompt / script is required. |
| scene_prompt | string ≤400 | Short visual direction for the shot. |
| scene_photos | array ≤3 | Photos of your real place, product or prop: { url, role?, caption? }. |
| script | string ≤4000 | What the video will say — context only. |
| language | string | Spoken language, for context. |
curl -X POST https://platform.promoat.ai/api/partner/v1/images/first-frame \
-H "Authorization: Bearer $PROMOAT_KEY" \
-H "Content-Type: application/json" \
-d '{
"character_id": "CHARACTER_ID",
"kind": "talking_head",
"scene_description": "standing at the counter of a sunlit bakery, smiling at the camera"
}'{
"image_url": "https://…/first-frame.png",
"asset_id": "4c1e…",
"frame_id": "4c1e…",
"kind": "talking_head",
"credits_charged": 4
}frame_id equals asset_id. On failure the body is { "error": "First-frame generation failed", "error_code", "message" } with error_code such as FIRST_FRAME_NOT_VERTICAL or CHARACTER_IMAGE_UNAVAILABLE.
The cheap-iteration workflow
- Generate frames until the scene, outfit and framing look right (4 credits per try).
- Queue the video with
first_frame_asset_idset to the winner'sframe_id(orfirst_frame_urlto its URL). The job animates exactly that still.
A talking_head frame works only on a talking-head video, and a moving_scene frame only on a scenes video. A mismatch → 400 FIRST_FRAME_KIND_MISMATCH (field first_frame_asset_id). Frames made before 1.1.0 count as talking-head frames.
A video that gets your frame drops its first_frame line — a 15 s talking head at 768P goes from 125 to 121 credits.