> ## Documentation Index
> Fetch the complete documentation index at: https://mixroute.ai/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Seedance

> Seedance video generation parameters, supported values, input constraints, and request examples.

<link rel="alternate" hrefLang="en" href="https://mixroute.ai/docs/api-reference/endpoint/seedance" />

<link rel="alternate" hrefLang="zh-Hans" href="https://mixroute.ai/docs/zh-hans/api-reference/endpoint/seedance" />

<link rel="alternate" hrefLang="zh-Hant" href="https://mixroute.ai/docs/zh-hant/api-reference/endpoint/seedance" />

<link rel="alternate" hrefLang="ja" href="https://mixroute.ai/docs/ja/api-reference/endpoint/seedance" />

<link rel="alternate" hrefLang="x-default" href="https://mixroute.ai/docs/api-reference/endpoint/seedance" />

Seedance generates video from text and supported media inputs. Doubao and Dreamina route prefixes use the same parameter names, while capabilities and limits depend on the selected model version.

`POST https://api.mixroute.ai/v1/video/generations`

<Info>
  Keep `model`, `prompt`, and `asset` at the root. Put every provider field inside the single `metadata` object, including `content`, `duration`, `ratio`, `resolution`, and `generate_audio`.
</Info>

Route-specific guides: [Doubao](/docs/api-reference/endpoint/doubao) | [Dreamina](/docs/api-reference/endpoint/dreamina)

## Model IDs

| Series | MixRoute IDs |
| - | - |
| Seedance 2.5 | `dreamina-seedance-2-5-260628` / `doubao-seedance-2-5-260628` |
| Seedance 2.0 | `dreamina-seedance-2-0-260128` / `doubao-seedance-2-0-260128` |
| Seedance 2.0 Fast | `dreamina-seedance-2-0-fast-260128` / `doubao-seedance-2-0-fast-260128` |
| Seedance 2.0 Mini | `dreamina-seedance-2-0-mini-260615` / `doubao-seedance-2-0-mini-260615` |

Model availability is account-specific. Use the complete ID shown in the [Model Marketplace](https://console.mixroute.ai/models).

## Top-Level Fields

| Field | Type | Required | Description |
| - | - | - | - |
| `model` | string | Yes | Complete MixRoute model ID from the model table. |
| `prompt` | string | Yes | MixRoute video prompt. If `metadata.content` includes a text item, keep both texts consistent. |
| `asset` | boolean | Conditional | MixRoute media-processing switch, not a provider field. Keep it at the root; the text-only examples use `false`. |
| `metadata` | object | Yes | Container for the provider fields described below. |

## Generation Parameters

| Field | Type | Required | Description |
| - | - | - | - |
| `metadata.content` | object\[] | Yes | Inputs used to generate the video: text, images, video, audio, or a supported draft task. Text is required for text-only generation; in media-input combinations the provider permits the text item to be omitted. |
| `metadata.omni_reference_task_type` | string | No | Seedance 2.5 only. Default `auto`; values: `auto`, `reference`, `edit`, `extend`. Explicit modes enable early task-type validation. A mismatch between the declared mode and the inferred intent can still fail asynchronously. |
| `metadata.resolution` | string | No | Output resolution tier. Supported values and defaults depend on the model version; see the version table. Values are case-sensitive. |
| `metadata.ratio` | string | No | Values: `16:9`, `4:3`, `1:1`, `3:4`, `9:16`, `21:9`, `adaptive`. Default `adaptive` for 2.5, 2.0, and 1.5 Pro. For 1.0, text-to-video defaults to `16:9` and must use a concrete ratio; image-to-video defaults to `adaptive`. |
| `metadata.duration` | integer | No | Requested duration in seconds; see the version table. `-1` selects the duration automatically on supported versions. Seedance 2.5 defaults to `-1`, and video editing requires `-1`. |
| `metadata.frames` | integer | No | Seedance 1.0 Pro/Pro Fast only. Values from 29 through 289 satisfying `25 + 4n`, with positive integer n. Takes precedence over `duration`; output frame rate is 24 fps. |
| `metadata.generate_audio` | boolean | No | Supported by 2.5, 2.0, and 1.5 Pro. Default `true`: generate synchronized mono audio, including speech, sound effects, or music. `false` produces a silent video. |
| `metadata.watermark` | boolean | No | Default `false`. `true` adds an AI-generated watermark in the lower-right corner; `false` omits it. |
| `metadata.output_format` | string | No | Seedance 2.5 only. Default `mp4`; values: `mp4`, `mov`. MP4 is intended for general playback; MOV preserves higher color precision for post-production and requires compatible playback software. |
| `metadata.seed` | integer | No | 1.5 Pro and 1.0 only. Range -1 to 2147483647; default -1 means a random seed. Reusing a seed can produce similar results but does not guarantee identical output. |
| `metadata.camera_fixed` | boolean | No | 1.5 Pro and 1.0 only; not available in reference-image mode. Default `false`. `true` adds a fixed-camera instruction but does not guarantee a completely stationary camera. |
| `metadata.return_last_frame` | boolean | No | Default `false`. `true` returns a watermark-free PNG of the final frame, with the same pixel dimensions as the generated video, in the task result. |
| `metadata.draft` | boolean | No | Default `false`. Draft mode is supported by Dreamina Seedance 2.5 and 1.5 Pro, using `480p`. Dreamina 2.5 finalization uses `1080p`; parameter reuse differs by version. Do not apply these rules to 2.0. For 1.5 Pro, Draft cannot be combined with return\_last\_frame=true or offline inference. |
| `metadata.service_tier` | string | No | 1.5 Pro and 1.0 only. Default `default` for online inference; `flex` selects offline inference. The tier cannot be changed after submission. The 2.5 and 2.0 families do not support `flex`. |
| `metadata.callback_url` | string | No | Task-status callback URL. The provider sends POST notifications with its task-query response structure. Statuses include `queued`, `running`, `succeeded`, `failed`, and `expired`. |
| `metadata.execution_expires_after` | integer | No | Range 3600-259200 seconds; default 172800 (48 hours), measured from task creation. A task that exceeds this threshold is terminated with status `expired`. |
| `metadata.priority` | integer | No | 2.5 and 2.0 only. Range 0-9; default 0. Higher values move ahead of lower-priority queued tasks on the same endpoint. Equal priorities remain FIFO; running tasks are not interrupted. Not supported with `flex`. |
| `metadata.safety_identifier` | string | No | Stable, unique identifier for the end user, limited to 64 English characters. Use a hashed identifier instead of raw personal information. |
| `metadata.tools` | object\[] | No | 2.5 and 2.0 only. Each tool requires `type`; the supported value is `web_search`. The model decides whether to search. The query result exposes the search count in `usage.tool_usage.web_search`. |

## Version Limits

| Version | Resolution | Default Resolution | Duration | Reference Limits (Images / Videos / Audio) |
| - | - | - | - | - |
| Seedance 2.5 | `480p` / `720p` / `1080p` | `720p` | 4-30 s / -1 | 30 / 10 / 10 |
| Seedance 2.0 | `480p` / `720p` / `1080p` / `4k` | `720p` | 4-15 s / -1 | 9 / 3 / 3 |
| Seedance 2.0 Fast / Mini | `480p` / `720p` | `720p` | 4-15 s / -1 | 9 / 3 / 3 |
| Seedance 1.5 Pro | `480p` / `720p` / `1080p` | `720p` | 4-12 s / -1 | - |
| Seedance 1.0 Pro / Pro Fast | `480p` / `720p` / `1080p` | `1080p` | 2-12 s | - |

## Content Items

| Field | Type | Required | Description |
| - | - | - | - |
| `metadata.content[].type` | string | Yes | `text`, `image_url`, `video_url`, `audio_url`, or `draft_task`, depending on model support. |
| `metadata.content[].text` | string | Conditional | Required when `type=text`. Describes the desired video. The recommended prompt length is at most 500 Chinese characters or 1000 English words; this is guidance, not a hard input limit. |
| `metadata.content[].image_url.url` | string | Conditional | Required for image items. Public URL, Base64 data URL `data:image/<format>;base64,...`, or an accessible `asset://` ID. |
| `metadata.content[].video_url.url` | string | Conditional | Required for video items. Public URL or accessible `asset://` ID; video Base64 data URLs are not supported by this input format. |
| `metadata.content[].audio_url.url` | string | Conditional | Required for audio items. Public URL, `data:audio/<format>;base64,...`, or an accessible `asset://` ID. |
| `metadata.content[].draft_task.id` | string | Conditional | Successful provider Draft task ID for Dreamina Seedance 2.5 or 1.5 Pro. This is not the MixRoute polling task ID. Dreamina 2.5 Draft IDs expire after seven days. |
| `metadata.content[].role` | string | Conditional | A single first-frame image may omit the role or use `first_frame`. First/last-frame interpolation requires two image items with explicit `first_frame` and `last_frame`. Reference items use `reference_image`, `reference_video`, or `reference_audio`. |

## Media Limits

| Media | Constraints |
| - | - |
| Image | JPEG/PNG/WebP/BMP/TIFF/GIF; 1.5 Pro and later also support HEIC/HEIF. Under 30 MB per image; each dimension 300-6000 px; aspect ratio 0.4-2.5. First-frame input uses one image; first/last-frame input uses two. |
| Video | MP4/MOV; at most 200 MB each, 24-60 fps, aspect ratio 0.4-2.5, dimensions 300-6000 px, and 407696-8295044 total pixels. 2.0: each clip 2-15 s and total at most 15 s. 2.5: each clip 2-30 s and total at most 30 s; editing input must be 4-30 s. |
| Audio | WAV/MP3; at most 15 MB each. 2.0: each clip 2-15 s and total at most 15 s. 2.5: each clip 2-30 s and total at most 30 s. |
| Request | Total JSON request size at most 64 MB, including Base64 overhead. Inputs must meet the model's media-authorization requirements. |

## Scenario Constraints

* First-frame, first/last-frame, and multimodal reference workflows are mutually exclusive. Do not mix frame roles with `reference_*` roles.
* Seedance 2.5 requires `ratio="adaptive"` for first/last-frame input, editing, and extension. Editing requires at least one reference video lasting 4-30 seconds and `duration=-1`; extension requires a reference video. The optional `omni_reference_task_type` can explicitly select `edit` or `extend` instead of automatic classification.
* Seedance 2.0 audio references require at least one image or video reference. Seedance 2.5 also supports audio-only reference input.
* Legacy versions do not support the full multimodal reference workflow. Seedance 1.0 Pro Fast supports first-frame input, not first/last-frame interpolation.

## Examples

Set `MIXROUTE_API_KEY` before calling the API. Replace media placeholders with accessible inputs. Accepted requests create billable generation tasks; do not automatically resubmit after a submission timeout.

<Tabs>
  <Tab title="Text to video">
    ```bash theme={null}
    curl --location "https://api.mixroute.ai/v1/video/generations" \
      --header "Authorization: Bearer $MIXROUTE_API_KEY" \
      --header "Content-Type: application/json" \
      --data '{
      "model": "dreamina-seedance-2-0-260128",
      "prompt": "A professor is teaching a class in a classroom.",
      "asset": false,
      "metadata": {
        "content": [
          {
            "type": "text",
            "text": "A professor is teaching a class in a classroom."
          }
        ],
        "duration": 10,
        "ratio": "16:9",
        "resolution": "720p",
        "generate_audio": false
      }
    }'
    ```
  </Tab>

  <Tab title="First and last frames (2.0)">
    ```bash theme={null}
    curl --location "https://api.mixroute.ai/v1/video/generations" \
      --header "Authorization: Bearer $MIXROUTE_API_KEY" \
      --header "Content-Type: application/json" \
      --data '{
      "model": "dreamina-seedance-2-0-260128",
      "prompt": "A professor is teaching a class in a classroom.",
      "asset": true,
      "metadata": {
        "content": [
          {
            "type": "image_url",
            "image_url": {
              "url": "https://static.freebeatfit.com/aiImageEdit/result/L001510027166320955392/1780060289776-1.png"
            },
            "role": "first_frame"
          },
          {
            "type": "image_url",
            "image_url": {
              "url": "https://static.freebeatfit.com/aiImageEdit/result/M1509975287180300288_0004_1780047826.png"
            },
            "role": "last_frame"
          },
          {
            "type": "text",
            "text": "A professor is teaching a class in a classroom."
          }
        ],
        "generate_audio": false,
        "duration": 10,
        "ratio": "16:9"
      }
    }'
    ```
  </Tab>

  <Tab title="First frame (2.5)">
    ```bash theme={null}
    curl --location "https://api.mixroute.ai/v1/video/generations" \
      --header "Authorization: Bearer $MIXROUTE_API_KEY" \
      --header "Content-Type: application/json" \
      --data '{
      "model": "doubao-seedance-2-5-260628",
      "prompt": "A professor is teaching a class in a classroom.",
      "asset": true,
      "metadata": {
        "content": [
          {
            "type": "text",
            "text": "A professor is teaching a class in a classroom."
          },
          {
            "type": "image_url",
            "image_url": {
              "url": "https://static.freebeatfit.com/aiImageEdit/result/L001510027166320955392/1780060289776-1.png"
            },
            "role": "first_frame"
          }
        ],
        "ratio": "adaptive",
        "duration": 5,
        "resolution": "720p",
        "generate_audio": false
      }
    }'
    ```
  </Tab>

  <Tab title="Reference image and audio">
    ```bash theme={null}
    curl --location "https://api.mixroute.ai/v1/video/generations" \
      --header "Authorization: Bearer $MIXROUTE_API_KEY" \
      --header "Content-Type: application/json" \
      --data '{
      "model": "dreamina-seedance-2-0-fast-260128",
      "prompt": "A professor is teaching a class in a classroom.",
      "asset": true,
      "metadata": {
        "content": [
          {
            "type": "text",
            "text": "A professor is teaching a class in a classroom."
          },
          {
            "type": "image_url",
            "image_url": {
              "url": "https://static.freebeatfit.com/aiImageEdit/result/L001510027166320955392/1780060289776-1.png"
            },
            "role": "reference_image"
          },
          {
            "type": "audio_url",
            "audio_url": {
              "url": "https://example.com/reference.mp3"
            },
            "role": "reference_audio"
          }
        ],
        "duration": 10,
        "ratio": "16:9",
        "generate_audio": true
      }
    }'
    ```
  </Tab>

  <Tab title="Edit video (2.5)">
    ```bash theme={null}
    curl --location "https://api.mixroute.ai/v1/video/generations" \
      --header "Authorization: Bearer $MIXROUTE_API_KEY" \
      --header "Content-Type: application/json" \
      --data '{
      "model": "doubao-seedance-2-5-260628",
      "prompt": "Change the lighting in Video 1 to sunset and preserve its camera motion.",
      "asset": true,
      "metadata": {
        "content": [
          {
            "type": "text",
            "text": "Change the lighting in Video 1 to sunset and preserve its camera motion."
          },
          {
            "type": "video_url",
            "video_url": {
              "url": "https://example.com/source.mov"
            },
            "role": "reference_video"
          }
        ],
        "omni_reference_task_type": "edit",
        "duration": -1,
        "ratio": "adaptive",
        "output_format": "mov"
      }
    }'
    ```
  </Tab>
</Tabs>

### Python

```python theme={null}
import json
import os
import requests

payload = json.loads(r'''
{
  "model": "dreamina-seedance-2-0-260128",
  "prompt": "A professor is teaching a class in a classroom.",
  "asset": false,
  "metadata": {
    "content": [
      {
        "type": "text",
        "text": "A professor is teaching a class in a classroom."
      }
    ],
    "duration": 10,
    "ratio": "16:9",
    "resolution": "720p",
    "generate_audio": false
  }
}
''')
response = requests.post(
    "https://api.mixroute.ai/v1/video/generations",
    headers={"Authorization": "Bearer " + os.environ["MIXROUTE_API_KEY"]},
    json=payload,
    timeout=60,
)
response.raise_for_status()
print(response.json())
```

## Task Results

Save the MixRoute task ID returned by submission and poll [Query Video Task](/docs/api-reference/endpoint/query-video-task). A successful submission creates a task; read the result only after the task reaches a successful terminal state. Response envelopes and result locations vary by route.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.