Edits the parts of the brief that still mean something once a video
exists: title, aspectRatio, showSubtitles, description,
descriptionPrompt, prompt, subType, targetDuration,
characterImageUrl and characterDescription.
Any other brief field is generation-time only and is refused with a
400 naming it, rather than silently dropped. Editing does not requeue
anything: run POST /videos/{id}/process or
POST /videos/{id}/render afterwards if the change should be applied.
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.
The brief fields that can still be changed once a video exists. Any
other brief field is refused with a 400 naming it, rather than
silently dropped. Fields may be sent flat or nested under brief.
Response Body
application/json
application/json
application/json
application/json
curl -X PATCH "https://example.com/videos/string" \ -H "Content-Type: application/json" \ -d '{ "title": "Why founders burn out (v2)", "showSubtitles": false }'{ "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" } ] }}List videos GET
Top-level videos in the workspace, newest activity first. Automation blueprints and clips are excluded: read blueprints on `/automations` and a video's clips on `/videos/{id}/clips`. `status` collapses the two job documents into the one value a client actually polls on, in this precedence: `failed` if either job failed, then `rendering`, then `processing`, then `ready` (a render exists), otherwise `draft`. The heavy content arrays never ride on a list. Ask for the video itself with `?include=` to get them; an `include` passed here is ignored.
Register a webhook endpoint POST
Registers a URL to receive the events you subscribe to. Duplicated event ids are collapsed; an unknown one is refused with `warning-invalid-events` listing the valid ids. **This is the only response that carries the signing secret.** Store it now: every later read omits it, and you need it to verify the `X-ShortFast-Signature` header. A workspace can hold at most 25 endpoints.