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"
}'
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"
}'
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())
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));
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))
}
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
$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;
?>
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
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()
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);
}
}
#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;
}
#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;
}
(* 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
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);
}
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"))
{
"statusCode": 200,
"message": "",
"data": {
"out_task_id": "seedance2_5_reference_123456",
"status": "pending",
"estimated_credits": 100,
"created_at": "2025-12-22T06:03:28.242Z"
}
}
{
"statusCode": 400,
"message": "Invalid request parameters",
"ok": false
}
{
"error": {
"code": 401,
"message": "Authentication failed, please check your API key"
}
}
{
"error": {
"code": 433,
"message": "Insufficient account balance, please top up and try again"
}
}
{
"error": {
"code": 500,
"message": "Internal server error, please try again later"
}
}
Seedance 2.5
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
POST
/
api
/
openapi
/
submit
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"
}'
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"
}'
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())
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));
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))
}
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
$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;
?>
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
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()
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);
}
}
#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;
}
#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;
}
(* 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
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);
}
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"))
{
"statusCode": 200,
"message": "",
"data": {
"out_task_id": "seedance2_5_reference_123456",
"status": "pending",
"estimated_credits": 100,
"created_at": "2025-12-22T06:03:28.242Z"
}
}
{
"statusCode": 400,
"message": "Invalid request parameters",
"ok": false
}
{
"error": {
"code": 401,
"message": "Authentication failed, please check your API key"
}
}
{
"error": {
"code": 433,
"message": "Insufficient account balance, please top up and try again"
}
}
{
"error": {
"code": 500,
"message": "Internal server error, please try again later"
}
}
The model name of Seedance 2.5 in AIReiter is
seedance2_5.Authorizations
string
required
All endpoints require Bearer Token authentication.Visit the API Key management page to get your API Key, and add the following to the request headers:
Authorization: Bearer YOUR_API_KEY
Body
string
required
Model name, fixed value:
seedance2_5
object
required
Model parameters object.
Show params Object Properties
Show params Object Properties
string
required
Text description for video generation.It is recommended to describe the subject, scene, action, camera movement, visual style, dialogue, and ambient sound.
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 audiofirst_last_frame- First and last frame mode, which uses the first frame and an optional last frame image
string | string[]
Reference image URL.
all_referencemode: up to 30 images; maximum 50MB per image; minimum image side length 300pxfirst_last_framemode: used as the first frame image; maximum 10MB; minimum image side length 300px
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.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
Do not pass this parameter in
first_last_frame mode.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
Do not pass this parameter in
first_last_frame mode.string
default:"720p"
Video resolution:
480p720p- Default value
integer
default:"5"
Output video duration, in seconds.Supports integers from
4 to 30.string
default:"16:9"
Video aspect ratio:
21:9- Ultra-wide screen16:9- Landscape, default value9:16- Portrait4:3- Standard landscape3:4- Standard portrait1:1- Square
boolean
default:"true"
Whether to generate AI audio synchronized with the video.
true- Generate audio, default valuefalse- Do not generate audio
string
default:"mp4"
Output video format:
mp4- General-purpose format with a smaller file size, default valuemov- High color precision format (yuv444p), suitable for post-production expansion and stitching
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.
Response
string
Initiator task ID, can be used to query the result.
string
Initial status, usually
"pending".number
Estimated credits consumed.
string
Creation time, in ISO 8601 format.
Query Task
Seedance 2.5 uses asynchronous processing. After submission succeeds, use the sameout_task_id to query the task:
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"
}'
output array in the response will contain the generated video URL. For the complete fields, see Get Task Status.
Request Examples
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"
}'
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"
}'
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())
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));
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))
}
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
$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;
?>
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
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()
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);
}
}
#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;
}
#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;
}
(* 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
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);
}
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"))
{
"statusCode": 200,
"message": "",
"data": {
"out_task_id": "seedance2_5_reference_123456",
"status": "pending",
"estimated_credits": 100,
"created_at": "2025-12-22T06:03:28.242Z"
}
}
{
"statusCode": 400,
"message": "Invalid request parameters",
"ok": false
}
{
"error": {
"code": 401,
"message": "Authentication failed, please check your API key"
}
}
{
"error": {
"code": 433,
"message": "Insufficient account balance, please top up and try again"
}
}
{
"error": {
"code": 500,
"message": "Internal server error, please try again later"
}
}
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 |
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.