curl --request POST \
--url https://api.apimart.ai/v1/videos/generations \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{
"model": "seedance-2.0",
"prompt": "A kitten yawning at the camera",
"resolution": "720p",
"size": "16:9",
"duration": 5,
"generate_audio": true
}'
import requests
url = "https://api.apimart.ai/v1/videos/generations"
payload = {
"model": "seedance-2.0",
"prompt": "A kitten yawning at the camera",
"resolution": "720p",
"size": "16:9",
"duration": 5,
"generate_audio": True
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.json())
const url = "https://api.apimart.ai/v1/videos/generations";
const payload = {
model: "seedance-2.0",
prompt: "A kitten yawning at the camera",
resolution: "720p",
size: "16:9",
duration: 5,
generate_audio: true
};
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://api.apimart.ai/v1/videos/generations"
payload := map[string]interface{}{
"model": "seedance-2.0",
"prompt": "A kitten yawning at the camera",
"resolution": "720p",
"size": "16:9",
"duration": 5,
"generate_audio": true,
}
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://api.apimart.ai/v1/videos/generations";
String payload = """
{
"model": "seedance-2.0",
"prompt": "A kitten yawning at the camera",
"resolution": "720p",
"size": "16:9",
"duration": 5,
"generate_audio": true
}
""";
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://api.apimart.ai/v1/videos/generations";
$payload = [
"model" => "seedance-2.0",
"prompt" => "A kitten yawning at the camera",
"resolution" => "720p",
"size" => "16:9",
"duration" => 5,
"generate_audio" => true
];
$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://api.apimart.ai/v1/videos/generations")
payload = {
model: "seedance-2.0",
prompt: "A kitten yawning at the camera",
resolution: "720p",
size: "16:9",
duration: 5,
generate_audio: true
}
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 = payload.to_json
response = http.request(request)
puts response.body
import Foundation
let url = URL(string: "https://api.apimart.ai/v1/videos/generations")!
let payload: [String: Any] = [
"model": "seedance-2.0",
"prompt": "A kitten yawning at the camera",
"resolution": "720p",
"size": "16:9",
"duration": 5,
"generate_audio": true
]
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://api.apimart.ai/v1/videos/generations";
var payload = @"{
""model"": ""seedance-2.0"",
""prompt"": ""A kitten yawning at the camera"",
""resolution"": ""720p"",
""size"": ""16:9"",
""duration"": 5,
""generate_audio"": true
}";
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);
}
}
{
"code": 200,
"data": [
{
"status": "submitted",
"task_id": "task_01KMCGF6BQGN3X28H3KSR50X5T"
}
]
}
{
"error": {
"code": 400,
"message": "Invalid request parameters",
"type": "invalid_request_error"
}
}
{
"error": {
"code": 401,
"message": "Authentication failed, please check your API key",
"type": "authentication_error"
}
}
{
"error": {
"code": 402,
"message": "Insufficient account balance, please top up and try again",
"type": "payment_required"
}
}
{
"error": {
"code": 429,
"message": "Too many requests, please try again later",
"type": "rate_limit_error"
}
}
{
"error": {
"code": 500,
"message": "Internal server error, please try again later",
"type": "server_error"
}
}
seedance-2-0
seedance-2.0 — Geração de vídeo
- Modo de processamento assíncrono, retorna um ID de tarefa para consultas posteriores
- Suporta texto-para-vídeo e imagem-para-vídeo (primeiro frame/último frame)
- Suporta vídeo de referência, áudio de referência e vídeo com áudio
- Suporta proporções paisagem, retrato, quadrada, ultrawide e adaptativa
POST
/
v1
/
videos
/
generations
curl --request POST \
--url https://api.apimart.ai/v1/videos/generations \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{
"model": "seedance-2.0",
"prompt": "A kitten yawning at the camera",
"resolution": "720p",
"size": "16:9",
"duration": 5,
"generate_audio": true
}'
import requests
url = "https://api.apimart.ai/v1/videos/generations"
payload = {
"model": "seedance-2.0",
"prompt": "A kitten yawning at the camera",
"resolution": "720p",
"size": "16:9",
"duration": 5,
"generate_audio": True
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.json())
const url = "https://api.apimart.ai/v1/videos/generations";
const payload = {
model: "seedance-2.0",
prompt: "A kitten yawning at the camera",
resolution: "720p",
size: "16:9",
duration: 5,
generate_audio: true
};
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://api.apimart.ai/v1/videos/generations"
payload := map[string]interface{}{
"model": "seedance-2.0",
"prompt": "A kitten yawning at the camera",
"resolution": "720p",
"size": "16:9",
"duration": 5,
"generate_audio": true,
}
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://api.apimart.ai/v1/videos/generations";
String payload = """
{
"model": "seedance-2.0",
"prompt": "A kitten yawning at the camera",
"resolution": "720p",
"size": "16:9",
"duration": 5,
"generate_audio": true
}
""";
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://api.apimart.ai/v1/videos/generations";
$payload = [
"model" => "seedance-2.0",
"prompt" => "A kitten yawning at the camera",
"resolution" => "720p",
"size" => "16:9",
"duration" => 5,
"generate_audio" => true
];
$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://api.apimart.ai/v1/videos/generations")
payload = {
model: "seedance-2.0",
prompt: "A kitten yawning at the camera",
resolution: "720p",
size: "16:9",
duration: 5,
generate_audio: true
}
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 = payload.to_json
response = http.request(request)
puts response.body
import Foundation
let url = URL(string: "https://api.apimart.ai/v1/videos/generations")!
let payload: [String: Any] = [
"model": "seedance-2.0",
"prompt": "A kitten yawning at the camera",
"resolution": "720p",
"size": "16:9",
"duration": 5,
"generate_audio": true
]
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://api.apimart.ai/v1/videos/generations";
var payload = @"{
""model"": ""seedance-2.0"",
""prompt"": ""A kitten yawning at the camera"",
""resolution"": ""720p"",
""size"": ""16:9"",
""duration"": 5,
""generate_audio"": true
}";
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);
}
}
{
"code": 200,
"data": [
{
"status": "submitted",
"task_id": "task_01KMCGF6BQGN3X28H3KSR50X5T"
}
]
}
{
"error": {
"code": 400,
"message": "Invalid request parameters",
"type": "invalid_request_error"
}
}
{
"error": {
"code": 401,
"message": "Authentication failed, please check your API key",
"type": "authentication_error"
}
}
{
"error": {
"code": 402,
"message": "Insufficient account balance, please top up and try again",
"type": "payment_required"
}
}
{
"error": {
"code": 429,
"message": "Too many requests, please try again later",
"type": "rate_limit_error"
}
}
{
"error": {
"code": 500,
"message": "Internal server error, please try again later",
"type": "server_error"
}
}
curl --request POST \
--url https://api.apimart.ai/v1/videos/generations \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{
"model": "seedance-2.0",
"prompt": "A kitten yawning at the camera",
"resolution": "720p",
"size": "16:9",
"duration": 5,
"generate_audio": true
}'
import requests
url = "https://api.apimart.ai/v1/videos/generations"
payload = {
"model": "seedance-2.0",
"prompt": "A kitten yawning at the camera",
"resolution": "720p",
"size": "16:9",
"duration": 5,
"generate_audio": True
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.json())
const url = "https://api.apimart.ai/v1/videos/generations";
const payload = {
model: "seedance-2.0",
prompt: "A kitten yawning at the camera",
resolution: "720p",
size: "16:9",
duration: 5,
generate_audio: true
};
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://api.apimart.ai/v1/videos/generations"
payload := map[string]interface{}{
"model": "seedance-2.0",
"prompt": "A kitten yawning at the camera",
"resolution": "720p",
"size": "16:9",
"duration": 5,
"generate_audio": true,
}
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://api.apimart.ai/v1/videos/generations";
String payload = """
{
"model": "seedance-2.0",
"prompt": "A kitten yawning at the camera",
"resolution": "720p",
"size": "16:9",
"duration": 5,
"generate_audio": true
}
""";
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://api.apimart.ai/v1/videos/generations";
$payload = [
"model" => "seedance-2.0",
"prompt" => "A kitten yawning at the camera",
"resolution" => "720p",
"size" => "16:9",
"duration" => 5,
"generate_audio" => true
];
$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://api.apimart.ai/v1/videos/generations")
payload = {
model: "seedance-2.0",
prompt: "A kitten yawning at the camera",
resolution: "720p",
size: "16:9",
duration: 5,
generate_audio: true
}
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 = payload.to_json
response = http.request(request)
puts response.body
import Foundation
let url = URL(string: "https://api.apimart.ai/v1/videos/generations")!
let payload: [String: Any] = [
"model": "seedance-2.0",
"prompt": "A kitten yawning at the camera",
"resolution": "720p",
"size": "16:9",
"duration": 5,
"generate_audio": true
]
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://api.apimart.ai/v1/videos/generations";
var payload = @"{
""model"": ""seedance-2.0"",
""prompt"": ""A kitten yawning at the camera"",
""resolution"": ""720p"",
""size"": ""16:9"",
""duration"": 5,
""generate_audio"": true
}";
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);
}
}
{
"code": 200,
"data": [
{
"status": "submitted",
"task_id": "task_01KMCGF6BQGN3X28H3KSR50X5T"
}
]
}
{
"error": {
"code": 400,
"message": "Invalid request parameters",
"type": "invalid_request_error"
}
}
{
"error": {
"code": 401,
"message": "Authentication failed, please check your API key",
"type": "authentication_error"
}
}
{
"error": {
"code": 402,
"message": "Insufficient account balance, please top up and try again",
"type": "payment_required"
}
}
{
"error": {
"code": 429,
"message": "Too many requests, please try again later",
"type": "rate_limit_error"
}
}
{
"error": {
"code": 500,
"message": "Internal server error, please try again later",
"type": "server_error"
}
}
Autenticação
string
obrigatório
Todos os endpoints da API exigem autenticação via Bearer TokenObtenha sua API Key:Acesse a página de gerenciamento de API Keys para obter sua API KeyAdicione-a ao cabeçalho da requisição:
Authorization: Bearer YOUR_API_KEY
Parâmetros da requisição
string
obrigatório
Nome do modelo de geração de vídeoModelos suportados:
seedance-2.0— versão padrão, suporta texto-para-vídeo, imagem-para-vídeo, vídeo com primeiro/último frame, vídeo de referência, áudio de referência e vídeo com áudioseedance-2.0-fast— versão rápida, com os mesmos recursos da versão padrão e maior velocidade de geraçãoseedance-2.0-mini— versão mini, com os mesmos recursos da versão padrão
boolean
padrão:"false"
Define se o conteúdo deve ser moderado antes do envio da tarefa de vídeo.Exemplo:Resposta quando detectado:
true: verificar prompts e imagens de entrada comomni-moderation-latestfalseou omitido: não enviar solicitação de moderação, sem custo nem latência adicionais de moderação (padrão)
- Texto:
prompt,negative_prompt - Imagens:
image_urls,image_with_roles[].url,first_frame_image,last_frame_image - Assets privados de imagem
asset://: resolver e verificar a URL pública original - Imagens Base64: verificar após a conversão para uma URL pública
video_urls, audio_urls e assets privados de vídeo/áudio não são verificados, pois o modelo de moderação não aceita vídeo nem áudio.IDs de modelo compatíveis: seedance-2.0, seedance-2.0-fast, seedance-2.0-mini, seedance-2.0-face, seedance-2.0-fast-face, seedance-2-0 (nome antigo) e seedance-2.5.A chamada de moderação não é cobrada do usuário que envia a solicitação de vídeo.- Conteúdo detectado retorna HTTP 400 (
nsfw_content_detected) de forma síncrona. Nenhuma tarefa outask_idé criada e nenhuma cota de geração de vídeo é descontada - Se a moderação estiver indisponível, expirar ou retornar uma resposta inválida, o comportamento será fail-open e a geração continuará. Esta opção não é uma garantia absoluta de segurança do conteúdo
- Entradas que não possam ser resolvidas para uma URL pública de imagem serão ignoradas; modelos não compatíveis ignoram silenciosamente
nsfw_check: true
{
"model": "seedance-2.0",
"prompt": "a cat walking on the beach",
"image_urls": ["https://cdn.example.com/ref.png"],
"nsfw_check": true
}
{
"error": {
"message": "Your request was rejected by content moderation (`nsfw_check` is enabled). Flagged categories: sexual, violence/graphic.",
"type": "nsfw_content_detected",
"param": "",
"code": "nsfw_content_detected"
}
}
string
Descrição do conteúdo do vídeoObrigatório para texto-para-vídeo; opcional para imagem-para-vídeo ou vídeo a partir de vídeo de referênciaRecomenda-se especificar claramente o sujeito, a ação, o movimento de câmera e o estilo para obter melhores resultados de geraçãoExemplo:
- O prompt é limitado a 4000 caracteres, mas o recomendado são 500 caracteres.
- O modelo
seedance-2.0-mininão tem limite de caracteres. Recomendação: os prompts em chinês não devem ultrapassar 500 caracteres e os prompts em inglês não devem ultrapassar 1000 palavras. Texto em excesso tende a dispersar as informações, e o modelo pode ignorar detalhes e focar apenas nos pontos principais, fazendo com que faltem alguns elementos no vídeo.
"A kitten yawning at the camera"integer
padrão:"5"
Duração do vídeo (segundos)Faixa suportada:
4 a 15 segundosPadrão: 5string
padrão:"16:9"
Proporção do vídeoA proporção deve estar entre 0.5 e 2.5Opções:
16:9— paisagem9:16— retrato1:1— quadrado4:3— proporção tradicional3:4— proporção tradicional vertical21:9— ultrawideadaptive— adaptativa (corresponde automaticamente à imagem/vídeo de entrada)
16:9string
padrão:"720p"
Resolução do vídeoOpções:
480p— definição padrão720p— alta definição1080p— Full HD (suportado apenas porseedance-2.0)4k— Ultra HD (suportado apenas porseedance-2.0)
720pinteger
Seed aleatória para controlar a aleatoriedade do conteúdo gerado
- Para a mesma requisição, valores de seed diferentes produzirão resultados diferentes
- Para a mesma requisição, o mesmo valor de seed produzirá resultados semelhantes, mas não há garantia de consistência exata
boolean
padrão:"true"
Se deve gerar áudio (vídeo com áudio)Quando definido como
true, o vídeo incluirá áudio gerado por IA acompanhando-oQuando definido como false, o vídeo não incluirá áudio (vídeo sem som)Padrão: trueboolean
padrão:"false"
Se deve retornar a imagem do último frameQuando definido como
true, o resultado da tarefa retornará adicionalmente a URL da imagem do último frame do vídeo, que pode ser usada para geração contínua de vídeoPadrão: falsearray<object>
Lista de ferramentas para recursos adicionais, como busca na webExemplo:
[{"type": "web_search"}]Mostrar Descrição dos campos
Mostrar Descrição dos campos
string
obrigatório
Tipo de ferramentaOpções:
web_search— busca na web, consulta informações on-line durante a geração
array<string>
Array de URLs de imagem para imagem-para-vídeoSuporta dois formatos:
- URL de imagem comum:
https://example.com/cat.jpg - Asset URL (asset aprovado):
asset://asset_a
["https://example.com/cat.jpg"] ou ["asset://asset_a"]Asset URLs são compatíveis com todos os modelos Seedance 2.0:
seedance-2.0, seedance-2.0-fast e seedance-2.0-mini.image_urlseimage_with_rolesnão podem ser usados simultaneamente- Máximo de 9 imagens de referência
array
Array de imagens com papéis, permite especificar primeiro frame/último frame
Exemplo:Formato Asset URL:
Quando o campo
url usa uma Asset URL, todos os modelos Seedance 2.0 são compatíveis: seedance-2.0, seedance-2.0-fast e seedance-2.0-mini.Mostrar Descrição dos campos
Mostrar Descrição dos campos
string
obrigatório
URL da imagemSuporta dois formatos:
- URL de imagem comum:
https://example.com/day.jpg - Asset URL (asset aprovado):
asset://asset_a
Asset URLs são compatíveis com todos os modelos Seedance 2.0:
seedance-2.0, seedance-2.0-fast e seedance-2.0-mini.string
obrigatório
Papel da imagemOpções:
first_frame— imagem do primeiro frame, usada como frame inicial do vídeolast_frame— imagem do último frame, usada como frame final do vídeoreference_image— imagem de retrato de referência (usada com Asset URL)
[
{"url": "https://example.com/day.jpg", "role": "first_frame"},
{"url": "https://example.com/night.jpg", "role": "last_frame"}
]
[
{"url": "asset://asset_a", "role": "reference_image"}
]
image_urlseimage_with_rolesnão podem ser usados simultaneamente- Ao usar imagens de primeiro/último frame,
video_urlseaudio_urlsnão estão disponíveis
array<string>
Array de URLs de vídeo de referênciaSuporta dois formatos:
- URL de vídeo comum:
https://example.com/reference.mp4 - Asset URL (asset aprovado):
asset://asset_a
["https://example.com/reference.mp4"] ou ["asset://asset_a"]Asset URLs são compatíveis com todos os modelos Seedance 2.0:
seedance-2.0, seedance-2.0-fast e seedance-2.0-mini.- Ao usar imagens de primeiro/último frame (
image_with_roles), vídeos de referência não estão disponíveis - Máximo de 3 vídeos de referência, 1.8s < duração total < 15.2s
- A resolução do vídeo de referência deve estar entre 480P e 720P
array<string>
Array de URLs de áudio de referênciaSuporta dois formatos:
- URL de áudio comum:
https://example.com/speech.wav - Asset URL (asset aprovado):
asset://asset_a
["https://example.com/speech.wav"] ou ["asset://asset_a"]Asset URLs são compatíveis com todos os modelos Seedance 2.0:
seedance-2.0, seedance-2.0-fast e seedance-2.0-mini.- Ao usar imagens de primeiro/último frame (
image_with_roles), áudio de referência não está disponível - Máximo de 3 arquivos de áudio de referência, com duração total de até 15s
- O áudio de referência deve ser usado junto com imagens de referência ou vídeos de referência
Resposta
integer
Código de status da resposta, 200 em caso de sucesso
array
Casos de uso
Caso 1: Texto-para-vídeo
{
"model": "seedance-2.0",
"prompt": "A kitten yawning at the camera",
"resolution": "720p",
"size": "16:9",
"duration": 5,
"seed": 42,
"generate_audio": true
}
Caso 2: Imagem-para-vídeo (primeiro frame)
{
"model": "seedance-2.0",
"prompt": "The kitten stands up and walks toward the camera",
"image_urls": ["https://example.com/cat.jpg"],
"duration": 5
}
Caso 3: Vídeo com primeiro/último frame
{
"model": "seedance-2.0",
"prompt": "Transition from day to night",
"image_with_roles": [
{"url": "https://example.com/day.jpg", "role": "first_frame"},
{"url": "https://example.com/night.jpg", "role": "last_frame"}
],
"duration": 5
}
Caso 4: Vídeo a partir de vídeo de referência
{
"model": "seedance-2.0",
"prompt": "Convert the video style to anime style",
"video_urls": ["https://example.com/reference.mp4"]
}
Caso 5: Vídeo de referência + áudio de referência
{
"model": "seedance-2.0",
"prompt": "A scene of a person speaking",
"video_urls": ["https://example.com/reference.mp4"],
"audio_urls": ["https://example.com/speech.wav"],
"size": "16:9",
"duration": 11
}
Caso 6: Vídeo com áudio
{
"model": "seedance-2.0",
"prompt": "A man stops a woman and says: \"Remember, you must never point your finger at the moon.\"",
"generate_audio": true
}
Caso 7: Geração contínua de vídeo (retornar último frame)
{
"model": "seedance-2.0",
"prompt": "The kitten continues walking toward the camera",
"image_urls": ["https://example.com/last_frame_from_prev.png"],
"return_last_frame": true
}
Caso 8: Geração com a versão rápida
{
"model": "seedance-2.0-fast",
"prompt": "City nightscape timelapse photography",
"size": "21:9",
"duration": 8
}
Caso 9: Imagens de referência + vídeo de referência + áudio de referência (vídeo multimodal)
Combine imagens de referência, vídeo de referência e áudio de referência para gerar um vídeo publicitário imersivo em perspectiva em primeira pessoa. Ideal para divulgação de produtos, anúncios de marca e outros cenários que exigem a fusão de múltiplas fontes de material.{
"model": "seedance-2.0",
"prompt": "Use video 1's first-person perspective throughout, and use audio 1 as the background music throughout. First-person POV fruit tea advertisement for seedance brand 'Peace Apple' apple fruit tea limited edition. First frame is image 1: your hand picks a dewy Aksu red apple with a crisp apple collision sound. 2-4s: quick cut, your hand drops apple chunks into a shaker cup, adds ice and tea base, shakes vigorously, ice collision and shaking sounds sync with upbeat drum beats, background voice: 'Fresh-cut, fresh-shaken'. 4-6s: first-person close-up of the finished product, layered fruit tea poured into a clear cup, your hand gently squeezes cream cap spreading on top, sticks a pink label on the cup, camera zooms in on the layered texture of cream cap and fruit tea. 6-8s: first-person handheld cup raise, you lift the fruit tea from image 2 toward the camera (simulating handing it to the viewer), cup label clearly visible, background voice 'Take a sip of freshness', final frame freezes on image 2. Background voice consistently uses a female tone.",
"image_urls": [
"https://example.com/tea_pic1.jpg",
"https://example.com/tea_pic2.jpg"
],
"video_urls": ["https://example.com/tea_video1.mp4"],
"audio_urls": ["https://example.com/tea_audio1.mp3"],
"generate_audio": true,
"size": "16:9",
"duration": 11
}
Caso 10: Imagem-para-vídeo com Asset URL
Assets de avatar virtual aprovados podem ser passados diretamente como imagens de referência, sem necessidade de novo upload ou nova revisão.{
"model": "seedance-2.0",
"prompt": "The character walks naturally on a city street under bright sunshine",
"image_urls": ["asset://asset_a"],
"duration": 5,
"resolution": "720p"
}
Caso 11: Especificar retrato de referência com Asset URL (image_with_roles)
{
"model": "seedance-2.0",
"prompt": "Using the reference portrait, the character walks elegantly toward the camera",
"image_with_roles": [
{
"url": "asset://asset_a",
"role": "reference_image"
}
],
"resolution": "720p",
"duration": 5
}
Caso 12: Versão rápida + Asset URL imagem-para-vídeo
{
"model": "seedance-2.0-fast",
"prompt": "The character strolls in a park with a gentle breeze",
"image_urls": ["asset://asset_a"],
"duration": 5,
"resolution": "720p"
}
Caso 13: Imagem com Asset URL + vídeo de referência (transferência de movimento)
Combine um asset de retrato aprovado com um vídeo de referência para fazer o personagem executar os movimentos especificados.{
"model": "seedance-2.0",
"prompt": "The character dances to the rhythm of the reference video with smooth and natural movements",
"image_urls": ["https://example.com/dance_reference.jpg", "asset://asset_a"],
"video_urls": ["https://example.com/dance_reference.mp4", "asset://asset_a"],
"duration": 8,
"resolution": "720p"
}
Consultar resultados da tarefaA geração de vídeo é uma tarefa assíncrona que retorna um
task_id ao ser enviada. Use o endpoint Obter status da tarefa para consultar o progresso e os resultados da geração.Diferenças em relação à versão 1.5 Pro
| Recurso | 1.5 Pro | 2.0 / 2.0 fast |
|---|---|---|
| Resolução | 480p/720p/1080p | 480p/720p/1080p/4k (fast apenas 480p/720p) |
| Faixa de duração | 4-12s | 5-15s |
| Duração padrão | 5s | 5s |
| Parâmetro de proporção | aspect_ratio | size (nova opção adaptive) |
| Geração de áudio | parâmetro audio | parâmetro generate_audio |
| Vídeo de referência | Não suportado | Suportado via video_urls |
| Áudio de referência | Não suportado | Suportado via audio_urls |
| Imagem-para-vídeo | image_urls / image_with_roles | image_urls / image_with_roles |
| Vídeo com áudio | Não suportado | Suportado via generate_audio |
| Vídeo contínuo | Não suportado | Suportado via return_last_frame |
| Versão rápida | Não suportado | Suportado via seedance-2.0-fast |