> ## Documentation Index
> Fetch the complete documentation index at: https://docs.mixroute.ai/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.

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](/en/api-reference/endpoint/doubao) | [Dreamina](/en/api-reference/endpoint/dreamina)

## Model IDs

| Series            | MixRoute IDs                                                            |
| ----------------- | ----------------------------------------------------------------------- |
| Seedance 2.5      | `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 image-to-video 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       | 1.5 Pro only; default `false`. Draft mode requires 480p and 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 | 1.5 Pro only. A successful draft task ID, used to reuse its original model, inputs, audio setting, seed, ratio, duration, and camera setting.                                                                                                            |
| `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](/en/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.
