# Seedance 2.0 Fast (https://wanapi.app/docs/seedance-2-0-fast)





Seedance 2.0 Fast supports text, first and last frames, and image, video and audio references, with output at 480p, 720p. Generate up to 15 seconds per request. [Model details and Playground](/models/seedance-2-0-fast).

## Connect to Wan API [#connect-to-wan-api]

Use `https://api.wanapi.app` as the API base URL. Create a key with the **Seedance** model family in [API key settings](/settings/apikeys) and send it as `Authorization: Bearer YOUR_API_KEY`. Keep keys on your server. Playground uses your website session and charges the same account balance; it does not require pasting a key into the browser.

Access requires an enabled account with sufficient balance. `GET /v1/models` lists the models available to your key. Seedance models use `POST /v1/videos`; select the model in the JSON body.

| Setting         | Seedance 2.0 Fast                                                             |
| --------------- | ----------------------------------------------------------------------------- |
| Model ID        | `bytedance/seedance-2.0-fast`                                                 |
| `resolution`    | `480p`, `720p`; default: `720p`.                                              |
| `duration`      | 4–15 output seconds, or `-1` for automatic; default: `5`.                     |
| `aspectRatio`   | `adaptive`, `16:9`, `4:3`, `1:1`, `3:4`, `9:16`, `21:9`; default: `adaptive`. |
| `generateAudio` | `true` by default. `false` does not reduce the token rate.                    |
| Output          | One video per request, at 24 fps.                                             |

The [request fields](#request-fields) describe all 13 top-level fields. Use the field names shown here, including `aspectRatio` and `generateAudio`.

## Submit a Seedance 2.0 Fast task [#submit-a-seedance-20-fast-task]

This is a four-second text-to-video request at 720p. Set `WAN_API_KEY` to your Seedance key on the server. Submit once and save the returned `id`.

```bash
curl https://api.wanapi.app/v1/videos \
  -H "Authorization: Bearer $WAN_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "model": "bytedance/seedance-2.0-fast",
  "prompt": "A paper boat floats through a sunlit stream. Slow tracking shot.",
  "resolution": "720p",
  "aspectRatio": "16:9",
  "duration": 4,
  "generateAudio": true
}'
```

## Query a Seedance 2.0 Fast task [#query-a-seedance-20-fast-task]

Save the returned `id` as `TASK_ID`, then query with the same key. Submission returns a task receipt; the video is available after completion. Begin polling every five seconds; see [task statuses and downloads](#poll-and-download-the-video).

```bash
curl "https://api.wanapi.app/v1/videos/$TASK_ID" \
  -H "Authorization: Bearer $WAN_API_KEY"
```

## Seedance 2.0 Fast pricing [#seedance-20-fast-pricing]

Rates are in USD per one million video tokens. Input and output video tokens determine the final cost. Resolution, duration and reference video inputs affect usage; use the matching rate for requests with or without reference video. Audio has no separate price tier.

<SeedanceModelPricing model="findSeedanceModel('seedance-2-0-fast')" />

[View Seedance 2.0 Fast pricing and estimates](/models/seedance-2-0-fast#pricing). Review the estimate in the [Playground](/models/seedance-2-0-fast#playground) before submitting.

## Request fields [#request-fields]

Send a JSON object. `model` is required, together with a non-empty prompt or at least one media input. Other fields are optional. Unknown fields are rejected.

| Field             | Type              | Contract                                                                                                                                                                      |
| ----------------- | ----------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `model`           | string            | Required: `bytedance/seedance-2.0-fast`.                                                                                                                                      |
| `prompt`          | string            | Text instructions; up to 20,000 characters on this service. A prompt or media input is required.                                                                              |
| `image`           | URL or URL object | First-frame image URL, or an object with `type: "url"`, `url` and optional `mediaType`. Use `image` or `frameImages`, not both.                                               |
| `frameImages`     | array             | One `first_frame` and an optional `last_frame`. Each entry has `frameType` and `image`; see the frame example below.                                                          |
| `inputReferences` | array             | Up to 9 images and 3 videos. Each entry has `type: "url"`, `url` and `mediaType`. The `data`/`mediaType` URL form is also accepted.                                           |
| `aspectRatio`     | string            | `adaptive` (default), `16:9`, `4:3`, `1:1`, `3:4`, `9:16`, `21:9`.                                                                                                            |
| `resolution`      | string            | `480p`, `720p`. Default: `720p`. Also accepts `854x480`, `1280x720` as resolution tiers; use `aspectRatio` to select the shape.                                               |
| `duration`        | integer           | 4–15 output seconds, or `-1` for automatic. Default: `5`.                                                                                                                     |
| `fps`             | integer           | Fixed at `24`; omit or send `24`.                                                                                                                                             |
| `seed`            | integer           | Optional; `-1` to `2147483647`. No repeatability guarantee. Do not also specify `providerOptions.bytedance.seed`.                                                             |
| `generateAudio`   | boolean           | Generate audio. Default: `true`; disabling it does not change the token rate.                                                                                                 |
| `n`               | integer           | Fixed at `1`; one video per request.                                                                                                                                          |
| `providerOptions` | object            | Optional `bytedance` object: `referenceAudio` (up to 3 HTTP(S) URLs), `seed` (same bounds as top-level `seed`). `draft: true` is not supported. Unknown options are rejected. |

### Input combinations and media limits [#input-combinations-and-media-limits]

* Use `image` for a first frame, or `frameImages` for a first frame and optional last frame. A last frame alone and duplicate frame types are rejected.

* Frames cannot be combined with `inputReferences` or `providerOptions.bytedance.referenceAudio`.

* Reference mode accepts up to 9 images, 3 videos and 3 audio clips, with at most 15 references in total.

* Media inputs must be public HTTP(S) URLs. Upload bytes and credential-bearing URLs are not accepted.

* Images: JPEG, PNG, WebP, BMP, TIFF or GIF; below 30 MB; each side 300–6000 pixels; aspect ratio 0.4–2.5.

* Videos: MP4 or MOV; at most 50 MB per file; each clip 2–15 seconds and at most 15 seconds combined; 300–6000 pixels per side, aspect ratio 0.4–2.5, 24–60 fps.

* Audio: MP3 or WAV; at most 15 MB per file; each clip 2–15 seconds and at most 15 seconds combined. At least one reference image or video is required.

* Remote media size, encoding and duration are checked during processing; URL validation alone cannot guarantee that a file is usable.

* Draft-to-final rendering from an earlier task and arbitrary native task options are not exposed by this endpoint.

## Frame and reference examples [#frame-and-reference-examples]

Send these bodies to the same `POST /v1/videos` endpoint. Replace every `example.com` URL with your own directly accessible media URL before submitting. Keep input URLs available until the task finishes.

### First and last frames [#first-and-last-frames]

For a single first frame, use `image: "https://example.com/first-frame.jpg"` and omit `frameImages`. To set both endpoints of the clip, use:

```json
{
  "model": "bytedance/seedance-2.0-fast",
  "prompt": "The camera slowly moves from the opening scene to the closing scene.",
  "frameImages": [
    {
      "frameType": "first_frame",
      "image": "https://example.com/first-frame.jpg"
    },
    {
      "frameType": "last_frame",
      "image": "https://example.com/last-frame.jpg"
    }
  ],
  "aspectRatio": "adaptive",
  "resolution": "720p",
  "duration": 4
}
```

### Image, video and audio references [#image-video-and-audio-references]

Put image and video inputs in `inputReferences`, with an explicit MIME type. Put audio URLs in `providerOptions.bytedance.referenceAudio`. Do not add frame inputs to this request.

```json
{
  "model": "bytedance/seedance-2.0-fast",
  "prompt": "Use the character from the image and the camera movement from the video.",
  "inputReferences": [
    {
      "type": "url",
      "url": "https://example.com/character.jpg",
      "mediaType": "image/jpeg"
    },
    {
      "type": "url",
      "url": "https://example.com/motion.mp4",
      "mediaType": "video/mp4"
    }
  ],
  "providerOptions": {
    "bytedance": {
      "referenceAudio": [
        "https://example.com/sound.wav"
      ]
    }
  },
  "resolution": "720p",
  "duration": 4
}
```

## Poll and download the video [#poll-and-download-the-video]

An accepted task returns an object like this. Example IDs and timestamps are illustrative:

```json
{
  "id": "task_EXAMPLE",
  "object": "video",
  "model": "bytedance/seedance-2.0-fast",
  "status": "queued",
  "progress": 0,
  "created_at": 1792022400
}
```

Poll `GET /v1/videos/{task_id}` with your API key. The query returns the same public task ID and model. Use `status` to decide when to stop polling; `progress` is not an estimate of remaining time.

| Status        | Meaning                     | Next step                          |
| ------------- | --------------------------- | ---------------------------------- |
| `queued`      | The task has been accepted. | Continue polling.                  |
| `in_progress` | Generation is running.      | Continue polling.                  |
| `completed`   | The video is ready.         | Read `videos[0].url` and download. |
| `failed`      | Generation failed.          | Stop polling and inspect `error`.  |

A completed query includes `videos`, an array of objects containing `url` and `mediaType`. Timestamps use Unix seconds; `completed_at` appears when completion is recorded.

```json
{
  "id": "task_EXAMPLE",
  "object": "video",
  "model": "bytedance/seedance-2.0-fast",
  "status": "completed",
  "progress": 100,
  "created_at": 1792022400,
  "completed_at": 1792022460,
  "videos": [
    {
      "url": "/v1/tasks/task_EXAMPLE/artifacts/video/content",
      "mediaType": "video/mp4"
    }
  ]
}
```

When the returned URL is a relative path, resolve it against `https://api.wanapi.app` and authenticate with your API key. For the example above:

```bash
curl "https://api.wanapi.app/v1/tasks/$TASK_ID/artifacts/video/content" \
  -H "Authorization: Bearer $WAN_API_KEY" \
  -o video.mp4
```

If a signed HTTPS media URL is returned, use it directly without forwarding your API key to that host. Result URLs can expire. Save videos you want to keep to your own storage. Polling and downloading an existing result do not create another generation.

A failed task includes an `error` object with `code` and `message`, for example:

```json
{
  "id": "task_EXAMPLE",
  "object": "video",
  "model": "bytedance/seedance-2.0-fast",
  "status": "failed",
  "error": {
    "code": "generation_failed",
    "message": "Video generation failed"
  }
}
```

## Billing and failure handling [#billing-and-failure-handling]

The final charge follows actual video token usage and the current model rate. The Playground estimate is a maximum estimate, not a fixed quote. Longer clips and larger output resolutions can increase token usage. Failed requests are not charged.

* **Invalid parameters:** correct the fields or input combination before submitting again. Check media formats and limits as well as URL syntax.
* **Authentication or model access:** use a valid Seedance key enabled for the requested model.
* **Insufficient balance:** add funds before a new paid request. A key limit does not add account credit.
* **Temporary polling failure:** retry the GET with backoff and a maximum waiting period. A failed query does not mean the generation failed.
* **Submission timeout or missing task ID:** the outcome may be unknown. Do not automatically repeat the POST; it could create a second paid task.
* **Download failure:** retry the existing result before starting a new generation.

Keep the task ID and contact [support](/contact) if an uncertain submission needs investigation.

[Download the Seedance 2.0 Fast OpenAPI schema](https://wanapi.app/models/seedance-2-0-fast/openapi.json).
