Seedance 2.5 Draft Mode
Generate a 480p draft, then reference its public gateway task ID to create a separate 1080p final task, with parameter, expiry and billing rules.
Availability: The gateway has deployed draft-mode support. Actual availability depends on the selected channel, upstream account, and model. Paid generation of a draft and its final video has not yet been verified.
Draft mode creates two separate tasks: generate a 480p preview with draft: true, check the composition and motion, then reference the draft's public gateway task ID to create a 1080p final video with a new task ID. The final task reuses the draft's creative inputs, so the prompt and reference assets cannot be changed in step two. See the official Seedance 2.5 tutorial.
This page uses the native request format. For the unified video protocol, see draft mode in Generic Video Format. Other task types are covered in Request and Response Parameters.
Before you start
- The example model is
doubao-seedance-2-5-260628. Aliases and Max models work only when the selected upstream supports draft mode. Use exactly the samemodelin both steps. - Wait for the draft to complete successfully before reusing it. The seven-day reuse period starts at the draft's
created_at, including time spent queued or running. - The draft must have been created by the current user on the same gateway. The gateway checks ownership and uses the original channel and account. An unavailable channel or account cannot be replaced with another upstream account for the final task.
- Send both creation requests as
Content-Type: application/json.
Step 1: Create a 480p draft
Set the gateway URL and API key. Do not include /v1 or a trailing / in MODELSELL_BASE_URL.
export MODELSELL_BASE_URL="https://api.modelsell.com"
export MODELSELL_API_KEY="your_gateway_api_key"
curl -X POST "$MODELSELL_BASE_URL/api/v3/contents/generations/tasks" \
-H "Authorization: Bearer $MODELSELL_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "doubao-seedance-2-5-260628",
"content": [
{"type": "text", "text": "An orange cat chases butterflies in a sunny garden, with a steady tracking shot"}
],
"draft": true,
"resolution": "480p",
"duration": 5,
"ratio": "16:9",
"generate_audio": true
}'draft: true requires resolution: "480p"; 720p and 1080p are invalid for a draft. Other task constraints still apply. For example, first-frame generation requires ratio: "adaptive". See the create-task API for field limits.
Save the public gateway ID from the creation response, such as task_…, as $DRAFT_TASK_ID:
export DRAFT_TASK_ID="task_replace_with_the_public_draft_task_id"
curl "$MODELSELL_BASE_URL/api/v3/contents/generations/tasks/$DRAFT_TASK_ID" \
-H "Authorization: Bearer $MODELSELL_API_KEY"Poll at roughly 10-second intervals, then review the successful draft. Gateway versions that support this workflow normalize native Seedance queries to the Ark format: status: "succeeded" and content.video_url. Stop polling on failure or expiry and inspect the error. Older gateways or direct third-party calls may use task.status: "completed" and task.outputs[]; these envelopes are compatibility references only. If you instead use the normalized gateway endpoint GET /v1/videos/{task_id}, read status: "completed" and video_url.
Step 2: Create the 1080p final video
Once the draft succeeds and is still valid, submit the following request. content must contain exactly one draft_task object:
curl -X POST "$MODELSELL_BASE_URL/api/v3/contents/generations/tasks" \
-H "Authorization: Bearer $MODELSELL_API_KEY" \
-H "Content-Type: application/json" \
-d "{
\"model\": \"doubao-seedance-2-5-260628\",
\"content\": [
{\"type\": \"draft_task\", \"draft_task\": {\"id\": \"$DRAFT_TASK_ID\"}}
],
\"resolution\": \"1080p\",
\"draft\": false,
\"return_last_frame\": true
}"The final task returns a new public task ID. Save it as $FINAL_TASK_ID and poll the same endpoint:
export FINAL_TASK_ID="task_replace_with_the_public_final_task_id"
curl "$MODELSELL_BASE_URL/api/v3/contents/generations/tasks/$FINAL_TASK_ID" \
-H "Authorization: Bearer $MODELSELL_API_KEY"For a successful official-format response, read content.video_url. Read content.last_frame_url if you requested a final frame and the upstream returned one. Each task has its own status, output URL and usage. See Request and Response Parameters for response fields.
Parameters for the final task
| Category | Fields and rules |
|---|---|
| Must match | model must be identical to the draft's model. |
| Fixed values | resolution defaults to, and only supports, 1080p; omit draft or set it to false. |
| Only input | content contains only {"type":"draft_task","draft_task":{"id":"task_…"}}. Do not add text, images, video or audio. |
| Inherited; do not resend | Prompt, reference images/video/audio, duration, ratio, seed, generate_audio and omni_reference_task_type. Resending even the same value is invalid. |
| May be set again | return_last_frame, output_format, watermark, service_tier, execution_expires_after, priority, callback_url and safety_identifier. Omitted fields use model defaults, rather than the draft's actual values. |
Model limits still apply to fields you may set again. For example, Seedance 2.5 does not support service_tier: "flex". Unified-protocol shortcuts such as seconds, prompt, image and images must also be omitted in step two. Put advanced unified-protocol fields in metadata; see Generic Video Format.
Task IDs, expiry and billing
Always use the task_… ID returned by ModelSell. Direct official calls return cgt-…; some third-party creation APIs return mvt-… and include a separate cgt-… in the query result. These are upstream protocol details. You do not need to extract an upstream ID: the gateway resolves it from the saved task. Raw cgt-… or mvt-… IDs that were not created through this gateway cannot be used in this workflow.
A draft can be reused for seven days from created_at, after successful completion. Video download links typically last 24 hours; download or store the video promptly. Link lifetime and draft reuse lifetime are separate.
Both tasks are billed separately: the draft at 480p and the final at 1080p. The final's input-video pricing category and input-video duration come from the original inputs in step one. The draft output itself does not add input-video duration. Usage and applicable pricing rules determine each task's charge; there is no fixed combined price. See official model pricing. ModelSell charges depend on the selected model, group and channel prices.