Render a Studio project
studio_renderCosts the project's render price (quote.render_cents from studio_estimate_project): renders the saved project exactly as it is. confirm_cents is the most you agree to pay: the step charges what it costs, never more, and refuses with price_changed (charging nothing) when it costs more. Call it with confirm_cents: 0 to learn the price of a paid step (the answer is price_changed with price_cents; nothing is charged). A free step (a standard voice, a visual already bought) just runs. Idempotency is keyed on (this token, this tool, idempotency_key), not on the arguments.
Args: project_id: from studio_list_projects (or ai_short_create when it asks you to finish). confirm_cents: the most the user agreed to pay, in cents. idempotency_key: unique per purchase (recommended).
Returns: {ok, job_id, kind:'render', poll_after_s, cents}: poll with wait_for_job (r_). Cancel with cancel_job (refunds). Errors: price_changed {price_cents}, blocked {blockers}, already_rendering, outcome_unknown (check studio_get_project before retrying).
Tool call template
Replace each placeholder with a value matching the input schema. Only required parameters are included; add optional parameters as needed.
{
"id": 1,
"jsonrpc": "2.0",
"method": "tools/call",
"params": {
"arguments": {
"project_id": "<project_id>",
"confirm_cents": "<confirm_cents>"
},
"name": "studio_render"
}
}Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | Yes | A project id from studio_list_projects. | |
| confirm_cents | Yes | The most the user agreed to pay, in whole cents (0 learns the price). | |
| idempotency_key | No | Any unique string (1-200 printable chars) so a retry never buys twice. |