Prepare a script
write_script, 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 a reviewed script for a brief: hook, script by beat, caption and call to action, checked against what the Space already made and judged by the critics. Optionally grounded in a research revision of the same video and opening with hooks you chose: your own lines, or hooks from a brainstorm of the same video by their indexes (a chosen hook is never refused as repeating the brainstorm). Pass lengthSeconds for the length it's paced to and judged against. It runs on a video of the Space (videoId, using that video's brief) or on a new draft made from brief, never both. Metered at cost, at most 90 credits (the preview's capCredits); nothing is spent until it is confirmed. Read the result with get_stage. 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 <= 64researchRevisionId?stringA research revision of the same video (get_stage's result) to ground it in
^([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)$uuidhooks?array<>Up to three hook lines of your own to open with; the writer uses one, as written or tightened
items <= 3[]chosen?Hooks chosen from a brainstorm of the same video: its hooks revisionId (get_stage's result) and the hooks' indexes from 0. With hooks, at most three in all
lengthSeconds?numberHow long the video runs, which the writer paces the script to and the critics judge it against; without it, the brief's length
15304560The 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/write_script' \ -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": "script-trailguard-1", "researchRevisionId": "1a2b3c4d-5e6f-4a7b-8c9d-0e1f2a3b4c5d", "hooks": [], "chosen": { "revisionId": "2b3c4d5e-6f7a-4b8c-9d0e-1f2a3b4c5d6e", "indexes": [ 0 ] }, "lengthSeconds": 30}'{ "videoId": "9c3d5e2f-8a14-4b67-b0d9-6e1f2a3c4d5e", "confirmationId": "e7a1b2c3-d4e5-4f60-8172-93a4b5c6d7e8", "expiresAt": "2026-10-25T09:15:00.000Z", "preview": { "kind": "stage", "stage": "write_script", "capCredits": 90, "availableCredits": 1840, "fits": true, "clip": null, "voice": null, "raw": false, "storyboard": null, "sandbox": false }, "confirmUrl": null}