创建视频
curl --request POST \
--url https://octopusx.ai/v1/video/generations \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"model": "<string>",
"content": [
{}
],
"content[].type": "<string>",
"content[].text": "<string>",
"content[].image_url": {},
"content[].image_url.url": "<string>",
"content[].video_url": {},
"content[].video_url.url": "<string>",
"content[].audio_url": {},
"content[].audio_url.url": "<string>",
"content[].draft_task": {},
"content[].draft_task.id": "<string>",
"content[].role": "<string>",
"metadata": {},
"metadata.duration": 123,
"metadata.resolution": "<string>",
"metadata.ratio": "<string>",
"metadata.frames": 123,
"metadata.seed": 123,
"metadata.camera_fixed": true,
"metadata.watermark": true,
"metadata.generate_audio": true,
"metadata.return_last_frame": true,
"metadata.draft": true,
"metadata.service_tier": "<string>",
"metadata.execution_expires_after": 123,
"metadata.callback_url": "<string>"
}
'import requests
url = "https://octopusx.ai/v1/video/generations"
payload = {
"model": "<string>",
"content": [{}],
"content[].type": "<string>",
"content[].text": "<string>",
"content[].image_url": {},
"content[].image_url.url": "<string>",
"content[].video_url": {},
"content[].video_url.url": "<string>",
"content[].audio_url": {},
"content[].audio_url.url": "<string>",
"content[].draft_task": {},
"content[].draft_task.id": "<string>",
"content[].role": "<string>",
"metadata": {},
"metadata.duration": 123,
"metadata.resolution": "<string>",
"metadata.ratio": "<string>",
"metadata.frames": 123,
"metadata.seed": 123,
"metadata.camera_fixed": True,
"metadata.watermark": True,
"metadata.generate_audio": True,
"metadata.return_last_frame": True,
"metadata.draft": True,
"metadata.service_tier": "<string>",
"metadata.execution_expires_after": 123,
"metadata.callback_url": "<string>"
}
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: '<string>',
content: [{}],
'content[].type': '<string>',
'content[].text': '<string>',
'content[].image_url': {},
'content[].image_url.url': '<string>',
'content[].video_url': {},
'content[].video_url.url': '<string>',
'content[].audio_url': {},
'content[].audio_url.url': '<string>',
'content[].draft_task': {},
'content[].draft_task.id': '<string>',
'content[].role': '<string>',
metadata: {},
'metadata.duration': 123,
'metadata.resolution': '<string>',
'metadata.ratio': '<string>',
'metadata.frames': 123,
'metadata.seed': 123,
'metadata.camera_fixed': true,
'metadata.watermark': true,
'metadata.generate_audio': true,
'metadata.return_last_frame': true,
'metadata.draft': true,
'metadata.service_tier': '<string>',
'metadata.execution_expires_after': 123,
'metadata.callback_url': '<string>'
})
};
fetch('https://octopusx.ai/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://octopusx.ai/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' => '<string>',
'content' => [
[
]
],
'content[].type' => '<string>',
'content[].text' => '<string>',
'content[].image_url' => [
],
'content[].image_url.url' => '<string>',
'content[].video_url' => [
],
'content[].video_url.url' => '<string>',
'content[].audio_url' => [
],
'content[].audio_url.url' => '<string>',
'content[].draft_task' => [
],
'content[].draft_task.id' => '<string>',
'content[].role' => '<string>',
'metadata' => [
],
'metadata.duration' => 123,
'metadata.resolution' => '<string>',
'metadata.ratio' => '<string>',
'metadata.frames' => 123,
'metadata.seed' => 123,
'metadata.camera_fixed' => true,
'metadata.watermark' => true,
'metadata.generate_audio' => true,
'metadata.return_last_frame' => true,
'metadata.draft' => true,
'metadata.service_tier' => '<string>',
'metadata.execution_expires_after' => 123,
'metadata.callback_url' => '<string>'
]),
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://octopusx.ai/v1/video/generations"
payload := strings.NewReader("{\n \"model\": \"<string>\",\n \"content\": [\n {}\n ],\n \"content[].type\": \"<string>\",\n \"content[].text\": \"<string>\",\n \"content[].image_url\": {},\n \"content[].image_url.url\": \"<string>\",\n \"content[].video_url\": {},\n \"content[].video_url.url\": \"<string>\",\n \"content[].audio_url\": {},\n \"content[].audio_url.url\": \"<string>\",\n \"content[].draft_task\": {},\n \"content[].draft_task.id\": \"<string>\",\n \"content[].role\": \"<string>\",\n \"metadata\": {},\n \"metadata.duration\": 123,\n \"metadata.resolution\": \"<string>\",\n \"metadata.ratio\": \"<string>\",\n \"metadata.frames\": 123,\n \"metadata.seed\": 123,\n \"metadata.camera_fixed\": true,\n \"metadata.watermark\": true,\n \"metadata.generate_audio\": true,\n \"metadata.return_last_frame\": true,\n \"metadata.draft\": true,\n \"metadata.service_tier\": \"<string>\",\n \"metadata.execution_expires_after\": 123,\n \"metadata.callback_url\": \"<string>\"\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://octopusx.ai/v1/video/generations")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"model\": \"<string>\",\n \"content\": [\n {}\n ],\n \"content[].type\": \"<string>\",\n \"content[].text\": \"<string>\",\n \"content[].image_url\": {},\n \"content[].image_url.url\": \"<string>\",\n \"content[].video_url\": {},\n \"content[].video_url.url\": \"<string>\",\n \"content[].audio_url\": {},\n \"content[].audio_url.url\": \"<string>\",\n \"content[].draft_task\": {},\n \"content[].draft_task.id\": \"<string>\",\n \"content[].role\": \"<string>\",\n \"metadata\": {},\n \"metadata.duration\": 123,\n \"metadata.resolution\": \"<string>\",\n \"metadata.ratio\": \"<string>\",\n \"metadata.frames\": 123,\n \"metadata.seed\": 123,\n \"metadata.camera_fixed\": true,\n \"metadata.watermark\": true,\n \"metadata.generate_audio\": true,\n \"metadata.return_last_frame\": true,\n \"metadata.draft\": true,\n \"metadata.service_tier\": \"<string>\",\n \"metadata.execution_expires_after\": 123,\n \"metadata.callback_url\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://octopusx.ai/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\": \"<string>\",\n \"content\": [\n {}\n ],\n \"content[].type\": \"<string>\",\n \"content[].text\": \"<string>\",\n \"content[].image_url\": {},\n \"content[].image_url.url\": \"<string>\",\n \"content[].video_url\": {},\n \"content[].video_url.url\": \"<string>\",\n \"content[].audio_url\": {},\n \"content[].audio_url.url\": \"<string>\",\n \"content[].draft_task\": {},\n \"content[].draft_task.id\": \"<string>\",\n \"content[].role\": \"<string>\",\n \"metadata\": {},\n \"metadata.duration\": 123,\n \"metadata.resolution\": \"<string>\",\n \"metadata.ratio\": \"<string>\",\n \"metadata.frames\": 123,\n \"metadata.seed\": 123,\n \"metadata.camera_fixed\": true,\n \"metadata.watermark\": true,\n \"metadata.generate_audio\": true,\n \"metadata.return_last_frame\": true,\n \"metadata.draft\": true,\n \"metadata.service_tier\": \"<string>\",\n \"metadata.execution_expires_after\": 123,\n \"metadata.callback_url\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"task_id": "cgt-20260412163502-x8k2m"
}
{
"error": {
"code": "InvalidParameter",
"message": "the parameter duration specified in the request is not valid",
"type": "new_api_error"
}
}
{
"error": {
"code": "Unauthorized",
"message": "Invalid API key provided",
"type": "new_api_error"
}
}
{
"error": {
"code": "Forbidden",
"message": "access denied",
"type": "new_api_error"
}
}
{
"error": {
"code": "RateLimitExceeded",
"message": "当前请求频率过高,请稍后再试",
"type": "new_api_error"
}
}
{
"error": {
"code": "InternalError",
"message": "internal server error",
"type": "new_api_error"
}
}
Seedance-2
创建视频
使用 POST /v1/video/generations 提交 Seedance 2.0 多模态视频生成任务。
POST
https://octopusx.ai
/
v1
/
video
/
generations
创建视频
curl --request POST \
--url https://octopusx.ai/v1/video/generations \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"model": "<string>",
"content": [
{}
],
"content[].type": "<string>",
"content[].text": "<string>",
"content[].image_url": {},
"content[].image_url.url": "<string>",
"content[].video_url": {},
"content[].video_url.url": "<string>",
"content[].audio_url": {},
"content[].audio_url.url": "<string>",
"content[].draft_task": {},
"content[].draft_task.id": "<string>",
"content[].role": "<string>",
"metadata": {},
"metadata.duration": 123,
"metadata.resolution": "<string>",
"metadata.ratio": "<string>",
"metadata.frames": 123,
"metadata.seed": 123,
"metadata.camera_fixed": true,
"metadata.watermark": true,
"metadata.generate_audio": true,
"metadata.return_last_frame": true,
"metadata.draft": true,
"metadata.service_tier": "<string>",
"metadata.execution_expires_after": 123,
"metadata.callback_url": "<string>"
}
'import requests
url = "https://octopusx.ai/v1/video/generations"
payload = {
"model": "<string>",
"content": [{}],
"content[].type": "<string>",
"content[].text": "<string>",
"content[].image_url": {},
"content[].image_url.url": "<string>",
"content[].video_url": {},
"content[].video_url.url": "<string>",
"content[].audio_url": {},
"content[].audio_url.url": "<string>",
"content[].draft_task": {},
"content[].draft_task.id": "<string>",
"content[].role": "<string>",
"metadata": {},
"metadata.duration": 123,
"metadata.resolution": "<string>",
"metadata.ratio": "<string>",
"metadata.frames": 123,
"metadata.seed": 123,
"metadata.camera_fixed": True,
"metadata.watermark": True,
"metadata.generate_audio": True,
"metadata.return_last_frame": True,
"metadata.draft": True,
"metadata.service_tier": "<string>",
"metadata.execution_expires_after": 123,
"metadata.callback_url": "<string>"
}
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: '<string>',
content: [{}],
'content[].type': '<string>',
'content[].text': '<string>',
'content[].image_url': {},
'content[].image_url.url': '<string>',
'content[].video_url': {},
'content[].video_url.url': '<string>',
'content[].audio_url': {},
'content[].audio_url.url': '<string>',
'content[].draft_task': {},
'content[].draft_task.id': '<string>',
'content[].role': '<string>',
metadata: {},
'metadata.duration': 123,
'metadata.resolution': '<string>',
'metadata.ratio': '<string>',
'metadata.frames': 123,
'metadata.seed': 123,
'metadata.camera_fixed': true,
'metadata.watermark': true,
'metadata.generate_audio': true,
'metadata.return_last_frame': true,
'metadata.draft': true,
'metadata.service_tier': '<string>',
'metadata.execution_expires_after': 123,
'metadata.callback_url': '<string>'
})
};
fetch('https://octopusx.ai/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://octopusx.ai/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' => '<string>',
'content' => [
[
]
],
'content[].type' => '<string>',
'content[].text' => '<string>',
'content[].image_url' => [
],
'content[].image_url.url' => '<string>',
'content[].video_url' => [
],
'content[].video_url.url' => '<string>',
'content[].audio_url' => [
],
'content[].audio_url.url' => '<string>',
'content[].draft_task' => [
],
'content[].draft_task.id' => '<string>',
'content[].role' => '<string>',
'metadata' => [
],
'metadata.duration' => 123,
'metadata.resolution' => '<string>',
'metadata.ratio' => '<string>',
'metadata.frames' => 123,
'metadata.seed' => 123,
'metadata.camera_fixed' => true,
'metadata.watermark' => true,
'metadata.generate_audio' => true,
'metadata.return_last_frame' => true,
'metadata.draft' => true,
'metadata.service_tier' => '<string>',
'metadata.execution_expires_after' => 123,
'metadata.callback_url' => '<string>'
]),
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://octopusx.ai/v1/video/generations"
payload := strings.NewReader("{\n \"model\": \"<string>\",\n \"content\": [\n {}\n ],\n \"content[].type\": \"<string>\",\n \"content[].text\": \"<string>\",\n \"content[].image_url\": {},\n \"content[].image_url.url\": \"<string>\",\n \"content[].video_url\": {},\n \"content[].video_url.url\": \"<string>\",\n \"content[].audio_url\": {},\n \"content[].audio_url.url\": \"<string>\",\n \"content[].draft_task\": {},\n \"content[].draft_task.id\": \"<string>\",\n \"content[].role\": \"<string>\",\n \"metadata\": {},\n \"metadata.duration\": 123,\n \"metadata.resolution\": \"<string>\",\n \"metadata.ratio\": \"<string>\",\n \"metadata.frames\": 123,\n \"metadata.seed\": 123,\n \"metadata.camera_fixed\": true,\n \"metadata.watermark\": true,\n \"metadata.generate_audio\": true,\n \"metadata.return_last_frame\": true,\n \"metadata.draft\": true,\n \"metadata.service_tier\": \"<string>\",\n \"metadata.execution_expires_after\": 123,\n \"metadata.callback_url\": \"<string>\"\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://octopusx.ai/v1/video/generations")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"model\": \"<string>\",\n \"content\": [\n {}\n ],\n \"content[].type\": \"<string>\",\n \"content[].text\": \"<string>\",\n \"content[].image_url\": {},\n \"content[].image_url.url\": \"<string>\",\n \"content[].video_url\": {},\n \"content[].video_url.url\": \"<string>\",\n \"content[].audio_url\": {},\n \"content[].audio_url.url\": \"<string>\",\n \"content[].draft_task\": {},\n \"content[].draft_task.id\": \"<string>\",\n \"content[].role\": \"<string>\",\n \"metadata\": {},\n \"metadata.duration\": 123,\n \"metadata.resolution\": \"<string>\",\n \"metadata.ratio\": \"<string>\",\n \"metadata.frames\": 123,\n \"metadata.seed\": 123,\n \"metadata.camera_fixed\": true,\n \"metadata.watermark\": true,\n \"metadata.generate_audio\": true,\n \"metadata.return_last_frame\": true,\n \"metadata.draft\": true,\n \"metadata.service_tier\": \"<string>\",\n \"metadata.execution_expires_after\": 123,\n \"metadata.callback_url\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://octopusx.ai/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\": \"<string>\",\n \"content\": [\n {}\n ],\n \"content[].type\": \"<string>\",\n \"content[].text\": \"<string>\",\n \"content[].image_url\": {},\n \"content[].image_url.url\": \"<string>\",\n \"content[].video_url\": {},\n \"content[].video_url.url\": \"<string>\",\n \"content[].audio_url\": {},\n \"content[].audio_url.url\": \"<string>\",\n \"content[].draft_task\": {},\n \"content[].draft_task.id\": \"<string>\",\n \"content[].role\": \"<string>\",\n \"metadata\": {},\n \"metadata.duration\": 123,\n \"metadata.resolution\": \"<string>\",\n \"metadata.ratio\": \"<string>\",\n \"metadata.frames\": 123,\n \"metadata.seed\": 123,\n \"metadata.camera_fixed\": true,\n \"metadata.watermark\": true,\n \"metadata.generate_audio\": true,\n \"metadata.return_last_frame\": true,\n \"metadata.draft\": true,\n \"metadata.service_tier\": \"<string>\",\n \"metadata.execution_expires_after\": 123,\n \"metadata.callback_url\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"task_id": "cgt-20260412163502-x8k2m"
}
{
"error": {
"code": "InvalidParameter",
"message": "the parameter duration specified in the request is not valid",
"type": "new_api_error"
}
}
{
"error": {
"code": "Unauthorized",
"message": "Invalid API key provided",
"type": "new_api_error"
}
}
{
"error": {
"code": "Forbidden",
"message": "access denied",
"type": "new_api_error"
}
}
{
"error": {
"code": "RateLimitExceeded",
"message": "当前请求频率过高,请稍后再试",
"type": "new_api_error"
}
}
{
"error": {
"code": "InternalError",
"message": "internal server error",
"type": "new_api_error"
}
}
创建视频
提交 Seedance 2.0 视频生成任务,支持文生视频、首帧/首尾帧、参考图/视频/音频、视频延续、视频编辑与多模态合成等模式。素材库资产在content 中推荐使用 asset://{assetId} 引用(见 上传素材)。
方法与路径
POST /v1/video/generations
请求示例
{
"model": "doubao-seedance-2-0-260128",
"content": [
{
"type": "text",
"text": "第一人称视角果茶广告:0-2秒 手摘苹果;2-4秒 切镜头投入雪克杯摇晃;4-6秒 倒入透明杯特写;6-8秒 举杯到镜头前"
},
{
"type": "image_url",
"image_url": { "url": "https://example.com/apple.jpg" },
"role": "reference_image"
},
{
"type": "image_url",
"image_url": { "url": "https://example.com/cup.jpg" },
"role": "reference_image"
},
{
"type": "video_url",
"video_url": { "url": "https://example.com/pov_reference.mp4" },
"role": "reference_video"
},
{
"type": "audio_url",
"audio_url": { "url": "https://example.com/bgm.mp3" },
"role": "reference_audio"
}
],
"metadata": {
"duration": 8,
"resolution": "720p",
"ratio": "16:9",
"generate_audio": true,
"watermark": false
}
}
{
"model": "doubao-seedance-2-0-260128",
"content": [
{
"type": "text",
"text": "Animate naturally from the first frame"
},
{
"type": "image_url",
"image_url": { "url": "https://example.com/first.jpg" },
"role": "first_frame"
}
],
"metadata": {
"duration": 10,
"resolution": "720p",
"ratio": "adaptive"
}
}
{
"model": "doubao-seedance-2-0-260128",
"content": [
{
"type": "text",
"text": "Smooth transition from first frame to last frame"
},
{
"type": "image_url",
"image_url": { "url": "https://example.com/first.jpg" },
"role": "first_frame"
},
{
"type": "image_url",
"image_url": { "url": "https://example.com/last.jpg" },
"role": "last_frame"
}
],
"metadata": {
"duration": 5,
"resolution": "720p",
"ratio": "16:9"
}
}
{
"model": "doubao-seedance-2-0-260128",
"content": [
{
"type": "text",
"text": "The subject walks forward naturally"
},
{
"type": "image_url",
"image_url": { "url": "https://example.com/character.jpg" },
"role": "reference_image"
}
],
"metadata": {
"duration": 10,
"resolution": "720p",
"ratio": "16:9"
}
}
{
"model": "doubao-seedance-2-0-260128",
"content": [
{
"type": "text",
"text": "Continue the motion and style of the source video"
},
{
"type": "video_url",
"video_url": { "url": "https://example.com/source.mp4" },
"role": "reference_video"
}
],
"metadata": {
"duration": 8,
"resolution": "720p",
"ratio": "adaptive"
}
}
{
"model": "doubao-seedance-2-0-260128",
"content": [
{
"type": "text",
"text": "Replace product in video with product in image"
},
{
"type": "video_url",
"video_url": { "url": "https://example.com/source.mp4" },
"role": "reference_video"
},
{
"type": "image_url",
"image_url": { "url": "https://example.com/product.jpg" },
"role": "reference_image"
}
],
"metadata": {
"duration": 8,
"resolution": "720p",
"ratio": "16:9",
"return_last_frame": true
}
}
{
"model": "doubao-seedance-2-0-260128",
"content": [
{
"type": "text",
"text": "第一人称视角果茶广告"
},
{
"type": "image_url",
"image_url": { "url": "https://example.com/apple.jpg" },
"role": "reference_image"
},
{
"type": "image_url",
"image_url": { "url": "https://example.com/cup.jpg" },
"role": "reference_image"
},
{
"type": "video_url",
"video_url": { "url": "https://example.com/pov_reference.mp4" },
"role": "reference_video"
},
{
"type": "audio_url",
"audio_url": { "url": "https://example.com/bgm.mp3" },
"role": "reference_audio"
}
],
"metadata": {
"duration": 8,
"resolution": "720p",
"ratio": "16:9",
"generate_audio": true,
"watermark": false
}
}
{
"model": "doubao-seedance-2-0-260128",
"content": [
{
"type": "text",
"text": "第一人称视角果茶广告:0-2秒 手摘苹果;2-4秒 切镜头投入雪克杯摇晃;4-6秒 倒入透明杯特写;6-8秒 举杯到镜头前"
},
{
"type": "image_url",
"image_url": { "url": "asset://asset-xxx" },
"role": "reference_image"
},
{
"type": "image_url",
"image_url": { "url": "asset://asset-xxx" },
"role": "reference_image"
},
{
"type": "video_url",
"video_url": { "url": "asset://asset-xxx" },
"role": "reference_video"
},
{
"type": "audio_url",
"audio_url": { "url": "asset://asset-xxx" },
"role": "reference_audio"
}
],
"metadata": {
"duration": 8,
"resolution": "720p",
"ratio": "16:9",
"generate_audio": true,
"watermark": false
}
}
响应示例
{
"task_id": "cgt-20260412163502-x8k2m"
}
{
"error": {
"code": "InvalidParameter",
"message": "the parameter duration specified in the request is not valid",
"type": "new_api_error"
}
}
{
"error": {
"code": "Unauthorized",
"message": "Invalid API key provided",
"type": "new_api_error"
}
}
{
"error": {
"code": "Forbidden",
"message": "access denied",
"type": "new_api_error"
}
}
{
"error": {
"code": "RateLimitExceeded",
"message": "当前请求频率过高,请稍后再试",
"type": "new_api_error"
}
}
{
"error": {
"code": "InternalError",
"message": "internal server error",
"type": "new_api_error"
}
}
task_id。
认证
Authorization: Bearer YOUR_API_KEY
Body
模型名称:
doubao-seedance-2-0-260128:标准版,追求最佳画质与复杂镜头调度doubao-seedance-2-0-fast-260128:Fast 版,追求低延迟、成本敏感场景
多模态输入数组,顺序影响角色分配。
内容类型:
text、image_url、video_url、audio_url、draft_task。当
type=text 时必填,提示词文本。当
type=image_url 时使用,须包含 url。图片公网 URL 或素材引用
asset://{assetId}。当
type=video_url 时使用,须包含 url。视频公网 URL 或
asset://{assetId}。当
type=audio_url 时使用,须包含 url。音频公网 URL 或
asset://{assetId}。当
type=draft_task 时使用,须包含 id;且必须是 content 中唯一元素。草稿任务 ID,用于基于草稿继续生成。
媒体角色:
first_frame:首帧(图片)last_frame:尾帧(图片)reference_image:参考图reference_video:参考/源视频(延续、编辑)reference_audio:参考音频(须metadata.generate_audio=true)
视频生成参数,均为可选。
视频时长(秒)。合法范围
[4, 15] 或 -1(由模型自动决定),默认 5。分辨率:
480p、720p、1080p,默认 720p。宽高比:
16:9、9:16、1:1、4:3、adaptive,默认 16:9。视频总帧数。与
duration 二选一,传了 frames 时优先于 duration。随机种子。相同
seed + 相同输入可得到相近结果。是否固定机位(抑制镜头运动),默认
false。是否在视频右下角加水印,默认
true。是否生成或合成音频。使用
reference_audio 时必须为 true,默认 false。是否返回末帧图片 URL,便于后续续写,默认
false。草稿模式:生成更快、质量略低,适合预览,默认
false。服务等级,默认
default。任务最长执行时间(秒),范围
[3600, 259200](1 小时~3 天),默认 172800。任务完成时的回调 URL。
content 混用规则
违反以下规则可能返回400:
reference_image不能与first_frame/last_frame同时出现audio_url不能作为content中唯一输入,须至少搭配图片或视频draft_task必须是content数组里的唯一元素
生成模式对照
| 模式 | 请求示例标签 | content 要点 |
|---|---|---|
| 文生视频 | 文生视频 | text + 可选参考图/视频/音频 |
| 首帧图生视频 | 首帧图生视频 | text + first_frame |
| 首尾帧生视频 | 首尾帧生视频 | text + first_frame + last_frame |
| 参考图生视频 | 参考图生视频 | text + reference_image |
| 视频延续 | 视频延续 | text + reference_video |
| 视频编辑 | 视频编辑 | text + reference_video + reference_image |
| 多模态合成 | 多模态合成 | text + 多类型参考组合 |
| 引用素材库 | 引用素材 | 各 URL 使用 asset://{assetId} |
Response
相关页面
⌘I