ModelSell Docs
VideosGeneric Video

Generic Video Format

Use /v1/video/generations with Seedance 2.0 / 2.5 and let ModelSell convert it to the official content format.

/v1/video/generations is ModelSell's generic async video task endpoint. When you call a Seedance 2.0 / 2.5 model, 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 normalized resultGET /v1/videos/{task_id}
Read legacy task recordGET /v1/video/generations/{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; availability depends on the upstream model
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, multiple text items, and {"type":"draft_task","draft_task":{"id":"upstream-draft-id"}}; draft reuse depends on upstream support.

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
  }
}

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

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