API Seedance 2.0

Integre a geração de vídeo em seu produto com criação de tarefas assíncronas, consulta de status, webhooks e faturamento com controle de crédito.

URL Base
https://api.seedance2.ai
Nesta página

Introdução

A API permite enviar tarefas de geração de vídeo do Seedance 2.0 programaticamente. A geração é assíncrona: crie uma tarefa, receba um ID de tarefa imediatamente e, em seguida, obtenha o vídeo finalizado consultando o endpoint da tarefa ou recebendo um webhook.

Tarefas assíncronas

A consulta funciona bem para desenvolvimento e integrações simples.

Pronto para Webhook

Webhooks são recomendados para produção porque evitam consultas agressivas e notificam seu serviço quando uma tarefa atinge um estado final.

Consciente de crédito

Os créditos são reservados no envio. Tarefas bem-sucedidas são cobradas dessa reserva; tarefas falhas ou com tempo esgotado são reembolsadas automaticamente.

Autenticação

Crie uma chave de API no painel e envie-a como um token de portador em cada requisição. A chave completa é mostrada 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 invalid_api_key com HTTP 401.

Guia Rápido

Primeiro, envie uma tarefa. Após a tarefa ser aceita, escolha um método de entrega de resultado: consulte o endpoint da tarefa ou receba o resultado final via webhook.

Enviar uma tarefa

Crie uma tarefa de vídeo assíncrona e receba um ID de tarefa imediatamente.

curl https://api.seedance2.ai/v1/videos/generations \
  -H "Authorization: Bearer sk_live_xxx" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "seedance-2-0",
    "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,
      "seed": -1
    }
  }'
Opção de resultado: Consulta

Recupere o endpoint de status da tarefa quando sua integração preferir consulta explícita.

curl https://api.seedance2.ai/v1/tasks/3f2aK9mR7xQp4TnZ8bLc6YwH \
  -H "Authorization: Bearer sk_live_xxx"
Opção de resultado: Webhook

Passe callback_url ao enviar a tarefa e, em seguida, receba retornos de chamada de conclusão ou falha e atualize seu próprio registro de tarefa.

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 uma tarefa de vídeo

Crie uma tarefa de vídeo com POST /v1/videos/generations. O corpo da requisição tem um modelo de nível superior, uma callback_url opcional e um objeto de entrada contendo as configurações de prompt e geração.

POST
/v1/videos/generations
curl https://api.seedance2.ai/v1/videos/generations \
  -H "Authorization: Bearer sk_live_xxx" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "seedance-2-0",
    "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,
      "seed": -1
    }
  }'

Modos de geração

generation_type controla quais entradas de mídia são aceitas e como o modelo as interpreta.

ModoMídia obrigatóriaMídia opcionalNotas
text-to-videopromptduração, proporção, resolução, sementeApenas prompt de texto. image_urls, video_urls e audio_urls não são necessários.
image-to-videoarray de prompt + image_urls (1-2 URLs de imagem)duração, proporção, resolução, sementeimage_urls deve ser um array. Forneça 1 URL de imagem para o primeiro quadro, ou 2 URLs de imagem para o primeiro e último quadros. Vídeo e áudio são ignorados.
reference-to-videoprompt + pelo menos uma imagem ou vídeoimagens, vídeos e áudio dentro dos limites de materialO áudio não pode ser usado sozinho com texto. Adicione pelo menos uma imagem ou vídeo quando o áudio for fornecido.
text-to-video

Use texto para vídeo quando o prompt for a única entrada criativa. (text-to-video)

curl https://api.seedance2.ai/v1/videos/generations \
  -H "Authorization: Bearer sk_live_xxx" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "seedance-2-0",
    "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,
      "seed": -1
    }
  }'
image-to-video

Use imagem para vídeo quando input.image_urls for um array com 1-2 URLs de imagem: uma URL define o primeiro quadro, e duas URLs definem o primeiro e o último quadros. Vídeo e referências de áudio são ignorados neste modo. (image-to-video)

curl https://api.seedance2.ai/v1/videos/generations \
  -H "Authorization: Bearer sk_live_xxx" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "seedance-2-0",
    "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 uma direção mais rica com imagens, vídeos e áudio de referência. O áudio não pode ser usado sozinho com texto; inclua pelo menos uma imagem ou vídeo quando o áudio for fornecido. (reference-to-video)

Limites de material

  • Até 9 imagens de referência
  • Até 3 vídeos de referência, duração total <= 15 segundos
  • Até 3 áudios de referência, duração total <= 15 segundos
  • Máximo de 12 materiais no total em todos os tipos

Combinações de entrada suportadas

Texto + Imagem
Texto + Vídeo
Texto + Imagem + Vídeo
Texto + Imagem + Áudio
Texto + Vídeo + Áudio
Texto + Imagem + Vídeo + Áudio
curl https://api.seedance2.ai/v1/videos/generations \
  -H "Authorization: Bearer sk_live_xxx" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "seedance-2-0",
    "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": "1080p"
    }
  }'

Parâmetros de requisição

Nomes de parâmetros, valores de enum, caminhos de endpoint e exemplos fazem parte do contrato da API. As descrições abaixo explicam como cada campo se comporta.

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 escrita usam JSON.application/json

Campos de nível superior

CampoTipoObrigatórioPadrãoIntervalo / EnumModosExemplo
model

Variante do modelo usada para geração.

stringSim-seedance-2-0 | seedance-2-0-fasttodosseedance-2-0
callback_url

Endpoint HTTPS que recebe retornos de chamada de conclusão e falha da tarefa.

stringNão-URL HTTPS, sem redes privadastodoshttps://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 descrevendo o vídeo a ser criado.

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

Modo de geração. O padrão é texto para vídeo. (text-to-video)

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

URLs de imagem publicamente acessíveis. Para imagem para vídeo, envie 1 imagem para o primeiro quadro ou 2 imagens para o primeiro e último quadros. Para referência para vídeo, envie até 9 imagens como referências visuais. (image-to-video) (reference-to-video)

string[]Condicional[]Imagem para vídeo: 1 ou 2 imagens. Referência para vídeo: até 9 imagens. (image-to-video) (reference-to-video)image-to-video / reference-to-video["https://.../a.jpg"]
input.video_urls

Vídeos de referência publicamente acessíveis apenas para referência para vídeo. Você pode enviar até 3 arquivos de vídeo, e o tempo de reprodução combinado deve ser de 15 segundos ou menos. (reference-to-video)

string[]Não[]Até 3 vídeos. O comprimento combinado dos vídeos deve ser de 15 segundos ou menos.reference-to-video[]
input.audio_urls

Arquivos de áudio de referência publicamente acessíveis apenas para referência para vídeo. Você pode enviar até 3 arquivos de áudio, e o tempo de reprodução combinado deve ser de 15 segundos ou menos. (reference-to-video)

string[]Não[]Até 3 arquivos de áudio. O comprimento combinado dos áudios deve ser de 15 segundos ou menos.reference-to-video[]
input.duration

Duração do vídeo de saída em segundos.

intNão54-15 segundostodos5
input.aspect_ratio

Proporção de vídeo de saída. adaptative permite que o serviço infira a melhor proporção.

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

Nível de resolução de saída.

stringNão720p480p | 720p | 1080ptodos720p
input.generate_audio

Se o modelo deve gerar áudio quando suportado.

booleanNãotrueverdadeiro | falsotodostrue
input.watermark

Se deve adicionar uma marca d'água.

booleanNãofalseverdadeiro | falsotodosfalse
input.web_search

Se deve permitir o aumento da pesquisa na web quando suportado.

booleanNãofalseverdadeiro | falsotodosfalse
input.return_last_frame

Se deve retornar a URL do último quadro quando disponível.

booleanNãofalseverdadeiro | falsotodosfalse
input.seed

Semente determinística. Use -1 para uma semente aleatória.

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 dos créditos retornado pela resposta de criação é a quantia real reservada para essa tarefa. (reference-to-video)

Ver preços de crédito

Resposta

Esta é a resposta de sucesso de POST /v1/videos/generations. Isso significa que a tarefa foi aceita e os créditos foram reservados. Use o taskId retornado para consultar GET /v1/tasks/:id ou para corresponder a um retorno de chamada de conclusão ou falha.

Resposta de sucesso POST /v1/videos/generations

{
  "taskId": "3f2aK9mR...",
  "credits": 60
}

Obter status da tarefa

Use GET /v1/tasks/:id para recuperar o estado atual da tarefa. Não consulte mais de uma vez a cada 10 segundos. Para sistemas de produção, prefira webhooks.

curl https://api.seedance2.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-0",
  "billing_status": "charged",
  "credits": 60,
  "failed_reason": null,
  "data": {
    "results": ["https://cdn.seedance2.ai/.../x.mp4"],
    "video_expires_at": "2026-06-13T10:00:00Z",
    "last_frame_url": null,
    "processing_time": 48
  }
}

Resposta de tarefa falha

{
  "id": "3f2aK9mR...",
  "status": "failed",
  "created_at": 1781234567,
  "model": "seedance-2-0",
  "billing_status": "refunded",
  "credits": 60,
  "failed_reason": "provider_failed"
}
ValorSignificado
status=queuedAceita e aguardando para ser enviada ou processada.
status=generatingO provedor está processando a geração.
status=completedVídeo concluído e data.results contém a URL do resultado.
status=failedA geração falhou ou o tempo esgotou.
billing_status=reservedOs créditos são reservados enquanto a tarefa está em andamento.
billing_status=chargedTarefa bem-sucedida e a reserva é liquidada.
billing_status=refundedTarefa falha ou com tempo esgotado e créditos foram devolvidos.
billing_status=refund_failedA transação de reembolso falhou e precisa de tratamento manual.

Após video_expires_at, data.results está vazio. Baixe e armazene o arquivo antes que a janela de validade termine.

Webhooks

Quando callback_url está presente, o Seedance chama seu endpoint quando a tarefa é concluída ou falha, e envia dados JSON descrevendo o resultado final. Se seu endpoint retornar uma resposta não-2xx ou não responder em 15 segundos, a entrega é tentada novamente por até 5 vezes. As retentativas usam o mesmo ID de tarefa, então deduplique por ID. Retorne uma resposta 200 assim que tiver registrado os dados de retorno de chamada com segurança.

Retorno de chamada de conclusão de tarefa

{
  "id": "3f2aK9mR...",
  "status": "completed",
  "created_at": 1781234567,
  "model": "seedance-2-0",
  "data": {
    "results": ["https://cdn.seedance2.ai/.../x.mp4"],
    "video_expires_at": "2026-06-13T10:00:00Z",
    "last_frame_url": null,
    "processing_time": 48
  }
}

Retorno de chamada de falha de tarefa

{
  "id": "3f2aK9mR...",
  "status": "failed",
  "created_at": 1781234567,
  "model": "seedance-2-0",
  "data": {
    "failed_reason": "provider_failed",
    "credits_refunded": 60
  }
}
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 forma dos dados de retorno de chamada, deduplique por ID, atualize seu próprio registro de tarefa e responda rapidamente.

callback_url deve ser HTTPS e não deve apontar para redes privadas, de loopback ou de link-local.

Erros

POST /v1/videos/generations e GET /v1/tasks/:id retornam esta forma de erro quando a própria requisição da API falha, como parâmetros inválidos, chave de API inválida, créditos insuficientes, limite de taxa ou tarefa não encontrada. Alguns erros incluem campos extras, como 'required', 'available' ou 'retry_after', dependendo da situação.

{
  "error": {
    "code": "insufficient_credits",
    "message": "Not enough credits for this task.",
    "required": 60,
    "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 revogada.Não, use uma chave válida.
insufficient_credits402Créditos insuficientes. A tarefa não é aceita ou cobrada.Após recarregar.
forbidden403A chave de API não possui o escopo necessário.Não.
not_found404A tarefa não existe ou não pertence ao proprietário da chave.Não.
rate_limited429Limite de taxa de requisição excedido.Sim, siga o Retry-After.
internal_error500Erro do servidor.Sim, tente novamente mais tarde.

Limites de taxa

Os limites de taxa são aplicados por chave de API com uma janela deslizante. A geração padrão é de 60 requisições por minuto; as consultas de status são mais flexíveis. As respostas HTTP 429 incluem Retry-After.

Geração

60/min

Consultas de status

Mais flexível

Cabeçalho 429

Retry-After

Faturamento e créditos

A API usa o sistema de reserva no envio, cobrança no sucesso e reembolso na falha. As páginas de uso do painel mostram o histórico de crédito da API, registros de tarefas e estatísticas de uso baseadas no tempo.

Reservado

Os créditos são verificados e reservados quando a tarefa é aceita.

Cobrado

Tarefas concluídas liquidam a reserva existente.

Reembolsado

Tarefas falhas ou com tempo esgotado devolvem os créditos reservados automaticamente.

Inspecione o uso no painel

Visualize logs da API, linhas do tempo de tarefas, histórico de créditos e métricas de uso baseadas no tempo.

Logs da API