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.
Authorization
bearerAuth An API key created under Settings > API & Webhooks. Keys start with sf_live_.
In: header
Query Parameters
Page size, 1 to 100.
1 <= value <= 10050Number of records to skip.
0 <= value0Filter by pipeline. faceless and ai are the two a brief can create; video is an uploaded source file.
Value in
- "video"
- "faceless"
- "ai"
Filter by variant, for example presentation, ugc or generic.
length <= 40Filter by lifecycle status.
Value in
- "draft"
- "processing"
- "rendering"
- "ready"
- "failed"
Case-insensitive search on the title.
length <= 100Response Body
application/json
application/json
application/json
curl -X GET "https://example.com/videos"{ "data": [ { "id": "7bQxL2mF9dR4tK1sv", "title": "Why founders burn out", "type": "faceless", "subType": "generic", "isAutomation": false, "parentVideoId": null, "isClip": false, "brief": { "prompt": "Why founders burn out and what to do about it", "scriptPrompt": null, "description": "The three habits that quietly wreck a founder's week.", "descriptionPrompt": null, "inputMode": "idea", "videoDuration": "short", "language": "en", "aspectRatio": "9:16", "imageStyle": "mixed", "customStyleText": null, "voiceId": "Enceladus", "voiceProvider": "gemini", "showSubtitles": true, "presentationTone": null, "targetDuration": null, "characterImageUrl": null, "characterDescription": null }, "mood": "inspiring", "presentationMood": null, "durationSeconds": 41.6, "media": { "sourceUrl": null, "audioUrl": "https://cdn.shortfast.com/uploads/audio/7bQxL2mF9dR4tK1sv.mp3", "captionsUrl": null, "thumbnailUrl": "https://cdn.shortfast.com/uploads/thumbs/7bQxL2mF9dR4tK1sv.jpg", "renderUrl": "https://cdn.shortfast.com/uploads/renders/7bQxL2mF9dR4tK1sv.mp4", "bytes": 18446231 }, "process": { "status": "COMPLETED", "progress": 100, "statusText": "Finishing up", "queuedAt": "2026-08-06T09:12:44.000Z", "startedAt": "2026-08-06T09:12:47.000Z", "error": null }, "render": { "status": "COMPLETED", "progress": 100, "queuedAt": "2026-08-06T09:18:02.000Z", "startedAt": "2026-08-06T09:18:05.000Z", "error": null }, "publish": null, "createdAt": "2026-08-06T09:12:44.000Z", "updatedAt": "2026-08-06T09:21:10.000Z" } ], "paging": { "limit": 50, "offset": 0, "total": 37 }}List a video's clips GET
The clips and variations made from this video, newest first. Sorted on creation time rather than activity, so a running job cannot shuffle rows between two pages of the same walk.
Edit a video's brief PATCH
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.