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

# Seedance 2.0 Fast

> ByteDance fast multimodal video generation with text-to-video, first-and-last-frames, and omni-reference modes

## Overview

Seedance 2.0 Fast is a ByteDance video generation model for fast text-to-video, first-and-last-frame animation, and multimodal reference workflows. Use this page when you are ready to call the API after trying the model in the APIXO playground.

| Capability       | Value                                                                             |
| ---------------- | --------------------------------------------------------------------------------- |
| Model ID         | `seedance-2-0-fast`                                                               |
| Modes            | `text-to-video`, `first_and_last_frames`, `omni_reference`                        |
| Prompt           | Required, non-empty text                                                          |
| Resolution       | `480p`, `720p`                                                                    |
| Duration         | 4-15 seconds, default `5`                                                         |
| Aspect ratios    | `auto`, `16:9`, `4:3`, `1:1`, `3:4`, `9:16`, `21:9`                               |
| Reference images | `first_and_last_frames`: 1-2 images; `omni_reference`: 1-9 images                 |
| Reference videos | `omni_reference` only, 1-3 videos, each 2-15 seconds, total up to 15 seconds      |
| Reference audio  | `omni_reference` only, 1-3 audio files, each 2-15 seconds, total up to 15 seconds |
| Audio and search | Optional generated audio and web search controls                                  |

## Endpoint and authentication

Base URL:

```text theme={null}
https://api.apixo.ai/api/v1
```

| Method | Endpoint                                        | Purpose                               |
| ------ | ----------------------------------------------- | ------------------------------------- |
| `POST` | `/generateTask/seedance-2-0-fast`               | Submit a generation task              |
| `GET`  | `/statusTask/seedance-2-0-fast?taskId={taskId}` | Poll task status and retrieve results |

All requests require your APIXO API key:

```http theme={null}
Authorization: Bearer YOUR_API_KEY
```

Submit requests also require:

```http theme={null}
Content-Type: application/json
```

## Copy-paste async quickstart

This minimal request submits a text-to-video task and returns a `taskId`.

```bash theme={null}
curl -X POST "https://api.apixo.ai/api/v1/generateTask/seedance-2-0-fast" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "request_type": "async",
    "input": {
      "mode": "text-to-video",
      "prompt": "a cinematic tracking shot through a rainy neon street",
      "resolution": "720p",
      "duration": 5,
      "aspect_ratio": "16:9",
      "sound": true,
      "web_search": false
    }
  }'
```

Successful response:

```json theme={null}
{
  "code": 200,
  "message": "success",
  "data": {
    "taskId": "task_12345678"
  }
}
```

Save the `taskId`; you need it to poll for the final result.

## Poll for result

```bash theme={null}
curl -X GET "https://api.apixo.ai/api/v1/statusTask/seedance-2-0-fast?taskId=task_12345678" \
  -H "Authorization: Bearer YOUR_API_KEY"
```

Processing response:

```json theme={null}
{
  "code": 200,
  "message": "success",
  "data": {
    "taskId": "task_12345678",
    "state": "processing",
    "createTime": 1767965610929
  }
}
```

Success response:

```json theme={null}
{
  "code": 200,
  "message": "success",
  "data": {
    "taskId": "task_12345678",
    "state": "success",
    "resultJson": "{\"resultUrls\":[\"https://file.apixo.ai/video.mp4\"]}",
    "createTime": 1767965610929,
    "completeTime": 1767965910929,
    "costTime": 300000
  }
}
```

Failed response:

```json theme={null}
{
  "code": 200,
  "message": "success",
  "data": {
    "taskId": "task_12345678",
    "state": "failed",
    "failCode": "PromptInvalid",
    "failMsg": "Prompt is invalid or rejected by provider",
    "createTime": 1767965610929,
    "completeTime": 1767965620132
  }
}
```

Parse `resultJson` after `state` becomes `success`:

```javascript theme={null}
const payload = JSON.parse(data.resultJson);
const videoUrls = payload.resultUrls;
```

## Request body

### Text-to-video

```json theme={null}
{
  "request_type": "async",
  "input": {
    "mode": "text-to-video",
    "prompt": "a cinematic tracking shot through a rainy neon street",
    "resolution": "720p",
    "duration": 5,
    "aspect_ratio": "16:9",
    "sound": true,
    "web_search": false
  }
}
```

### First-and-last-frames

```json theme={null}
{
  "request_type": "async",
  "input": {
    "mode": "first_and_last_frames",
    "prompt": "turn the still frames into a smooth cinematic camera move",
    "image_urls": [
      "https://example.com/frame-start.png",
      "https://example.com/frame-end.png"
    ],
    "resolution": "720p",
    "duration": 5,
    "aspect_ratio": "9:16",
    "sound": true,
    "web_search": false
  }
}
```

### Omni-reference

```json theme={null}
{
  "request_type": "async",
  "input": {
    "mode": "omni_reference",
    "prompt": "create a stylish product ad using the visual references and voice rhythm",
    "image_urls": [
      "https://example.com/product-shot.png"
    ],
    "video_urls": [
      "https://example.com/ref-motion.mp4"
    ],
    "audio_urls": [
      "https://example.com/ref-audio.mp3"
    ],
    "resolution": "480p",
    "duration": 6,
    "aspect_ratio": "auto",
    "sound": true,
    "web_search": false
  }
}
```

## Parameters

<ParamField body="request_type" type="string" required default="async">
  Result delivery mode. Use `async` for polling with `statusTask`, or `callback` for webhook delivery.
</ParamField>

<ParamField body="callback_url" type="string">
  Required when `request_type` is `callback`. Must be a public HTTPS URL that can receive the final task payload. See [Webhooks](/api-reference/webhooks).
</ParamField>

<ParamField body="input" type="object" required>
  Seedance 2.0 Fast input parameters.

  <Expandable title="properties">
    <ParamField body="mode" type="string" required>
      Generation mode. Supported values: `text-to-video`, `first_and_last_frames`, `omni_reference`.
    </ParamField>

    <ParamField body="prompt" type="string" required>
      Text prompt describing the desired video. The value is trimmed and must not be empty.
    </ParamField>

    <ParamField body="resolution" type="string" default="720p">
      Output resolution. Supported values: `480p`, `720p`.
    </ParamField>

    <ParamField body="duration" type="integer" default="5">
      Output duration in seconds. Supports integers from `4` to `15`. Numeric strings are accepted and normalized, but integers are recommended.
    </ParamField>

    <ParamField body="aspect_ratio" type="string" default="auto">
      Output aspect ratio. Supported values: `auto`, `16:9`, `4:3`, `1:1`, `3:4`, `9:16`, `21:9`.
    </ParamField>

    <ParamField body="sound" type="boolean" default="true">
      Whether to generate audio with the output video.
    </ParamField>

    <ParamField body="web_search" type="boolean" default="false">
      Enables web search so the provider can reference current information during generation.
    </ParamField>

    <ParamField body="image_urls" type="string[]">
      Reference image URLs. Required for `first_and_last_frames` with 1-2 images. Optional for `omni_reference` with 1-9 images.
    </ParamField>

    <ParamField body="video_urls" type="string[]">
      Reference video URLs for `omni_reference` mode only. When provided, supports 1-3 URLs. Each video must be 2-15 seconds, and total reference video duration cannot exceed 15 seconds.
    </ParamField>

    <ParamField body="audio_urls" type="string[]">
      Reference audio URLs for `omni_reference` mode only. When provided, supports 1-3 URLs. Each audio file must be 2-15 seconds, and total reference audio duration cannot exceed 15 seconds.
    </ParamField>
  </Expandable>
</ParamField>

### Mode-specific constraints

* `text-to-video` uses the prompt and generation settings only.
* `first_and_last_frames` requires `image_urls` with 1-2 images. The first image is the starting frame; the second image, when present, is the ending frame.
* `omni_reference` can combine `image_urls`, `video_urls`, and `audio_urls`.
* `omni_reference` requests with only `audio_urls`, and no images or videos, are rejected.
* Reference media must be publicly reachable URLs so the API can fetch or probe them.

## Response format

### Submit task response

`POST /generateTask/seedance-2-0-fast` returns a task ID when the task is accepted:

<ResponseField name="code" type="integer">
  API status code. `200` means the task was accepted.
</ResponseField>

<ResponseField name="message" type="string">
  Human-readable status message.
</ResponseField>

<ResponseField name="data.taskId" type="string">
  Unique task identifier used with the status endpoint.
</ResponseField>

### Status response fields

<ResponseField name="taskId" type="string">
  Unique task identifier.
</ResponseField>

<ResponseField name="state" type="string">
  Current task state: `pending`, `processing`, `success`, or `failed`.
</ResponseField>

<ResponseField name="resultJson" type="string">
  JSON string containing the generated video URLs in `resultUrls`. Present when `state` is `success`.
</ResponseField>

<ResponseField name="failCode" type="string">
  Machine-readable failure code. Present when `state` is `failed`.
</ResponseField>

<ResponseField name="failMsg" type="string">
  Human-readable failure message. Present when `state` is `failed`.
</ResponseField>

<ResponseField name="createTime" type="integer">
  Task creation timestamp in Unix milliseconds.
</ResponseField>

<ResponseField name="completeTime" type="integer">
  Task completion timestamp in Unix milliseconds. Present after completion.
</ResponseField>

<ResponseField name="costTime" type="integer">
  Processing duration in milliseconds. Present after successful completion or when available from the task log.
</ResponseField>

## Webhook callback mode

Use callback mode when your backend should receive the final result automatically instead of polling.

```bash theme={null}
curl -X POST "https://api.apixo.ai/api/v1/generateTask/seedance-2-0-fast" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "request_type": "callback",
    "callback_url": "https://your-server.com/webhooks/apixo",
    "input": {
      "mode": "first_and_last_frames",
      "prompt": "turn the still frames into a smooth cinematic camera move",
      "image_urls": [
        "https://example.com/frame-start.png",
        "https://example.com/frame-end.png"
      ],
      "resolution": "720p",
      "duration": 5,
      "aspect_ratio": "9:16",
      "sound": true,
      "web_search": false
    }
  }'
```

See [Webhooks](/api-reference/webhooks) for delivery requirements and retry behavior.

## Billing

Seedance 2.0 Fast is billed per second. The selected `resolution` and whether `omni_reference` includes `video_urls` determine the unit price.

| Configuration                   | APIXO price       |
| ------------------------------- | ----------------- |
| `480p`, without video reference | `$0.076 / second` |
| `480p`, with video reference    | `$0.047 / second` |
| `720p`, without video reference | `$0.156 / second` |
| `720p`, with video reference    | `$0.095 / second` |

Billing formulas:

* Without video reference: `output duration seconds x per-second rate`
* With video reference: `(output duration seconds + total reference video seconds) x per-second rate`

`text-to-video` and `first_and_last_frames` always use the "without video reference" rate. In `omni_reference` mode, "with video reference" applies only when `video_urls` is provided. Image and audio references do not add extra billable seconds.

For current route and market comparison pricing, see [Pricing](https://apixo.ai/pricing).

## Latency and polling

Actual latency may vary by prompt complexity, reference media, provider route, and current queue load.

| Workflow              | Typical generation time | Recommended first poll       | Poll interval |
| --------------------- | ----------------------- | ---------------------------- | ------------- |
| Text-to-video         | 3-6 minutes             | 200-300s after task creation | 10-20s        |
| First-and-last-frames | 3-6 minutes             | 200-300s after task creation | 10-20s        |
| Omni-reference        | 3-6 minutes             | 200-300s after task creation | 10-20s        |

<Tip>
  For production workloads, use callback mode to reduce polling overhead during longer video tasks.
</Tip>

<Tip>
  No visible status change during the first few minutes can be normal for this model. Keep polling with backoff instead of immediately retrying the same task.
</Tip>

Result URLs can be temporary. Download generated videos promptly after task completion.

## Errors and troubleshooting

### HTTP errors

| Code  | Meaning                                                                                | What to do                                       |
| ----- | -------------------------------------------------------------------------------------- | ------------------------------------------------ |
| `400` | Invalid request body, missing parameter, unsupported value, or invalid reference media | Fix the request before retrying                  |
| `401` | Missing or invalid API key                                                             | Check the `Authorization` header                 |
| `402` | Insufficient balance or quota                                                          | Add balance or switch account/key                |
| `403` | Key or route cannot access the model                                                   | Check permissions and route strategy             |
| `404` | Task not found                                                                         | Check the `taskId` and model endpoint            |
| `429` | Rate limit or concurrency limit reached                                                | Retry with exponential backoff                   |
| `500` | Server error or unmapped provider failure                                              | Retry with backoff                               |
| `502` | Upstream provider error                                                                | Retry with backoff                               |
| `504` | Upstream timeout                                                                       | Retry or use callback mode for long-running jobs |

### Common request validation errors

| Error                        | Meaning                                                                 | What to do                                                                                               |
| ---------------------------- | ----------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------- |
| `Missing required parameter` | `input`, `mode`, `prompt`, or a mode-specific required field is missing | Add the required field                                                                                   |
| `Invalid parameter type`     | A field has the wrong JSON type                                         | Use strings for text fields and URLs, booleans for `sound` and `web_search`, and integers for `duration` |
| `Invalid parameter value`    | A value is outside the supported set or range                           | Check `mode`, `resolution`, `duration`, `aspect_ratio`, and reference media durations                    |
| `Param length exceeded`      | Too many reference URLs were provided                                   | Keep `image_urls`, `video_urls`, and `audio_urls` within the documented limits                           |
| `ImageNotAccess`             | A referenced URL could not be accessed                                  | Use public, direct media URLs                                                                            |

### Task failure codes

| Fail code          | Meaning                                      | What to do                                              |
| ------------------ | -------------------------------------------- | ------------------------------------------------------- |
| `PromptInvalid`    | Prompt or input was rejected by the provider | Adjust the prompt or references                         |
| `SensitiveContent` | Input or output was flagged by safety checks | Change the prompt or input media                        |
| `RateLimited`      | Provider or account rate limit was reached   | Retry with exponential backoff                          |
| `Timeout`          | Provider timed out                           | Retry later or use callback mode                        |
| `Unknown error`    | Provider returned an unmapped failure        | Retry with backoff or contact support with the `taskId` |

See [Error Codes](/api-reference/errors) for the full error reference.

## Related links

* [Generation API Overview](/models)
* [Generate Task](/api-reference/generate-task)
* [Status Task](/api-reference/status-task)
* [Webhooks](/api-reference/webhooks)
* [Error Codes](/api-reference/errors)
* [Parameter Specification](/api-reference/parameters)
* [Routing Strategies](/concepts/routing-strategies)
* [Pricing](https://apixo.ai/pricing)
