curl --request POST \
--url https://toapis.com/v1/videos/generations \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{
"model": "seedance-2-5",
"draft": true,
"prompt": "A cinematic product shot, slow camera push-in, natural room tone.",
"duration": 4,
"resolution": "480p",
"return_last_frame": true
}'
curl --request POST \
--url https://toapis.com/v1/videos/generations \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{
"model": "seedance-2-5",
"draft_task_id": "tsk_vid_xxx",
"resolution": "1080p",
"output_format": "mp4",
"return_last_frame": true
}'
{
"id": "tsk_vid_xxx",
"object": "generation.task",
"model": "seedance-2-5",
"status": "in_progress",
"progress": 10,
"created_at": 1781577600
}
seedance-2-5
Seedance 2.5 Draft Mode
Preview a low-cost 480p draft first, then render the 1080p final video from that draft
POST
/
v1
/
videos
/
generations
curl --request POST \
--url https://toapis.com/v1/videos/generations \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{
"model": "seedance-2-5",
"draft": true,
"prompt": "A cinematic product shot, slow camera push-in, natural room tone.",
"duration": 4,
"resolution": "480p",
"return_last_frame": true
}'
curl --request POST \
--url https://toapis.com/v1/videos/generations \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{
"model": "seedance-2-5",
"draft_task_id": "tsk_vid_xxx",
"resolution": "1080p",
"output_format": "mp4",
"return_last_frame": true
}'
{
"id": "tsk_vid_xxx",
"object": "generation.task",
"model": "seedance-2-5",
"status": "in_progress",
"progress": 10,
"created_at": 1781577600
}
Note for users in mainland China: Please use
https://toapis.cn as the API endpoint (Base URL). Replace https://toapis.com with https://toapis.cn in the examples in this document.POST /v1/videos/generations with the same seedance-2-5 model.
Two-stage workflow
- Submit a draft request with
draft: trueand read the draft task ID from the response. - Wait for the draft to finish and confirm
statusiscompletedthrough Get video task status. - Submit the final request with
draft_task_idset to the draft task ID from step 1. Do not repeat the prompt or media.
Stage comparison
| Item | Draft (draft: true) | Final (draft_task_id) |
|---|---|---|
| Supported model | seedance-2-5 only | seedance-2-5 only |
resolution | Always 480p | Always 1080p |
output_format | mp4 | mp4 or mov |
| Prompt and media | Same as standard generation | Rejected, must be omitted |
| Draft task status | - | Must have completed successfully |
| Draft task lifetime | - | Within 7 days of draft creation |
| Billing | Draft rate | Draft is treated as a video input, so video-input rates apply |
The final request must use the same
model as the draft, and draft support must still be enabled on the draft’s channel. If the draft task did not complete successfully, was created more than 7 days ago, used a different model, or the channel capability was turned off, the final request fails with invalid_draft_task and you must render a new draft.Body
boolean
default:false
Set to
true to submit a draft request. The draft renders at 480p; every other parameter behaves exactly as in standard generation.Supported for seedance-2-5 only. Other models return draft mode is only supported for Seedance 2.5.string
Required for the final request. Pass the task ID returned by the draft request (
tsk_vid_...).Cannot be combined with draft: true. Once draft_task_id is set, do not send prompt, image_urls, image_with_roles, video_with_roles, or audio_with_roles, or the request returns draft requests cannot include prompt or media.string
Drafts are fixed to
480p and final renders to 1080p. The field is optional: when omitted, the stage’s fixed value is used instead. Any other explicit value is rejected.string
default:"mp4"
Only the final request may set this. Supported values are
mp4 and mov.boolean
default:false
The final request does not inherit the draft’s last-frame setting. Send
true again on the final request if you also need the last frame there.prompt, duration, aspect_ratio, generate_audio, reference media, and so on) work the same way during the draft stage as in Seedance 2.5 video generation.
Request examples
The two examples below are the complete requests for submitting a draft and for rendering the final video from it. Run them in order.curl --request POST \
--url https://toapis.com/v1/videos/generations \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{
"model": "seedance-2-5",
"draft": true,
"prompt": "A cinematic product shot, slow camera push-in, natural room tone.",
"duration": 4,
"resolution": "480p",
"return_last_frame": true
}'
curl --request POST \
--url https://toapis.com/v1/videos/generations \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{
"model": "seedance-2-5",
"draft_task_id": "tsk_vid_xxx",
"resolution": "1080p",
"output_format": "mp4",
"return_last_frame": true
}'
{
"id": "tsk_vid_xxx",
"object": "generation.task",
"model": "seedance-2-5",
"status": "in_progress",
"progress": 10,
"created_at": 1781577600
}