curl --request POST \
--url https://ai.cubeuaeai.com/v1/video/generations \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"model": "seedance-2.0",
"content": [
{
"type": "text",
"text": "A cat playing the piano in a sunlit room"
},
{
"type": "image_url",
"image_url": {
"url": "https://example.com/reference.jpg"
},
"role": "reference_image"
}
],
"generate_audio": true,
"resolution": "720p",
"ratio": "adaptive",
"duration": 5,
"tools": [
{
"type": "web_search"
}
],
"watermark": false,
"return_last_frame": false
}
'import requests
url = "https://ai.cubeuaeai.com/v1/video/generations"
payload = {
"model": "seedance-2.0",
"content": [
{
"type": "text",
"text": "A cat playing the piano in a sunlit room"
},
{
"type": "image_url",
"image_url": { "url": "https://example.com/reference.jpg" },
"role": "reference_image"
}
],
"generate_audio": True,
"resolution": "720p",
"ratio": "adaptive",
"duration": 5,
"tools": [{ "type": "web_search" }],
"watermark": False,
"return_last_frame": False
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
model: 'seedance-2.0',
content: [
{type: 'text', text: 'A cat playing the piano in a sunlit room'},
{
type: 'image_url',
image_url: {url: 'https://example.com/reference.jpg'},
role: 'reference_image'
}
],
generate_audio: true,
resolution: '720p',
ratio: 'adaptive',
duration: 5,
tools: [{type: 'web_search'}],
watermark: false,
return_last_frame: false
})
};
fetch('https://ai.cubeuaeai.com/v1/video/generations', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://ai.cubeuaeai.com/v1/video/generations",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'model' => 'seedance-2.0',
'content' => [
[
'type' => 'text',
'text' => 'A cat playing the piano in a sunlit room'
],
[
'type' => 'image_url',
'image_url' => [
'url' => 'https://example.com/reference.jpg'
],
'role' => 'reference_image'
]
],
'generate_audio' => true,
'resolution' => '720p',
'ratio' => 'adaptive',
'duration' => 5,
'tools' => [
[
'type' => 'web_search'
]
],
'watermark' => false,
'return_last_frame' => false
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://ai.cubeuaeai.com/v1/video/generations"
payload := strings.NewReader("{\n \"model\": \"seedance-2.0\",\n \"content\": [\n {\n \"type\": \"text\",\n \"text\": \"A cat playing the piano in a sunlit room\"\n },\n {\n \"type\": \"image_url\",\n \"image_url\": {\n \"url\": \"https://example.com/reference.jpg\"\n },\n \"role\": \"reference_image\"\n }\n ],\n \"generate_audio\": true,\n \"resolution\": \"720p\",\n \"ratio\": \"adaptive\",\n \"duration\": 5,\n \"tools\": [\n {\n \"type\": \"web_search\"\n }\n ],\n \"watermark\": false,\n \"return_last_frame\": false\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://ai.cubeuaeai.com/v1/video/generations")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"model\": \"seedance-2.0\",\n \"content\": [\n {\n \"type\": \"text\",\n \"text\": \"A cat playing the piano in a sunlit room\"\n },\n {\n \"type\": \"image_url\",\n \"image_url\": {\n \"url\": \"https://example.com/reference.jpg\"\n },\n \"role\": \"reference_image\"\n }\n ],\n \"generate_audio\": true,\n \"resolution\": \"720p\",\n \"ratio\": \"adaptive\",\n \"duration\": 5,\n \"tools\": [\n {\n \"type\": \"web_search\"\n }\n ],\n \"watermark\": false,\n \"return_last_frame\": false\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://ai.cubeuaeai.com/v1/video/generations")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"model\": \"seedance-2.0\",\n \"content\": [\n {\n \"type\": \"text\",\n \"text\": \"A cat playing the piano in a sunlit room\"\n },\n {\n \"type\": \"image_url\",\n \"image_url\": {\n \"url\": \"https://example.com/reference.jpg\"\n },\n \"role\": \"reference_image\"\n }\n ],\n \"generate_audio\": true,\n \"resolution\": \"720p\",\n \"ratio\": \"adaptive\",\n \"duration\": 5,\n \"tools\": [\n {\n \"type\": \"web_search\"\n }\n ],\n \"watermark\": false,\n \"return_last_frame\": false\n}"
response = http.request(request)
puts response.read_body{
"id": "cgt-20260312231129-7db6s",
"task_id": "cgt-20260312231129-7db6s",
"object": "video",
"model": "seedance-2.0",
"status": "",
"progress": 0,
"created_at": 1773328294
}{
"error": {
"code": "<string>",
"message": "<string>"
}
}{
"error": {
"code": "<string>",
"message": "<string>"
}
}Seedance 2.0
Create an asynchronous video generation task. Supports text-to-video, image-to-video, multimodal references, video editing, video extension, and web-search enhancement.
curl --request POST \
--url https://ai.cubeuaeai.com/v1/video/generations \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"model": "seedance-2.0",
"content": [
{
"type": "text",
"text": "A cat playing the piano in a sunlit room"
},
{
"type": "image_url",
"image_url": {
"url": "https://example.com/reference.jpg"
},
"role": "reference_image"
}
],
"generate_audio": true,
"resolution": "720p",
"ratio": "adaptive",
"duration": 5,
"tools": [
{
"type": "web_search"
}
],
"watermark": false,
"return_last_frame": false
}
'import requests
url = "https://ai.cubeuaeai.com/v1/video/generations"
payload = {
"model": "seedance-2.0",
"content": [
{
"type": "text",
"text": "A cat playing the piano in a sunlit room"
},
{
"type": "image_url",
"image_url": { "url": "https://example.com/reference.jpg" },
"role": "reference_image"
}
],
"generate_audio": True,
"resolution": "720p",
"ratio": "adaptive",
"duration": 5,
"tools": [{ "type": "web_search" }],
"watermark": False,
"return_last_frame": False
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
model: 'seedance-2.0',
content: [
{type: 'text', text: 'A cat playing the piano in a sunlit room'},
{
type: 'image_url',
image_url: {url: 'https://example.com/reference.jpg'},
role: 'reference_image'
}
],
generate_audio: true,
resolution: '720p',
ratio: 'adaptive',
duration: 5,
tools: [{type: 'web_search'}],
watermark: false,
return_last_frame: false
})
};
fetch('https://ai.cubeuaeai.com/v1/video/generations', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://ai.cubeuaeai.com/v1/video/generations",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'model' => 'seedance-2.0',
'content' => [
[
'type' => 'text',
'text' => 'A cat playing the piano in a sunlit room'
],
[
'type' => 'image_url',
'image_url' => [
'url' => 'https://example.com/reference.jpg'
],
'role' => 'reference_image'
]
],
'generate_audio' => true,
'resolution' => '720p',
'ratio' => 'adaptive',
'duration' => 5,
'tools' => [
[
'type' => 'web_search'
]
],
'watermark' => false,
'return_last_frame' => false
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://ai.cubeuaeai.com/v1/video/generations"
payload := strings.NewReader("{\n \"model\": \"seedance-2.0\",\n \"content\": [\n {\n \"type\": \"text\",\n \"text\": \"A cat playing the piano in a sunlit room\"\n },\n {\n \"type\": \"image_url\",\n \"image_url\": {\n \"url\": \"https://example.com/reference.jpg\"\n },\n \"role\": \"reference_image\"\n }\n ],\n \"generate_audio\": true,\n \"resolution\": \"720p\",\n \"ratio\": \"adaptive\",\n \"duration\": 5,\n \"tools\": [\n {\n \"type\": \"web_search\"\n }\n ],\n \"watermark\": false,\n \"return_last_frame\": false\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://ai.cubeuaeai.com/v1/video/generations")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"model\": \"seedance-2.0\",\n \"content\": [\n {\n \"type\": \"text\",\n \"text\": \"A cat playing the piano in a sunlit room\"\n },\n {\n \"type\": \"image_url\",\n \"image_url\": {\n \"url\": \"https://example.com/reference.jpg\"\n },\n \"role\": \"reference_image\"\n }\n ],\n \"generate_audio\": true,\n \"resolution\": \"720p\",\n \"ratio\": \"adaptive\",\n \"duration\": 5,\n \"tools\": [\n {\n \"type\": \"web_search\"\n }\n ],\n \"watermark\": false,\n \"return_last_frame\": false\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://ai.cubeuaeai.com/v1/video/generations")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"model\": \"seedance-2.0\",\n \"content\": [\n {\n \"type\": \"text\",\n \"text\": \"A cat playing the piano in a sunlit room\"\n },\n {\n \"type\": \"image_url\",\n \"image_url\": {\n \"url\": \"https://example.com/reference.jpg\"\n },\n \"role\": \"reference_image\"\n }\n ],\n \"generate_audio\": true,\n \"resolution\": \"720p\",\n \"ratio\": \"adaptive\",\n \"duration\": 5,\n \"tools\": [\n {\n \"type\": \"web_search\"\n }\n ],\n \"watermark\": false,\n \"return_last_frame\": false\n}"
response = http.request(request)
puts response.read_body{
"id": "cgt-20260312231129-7db6s",
"task_id": "cgt-20260312231129-7db6s",
"object": "video",
"model": "seedance-2.0",
"status": "",
"progress": 0,
"created_at": 1773328294
}{
"error": {
"code": "<string>",
"message": "<string>"
}
}{
"error": {
"code": "<string>",
"message": "<string>"
}
}Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Body
model ID
seedance-2.0 "seedance-2.0"
Input content array. Supports combinations of text, image, video, and audio:
- Text
- Text (optional) + image
- Text (optional) + video
- Text (optional) + image + audio
- Text (optional) + image + video
- Text (optional) + video + audio
- Text (optional) + image + video + audio
Show child attributes
Show child attributes
[
{
"type": "text",
"text": "A cat playing the piano in a sunlit room"
},
{
"type": "image_url",
"image_url": {
"url": "https://example.com/reference.jpg"
},
"role": "reference_image"
}
]
Controls whether the generated video includes synchronized audio.
true— automatically generate speech, sound effects, and background musicfalse— silent video
Output video resolution.
480p, 720p, 1080p Output aspect ratio. adaptive automatically chooses the best ratio from the input.
16:9, 4:3, 1:1, 3:4, 9:16, 21:9, adaptive Video duration in seconds. Integer, 4–15.
4 <= x <= 15Tools the model can call. Currently supports web search (text-to-video only).
Show child attributes
Show child attributes
Whether to add a watermark.
Whether to return the last frame of the generated video.
Response
Video generation task created