Replaces the whole b-roll timeline. Send a bare JSON array or wrap it
as { "bRolls": [ ... ] }.
Only the brief fields travel on the wire: id, startMs, endMs,
text, prompt, keywords and mediaType. The resolved media (the
chosen file, its quality variants) and the editor styling (animation,
transition, layout, scale, sound effect) are read-only, and are carried
over from the stored segment with the same id. A segment whose id is
unknown is new and starts with no media. Cap: 500 segments per request.
Changing what a segment should show does not re-fetch its media on its
own: requeue generation with addBRolls: true for that.
Authorization
bearerAuth An API key created under Settings > API & Webhooks. Keys start with sf_live_.
In: header
Path Parameters
Request Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
items <= 500The writable half of a b-roll segment. Everything else on a segment is resolved by the pipeline and preserved by id.
Response Body
application/json
application/json
application/json
application/json
curl -X PUT "https://example.com/videos/string/brolls" \ -H "Content-Type: application/json" \ -d '{ "bRolls": [ { "id": "b1a2b3", "startMs": 0, "endMs": 2400, "prompt": "A tired founder at a desk late at night", "mediaType": "ai_image" }, { "startMs": 2400, "endMs": 5200, "keywords": "unfinished notebook", "mediaType": "stock_footage" } ] }'{ "data": [ { "id": "string", "startMs": 0, "endMs": 0, "text": "string", "prompt": "string", "keywords": "string", "mediaType": "ai_image", "url": "http://example.com", "type": "string", "qualityUrls": {}, "animation": "string", "transition": "string", "layout": "string", "scale": 0, "hidden": true, "audioEffect": {} } ]}Regenerate a scene's still POST
Generates a new still for this scene and attaches it. Charges one image generation. Pass `prompt` to use a different description for this run; it is saved as the scene's `imagePrompt`. Without it the scene's stored `imagePrompt` is used, and a scene with neither is a `400`. The scene's rendered clip and the stitched video are cleared, since both are now stale. UGC videos (`subType: ugc`) reuse one character image across every scene, so a per-scene regeneration does not apply and is refused with `409` `warning-invalid-input`.
Replace the transcript, the pages, or both PUT
Send `captions`, `captionsPages` or both. Whichever half you send is replaced wholesale; the other is left untouched. Caption pages carry editor decorations (an emoji, a sound effect) that this API does not accept, so an incoming page is layered over the stored page with the same `id`, keeping those decorations. A page whose id is unknown is treated as new. Ids are minted when absent. Caps per request: 6000 caption words, 2000 pages. `endMs` must be at or after `startMs` on every item.