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.

URL Base
https://api.seevio.ai
Nesta 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_xxxxxxxx
sk_live_

Use as chaves sk_live_ para tráfego de produção.

sk_test_

Use as chaves sk_test_ para testes de integração em ambiente de sandbox com o mesmo contrato de API.

401

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.

Enviar uma tarefa

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
    }
  }'
Opção de resultado: Polling

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"
Opção de resultado: Webhook

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.

POST
/v1/videos/generations
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
    }
  }'

Modos de geração

O campo generation_type controla quais arquivos de mídia são aceitos e como o modelo os interpreta.

Recursos do Seedance 2.5
seedance-2-5

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
ModoMídia obrigatóriaMídia opcionalNotas
text-to-videopromptduration, aspect_ratio, resolution, seedApenas prompt de texto. Não é necessário enviar image_urls, video_urls ou audio_urls.
image-to-videoprompt + matriz image_urls (1 a 2 URLs de imagem)duration, aspect_ratio, resolution, seedimage_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-videoprompt + ao menos uma referência de imagem, vídeo ou áudioimagens, vídeos e áudios dentro dos limites permitidosO 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-video

Use 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-video

Use 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-video

Use 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

Texto + Imagem
Texto + Vídeo
Texto + Áudio (Seedance 2.5)
Texto + Imagem + Vídeo
Texto + Imagem + Áudio
Texto + Vídeo + Áudio
Texto + Imagem + Vídeo + Áudio
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çalhoObrigatórioDescriçãoExemplo
AuthorizationSimChave de API (Bearer) usada para autenticar a requisição.Bearer sk_live_xxx
Content-TypeSimTodas as requisições de gravação utilizam JSON.application/json

Campos de nível superior

CampoTipoObrigatórioPadrãoIntervalo / EnumModosExemplo
model

Variante 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.

stringSim-seedance-2-5 | seedance-2-0 | seedance-2-0-fast | seedance-2-0-minitodosseedance-2-5
callback_url

Endpoint HTTPS que receberá os retornos de chamada (callbacks) de sucesso ou falha da tarefa.

stringNão-URL HTTPS, redes privadas não são permitidastodoshttps://your-domain.com/hook
input

Configurações de geração e referências de mídia.

objectSim--todos-

input.* campos

CampoTipoObrigatórioPadrãoIntervalo / EnumModosExemplo
input.prompt

Prompt de texto que descreve o vídeo a ser criado.

stringSim-texto não vaziotodosa cat surfing
input.generation_type

Modo de geração. O padrão é text-to-video.

stringNãotext-to-videotext-to-video | image-to-video | reference-to-video-image-to-video
input.image_urls

URLs 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_urls

Ví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_urls

Arquivos 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.duration

Duração do vídeo gerado, em segundos.

intNão5Seedance 2.5: 4 a 30 segundos. Seedance 2.0: 4 a 15 segundos.todos5
input.aspect_ratio

Proporçã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.

stringNãoadaptive16:9 | 4:3 | 1:1 | 3:4 | 9:16 | 21:9 | adaptivetodos16:9
input.resolution

Resolução do vídeo final.

stringNão720pSeedance 2.5: 480p | 720p. Seedance 2.0: 480p | 720p | 1080p | 4k (dependendo da variante).todos720p
input.generate_audio

Define se o modelo deve gerar áudio caso haja suporte.

booleanNãotruetrue | falsetodostrue
input.watermark

Define se deve ser adicionada uma marca d'água.

booleanNãofalsetrue | falsetodosfalse
input.web_search

Define se é permitida a busca na web para enriquecer a geração (quando disponível).

booleanNãofalsetrue | falsetodosfalse
input.return_last_frame

Define se deve retornar a URL do último frame, caso disponível.

booleanNãofalsetrue | falsetodosfalse
input.seed

Semente de geração para resultados determinísticos nas variantes do Seedance 2.0. O Seedance 2.5 não suporta este campo; omita-o.

intNão-1-1 ou 0-4294967295todos-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éditos

Resposta

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"
}
ValorSignificado
status=queuedAceita e aguardando para ser enviada ou processada.
status=generatingO provedor está processando a geração do vídeo.
status=completedVídeo concluído. O campo data.results contém a URL do resultado.
status=failedA geração falhou ou o tempo limite foi atingido.
billing_status=reservedOs créditos ficam reservados enquanto a tarefa está em andamento.
billing_status=chargedA tarefa foi concluída com sucesso e a cobrança da reserva foi efetuada.
billing_status=refundedA tarefa falhou ou expirou e os créditos foram devolvidos.
billing_status=refund_failedA 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ódigoHTTPSignificadoTentar novamente?
invalid_request400Parâmetros ausentes ou inválidos.Não, corrija a requisição.
invalid_api_key401A chave de API está ausente, é inválida ou foi revogada.Não, use uma chave válida.
insufficient_credits402Saldo de créditos insuficiente. A tarefa não é aceita nem cobrada.Após recarregar os créditos.
forbidden403A chave de API não tem as permissões (escopo) necessárias.Não.
not_found404A tarefa não existe ou não pertence ao proprietário da chave.Não.
rate_limited429Limite de requisições excedido.Sim, respeitando o cabeçalho Retry-After.
internal_error500Erro 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.

Logs da API