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

# Seedance 2.5 Video Generation

> Generate videos with the Seedance 2.5 model

> [!NOTE]
>
> **Note for users in mainland China:** Please use `https://toapis.cn` as the API endpoint (Base URL). Replace `https://toapis.com` with `https://toapis.cn` in the examples in this document.

Seedance 2.5 uses the public model name `seedance-2-5` and the upstream model ID `doubao-seedance-2-5-260628`.

* Supports text-to-video, first-frame / first-last-frame image-to-video, editing, video extension, and multimodal reference workflows.
* Supports image, video, and audio references, including audio-only references.
* The task is asynchronous. The submit API returns a `generation.task`; fetch the finished video from the task status API.

Draft mode renders a low-cost 480p preview first and then the 1080p final video from that preview. See [Draft Mode](https://docs.toapis.com/docs/en/api-reference/videos/seedance-2-5/draft.md).

## Authorizations

**Authorization** `string` *required*

Use Bearer Token authentication for every request.

Get an API key from the [API Key Management Page](https://toapis.com/console/token).

```
Authorization: Bearer YOUR_API_KEY
```

## Body

**model** `string` *required* (default: seedance-2-5)

Public ToAPIs model name. Use `seedance-2-5`.

**prompt** `string`

Describe the scene, camera movement, subject action, style, and audio mood. When referring to media, use labels such as “image 1”, “video 1”, or “audio 1”.

**video\_operation** `string` (default: generate)

Video operation: `generate`, `edit`, or `extend`. Editing and extension require at least one `video_with_roles`; editing uses `duration=-1`, while extension accepts `4`–`30` or `-1`. All three operations use this endpoint.

**client\_business\_id** `string`

Your order number or internal job ID. It is stored with the task and can be used for later lookup with `GET /v1/videos/generations/{client_business_id}`.

**duration** `integer`

Output duration in seconds. The official range is `4`–`30`; use `-1` to let the model choose the duration. Editing accepts only `-1`, and the output length matches the input video. Extension accepts `4`–`30` or `-1`, measured as the total output duration after extension.

**aspect\_ratio** `string`

Output aspect ratio. Allowed values: `21:9`, `16:9`, `4:3`, `1:1`, `3:4`, `9:16`, and `adaptive`.

Use `adaptive` for editing, video extension, and first/last-frame tasks, or when the input media should determine the ratio.

**image\_urls** `string[]`

Compatibility image URL array. For new integrations, prefer `image_with_roles` so each image has an explicit role. Do not send both fields in one request.

**image\_with\_roles** `array`

Images with explicit roles. Each item contains a required `url` and `role`.

Roles: `first_frame`, `last_frame`, or `reference_image`.

Up to 30 images may be supplied. First/last-frame mode and reference-image mode are mutually exclusive.

**video\_with\_roles** `array`

Reference videos. Each item contains a required `url` and the role `reference_video`. Up to 10 videos may be supplied.

**audio\_with\_roles** `array`

Reference audio. Each item contains a required `url` and the role `reference_audio`. Up to 10 audio clips may be supplied. Audio-only reference input is supported.

**resolution** `string`

Output resolution: `480p`, `720p`, or `1080p`.

**output\_format** `string` (default: mp4)

Supported formats are `mp4` and `mov`.

**generate\_audio** `boolean` (default: true)

Whether to generate synchronized audio.

**return\_last\_frame** `boolean` (default: false)

Whether to return the generated video's last-frame image in the completed task result.

**tools** `array`

Optional tools. The supported value is `[{ "type": "web_search" }]`.

Web search is for text-to-video requests and cannot be combined with image, video, or audio inputs.

**callback\_url** `string`

ToAPIs task-completion callback URL. See [Task Webhooks](https://docs.toapis.com/docs/en/api-reference/webhooks/task-webhooks.md).

**trace\_id** `string`

A caller-supplied tracing ID.

**disable\_nsfw** `boolean` (default: false)

Set to `true` to disallow NSFW content generation.

## Reference input limits

The combined limit is 50 reference items: up to 30 images, 10 videos, and 10 audio clips. Use explicit roles to avoid ambiguous frame/reference interpretation.

> [!WARNING]
>
> Invalid task-type combinations can fail. Editing and extension tasks set the upstream task type explicitly, so a constraint mismatch returns an error immediately at submit time. For other task types the model infers the type from the media and the prompt, and a mismatch fails asynchronously with `InvalidParameter.TaskTypeConstraint`. For editing, extension, and first/last-frame tasks, set `aspect_ratio` to `adaptive` as required by the upstream API.

## Asset review

When a request includes image, video, or audio inputs, some channels review the media automatically before submitting generation. No extra parameter is needed; pass media URLs in the existing media fields.

* An accepted request returns a video task immediately. When review is required, the task stays `queued` and generation is submitted only after all media in the request pass. First-time review can take several minutes; reusing the same URL for the same user and channel reuses the review result.
* Each media preparation round lasts up to 20 minutes by default. Rejection or preparation timeout ends the task as `failed`; see `error.message` for the reason. Failed review incurs no video generation fee.
* Media must be public HTTP(S) URLs; Base64 and local paths are not accepted. Keep images within 20 MB (some channels allow up to 30 MB) and video or audio within 100 MiB. Each model's existing format limits still apply.
* Channels that review media validate it at submission: a URL with embedded credentials or longer than 2048 bytes, the same URL used as different media types, or more than 64 media references in one request returns HTTP 400 with `error.code` `invalid_private_assets`.
* Media is identified by URL. Use a new URL after the file content changes.
* Final renders from a draft (`draft_task_id`) are not reviewed.
* Legacy `asset://` references are retired and return HTTP 400.

> [!NOTE]
>
> Fetch completed results from [Video task status](https://docs.toapis.com/docs/en/api-reference/tasks/video-status.md#seedance-original-and-fallback-urls). When original URL delivery is enabled, prefer `result.data[].url` and use the optional `fallback_url` only if the primary URL cannot be accessed. Last frames use `last_frame_url` and `fallback_last_frame_url`. Fallback fields are returned only when copies are available.

## Response

**id** `string`

Task ID used to query status.

**client\_business\_id** `string`

Returned when `client_business_id` was supplied.

**object** `string`

Fixed to `generation.task`.

**model** `string`

The requested model name.

**status** `string`

`queued`, `in_progress`, `completed`, or `failed`.

**progress** `integer`

Progress percentage from `0` to `100`.

**created\_at** `integer`

Creation timestamp.

```bash cURL theme={null}
curl --request POST \
  --url https://toapis.com/v1/videos/generations \
  --header 'Authorization: Bearer <token>' \
  --header 'Content-Type: application/json' \
  --data '{
    "model": "seedance-2-5",
    "prompt": "A cinematic product shot, slow camera push-in, natural room tone.",
    "duration": 10,
    "aspect_ratio": "16:9",
    "resolution": "720p",
    "generate_audio": true
  }'
```

```json Multimodal reference request theme={null}
{
  "model": "seedance-2-5",
  "prompt": "Use image 1 for the character, video 1 for motion, and audio 1 for rhythm.",
  "duration": 12,
  "aspect_ratio": "16:9",
  "image_with_roles": [{"url": "https://example.com/ref.png", "role": "reference_image"}],
  "video_with_roles": [{"url": "https://example.com/motion.mp4", "role": "reference_video"}],
  "audio_with_roles": [{"url": "https://example.com/rhythm.mp3", "role": "reference_audio"}]
}
```

```json Video extension request theme={null}
{
  "model": "seedance-2-5",
  "prompt": "Extend video 1 forward, keep the camera pushing in and reveal the city outside the window.",
  "video_operation": "extend",
  "duration": 11,
  "aspect_ratio": "adaptive",
  "output_format": "mov",
  "video_with_roles": [{"url": "https://example.com/source.mov", "role": "reference_video"}]
}
```

```json 200 theme={null}
{
  "id": "tsk_vid_xxx",
  "object": "generation.task",
  "model": "seedance-2-5",
  "status": "in_progress",
  "progress": 10,
  "created_at": 1781577600
}
```


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