Prepare a clip
generate_clip, 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.
Prepare one clip of your scene on the studio's video routes: your prompt as written, optionally starting from a still or made from up to 9 reference images of the library, and saying a line on camera. The clip critics judge it against the brief, the scene and the line; if they ask for changes it is remade once with their requests. The line is voiced by the video model and isn't checked against what's heard. A clip with references that a route refuses on safety grounds goes to the next route that can make it, at the same price. route: test runs on a cheaper, lower-quality model for testing an integration. It runs on a video of the Space (videoId, using that video's brief) or on a new draft made from brief, never both. Charged by its seconds at its route's rate, held for the clip and one remake, plus up to 55 credits for the critics: the preview's clip shows the take's price, what it usually comes to without a remake, and the cap, and the docs' pricing page lists the rates. A refused or failed take is charged nothing. On a connection made with raw generation it is made raw: no critics and no remake, held and charged for its units alone (the preview says raw); pass raw: false for the reviewed path. Read it with get_stage, which links to the clip. 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 confirmation.
apiKeyAuthorizationBearer <token>An API key (prb_…) from Settings → Connections.
application/json- body
spaceId*string^([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)$uuidvideoId?stringA video of the Space to run on, with its current brief. Don't pass brief, name or attachments with it
^([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)$uuidbrief?stringThe brief for a new draft video, when no videoId is given
10 <= length <= 20000name?string1 <= length <= 120attachments?array<||>items <= 45requestKey*string^[\w.:-]+$8 <= length <= 64prompt*stringThe scene as the clip should show it, sent as written: who, where, what happens, and the camera
1 <= length <= 4000still?A ready image version of the library (list_assets) the clip starts from, as its first frame
references?array<>Up to 9 ready image versions of the library the clip is made from (people, products, places); with a still, the still is the first of them
items <= 9[]line?stringWhat the person says on camera, in the clip's own voice
1 <= length <= 300format?string"portrait""portrait""square""landscape"resolution?string"480p""480p""720p""1080p"durationSeconds?integerHow long the clip runs, 4 to 15 whole seconds
4 <= value <= 155route?stringstandard (Seedance 2.5), or test: Seedance 2.0 Mini, a cheaper, lower-quality model for testing an integration, 480p and 720p only
"standard""standard""test"raw?booleanWhether it is made raw (no critics, no remake, charged for its units alone). Defaults to how the connection was made; false asks a raw connection for the reviewed path. Only a connection made with raw generation may pass true
The tool's answer.
application/json- response
videoId*string^([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)$uuidconfirmationId*string^([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)$uuidexpiresAt*stringpreview*||||||confirmUrl*|nullcurl -X POST 'https://studio.probably.co/api/v1/tools/generate_clip' \ -H "Authorization: Bearer $PROBABLY_API_KEY" \ -H 'Content-Type: application/json' \ -d '{ "spaceId": "5b0e7c1a-3f52-4d8e-9a61-2c4f8e9d7b30", "videoId": "9c3d5e2f-8a14-4b67-b0d9-6e1f2a3c4d5e", "attachments": [], "requestKey": "clip-trailguard-1", "prompt": "A trail runner at a trailhead at sunrise rubs sunscreen on her cheek and grins at the camera, handheld selfie, natural light", "still": { "assetId": "8e9f0a1b-2c3d-4e5f-8a6b-7c8d9e0f1a2b", "versionId": "9f0a1b2c-3d4e-4f5a-9b7c-8d9e0f1a2b3c" }, "references": [], "line": "Mile six and still no sting.", "format": "portrait", "resolution": "480p", "durationSeconds": 5, "route": "standard"}'{ "videoId": "9c3d5e2f-8a14-4b67-b0d9-6e1f2a3c4d5e", "confirmationId": "e7a1b2c3-d4e5-4f60-8172-93a4b5c6d7e8", "expiresAt": "2026-10-25T09:15:00.000Z", "preview": { "kind": "stage", "stage": "generate_clip", "capCredits": 280, "availableCredits": 1840, "fits": true, "clip": { "seconds": 5, "takeCredits": 112.5, "takes": 2, "reviewCapCredits": 55, "withoutRemakeCredits": 167.5 }, "voice": null, "raw": false, "storyboard": null, "sandbox": false }, "confirmUrl": null}