Turns an already generated video into an automation blueprint
(enabled: true), or turns it back into a plain video
(enabled: false). Demoting pauses the automation first, which
unschedules the clips it had already armed.
Promoting requires a video whose generation finished
(warning-source-not-ready otherwise) and room under the plan's
automation limit (warning-plan-automations). A clip cannot be
promoted: promote the video it was made from.
The response is always the automation shape, so source.isAutomation
states the outcome either way.
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.
Response Body
application/json
application/json
application/json
application/json
application/json
curl -X POST "https://example.com/videos/string/automation" \ -H "Content-Type: application/json" \ -d '{ "enabled": true }'{ "data": { "id": "string", "title": "string", "status": "active", "statusUpdatedAt": "2019-08-24T14:15:22Z", "schedule": { "frequency": "daily", "timezone": "string", "times": [ { "time": "string", "mode": "fixed" } ], "days": [ { "day": "monday", "time": "string", "mode": "fixed" } ] }, "publishing": { "profileId": "string", "platforms": [ "string" ] }, "autoRefill": true, "lastRunAt": "2019-08-24T14:15:22Z", "stopped": { "reason": "publish_not_configured", "kind": "config", "label": "string", "detail": "string", "stoppedAt": "2019-08-24T14:15:22Z" }, "health": { "ready": true, "blockers": [ { "id": "no-schedule", "label": "string" } ], "nextScheduledAt": "2019-08-24T14:15:22Z" }, "source": { "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" }, "createdAt": "2019-08-24T14:15:22Z", "updatedAt": "2019-08-24T14:15:22Z" }}Generate one clip now POST
Produces one clip immediately, outside the schedule, and queues its generation. Asynchronous: the response is the new clip with `process.status: QUEUED`. The blueprint must be fully set up, or the call is refused with `warning-publish-not-configured` naming the blockers. Generating a clip charges credits like any other generation.
Update schedule, destination or status PATCH
Updates any of `schedule`, `profileId`, `platforms`, `autoRefill` and `status`. Provide at least one. `schedule` carries the whole timing block. A daily frequency (`daily`, `twice-daily`, `thrice-daily`) needs exactly as many entries in `times` as it has slots; a weekly frequency (`weekly`, `twice-weekly`, `thrice-weekly`) needs the same count of day and time pairs in `schedule`. Setting one clears the other. Activating (`status: active`) is refused while anything is still missing, with `warning-publish-not-configured` naming the blockers.