Probably
Docs

Prepare a new video

prepare_video, in Changes: A connection or key that may make changes. None spends credits; prepare_* and stage tools (research, brainstorm, write_script, review, generate_clip, voice, storyboard) prepare paid work for confirm_spend.

POST
/api/v1/tools/prepare_video

Create a video from a brief, with its attachments and settings, as a draft, and prepare its first run. Nothing is spent: the preview says its price (quote, when work is charged at fixed prices) and whether the organization's credits cover it, and confirming starts it. Show the person the preview. If the connection may spend, call confirm_spend with the confirmationId once they agree; otherwise send them the confirmUrl to confirm it in the studio. It expires in 15 minutes. Pass a new requestKey; repeating one returns the same draft and confirmation.

Authorization

apiKey
headerAuthorizationBearer <token>

An API key (prb_…) from Settings → Connections.

Request Body

application/json
  1. body
spaceId*string
Match^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$
Formatuuid
brief*string
Length10 <= length <= 20000
name?string
Length1 <= length <= 120
objective?string
Default"retention"
Value in"reach""retention""follows""clicks""conversions"
platform?string
Default"tiktok"
Value in"tiktok""instagram-reels""both"
aspect?string
Default"portrait"
Value in"portrait""square""landscape"
lengthSeconds*number

How long the video runs, in seconds, which its scenes divide and its price counts

Value in15304560
motion?string
Default"text-only"
Value in"text-only""reference"
format?string

The format to make it in, by its ID from list_formats; without one, UGC

Lengthlength <= 64
mode?string

autonomous decides for the person and goes on; interactive asks first: it waits at its storyboard and its listen before any clip (get_video's waitingOnYou, answered with approve_storyboard, approve_listen and the like), and may ask an essential question

Default"autonomous"
Value in"autonomous""interactive"
voice?string
Default"studio"
Value in"studio""seedance"
captions?
attachments?array<||>
Itemsitems <= 45
requestKey*string
Match^[\w.:-]+$
Length8 <= length <= 64

Response Body

The tool's answer.

application/json
  1. response
videoId*string
Match^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$
Formatuuid
confirmationId*string
Match^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$
Formatuuid
expiresAt*string
preview*||||||
confirmUrl*|null
curl -X POST 'https://studio.probably.co/api/v1/tools/prepare_video' \  -H "Authorization: Bearer $PROBABLY_API_KEY" \  -H 'Content-Type: application/json' \  -d '{  "spaceId": "a330a273-e64a-4183-aedb-f3152797a9a5",  "brief": "stringstri",  "lengthSeconds": 15,  "requestKey": "stringst"}'
{  "videoId": "3524e86f-1bba-489a-bf6b-386ea1abbac0",  "confirmationId": "40b00753-949e-4f8e-a4cc-6b64ed5887e1",  "expiresAt": "string",  "preview": {    "kind": "run",    "fits": true,    "availableCredits": 0,    "freeDraft": true,    "quote": null,    "estimatedCredits": 0,    "sandbox": false  },  "confirmUrl": "http://example.com"}