Availability follows your connected server’s tool list. You need
generate_video.draft, render_video_draft, and a model with capabilities.draft.enabled. Refresh or reconnect after the server update. Local npm requires meigen@3.2.0 or later; update an existing package pin and restart the host. Remote OAuth and the official ChatGPT plugin use the deployed backend; refresh cached tool discovery.Preview, then decide
- Ask for the current Seedance 2.5 capabilities and 480p draft price, including any reference-video billing. Authorize that cost before generating.
- Call
generate_videowithmodelId: "seedance-2-5",draft: true, and a persistentrequestId. A draft is always 480p. Omitdraftfor ordinary generation; draft mode is never enabled automatically. - Query
check_generationusing the same request ID. Show the completed video and itsseedanceDraftdetails:expiresAt,finalCredits, and any existingfinalGenerationId. - If the user likes it, show the current additional 1080p final cost and obtain authorization. Call
render_video_draftwith a separate request ID, the draft’sgenerationIdassourceDraftGenerationId, and that quote asconfirmedCredits. - Check the final with its own request ID. It reuses the original draft, duration and references; this step does not accept a new prompt or replacement references.
expiresAt, not the time you downloaded it. If no quote is returned, do not guess a price or start a final. A price change requires a new confirmation.
Tool inputs
For the official ChatGPT plugin, pass
responseVersion: 3 on these calls. It preserves draft details while old callers keep their prior response format. The result card’s Review final render action asks for confirmation in the conversation; clicking it alone does not submit a paid job. Standard remote and npm MCP do not use responseVersion.
Recover safely
- A timeout or disconnection does not prove failure. Check the original request ID; never start a replacement merely to recover a lost response.
- Keep the same ID and exact inputs for an unchanged retry. Changed confirmed pricing needs a new ID after authorization.
- On failure, report the reason and
creditsStatus; say credits were refunded only when the backend confirms it. - To deliberately retry a failed final, first obtain approval for the current price, then pass its generation ID as
retryFailedGenerationIdand use a new request ID. Do not retry automatically. - Expired drafts cannot create a new final. Existing final tasks remain recoverable. A new draft is a new paid operation.