Prepare recordings
voice, 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 recordings of your lines in a voice: up to 20 lines, one recording each, read in the Space's own voice by default, or one of its saved voices, a stock voice or a studio voice. Each recording is heard back: get_stage returns its asset with a link to download it (recordings, expiring in minutes), its length, the provider and model that read it, what was heard and how closely it matches the line. The audio critics judge the recordings from what was heard; if they send lines back, those lines are read again once. A line that fails is listed with why and charged nothing; the others are still read. 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 characters at the studio's speech rate (speech and transcription), at least 5 credits a call, held for the lines and one re-reading of the ones the critics send back plus up to 40 credits for the critics: the preview's voice shows the characters, the rate, one take's price and the cap, and the docs' pricing page lists the rate. 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. 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 <= 64raw?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
lines*array<>The lines to read, in order, one recording each: up to 20 lines of up to 1000 characters, 5000 in all
1 <= items <= 20voice?|||The voice to read them in: the Space's own (space, the default), one of its saved voices (saved, by recordId), a stock voice by name (stock), or a studio voice (donor, by its ID)
{ "kind": "space"}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/voice' \ -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": "voice-trailguard-1", "lines": [ "Mile six and still no sting.", "Sweat-proof, reef-safe, no white cast.", "TrailGuard. Run longer." ], "voice": { "kind": "space" }}'{ "videoId": "9c3d5e2f-8a14-4b67-b0d9-6e1f2a3c4d5e", "confirmationId": "e7a1b2c3-d4e5-4f60-8172-93a4b5c6d7e8", "expiresAt": "2026-10-25T09:15:00.000Z", "preview": { "kind": "stage", "stage": "voice", "capCredits": 50, "availableCredits": 1840, "fits": true, "clip": null, "voice": { "characters": 89, "creditsPerThousand": 13.05, "takeCredits": 5, "takes": 2, "reviewCapCredits": 40, "withoutRemakeCredits": 45 }, "raw": false, "storyboard": null, "sandbox": false }, "confirmUrl": null}