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

# Seedance 2.5 Video Generation

> - Supports full-reference and first-and-last-frame video generation modes
- Supports image, video, and audio reference assets
- Supports 480p / 720p, 4-30 seconds, and synchronized AI audio
- Supports MP4 and high-color-accuracy MOV output
- Asynchronous processing mode, returns a task ID for subsequent queries


export const apiKeyUrl = 'https://aireiter.com/keys';

<Note>
  The model name of Seedance 2.5 in AIReiter is `seedance2_5`.
</Note>

## Authorizations

<ParamField header="Authorization" type="string" required>
  All endpoints require Bearer Token authentication.

  Visit the <a href={apiKeyUrl} target="_blank">API Key management page</a> to get your API Key, and add the following to the request headers:

  ```
  Authorization: Bearer YOUR_API_KEY
  ```
</ParamField>

## Body

<ParamField body="model" type="string" required>
  Model name, fixed value:

  * `seedance2_5`
</ParamField>

<ParamField body="params" type="object" required>
  Model parameters object.

  <Expandable title="params Object Properties">
    <ParamField body="prompt" type="string" required>
      Text description for video generation.

      It is recommended to describe the subject, scene, action, camera movement, visual style, dialogue, and ambient sound.
    </ParamField>

    <ParamField body="type" type="string" default="all_reference">
      Reference mode, which determines how reference materials are used:

      * `all_reference` - Full reference mode, which can use reference images, reference videos, and reference audio
      * `first_last_frame` - First and last frame mode, which uses the first frame and an optional last frame image
    </ParamField>

    <ParamField body="image_url" type="string | string[]">
      Reference image URL.

      * `all_reference` mode: up to 30 images; maximum 50MB per image; minimum image side length 300px
      * `first_last_frame` mode: used as the first frame image; maximum 10MB; minimum image side length 300px

      The URL must be directly accessible from the public internet.
    </ParamField>

    <ParamField body="end_image_url" type="string">
      Last frame image URL, valid only in `first_last_frame` mode.

      Maximum image size is 10MB, minimum side length is 300px, and the URL must be directly accessible from the public internet.
    </ParamField>

    <ParamField body="video_url" type="string | string[]">
      Reference video URL, valid only in `all_reference` mode, with support for up to 9 reference videos.

      Video requirements:

      * Single video duration: 2-30 seconds, total reference video duration must not exceed 30 seconds
      * Maximum size per video: 200MB
      * Frame rate: 24-60 FPS
      * Aspect ratio range: 0.4-2.5
      * Width and height range: 300-6000px
      * Total pixel count range: 409600-8295044

      <Warning>Do not pass this parameter in `first_last_frame` mode.</Warning>
    </ParamField>

    <ParamField body="audio_url" type="string | string[]">
      Reference audio URL, valid only in `all_reference` mode, with support for up to 10 audio files.

      Audio requirements:

      * Single audio duration: 2-30 seconds, total reference audio duration must not exceed 30 seconds
      * Supports WAV, MP3
      * Maximum size per audio file: 15MB

      <Warning>Do not pass this parameter in `first_last_frame` mode.</Warning>
    </ParamField>

    <ParamField body="resolution" type="string" default="720p">
      Video resolution:

      * `480p`
      * `720p` - Default value
    </ParamField>

    <ParamField body="video_length" type="integer" default="5">
      Output video duration, in seconds.

      Supports integers from `4` to `30`.
    </ParamField>

    <ParamField body="aspect_ratio" type="string" default="16:9">
      Video aspect ratio:

      * `21:9` - Ultra-wide screen
      * `16:9` - Landscape, default value
      * `9:16` - Portrait
      * `4:3` - Standard landscape
      * `3:4` - Standard portrait
      * `1:1` - Square
    </ParamField>

    <ParamField body="generate_audio" type="boolean" default="true">
      Whether to generate AI audio synchronized with the video.

      * `true` - Generate audio, default value
      * `false` - Do not generate audio
    </ParamField>

    <ParamField body="output_format" type="string" default="mp4">
      Output video format:

      * `mp4` - General-purpose format with a smaller file size, default value
      * `mov` - High color precision format (yuv444p), suitable for post-production expansion and stitching
    </ParamField>
  </Expandable>
</ParamField>

<ParamField body="out_task_id" type="string" required>
  Requesting party task ID.

  Generated by the caller and guaranteed to be unique. It supports letters, numbers, underscores, and hyphens, and must be 1-64 characters long. This ID is used later to query the task status and results.
</ParamField>

## Response

<ResponseField name="out_task_id" type="string">
  Initiator task ID, can be used to query the result.
</ResponseField>

<ResponseField name="status" type="string">
  Initial status, usually `"pending"`.
</ResponseField>

<ResponseField name="estimated_credits" type="number">
  Estimated credits consumed.
</ResponseField>

<ResponseField name="created_at" type="string">
  Creation time, in ISO 8601 format.
</ResponseField>

## Query Task

Seedance 2.5 uses asynchronous processing. After submission succeeds, use the same `out_task_id` to query the task:

```bash theme={null}
curl --request POST \
  --url https://aireiter.com/api/openapi/query \
  --header 'Authorization: Bearer <token>' \
  --header 'Content-Type: application/json' \
  --data '{
    "out_task_id": "seedance2_5_task_123456"
  }'
```

After the task is completed, the `output` array in the response will contain the generated video URL. For the complete fields, see [Get Task Status](/en/api-reference/tasks/status).

## Request Examples

<RequestExample>
  ```bash cURL（Full Reference Mode） theme={null}
  curl --request POST \
    --url https://aireiter.com/api/openapi/submit \
    --header 'Authorization: Bearer <token>' \
    --header 'Content-Type: application/json' \
    --data '{
      "model": "seedance2_5",
      "params": {
        "prompt": "Cinematic product short film, keep the character and product appearance consistent, with a smooth camera orbit and natural ambient sound.",
        "type": "all_reference",
        "image_url": [
          "https://example.com/character.jpg",
          "https://example.com/product.jpg"
        ],
        "video_url": ["https://example.com/motion-reference.mp4"],
        "audio_url": ["https://example.com/music-reference.mp3"],
        "resolution": "720p",
        "video_length": 8,
        "aspect_ratio": "16:9",
        "generate_audio": true,
        "output_format": "mov"
      },
      "out_task_id": "seedance2_5_reference_123456"
    }'
  ```

  ```bash cURL（First and Last Frame Mode） theme={null}
  curl --request POST \
    --url https://aireiter.com/api/openapi/submit \
    --header 'Authorization: Bearer <token>' \
    --header 'Content-Type: application/json' \
    --data '{
      "model": "seedance2_5",
      "params": {
        "prompt": "A natural transition from a morning city skyline to nighttime lights, with a slow push-in camera.",
        "type": "first_last_frame",
        "image_url": "https://example.com/first-frame.jpg",
        "end_image_url": "https://example.com/last-frame.jpg",
        "resolution": "720p",
        "video_length": 10,
        "aspect_ratio": "16:9",
        "generate_audio": true,
        "output_format": "mp4"
      },
      "out_task_id": "seedance2_5_frames_123456"
    }'
  ```

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

  url = "https://aireiter.com/api/openapi/submit"

  payload = {
      "model": "seedance2_5",
      "params": {
          "prompt": "Cinematic product short film, keep the character and product appearance consistent, with a smooth camera orbit and natural ambient sound.",
          "type": "all_reference",
          "image_url": ["https://example.com/character.jpg", "https://example.com/product.jpg"],
          "video_url": ["https://example.com/motion-reference.mp4"],
          "audio_url": ["https://example.com/music-reference.mp3"],
          "resolution": "720p",
          "video_length": 8,
          "aspect_ratio": "16:9",
          "generate_audio": True,
          "output_format": "mov"
      },
      "out_task_id": "seedance2_5_reference_123456"
  }

  headers = {
      "Authorization": "Bearer <token>",
      "Content-Type": "application/json"
  }

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

  print(response.json())
  ```

  ```javascript JavaScript theme={null}
  const url = "https://aireiter.com/api/openapi/submit";

  const payload = {
    model: "seedance2_5",
    params: {
      prompt: "Cinematic product short film, keep the character and product appearance consistent, with a smooth camera orbit and natural ambient sound.",
      type: "all_reference",
      image_url: ["https://example.com/character.jpg", "https://example.com/product.jpg"],
      video_url: ["https://example.com/motion-reference.mp4"],
      audio_url: ["https://example.com/music-reference.mp3"],
      resolution: "720p",
      video_length: 8,
      aspect_ratio: "16:9",
      generate_audio: true,
      output_format: "mov"
    },
    out_task_id: "seedance2_5_reference_123456"
  };

  const headers = {
    "Authorization": "Bearer <token>",
    "Content-Type": "application/json"
  };

  fetch(url, {
    method: "POST",
    headers: headers,
    body: JSON.stringify(payload)
  })
    .then(response => response.json())
    .then(data => console.log(data))
    .catch(error => console.error('Error:', error));
  ```

  ```go Go theme={null}
  package main

  import (
      "bytes"
      "encoding/json"
      "fmt"
      "io/ioutil"
      "net/http"
  )

  func main() {
      url := "https://aireiter.com/api/openapi/submit"

      payload := map[string]interface{}{
          "model": "seedance2_5",
          "params": map[string]interface{}{
              "prompt": "Cinematic product short film, keep the character and product appearance consistent, with a smooth camera orbit and natural ambient sound.",
              "type": "all_reference",
              "image_url": []interface{}{
                  "https://example.com/character.jpg",
                  "https://example.com/product.jpg",
              },
              "video_url": []interface{}{
                  "https://example.com/motion-reference.mp4",
              },
              "audio_url": []interface{}{
                  "https://example.com/music-reference.mp3",
              },
              "resolution": "720p",
              "video_length": 8,
              "aspect_ratio": "16:9",
              "generate_audio": true,
              "output_format": "mov",
          },
          "out_task_id": "seedance2_5_reference_123456",
      }

      jsonData, _ := json.Marshal(payload)

      req, _ := http.NewRequest("POST", url, bytes.NewBuffer(jsonData))
      req.Header.Set("Authorization", "Bearer <token>")
      req.Header.Set("Content-Type", "application/json")

      client := &http.Client{}
      resp, err := client.Do(req)
      if err != nil {
          panic(err)
      }
      defer resp.Body.Close()

      body, _ := ioutil.ReadAll(resp.Body)
      fmt.Println(string(body))
  }
  ```

  ```java Java theme={null}
  import java.net.http.HttpClient;
  import java.net.http.HttpRequest;
  import java.net.http.HttpResponse;
  import java.net.URI;

  public class Main {
      public static void main(String[] args) throws Exception {
          String url = "https://aireiter.com/api/openapi/submit";

          String payload = """
              {
                "model": "seedance2_5",
                "params": {
                  "prompt": "Cinematic product short film, keep the character and product appearance consistent, with a smooth camera orbit and natural ambient sound.",
                  "type": "all_reference",
                  "image_url": [
                    "https://example.com/character.jpg",
                    "https://example.com/product.jpg"
                  ],
                  "video_url": [
                    "https://example.com/motion-reference.mp4"
                  ],
                  "audio_url": [
                    "https://example.com/music-reference.mp3"
                  ],
                  "resolution": "720p",
                  "video_length": 8,
                  "aspect_ratio": "16:9",
                  "generate_audio": true,
                  "output_format": "mov"
                },
                "out_task_id": "seedance2_5_reference_123456"
              }
          """;

          HttpClient client = HttpClient.newHttpClient();
          HttpRequest request = HttpRequest.newBuilder()
              .uri(URI.create(url))
              .header("Authorization", "Bearer <token>")
              .header("Content-Type", "application/json")
              .POST(HttpRequest.BodyPublishers.ofString(payload))
              .build();

          HttpResponse<String> response = client.send(request,
              HttpResponse.BodyHandlers.ofString());

          System.out.println(response.body());
      }
  }
  ```

  ```php PHP theme={null}
  <?php

  $url = "https://aireiter.com/api/openapi/submit";

  $payload = [
      "model" => "seedance2_5",
      "params" => [
          "prompt" => "Cinematic product short film, keep the character and product appearance consistent, with a smooth camera orbit and natural ambient sound.",
          "type" => "all_reference",
          "image_url" => ["https://example.com/character.jpg", "https://example.com/product.jpg"],
          "video_url" => ["https://example.com/motion-reference.mp4"],
          "audio_url" => ["https://example.com/music-reference.mp3"],
          "resolution" => "720p",
          "video_length" => 8,
          "aspect_ratio" => "16:9",
          "generate_audio" => true,
          "output_format" => "mov"
      ],
      "out_task_id" => "seedance2_5_reference_123456"
  ];

  $ch = curl_init($url);
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
  curl_setopt($ch, CURLOPT_POST, true);
  curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($payload));
  curl_setopt($ch, CURLOPT_HTTPHEADER, [
      "Authorization: Bearer <token>",
      "Content-Type: application/json"
  ]);

  $response = curl_exec($ch);
  curl_close($ch);

  echo $response;
  ?>
  ```

  ```ruby Ruby theme={null}
  require 'net/http'
  require 'json'
  require 'uri'

  url = URI("https://aireiter.com/api/openapi/submit")

  payload = {
    model: "seedance2_5",
    params: {
      prompt: "Cinematic product short film, keep the character and product appearance consistent, with a smooth camera orbit and natural ambient sound.",
      type: "all_reference",
      image_url: ["https://example.com/character.jpg", "https://example.com/product.jpg"],
      video_url: ["https://example.com/motion-reference.mp4"],
      audio_url: ["https://example.com/music-reference.mp3"],
      resolution: "720p",
      video_length: 8,
      aspect_ratio: "16:9",
      generate_audio: true,
      output_format: "mov"
    },
    out_task_id: "seedance2_5_reference_123456"
  }

  http = Net::HTTP.new(url.host, url.port)

  request = Net::HTTP::Post.new(url)
  request["Authorization"] = "Bearer <token>"
  request["Content-Type"] = "application/json"
  request.body = payload.to_json

  response = http.request(request)
  puts response.body
  ```

  ```swift Swift theme={null}
  import Foundation

  let url = URL(string: "https://aireiter.com/api/openapi/submit")!

  let payload: [String: Any] = [
      "model": "seedance2_5",
      "params": [
          "prompt": "Cinematic product short film, keep the character and product appearance consistent, with a smooth camera orbit and natural ambient sound.",
          "type": "all_reference",
          "image_url": ["https://example.com/character.jpg", "https://example.com/product.jpg"],
          "video_url": ["https://example.com/motion-reference.mp4"],
          "audio_url": ["https://example.com/music-reference.mp3"],
          "resolution": "720p",
          "video_length": 8,
          "aspect_ratio": "16:9",
          "generate_audio": true,
          "output_format": "mov"
      ],
      "out_task_id": "seedance2_5_reference_123456"
  ]

  var request = URLRequest(url: url)
  request.httpMethod = "POST"
  request.setValue("Bearer <token>", forHTTPHeaderField: "Authorization")
  request.setValue("application/json", forHTTPHeaderField: "Content-Type")
  request.httpBody = try? JSONSerialization.data(withJSONObject: payload)

  let task = URLSession.shared.dataTask(with: request) { data, response, error in
      if let error = error {
          print("Error: \(error)")
          return
      }

      if let data = data, let responseString = String(data: data, encoding: .utf8) {
          print(responseString)
      }
  }

  task.resume()
  ```

  ```csharp C# theme={null}
  using System;
  using System.Net.Http;
  using System.Text;
  using System.Threading.Tasks;

  class Program
  {
      static async Task Main(string[] args)
      {
          var url = "https://aireiter.com/api/openapi/submit";

          var payload = @"
                {
                    ""model"": ""seedance2_5"",
                    ""params"": {
                        ""prompt"": ""Cinematic product short film, keep the character and product appearance consistent, with a smooth camera orbit and natural ambient sound."",
                        ""type"": ""all_reference"",
                        ""image_url"": [
                            ""https://example.com/character.jpg"",
                            ""https://example.com/product.jpg""
                        ],
                        ""video_url"": [
                            ""https://example.com/motion-reference.mp4""
                        ],
                        ""audio_url"": [
                            ""https://example.com/music-reference.mp3""
                        ],
                        ""resolution"": ""720p"",
                        ""video_length"": 8,
                        ""aspect_ratio"": ""16:9"",
                        ""generate_audio"": true,
                        ""output_format"": ""mov""
                    },
                    ""out_task_id"": ""seedance2_5_reference_123456""
                }";

          using var client = new HttpClient();
          client.DefaultRequestHeaders.Add("Authorization", "Bearer <token>");

          var content = new StringContent(payload, Encoding.UTF8, "application/json");
          var response = await client.PostAsync(url, content);
          var result = await response.Content.ReadAsStringAsync();

          Console.WriteLine(result);
      }
  }
  ```

  ```c C theme={null}
  #include <stdio.h>
  #include <curl/curl.h>

  int main(void) {
      CURL *curl;
      CURLcode res;

      curl_global_init(CURL_GLOBAL_DEFAULT);
      curl = curl_easy_init();

      if(curl) {
          const char *url = "https://aireiter.com/api/openapi/submit";
          const char *payload = "{\"model\":\"seedance2_5\",\"params\":{\"prompt\":\"Cinematic product short film, keep the character and product appearance consistent, with a smooth camera orbit and natural ambient sound.\",\"type\":\"all_reference\",\"image_url\":[\"https://example.com/character.jpg\",\"https://example.com/product.jpg\"],\"video_url\":[\"https://example.com/motion-reference.mp4\"],\"audio_url\":[\"https://example.com/music-reference.mp3\"],\"resolution\":\"720p\",\"video_length\":8,\"aspect_ratio\":\"16:9\",\"generate_audio\":true,\"output_format\":\"mov\"},\"out_task_id\":\"seedance2_5_reference_123456\"}";

          struct curl_slist *headers = NULL;
          headers = curl_slist_append(headers, "Authorization: Bearer <token>");
          headers = curl_slist_append(headers, "Content-Type: application/json");

          curl_easy_setopt(curl, CURLOPT_URL, url);
          curl_easy_setopt(curl, CURLOPT_POSTFIELDS, payload);
          curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);

          res = curl_easy_perform(curl);

          if(res != CURLE_OK) {
              fprintf(stderr, "curl_easy_perform() failed: %s\n",
                      curl_easy_strerror(res));
          }

          curl_slist_free_all(headers);
          curl_easy_cleanup(curl);
      }

      curl_global_cleanup();
      return 0;
  }
  ```

  ```objectivec Objective-C theme={null}
  #import <Foundation/Foundation.h>

  int main(int argc, const char * argv[]) {
      @autoreleasepool {
          NSURL *url = [NSURL URLWithString:@"https://aireiter.com/api/openapi/submit"];

          NSDictionary *payload = @{
              @"model": @"seedance2_5",
              @"params": @{
                  @"prompt": @"Cinematic product short film, keep the character and product appearance consistent, with a smooth camera orbit and natural ambient sound.",
                  @"type": @"all_reference",
                  @"image_url": @[
                      @"https://example.com/character.jpg",
                      @"https://example.com/product.jpg"
                  ],
                  @"video_url": @[@"https://example.com/motion-reference.mp4"],
                  @"audio_url": @[@"https://example.com/music-reference.mp3"],
                  @"resolution": @"720p",
                  @"video_length": @8,
                  @"aspect_ratio": @"16:9",
                  @"generate_audio": @YES,
                  @"output_format": @"mov"
              },
              @"out_task_id": @"seedance2_5_reference_123456"
          };

          NSError *error;
          NSData *jsonData = [NSJSONSerialization dataWithJSONObject:payload
                                                            options:0
                                                              error:&error];

          NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
          [request setHTTPMethod:@"POST"];
          [request setValue:@"Bearer <token>" forHTTPHeaderField:@"Authorization"];
          [request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
          [request setHTTPBody:jsonData];

          NSURLSessionDataTask *task = [[NSURLSession sharedSession]
              dataTaskWithRequest:request
              completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
                  if (error) {
                      NSLog(@"Error: %@", error);
                      return;
                  }
                  NSString *result = [[NSString alloc] initWithData:data
                                                          encoding:NSUTF8StringEncoding];
                  NSLog(@"%@", result);
              }];

          [task resume];
          [[NSRunLoop mainRunLoop] run];
      }
      return 0;
  }
  ```

  ```ocaml OCaml theme={null}
  (* Requires cohttp and yojson libraries *)
  open Lwt
  open Cohttp
  open Cohttp_lwt_unix

  let url = "https://aireiter.com/api/openapi/submit"

  let payload = {|{
    "model": "seedance2_5",
    "params": {
      "prompt": "Cinematic product short film, keep the character and product appearance consistent, with a smooth camera orbit and natural ambient sound.",
      "type": "all_reference",
      "image_url": [
        "https://example.com/character.jpg",
        "https://example.com/product.jpg"
      ],
      "video_url": [
        "https://example.com/motion-reference.mp4"
      ],
      "audio_url": [
        "https://example.com/music-reference.mp3"
      ],
      "resolution": "720p",
      "video_length": 8,
      "aspect_ratio": "16:9",
      "generate_audio": true,
      "output_format": "mov"
    },
    "out_task_id": "seedance2_5_reference_123456"
  }|}

  let () =
    let headers = Header.init ()
      |> fun h -> Header.add h "Authorization" "Bearer <token>"
      |> fun h -> Header.add h "Content-Type" "application/json"
    in
    let body = Cohttp_lwt.Body.of_string payload in

    let response = Client.post ~headers ~body (Uri.of_string url) >>= fun (resp, body) ->
      body |> Cohttp_lwt.Body.to_string >|= fun body_str ->
      print_endline body_str
    in
    Lwt_main.run response
  ```

  ```dart Dart theme={null}
  import 'dart:convert';
  import 'package:http/http.dart' as http;

  void main() async {
    final url = Uri.parse('https://aireiter.com/api/openapi/submit');

    final payload = {
          "model": "seedance2_5",
          "params": {
              "prompt": "Cinematic product short film, keep the character and product appearance consistent, with a smooth camera orbit and natural ambient sound.",
              "type": "all_reference",
              "image_url": ["https://example.com/character.jpg", "https://example.com/product.jpg"],
              "video_url": ["https://example.com/motion-reference.mp4"],
              "audio_url": ["https://example.com/music-reference.mp3"],
              "resolution": "720p",
              "video_length": 8,
              "aspect_ratio": "16:9",
              "generate_audio": true,
              "output_format": "mov"
          },
          "out_task_id": "seedance2_5_reference_123456"
      };

    final response = await http.post(
      url,
      headers: {
        'Authorization': 'Bearer <token>',
        'Content-Type': 'application/json'
      },
      body: jsonEncode(payload),
    );

    print(response.body);
  }
  ```

  ```r R theme={null}
  library(httr)
  library(jsonlite)

  url <- "https://aireiter.com/api/openapi/submit"

  payload <- list(
    model = "seedance2_5",
    params = list(
      prompt = "Cinematic product short film, keep the character and product appearance consistent, with a smooth camera orbit and natural ambient sound.",
      type = "all_reference",
      image_url = list(
        "https://example.com/character.jpg",
        "https://example.com/product.jpg"
      ),
      video_url = list(
        "https://example.com/motion-reference.mp4"
      ),
      audio_url = list(
        "https://example.com/music-reference.mp3"
      ),
      resolution = "720p",
      video_length = 8,
      aspect_ratio = "16:9",
      generate_audio = TRUE,
      output_format = "mov"
    ),
    out_task_id = "seedance2_5_reference_123456"
  )

  response <- POST(
    url,
    add_headers(
      Authorization = "Bearer <token>",
      `Content-Type` = "application/json"
    ),
    body = toJSON(payload, auto_unbox = TRUE),
    encode = "raw"
  )

  cat(content(response, "text"))
  ```
</RequestExample>

<ResponseExample>
  ```json 200 theme={null}
  {
    "statusCode": 200,
    "message": "",
    "data": {
        "out_task_id": "seedance2_5_reference_123456",
        "status": "pending",
        "estimated_credits": 100,
        "created_at": "2025-12-22T06:03:28.242Z"
    }
  }
  ```

  ```json 400 theme={null}
    {
        "statusCode": 400,
        "message": "Invalid request parameters",
        "ok": false
    }
  ```

  ```json 401 theme={null}
  {
    "error": {
      "code": 401,
      "message": "Authentication failed, please check your API key"
    }
  }
  ```

  ```json 433 theme={null}
    {
      "error": {
        "code": 433,
        "message": "Insufficient account balance, please top up and try again"
      }
    }
  ```

  ```json 500 theme={null}
  {
    "error": {
      "code": 500,
      "message": "Internal server error, please try again later"
    }
  }
  ```
</ResponseExample>

## Mode Rules

| type | Available Assets | Asset Limitations |
| - | - | - |
| `all_reference` | `image_url`, `video_url`, `audio_url` | Up to 30 images, 9 videos, and 10 audio files |
| `first_last_frame` | `image_url`, `end_image_url` | Provide the first and last frame images as needed; please do not pass videos or audio |

<Warning>
  Please ensure that all asset URLs are directly accessible from the public internet. The task is processed asynchronously, so do not use the HTTP connection from the submission request to wait for the final video.
</Warning>


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