ModelSell Docs
VideosGeneric Video

Generic Video Format for All Seedance Series

All Seedance series use /v1/video/generations; change the model ID and ModelSell converts the request for the selected channel.

/v1/video/generations is ModelSell's generic async video task endpoint. When you call any Seedance series, you can express the official content[] inputs with prompt, image, images, metadata.video_url, and metadata.audio_url; ModelSell builds the selected channel's native body: Ark uses /api/v3/contents/generations/tasks, while Service Inference / Max uses /v2/video/generate.

Assets are uploaded automatically. Use publicly accessible https:// URLs for assets in image, images, metadata.video_url, metadata.audio_url, or metadata.content. ModelSell automatically detects and uploads these assets, so you do not need to call /api/assets/upload beforehand.

Endpoints

OperationEndpoint
Create taskPOST /v1/video/generations
Poll task recordGET /v1/video/generations/{task_id}
Poll normalized result (optional)GET /v1/videos/{task_id}
Upload assetPOST /api/assets/upload

Field Mapping

Generic fieldOfficial Seedance 2.0 / 2.5 field
promptcontent[] item with type: "text"
image or images[]content[] item with type: "image_url" and role: "reference_image"
metadata.video_urlcontent[] item with type: "video_url" and role: "reference_video"
metadata.audio_urlcontent[] item with type: "audio_url" and role: "reference_audio"
sizeresolution; falls back to metadata.resolution when absent
duration or secondsduration; 2.5: -1 or 4–30 seconds; 2.0: -1 or 4–15 seconds; 2.5 editing requires -1
metadata.ratioratio, default adaptive; 2.5 editing/extension require explicit adaptive
metadata.generate_audiogenerate_audio
metadata.watermarkwatermark; explicit true and false are preserved
metadata.return_last_framereturn_last_frame; availability depends on the upstream model
metadata.seedseed; availability depends on the upstream model
metadata.camera_fixedcamera_fixed; availability depends on the upstream model
metadata.draftdraft; use true with size: "480p" for a Seedance 2.5 draft
metadata.service_tierservice_tier; availability depends on the upstream model
metadata.execution_expires_afterexecution_expires_after; availability depends on the upstream model
metadata.prioritypriority; availability depends on the upstream model
metadata.safety_identifiersafety_identifier; availability depends on the upstream model
metadata.callback_urlcallback_url; availability depends on the upstream model
metadata.output_formatoutput_format; availability depends on the upstream model
metadata.toolstools; availability depends on the upstream model
metadata.framesframes; availability depends on the upstream model
omni_reference_task_typeTop-level field, 2.5 only: auto / reference / edit / extend
metadata.omni_reference_task_typeCompatibility fallback when the top-level task type is absent
metadata.contentWhen non-empty, replaces shortcut-generated content[], preserving order and roles; include text in this array too

Option forwarding and last frames

These mappings cover the built-in Volcengine video channel and all six Seedance profiles, including Ark, Modelsell, Service Inference / Max, and their asset variants. They apply to Seedance 1.x, 2.0 / Fast / Mini, 2.5, and channel aliases. Forwarding does not make an unsupported model feature available: use frames, camera_fixed, draft, and service_tier only when supported by the selected upstream.

Absent or null options are omitted; explicit boolean false and integer 0 are preserved. metadata.video_url and metadata.audio_url accept one URL or an array, preserving all items in order. Full metadata.content preserves frame roles and multiple text items. To create a final video from a draft, use {"type":"draft_task","draft_task":{"id":"task_your_draft_id"}} with your own successful draft's ModelSell public task ID. A gateway version supporting this feature resolves the upstream ID and reuses the draft's channel and account.

This request enables a watermark and requests the last frame. Set watermark to false to disable it:

{
  "model": "doubao-seedance-2-0-260128",
  "prompt": "Create an apple fruit tea commercial showing freshly cut apples, shaken tea, and a close-up of the finished drink.",
  "duration": 15,
  "size": "720p",
  "metadata": {
    "ratio": "16:9",
    "generate_audio": true,
    "watermark": true,
    "return_last_frame": true
  }
}

Draft Mode

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.

Seedance 2.5 can generate a 480p draft for review, then create a 1080p final video from it. Submit both requests below to POST /v1/video/generations or POST /v1/videos.

Create a draft first:

{
  "model": "doubao-seedance-2-5-260628",
  "prompt": "A golden Shiba Inu runs under cherry blossoms as the camera slowly rises",
  "duration": 5,
  "size": "480p",
  "metadata": {
    "draft": true,
    "ratio": "16:9",
    "generate_audio": true
  }
}

Save the public task id from the creation response and poll GET /v1/videos/{id}. Wait for status: "completed" and preview the result before creating the final video:

{
  "model": "doubao-seedance-2-5-260628",
  "size": "1080p",
  "metadata": {
    "content": [
      { "type": "draft_task", "draft_task": { "id": "task_your_draft_id" } }
    ]
  }
}

The final video receives a new public task ID; poll it through the same endpoint. Use the same model as the draft. metadata.content must contain only one draft_task; omit metadata.draft or set it to false. The final resolution defaults to 1080p when size is omitted, and an explicit value must also be 1080p.

The final video inherits the prompt, assets, duration, aspect ratio, audio generation, seed, and task type. Do not resend prompt, image, images, duration, seconds, omni_reference_task_type, or their inherited equivalents in metadata, even with identical values. Resettable options still belong in metadata, including return_last_frame, watermark, output_format, and callback_url; omitted options use model defaults.

Draft IDs expire 7 days after creation. Drafts and final videos are billed separately. See Seedance 2.5 Draft Mode for the full inheritance rules, resettable fields, native curl examples, and response examples.

Seedance 2.5 editing and extension

See Request and Response Parameters for full constraints. Put all text and media in metadata.content when using a complete array; top-level prompt is optional. A non-empty array replaces all shortcuts. Image, video, audio, and draft_task inputs do not require an empty placeholder prompt; the upstream validates supported input combinations. Choose either seconds or duration; values should match if both are supplied. metadata.aspect_ratio is a fallback for metadata.ratio. For editing and extension, explicitly set metadata.ratio to adaptive.

{
  "model": "doubao-seedance-2-5-260628",
  "prompt": "Edit the reference video: replace the background with snowy mountains and preserve its motion.",
  "omni_reference_task_type": "edit",
  "duration": -1,
  "size": "720p",
  "metadata": {
    "ratio": "adaptive",
    "content": [
      {
        "type": "text",
        "text": "Edit the reference video: replace the background with snowy mountains and preserve its motion."
      },
      {
        "type": "video_url",
        "video_url": {
          "url": "https://example.com/reference-video.mp4"
        },
        "role": "reference_video"
      }
    ]
  }
}

For extension, use extend, describe the direction in the prompt, keep metadata.ratio: "adaptive", and optionally set duration: 10. A single reference video can also use the metadata.video_url shortcut. Put advanced native fields inside metadata, such as metadata.output_format; root-level fields with those names are not the forwarding location.

Common Request Patterns

Text to Video

curl -X POST "$MODELSELL_BASE_URL/v1/video/generations" \
  -H "Authorization: Bearer $MODELSELL_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "doubao-seedance-2-0-260128",
    "prompt": "A golden Shiba Inu runs under cherry blossoms as the camera slowly rises",
    "duration": 5,
    "size": "480p",
    "metadata": {
      "ratio": "16:9",
      "generate_audio": true,
      "watermark": false
    }
  }'

Image to Video

{
  "model": "doubao-seedance-2-0-fast-260128",
  "prompt": "Make the person in the image slowly turn around and smile",
  "image": "https://example.com/photo.jpg",
  "duration": 5,
  "size": "720p",
  "metadata": {
    "ratio": "16:9",
    "generate_audio": true,
    "watermark": false
  }
}

Video to Video

{
  "model": "doubao-seedance-2-0-260128",
  "prompt": "Turn the person in the video into a cartoon style",
  "duration": 5,
  "size": "480p",
  "metadata": {
    "ratio": "16:9",
    "video_url": "https://example.com/reference-video.mp4",
    "generate_audio": true,
    "watermark": false
  }
}

Image and Audio

{
  "model": "doubao-seedance-2-0-260128",
  "prompt": "Make the character speak according to the audio",
  "image": "https://example.com/reference-image.jpg",
  "duration": 5,
  "size": "480p",
  "metadata": {
    "ratio": "16:9",
    "audio_url": "https://example.com/reference-audio.mp3",
    "watermark": false
  }
}

Image and Video References

{
  "model": "doubao-seedance-2-0-260128",
  "prompt": "Modify this video using the style of the reference image",
  "image": "https://example.com/reference-image.jpg",
  "duration": 5,
  "size": "480p",
  "metadata": {
    "ratio": "16:9",
    "video_url": "https://example.com/reference-video.mp4",
    "watermark": false
  }
}

Video and Audio References

{
  "model": "doubao-seedance-2-0-260128",
  "prompt": "Add matching sound effects to the video based on the audio",
  "duration": 5,
  "size": "480p",
  "metadata": {
    "ratio": "16:9",
    "video_url": "https://example.com/reference-video.mp4",
    "audio_url": "https://example.com/reference-audio.mp3",
    "watermark": false
  }
}

Full Multimodal Reference

{
  "model": "doubao-seedance-2-0-fast-260128",
  "prompt": "Use the image style, apply the voice to the speaker, and modify the video",
  "image": "https://example.com/reference-image.jpg",
  "duration": 5,
  "size": "720p",
  "metadata": {
    "ratio": "16:9",
    "video_url": "https://example.com/reference-video.mp4",
    "audio_url": "https://example.com/reference-audio.mp3",
    "generate_audio": true,
    "watermark": false
  }
}

Polling

All series use GET /v1/video/generations/{task_id}, matching doubao-seedance-2-0-260128. The response is a {code, data} task record: success is data.status: "SUCCESS", and the video URL is data.result_url.

curl "$MODELSELL_BASE_URL/v1/video/generations/task_UPUfjg0S3UXekH2OgTZBXyqgGhsxgkp6" \
  -H "Authorization: Bearer $MODELSELL_API_KEY"

Optional normalized result

Save the returned id or task_id, then poll the task endpoint:

Persist id; the legacy task_id may be absent. Poll /v1/videos/{task_id} for the normalized object: "video" response with success status completed. When returned upstream, read metadata.last_frame_url, metadata.usage (including tool_usage), metadata.output_format, metadata.duration / metadata.duration_seconds, and actual resolution, seed, and other options. The gateway does not fabricate missing last frames.

curl "$MODELSELL_BASE_URL/v1/videos/task_UPUfjg0S3UXekH2OgTZBXyqgGhsxgkp6" \
  -H "Authorization: Bearer $MODELSELL_API_KEY"

When the task succeeds, the generic response includes the final video URL:

{
  "id": "task_UPUfjg0S3UXekH2OgTZBXyqgGhsxgkp6",
  "object": "video",
  "status": "completed",
  "model": "doubao-seedance-2-0-260128",
  "progress": 100,
  "created_at": 1788753600,
  "completed_at": 1788753660,
  "video_url": "https://example.com/doubao-seedance-2-0/result.mp4",
  "metadata": {
    "url": "https://example.com/doubao-seedance-2-0/result.mp4",
    "last_frame_url": "https://example.com/doubao-seedance-2-0/last-frame.png",
    "usage": {"completion_tokens": 100000, "total_tokens": 100000}
  }
}

The legacy /v1/video/generations/{task_id} query returns a {code, data} task record: read data.status (SUCCESS on completion), data.result_url, and the upstream snapshot in data.data. Ark stores the last frame at the snapshot's content.last_frame_url; Service Inference / Max may use task.last_frame_url or task.metadata.content.last_frame_url. This envelope differs from the normalized object above.

Video generation is asynchronous. Poll every 10 seconds in typical integrations. Reference videos must be publicly reachable URLs and cannot be Base64; images can be public URLs, and small images can also use Base64 Data URLs.

To reuse image, video, or audio references by asset ID, you can also upload them manually with /api/assets/upload. Once the asset becomes Active, pass asset://<asset_id> in image, metadata.video_url, or metadata.audio_url.

On this page