Creates a new video from this one, pointing back at it through
parentVideoId. regenerate: true rewrites the script and visuals
(charging credits) instead of reusing them; render: true queues the
render as soon as the clip is ready.
The editor's pipeline guards (nothing failed, nothing already waiting to publish) are deliberately off here: an integration builds its own flow and is not looking at the publishing pipeline view.
Authorization
bearerAuth An API key created under Settings > API & Webhooks. Keys start with sf_live_.
In: header
Path Parameters
Header Parameters
Unique key per action (a UUID works well). Reusing it replays the first response instead of running the action again, so a retry after a timeout can never generate, render, publish or charge twice.
length <= 255Request Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
Response Body
application/json
application/json
application/json
application/json
application/json
curl -X POST "https://example.com/videos/string/clips" \ -H "Content-Type: application/json" \ -d '{ "regenerate": true, "render": true }'{ "data": { "id": "string", "title": "string", "type": "faceless", "subType": "string", "isAutomation": true, "parentVideoId": "string", "isClip": true, "brief": { "prompt": "string", "text": "string", "scriptPrompt": "string", "description": "string", "descriptionPrompt": "string", "inputMode": "idea", "videoDuration": "short", "language": "string", "aspectRatio": "9:16", "imageStyle": "stock_footage", "customStyleText": "string", "voiceId": "string", "voiceProvider": "openai", "showSubtitles": true, "presentationTone": "string", "presentationAssets": [ { "type": "image", "url": "http://example.com", "description": "string" } ], "targetDuration": 0, "characterImageUrl": "http://example.com", "characterDescription": "string" }, "mood": "energetic", "presentationMood": "string", "durationSeconds": 0, "media": { "sourceUrl": "http://example.com", "audioUrl": "http://example.com", "captionsUrl": "http://example.com", "thumbnailUrl": "http://example.com", "renderUrl": "http://example.com", "bytes": 0 }, "process": { "status": "QUEUED", "progress": 0, "statusText": "string", "queuedAt": "2019-08-24T14:15:22Z", "startedAt": "2019-08-24T14:15:22Z", "error": { "code": "string", "message": "string", "blocked": true, "action": "upgrade" } }, "render": { "status": "QUEUED", "progress": 0, "queuedAt": "2019-08-24T14:15:22Z", "startedAt": "2019-08-24T14:15:22Z", "error": { "code": "string", "message": "string", "blocked": true, "action": "upgrade" } }, "publish": { "status": "SCHEDULED", "scheduledAt": "2019-08-24T14:15:22Z", "startedAt": "2019-08-24T14:15:22Z", "publishedAt": "2019-08-24T14:15:22Z", "failedAt": "2019-08-24T14:15:22Z", "platforms": [ "string" ], "missingPlatforms": [ "string" ], "caption": "string", "error": { "code": "string", "message": "string", "blocked": true, "action": "upgrade" } }, "createdAt": "2019-08-24T14:15:22Z", "updatedAt": "2019-08-24T14:15:22Z", "config": { "captionsFontFamily": "string", "captionsFontWeight": "string", "captionsAnimation": "fadeInSlideUp", "captionsWordEffects": "", "captionsTextTransform": "none", "layoutMode": "wrap", "captionsPrimaryColor": "string", "captionsSecondaryColor": "string", "captionsAccentColor": "string", "captionsStrokeColor": "string", "captionsSecondaryStrokeColor": "string", "captionsAccentStrokeColor": "string", "captionsShadowColor": "string", "captionsFirstWordColor": "string", "captionsHighlightBackground": "string", "captionsFontSize": 20, "captionsVerticalPosition": 0, "captionsTextStroke": 0, "captionsActiveWordStroke": 0, "captionsLetterSpacing": -5, "presentationAccentColor": "string", "presentationAccentColorB": "string", "presentationInkColor": "string", "presentationInkSoftColor": "string", "presentationBackgroundColor": "string", "presentationPillTextColor": "string", "presentationFontFamily": "string", "presentationBackground": "string", "presentationLogoUrl": "string", "presentationIconUrl": "string" }, "captions": [ { "id": "string", "startMs": 0, "endMs": 0, "text": "string", "punctuated_word": "string", "confidence": 0 } ], "captionsPages": [ { "id": "string", "startMs": 0, "endMs": 0, "hidden": true, "emoji": {}, "audioEffect": {} } ], "bRolls": [ { "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": {} } ], "presentationScenes": [ { "id": "string", "startMs": 0, "endMs": 0, "text": "string", "emphasis": "string", "template": "string", "tone": "light", "caption": "show", "hidden": true, "visual": { "type": "string", "items": 1, "anchors": [ "string" ] }, "content": {}, "params": {}, "direction": {}, "composed": {} } ], "scenes": [ { "imagePrompt": "string", "animationPrompt": "string", "narration": "string", "voiceDescription": "string", "duration": 3, "id": "string", "status": "string", "imageUrl": "http://example.com", "videoUrl": "http://example.com" } ] }}Create a video and queue its generation POST
Creates a video from a brief and immediately queues the generation pipeline, so this call is asynchronous: it returns as soon as the job is enqueued, with `process.status: QUEUED`. Poll `GET /videos/{id}` or subscribe to `video.generation_completed`. The brief may be sent flat or nested under `brief`; the nested form wins, so a serialized video can be posted straight back. Unknown keys are ignored, a known key with a malformed value is a `400`. Generation charges credits and counts against the monthly generation limit, so it can be refused with `warning-no-credits`, `warning-plan-generations`, `warning-plan-storage` or `warning-plan-duration`. Pass `process.render: true` to chain the render as soon as generation finishes. `isAutomation` is refused here: create a blueprint with `POST /automations` instead.
Delete a video DELETE
Deletes the video, every clip made from it, and the stored files they own, then credits the freed bytes back to the workspace storage quota. This cannot be undone.