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

# Seedance 1.5 Video Generation — Create Task API Reference

> POST /v1/seedance/videos — Generate Seedance 1.5 videos via a content array. Supports text-to-video, first/last frame, and reference image input modes.

Use this endpoint to submit a video generation task with ByteDance's Seedance 1.5 model. Unlike simpler text-only video APIs, Seedance 1.5 accepts a `content` array that lets you mix text prompts and image inputs in a single request. You can generate video from text alone, from a single reference frame, from first and last frames, or from multiple reference images. Audio generation is supported on all model tiers. The API responds immediately with a task `id` — you then poll the [Query Video Task](/api-reference/video/seedance-query) endpoint until the video is ready.

<Note>
  Video generation is **asynchronous**. The create endpoint returns a task `id` with `status: "queued"`. Use the [Query Video Task](/api-reference/video/seedance-query) endpoint to check progress and retrieve the final `video_url`.
</Note>

## Base URL & Endpoint

```
Base URL:  https://zcbservice.aizfw.cn/kyyReactApiServer
Endpoint:  POST /v1/seedance/videos
Full URL:  https://zcbservice.aizfw.cn/kyyReactApiServer/v1/seedance/videos
```

All requests must include your API key as a Bearer token:

```
Authorization: Bearer YOUR_API_KEY
```

## Supported Models

| Model                    | Resolution | Audio | Image-to-Video |
| ------------------------ | ---------- | ----- | -------------- |
| `seedance_1_5_pro_480p`  | 480p       | ✅     | ✅              |
| `seedance_1_5_pro_720p`  | 720p       | ✅     | ✅              |
| `seedance_1_5_pro_1080p` | 1080p      | ✅     | ✅              |

## Request Parameters

<ParamField body="model" type="string" required>
  The Seedance 1.5 model to use. Accepted values:

  * `seedance_1_5_pro_480p`
  * `seedance_1_5_pro_720p`
  * `seedance_1_5_pro_1080p`
</ParamField>

<ParamField body="content" type="array" required>
  An array of content objects that define the prompt and any input images. This is **not** a simple string — it must be an array of typed objects (see the [Content Array Structure](#content-array-structure) section below).

  At minimum, include one text object. You may also include image objects to enable image-guided generation modes.
</ParamField>

<ParamField body="ratio" type="string">
  Output video aspect ratio. Accepted values: `16:9`, `4:3`, `1:1`, `3:4`, `9:16`, `21:9`, `adaptive`.

  Defaults:

  * Text-to-video: `16:9` (Seedance 1.5 Pro defaults to `adaptive`)
  * Image-to-video: `adaptive`
</ParamField>

<ParamField body="duration" type="integer">
  Video duration in seconds.

  * Range: `2`–`12` seconds (default `5`)
  * Seedance 1.5 Pro also supports `4`–`12` seconds
  * Set to `-1` to let the model automatically choose the best duration (4–12 s)
</ParamField>

<ParamField body="generate_audio" type="boolean">
  Whether to include synthesised audio in the output video. Defaults to `true`.

  Audio generation is only available on Seedance 1.5 Pro series models.
</ParamField>

## Content Array Structure

The `content` array supports two object types: **text** and **image\_url**.

### Text Content Object

<ParamField body="content[].type" type="string" required>
  Must be `"text"`.
</ParamField>

<ParamField body="content[].text" type="string" required>
  The video generation prompt. Maximum length: 500 Chinese characters or 1000 English words.
</ParamField>

```json Example text object theme={null}
{
  "type": "text",
  "text": "A kitten yawning at the camera"
}
```

### Image Content Object

<ParamField body="content[].type" type="string" required>
  Must be `"image_url"`.
</ParamField>

<ParamField body="content[].image_url.url" type="string" required>
  A publicly accessible URL for the input image.
</ParamField>

<ParamField body="content[].role" type="string">
  The role of this image in the generation. Controls which generation mode is used:

  * `first_frame` (or omitted) — use as the first frame of the video (image-to-video mode)
  * `last_frame` — use as the last frame of the video (must be paired with a `first_frame` image)
  * `reference_image` — use as a stylistic reference (1–4 images supported)
</ParamField>

**Image requirements:**

* **Formats:** JPEG, PNG, WebP, BMP, TIFF, GIF (Seedance 1.5 Pro also supports HEIC/HEIF)
* **Aspect ratio:** between 0.4 and 2.5 (width ÷ height)
* **Dimensions:** 300 px – 6000 px on each side
* **File size:** less than 30 MB

```json Example image object theme={null}
{
  "type": "image_url",
  "image_url": {
    "url": "https://example.com/first-frame.jpg"
  },
  "role": "first_frame"
}
```

## Generation Scenarios

The image roles in the `content` array determine which generation mode is active. **These scenarios are mutually exclusive** — you cannot mix first-frame, last-frame, and reference image roles in the same request.

| Scenario                                | Content array contents                                             |
| --------------------------------------- | ------------------------------------------------------------------ |
| **Text-to-video**                       | One text object only                                               |
| **Image-to-video (first frame)**        | One text object + one image with `role: "first_frame"`             |
| **Image-to-video (first + last frame)** | One text object + one `first_frame` image + one `last_frame` image |
| **Reference image guidance**            | One text object + 1–4 images with `role: "reference_image"`        |

<Warning>
  The three image-guided scenarios are **mutually exclusive**. Do not mix `first_frame`, `last_frame`, and `reference_image` roles in a single request.
</Warning>

## Response Fields

<ResponseField name="id" type="string">
  Unique identifier for the video generation task. Task records are saved for **1 day** — save this value to query the result in time.
</ResponseField>

<ResponseField name="object" type="string">
  Object type. Always `"video"`.
</ResponseField>

<ResponseField name="created" type="integer">
  Unix timestamp (seconds) of when the task was created.
</ResponseField>

<ResponseField name="model" type="string">
  The model name you specified in the request.
</ResponseField>

<ResponseField name="status" type="string">
  Initial task status. On successful creation this is always `"queued"`.
</ResponseField>

## Code Examples

<CodeGroup>
  ```bash cURL (Text-to-Video) theme={null}
  curl --request POST \
    --url https://zcbservice.aizfw.cn/kyyReactApiServer/v1/seedance/videos \
    --header 'Authorization: Bearer YOUR_API_KEY' \
    --header 'Content-Type: application/json' \
    --data '{
      "model": "seedance_1_5_pro_720p",
      "content": [
        {
          "type": "text",
          "text": "A kitten yawning at the camera, soft natural lighting"
        }
      ],
      "ratio": "16:9",
      "duration": 5,
      "generate_audio": true
    }'
  ```

  ```bash cURL (Image-to-Video First Frame) theme={null}
  curl --request POST \
    --url https://zcbservice.aizfw.cn/kyyReactApiServer/v1/seedance/videos \
    --header 'Authorization: Bearer YOUR_API_KEY' \
    --header 'Content-Type: application/json' \
    --data '{
      "model": "seedance_1_5_pro_720p",
      "content": [
        {
          "type": "text",
          "text": "The kitten slowly opens its eyes and looks around curiously"
        },
        {
          "type": "image_url",
          "image_url": {
            "url": "https://example.com/kitten-sleeping.jpg"
          },
          "role": "first_frame"
        }
      ],
      "ratio": "16:9",
      "duration": 5,
      "generate_audio": true
    }'
  ```

  ```python Python theme={null}
  import requests

  url = "https://zcbservice.aizfw.cn/kyyReactApiServer/v1/seedance/videos"

  headers = {
      "Authorization": "Bearer YOUR_API_KEY",
      "Content-Type": "application/json",
  }

  # Text-to-video example
  payload = {
      "model": "seedance_1_5_pro_720p",
      "content": [
          {
              "type": "text",
              "text": "A kitten yawning at the camera, soft natural lighting",
          }
      ],
      "ratio": "16:9",
      "duration": 5,
      "generate_audio": True,
  }

  response = requests.post(url, headers=headers, json=payload)
  data = response.json()

  task_id = data["id"]
  print(f"Task created: {task_id} — status: {data['status']}")
  ```
</CodeGroup>

**Example success response:**

```json theme={null}
{
  "id": "video_abc123def456",
  "object": "video",
  "created": 1761635478,
  "model": "seedance_1_5_pro_720p",
  "status": "queued"
}
```

## Tips

<Tip>
  Use the **480p model** (`seedance_1_5_pro_480p`) for fast previews before committing to a 720p or 1080p render. 480p tasks typically complete in 30 seconds to 2 minutes.
</Tip>

<Warning>
  Task IDs and generated videos are retained for **1 day**. Query the result and download the video promptly — both will be permanently deleted after 24 hours.
</Warning>

<Tip>
  Set `duration: -1` to let Seedance 1.5 Pro automatically choose the most appropriate video length (4–12 seconds) based on your prompt and input images.
</Tip>
