API do Seedance
Integre a geração de vídeo ao seu produto com o Seedance 2.5 ou Seedance 2.0, tarefas assíncronas, webhooks e faturamento baseado em créditos.
https://api.seevio.aiNesta página
Introdução
A API permite enviar tarefas de geração de vídeo do Seedance 2.5 e Seedance 2.0 de forma programática. O Seedance 2.5 é o modelo recomendado e suporta texto para vídeo, imagem para vídeo (com base no primeiro frame ou no primeiro e último frames) e referência multimodal para vídeo. A geração é assíncrona: você cria uma tarefa, recebe um ID de tarefa imediatamente e, em seguida, obtém o vídeo finalizado via consultas periódicas (polling) ao endpoint da tarefa ou recebendo um webhook.
Tarefas assíncronas
A consulta periódica (polling) funciona bem para desenvolvimento e integrações simples.
Suporte a webhook
Os webhooks são recomendados para produção por evitarem consultas excessivas e notificarem seu serviço assim que a tarefa atinge um estado final.
Controle de créditos
Os créditos são reservados no momento do envio. As tarefas concluídas com sucesso são cobradas a partir dessa reserva; tarefas com falha ou tempo limite esgotado são reembolsadas automaticamente.
Autenticação
Crie uma chave de API no painel de controle e envie-a como um token Bearer em cada requisição. A chave completa é exibida apenas uma vez, no momento da criação.
Authorization: Bearer sk_live_xxxxxxxxUse as chaves sk_live_ para tráfego de produção.
Use as chaves sk_test_ para testes de integração em ambiente de sandbox com o mesmo contrato de API.
Chaves ausentes, inválidas ou revogadas retornam o erro invalid_api_key com HTTP 401.
Início rápido
Primeiro, envie uma tarefa. Assim que ela for aceita, escolha um método para receber o resultado: consulte periodicamente o endpoint da tarefa ou receba o resultado final por meio de um webhook.
Crie uma tarefa de vídeo assíncrona e receba um ID de tarefa imediatamente.
curl https://api.seevio.ai/v1/videos/generations \
-H "Authorization: Bearer sk_live_xxx" \
-H "Content-Type: application/json" \
-d '{
"model": "seedance-2-5",
"callback_url": "https://your-domain.com/api/seedance/webhook",
"input": {
"prompt": "a cat surfing on a neon wave, cinematic lighting",
"generation_type": "text-to-video",
"duration": 5,
"aspect_ratio": "16:9",
"resolution": "720p",
"generate_audio": true,
"watermark": false,
"web_search": false,
"return_last_frame": false
}
}'Consulte o endpoint de status da tarefa se a sua integração preferir consultas periódicas explícitas.
curl https://api.seevio.ai/v1/tasks/3f2aK9mR7xQp4TnZ8bLc6YwH \
-H "Authorization: Bearer sk_live_xxx"Informe uma callback_url ao enviar a tarefa para receber notificações de sucesso ou falha e atualizar o registro da tarefa em seu sistema.
export async function POST(request: Request) {
const callbackData = await request.json();
if (callbackData.status === "completed") {
const videoUrl = callbackData.data.results[0];
// Save the video URL or update your own task record here.
}
if (callbackData.status === "failed") {
const errorMessage = callbackData.data.failed_reason;
// Mark your own task record as failed here.
}
return new Response(null, { status: 200 });
}Criar tarefa de vídeo
Crie uma tarefa de vídeo com POST /v1/videos/generations. O corpo da requisição contém o modelo no nível superior, uma callback_url opcional e um objeto input com o prompt e as configurações de geração.
/v1/videos/generationscurl https://api.seevio.ai/v1/videos/generations \
-H "Authorization: Bearer sk_live_xxx" \
-H "Content-Type: application/json" \
-d '{
"model": "seedance-2-5",
"callback_url": "https://your-domain.com/api/seedance/webhook",
"input": {
"prompt": "a cat surfing on a neon wave, cinematic lighting",
"generation_type": "text-to-video",
"duration": 5,
"aspect_ratio": "16:9",
"resolution": "720p",
"generate_audio": true,
"watermark": false,
"web_search": false,
"return_last_frame": false
}
}'Modos de geração
O campo generation_type controla quais arquivos de mídia são aceitos e como o modelo os interpreta.
Defina o modelo como seedance-2-5 para gerar vídeos de 480p ou 720p com duração de 4 a 30 segundos.
- Texto para vídeo com proporções de tela adaptável, 16:9, 9:16, 1:1, 4:3, 3:4 ou 21:9
- Imagem para vídeo a partir de uma imagem de primeiro frame ou duas imagens de primeiro e último frames; a proporção de tela deve ser definida como adaptive
- Referência para vídeo com até 30 imagens, 10 vídeos e 10 arquivos de áudio, com um limite máximo de 50 mídias no total
- Cada referência de vídeo ou áudio deve ter entre 2 e 30 segundos; a soma da duração de todos os vídeos e de todos os áudios deve ser de no máximo 30 segundos cada
- Suporte a referências apenas de áudio e ao parâmetro return_last_frame; o parâmetro seed não é compatível
| Modo | Mídia obrigatória | Mídia opcional | Notas |
|---|---|---|---|
text-to-video | prompt | duration, aspect_ratio, resolution, seed | Apenas prompt de texto. Não é necessário enviar image_urls, video_urls ou audio_urls. |
image-to-video | prompt + matriz image_urls (1 a 2 URLs de imagem) | duration, aspect_ratio, resolution, seed | image_urls deve ser uma matriz. Envie 1 URL de imagem para o primeiro frame ou 2 URLs de imagem para o primeiro e último frames. Vídeos e áudios são ignorados. |
reference-to-video | prompt + ao menos uma referência de imagem, vídeo ou áudio | imagens, vídeos e áudios dentro dos limites permitidos | O Seedance 2.5 suporta referências apenas de áudio. No Seedance 2.0, adicione pelo menos uma imagem ou vídeo se fornecer um áudio. |
text-to-videoUse texto para vídeo quando o prompt for o único direcionamento criativo.
curl https://api.seevio.ai/v1/videos/generations \
-H "Authorization: Bearer sk_live_xxx" \
-H "Content-Type: application/json" \
-d '{
"model": "seedance-2-5",
"callback_url": "https://your-domain.com/api/seedance/webhook",
"input": {
"prompt": "a cinematic drone shot over a futuristic coastal city at sunrise",
"generation_type": "text-to-video",
"duration": 5,
"aspect_ratio": "16:9",
"resolution": "720p",
"generate_audio": true,
"watermark": false,
"web_search": false,
"return_last_frame": false
}
}'image-to-videoUse imagem para vídeo quando input.image_urls for uma matriz com 1 ou 2 URLs de imagem: uma URL define o primeiro frame, e duas definem o primeiro e o último frames. Referências de vídeo e áudio são ignoradas neste modo.
curl https://api.seevio.ai/v1/videos/generations \
-H "Authorization: Bearer sk_live_xxx" \
-H "Content-Type: application/json" \
-d '{
"model": "seedance-2-5",
"input": {
"prompt": "the subject turns toward camera, soft studio motion",
"generation_type": "image-to-video",
"image_urls": ["https://your.cdn.com/first-frame.jpg"],
"duration": 5,
"resolution": "720p"
}
}'reference-to-videoUse referência para vídeo para obter um direcionamento mais detalhado usando imagens, vídeos e áudios de referência. O Seedance 2.5 aceita áudio como o único tipo de referência; o Seedance 2.0 exige pelo menos uma imagem ou vídeo quando um áudio é fornecido.
Limites de arquivos de mídia
- Seedance 2.5: até 30 imagens de referência
- Seedance 2.5: até 10 vídeos de referência, cada um de 2 a 30 segundos e duração total <= 30 segundos
- Seedance 2.5: até 10 áudios de referência, cada um de 2 a 30 segundos e duração total <= 30 segundos
- Seedance 2.5: máximo de 50 mídias no total somando todos os tipos
- As variantes do Seedance 2.0 mantêm seus limites originais: 9 imagens, 3 vídeos, 3 áudios e 15 segundos por grupo de vídeo/áudio
Combinações de entrada suportadas
curl https://api.seevio.ai/v1/videos/generations \
-H "Authorization: Bearer sk_live_xxx" \
-H "Content-Type: application/json" \
-d '{
"model": "seedance-2-5",
"input": {
"prompt": "use the product from image 1 and the camera motion from the reference video",
"generation_type": "reference-to-video",
"image_urls": ["https://your.cdn.com/product.jpg"],
"video_urls": ["https://your.cdn.com/camera-motion.mp4"],
"audio_urls": [],
"duration": 8,
"resolution": "720p"
}
}'Parâmetros da requisição
Nomes de parâmetros, valores de enum, caminhos de endpoint e exemplos fazem parte do contrato da API. As descrições abaixo detalham o comportamento de cada campo.
Cabeçalhos
| Cabeçalho | Obrigatório | Descrição | Exemplo |
|---|---|---|---|
Authorization | Sim | Chave de API (Bearer) usada para autenticar a requisição. | Bearer sk_live_xxx |
Content-Type | Sim | Todas as requisições de gravação utilizam JSON. | application/json |
Campos de nível superior
| Campo | Tipo | Obrigatório | Padrão | Intervalo / Enum | Modos | Exemplo |
|---|---|---|---|---|---|---|
modelVariante do modelo usada para geração. Use seedance-2-5 para o Seedance 2.5, seedance-2-0 para o Seedance 2.0, seedance-2-0-fast para o Seedance 2.0 Fast ou seedance-2-0-mini para o Seedance 2.0 Mini. | string | Sim | - | seedance-2-5 | seedance-2-0 | seedance-2-0-fast | seedance-2-0-mini | todos | seedance-2-5 |
callback_urlEndpoint HTTPS que receberá os retornos de chamada (callbacks) de sucesso ou falha da tarefa. | string | Não | - | URL HTTPS, redes privadas não são permitidas | todos | https://your-domain.com/hook |
inputConfigurações de geração e referências de mídia. | object | Sim | - | - | todos | - |
input.* campos
| Campo | Tipo | Obrigatório | Padrão | Intervalo / Enum | Modos | Exemplo |
|---|---|---|---|---|---|---|
input.promptPrompt de texto que descreve o vídeo a ser criado. | string | Sim | - | texto não vazio | todos | a cat surfing |
input.generation_typeModo de geração. O padrão é text-to-video. | string | Não | text-to-video | text-to-video | image-to-video | reference-to-video | - | image-to-video |
input.image_urlsURLs de imagens públicas acessíveis. Para imagem para vídeo, envie 1 imagem para o primeiro frame ou 2 imagens para o primeiro e último frames. Para referência para vídeo, o Seedance 2.5 aceita até 30 imagens e o Seedance 2.0 aceita até 9. | string[] | Condicional | [] | Imagem para vídeo: 1 ou 2 imagens. Referência para vídeo: até 30 para o Seedance 2.5; até 9 para o Seedance 2.0. | image-to-video / reference-to-video | ["https://.../a.jpg"] |
input.video_urlsVídeos de referência acessíveis publicamente (apenas para o modo referência para vídeo). O Seedance 2.5 aceita até 10 vídeos, cada um de 2 a 30 segundos com reprodução total <= 30 segundos. O Seedance 2.0 aceita até 3 vídeos com reprodução total <= 15 segundos. | string[] | Não | [] | Seedance 2.5: até 10 vídeos, cada um de 2 a 30 segundos, duração total somada <= 30 segundos. Seedance 2.0: até 3 vídeos, duração total somada <= 15 segundos. | reference-to-video | [] |
input.audio_urlsArquivos de áudio de referência acessíveis publicamente (apenas para o modo referência para vídeo). O Seedance 2.5 aceita até 10 arquivos de áudio, cada um de 2 a 30 segundos com tempo de reprodução somado <= 30 segundos, permitindo referências apenas de áudio. O Seedance 2.0 aceita até 3 arquivos com tempo de reprodução somado <= 15 segundos. | string[] | Não | [] | Seedance 2.5: até 10 áudios, cada um de 2 a 30 segundos, duração total somada <= 30 segundos. Seedance 2.0: até 3 áudios, duração total somada <= 15 segundos. | reference-to-video | [] |
input.durationDuração do vídeo gerado, em segundos. | int | Não | 5 | Seedance 2.5: 4 a 30 segundos. Seedance 2.0: 4 a 15 segundos. | todos | 5 |
input.aspect_ratioProporção da tela do vídeo final. A opção adaptive permite que o serviço determine a melhor proporção. O modo imagem para vídeo do Seedance 2.5 suporta apenas adaptive. | string | Não | adaptive | 16:9 | 4:3 | 1:1 | 3:4 | 9:16 | 21:9 | adaptive | todos | 16:9 |
input.resolutionResolução do vídeo final. | string | Não | 720p | Seedance 2.5: 480p | 720p. Seedance 2.0: 480p | 720p | 1080p | 4k (dependendo da variante). | todos | 720p |
input.generate_audioDefine se o modelo deve gerar áudio caso haja suporte. | boolean | Não | true | true | false | todos | true |
input.watermarkDefine se deve ser adicionada uma marca d'água. | boolean | Não | false | true | false | todos | false |
input.web_searchDefine se é permitida a busca na web para enriquecer a geração (quando disponível). | boolean | Não | false | true | false | todos | false |
input.return_last_frameDefine se deve retornar a URL do último frame, caso disponível. | boolean | Não | false | true | false | todos | false |
input.seedSemente de geração para resultados determinísticos nas variantes do Seedance 2.0. O Seedance 2.5 não suporta este campo; omita-o. | int | Não | -1 | -1 ou 0-4294967295 | todos | -1 |
Os créditos variam de acordo com a resolução, duração, modelo e se a referência para vídeo inclui referências de vídeo. O valor de créditos retornado na resposta de criação indica o valor exato reservado para aquela tarefa.
Ver tabela de preços de créditosResposta
Esta é a resposta de sucesso de POST /v1/videos/generations. Ela indica que a tarefa foi aceita e os créditos foram reservados. Use o taskId retornado para consultar GET /v1/tasks/:id ou para identificar o callback de conclusão ou falha.
Resposta de sucesso para POST /v1/videos/generations
{
"taskId": "3f2aK9mR...",
"credits": 100
}Obter status da tarefa
Use GET /v1/tasks/:id para obter o status atual da tarefa. Faça a consulta periódica (polling) no máximo uma vez a cada 10 segundos. Para sistemas de produção, prefira webhooks.
curl https://api.seevio.ai/v1/tasks/3f2aK9mR7xQp4TnZ8bLc6YwH \
-H "Authorization: Bearer sk_live_xxx"Resposta de tarefa concluída
{
"id": "3f2aK9mR...",
"status": "completed",
"created_at": 1781234567,
"model": "seedance-2-5",
"billing_status": "charged",
"credits": 100,
"failed_reason": null,
"data": {
"results": ["https://cdn.seevio.ai/.../x.mp4"],
"video_expires_at": "2026-06-13T10:00:00Z",
"last_frame_url": null,
"processing_time": 48
}
}Resposta de tarefa com falha
{
"id": "3f2aK9mR...",
"status": "failed",
"created_at": 1781234567,
"model": "seedance-2-5",
"billing_status": "refunded",
"credits": 100,
"failed_reason": "provider_failed"
}| Valor | Significado |
|---|---|
status=queued | Aceita e aguardando para ser enviada ou processada. |
status=generating | O provedor está processando a geração do vídeo. |
status=completed | Vídeo concluído. O campo data.results contém a URL do resultado. |
status=failed | A geração falhou ou o tempo limite foi atingido. |
billing_status=reserved | Os créditos ficam reservados enquanto a tarefa está em andamento. |
billing_status=charged | A tarefa foi concluída com sucesso e a cobrança da reserva foi efetuada. |
billing_status=refunded | A tarefa falhou ou expirou e os créditos foram devolvidos. |
billing_status=refund_failed | A transação de reembolso falhou e requer intervenção manual. |
Após o horário indicado em video_expires_at, o campo data.results ficará vazio. Baixe e armazene o arquivo antes do término do período de validade.
Webhooks
Quando a callback_url é informada, o Seedance chama o seu endpoint ao concluir a tarefa (com sucesso ou falha), enviando um JSON com o resultado final. Se o seu endpoint retornar um status diferente de 2xx ou não responder em até 15 segundos, o envio será tentado novamente até 5 vezes. As tentativas de reenvio mantêm o mesmo id da tarefa, portanto, faça o tratamento de duplicatas com base nesse ID. Retorne uma resposta 200 assim que salvar os dados do callback com segurança.
Callback de tarefa concluída
{
"id": "3f2aK9mR...",
"status": "completed",
"created_at": 1781234567,
"model": "seedance-2-5",
"data": {
"results": ["https://cdn.seevio.ai/.../x.mp4"],
"video_expires_at": "2026-06-13T10:00:00Z",
"last_frame_url": null,
"processing_time": 48
}
}Callback de falha na tarefa
{
"id": "3f2aK9mR...",
"status": "failed",
"created_at": 1781234567,
"model": "seedance-2-5",
"data": {
"failed_reason": "provider_failed",
"credits_refunded": 100
}
}export async function POST(request: Request) {
const callbackData = await request.json();
if (callbackData.status === "completed") {
const videoUrl = callbackData.data.results[0];
// Save the video URL or update your own task record here.
}
if (callbackData.status === "failed") {
const errorMessage = callbackData.data.failed_reason;
// Mark your own task record as failed here.
}
return new Response(null, { status: 200 });
}Valide a estrutura de dados do callback, remova duplicados usando o id, atualize o registro da tarefa em seu sistema e envie a resposta rapidamente.
A callback_url deve utilizar HTTPS e não deve apontar para redes privadas, de loopback ou locais.
Erros
As chamadas POST /v1/videos/generations e GET /v1/tasks/:id retornam este formato de erro quando a requisição em si falha (por exemplo, parâmetros inválidos, chave de API incorreta, créditos insuficientes, limite de requisições excedido ou tarefa não encontrada). Dependendo da situação, alguns erros incluem campos adicionais como required, available ou retry_after.
{
"error": {
"code": "insufficient_credits",
"message": "Not enough credits for this task.",
"required": 100,
"available": 12
}
}| Código | HTTP | Significado | Tentar novamente? |
|---|---|---|---|
invalid_request | 400 | Parâmetros ausentes ou inválidos. | Não, corrija a requisição. |
invalid_api_key | 401 | A chave de API está ausente, é inválida ou foi revogada. | Não, use uma chave válida. |
insufficient_credits | 402 | Saldo de créditos insuficiente. A tarefa não é aceita nem cobrada. | Após recarregar os créditos. |
forbidden | 403 | A chave de API não tem as permissões (escopo) necessárias. | Não. |
not_found | 404 | A tarefa não existe ou não pertence ao proprietário da chave. | Não. |
rate_limited | 429 | Limite de requisições excedido. | Sim, respeitando o cabeçalho Retry-After. |
internal_error | 500 | Erro interno do servidor. | Sim, tente novamente mais tarde. |
Limites de requisição
Os limites de requisição são aplicados por chave de API com base em uma janela flutuante. O envio de geração tem um limite padrão de 100 requisições por minuto; as consultas de status possuem limites mais flexíveis. As respostas HTTP 429 incluem o cabeçalho Retry-After.
Geração
100/min
Consultas de status
Mais flexíveis
Cabeçalho 429
Retry-After
Faturamento e créditos
A API opera no modelo de reserva no envio, cobrança na conclusão e reembolso em caso de falha. As páginas de uso no painel exibem o histórico de créditos da API, os logs de tarefas e estatísticas de consumo por período.
Reservado
Os créditos são verificados e reservados assim que a tarefa é aceita.
Cobrado
As tarefas concluídas confirmam e liquidam a reserva existente.
Reembolsado
Tarefas com falha ou expiradas devolvem os créditos reservados de forma automática.
Acompanhe o consumo no painel
Consulte logs da API, cronograma das tarefas, histórico de créditos e métricas de uso por período.