Pular para a documentação
Nesta página

Seedance 2.5

Gere vídeos com o Seedance 2.5 usando texto, primeiro e último frames ou referências multimodais. Esta página cobre todo o fluxo de trabalho, da requisição ao resultado, para este modelo.

ID do modelo na API: seedance-2-5

A geração é assíncrona. Salve o taskId retornado ao criar a tarefa e, em seguida, consulte seu status ou receba um webhook.

Recursos

RecursoValores suportados
Resolução de saída480p · 720p · 1080p
Duração de saída4 a 30 segundos
Proporção de tela16:9, 4:3, 1:1, 3:4, 9:16, 21:9, adaptive
Imagens de referênciaAté 30 imagens
Vídeos de referênciaAté 10 vídeos
Arquivos de áudio de referênciaAté 10 arquivos de áudio
Total de referências combinadasAté 50 arquivos de referência no total
Duração total por grupo de vídeo/áudio30 segundos
seedNão suportado
Também aceita duration=-1 no modo de referência para vídeo; consulte as seções de edição de vídeo e preços abaixo. O modo image-to-video aceita apenas adaptive; omita este campo ou defina-o como adaptive.

Preços e créditos

A geração de vídeo é cobrada em créditos com base na duração faturável em segundos. Sem um vídeo de entrada, a duração faturável equivale à duração do vídeo gerado; com um vídeo de entrada, ela também inclui a duração do vídeo de referência.

Os rascunhos usam as taxas de 480p listadas acima, incluindo entradas de vídeo de referência se houver. Os vídeos finais utilizam a taxa exclusiva de saída de 1080p de 30 créditos por segundo; a entrada de vídeo de referência não é faturada novamente. Por exemplo, um rascunho de 5 segundos sem vídeo de referência custa 50 créditos, e o vídeo final de 5 segundos custará 150 créditos adicionais.

A tabela abaixo mostra os créditos cobrados por segundo, e não o custo total de uma tarefa. O valor depende do modelo, da resolução de saída e se foram fornecidos vídeos de referência no modo de referência para vídeo. Consulte as fórmulas e os exemplos abaixo da tabela para calcular o custo total.

Resolução de saídaSem entrada de vídeoCom entrada de vídeo
480p10 créditos/segundo6 créditos/segundo
720p20 créditos/segundo12 créditos/segundo
1080p30 créditos/segundo20 créditos/segundo
  • Sem entrada de vídeo: segundos gerados × tarifa sem vídeo.
  • Com entrada de vídeo: (segundos gerados + segundos medidos do vídeo de referência) × tarifa com vídeo. O servidor mede a duração total do vídeo de referência e a arredonda para cima em segundos inteiros antes da cobrança.
  • Referências apenas de imagem ou de áudio utilizam a tarifa sem vídeo. A tarifa com vídeo aplica-se exclusivamente no modo de referência para vídeo quando há arquivos de vídeo enviados.

Exemplos de cálculo de custos

Texto para vídeo de 5 segundos em 720p: 5 × 20 = 100 créditos.

Vídeo gerado de 5 segundos em 720p com vídeo de referência de 5 segundos: (5 + 5) × 12 = 120 créditos.

Esses créditos são retidos no momento em que a tarefa é criada. Se a tarefa for concluída com sucesso, esse será o valor final cobrado (não há cobrança adicional nem reembolso parcial com base na duração real do arquivo entregue). Tarefas que falharem ou expirarem entram automaticamente no fluxo de reembolso.

Os créditos são reservados no momento do envio e cobrados após a conclusão bem-sucedida. Tarefas que falharem ou expirarem entram no fluxo de reembolso. O status refund_failed indica que o reembolso não pôde ser concluído; verifique os logs da API ou entre em contato com o suporte.

Como os créditos são cobrados quando duration=-1

Quando a duração é definida como -1, o tempo do resultado final não fica fixo, sendo determinado pelo próprio modelo.

Na maioria dos casos, defina a duração para o tempo de vídeo que você realmente precisa em vez de -1. Recomendamos usar -1 apenas para edição de vídeo, e não para outros cenários de geração de vídeo.

Arquivos de referênciaComo o valor é calculadoExemplo
Com vídeos de referênciaSoma-se a duração de todos os vídeos de referência e arredonda-se o total para o próximo segundo inteiro, resultando em T. O valor cobrado é (T + T) × a tarifa com vídeo: um T representa a estimativa de duração da entrega e o outro representa a duração do vídeo enviado.720p com vídeo de referência de 5 segundos: (5 + 5) × 12 = 120 créditos.
Sem vídeos de referência (apenas imagens ou áudio)Adota-se o padrão de 30 segundos como a estimativa de duração da entrega. O valor cobrado é 30 × a tarifa sem vídeo.720p sem vídeo de referência: 30 × 20 = 600 créditos.

Autenticação

Crie uma chave de API no painel. A chave completa é exibida apenas uma vez. Guarde-a com segurança no seu servidor e envie-a como um token Bearer em cada requisição.

URL base

https://api.seevio.ai
Authorization: Bearer sk_live_your_api_key
Content-Type: application/json

Defina a variável de ambiente SEEVIO_API_KEY antes de rodar os exemplos. Os exemplos em JavaScript rodam no servidor com Node.js; os de Python utilizam a biblioteca requests.

Início rápido

Envie esta requisição simplificada, salve o taskId retornado e use o exemplo de consulta abaixo. O valor de créditos indicado na resposta de criação é o montante reservado.

curl --fail-with-body https://api.seevio.ai/v1/videos/generations \
  -H "Authorization: Bearer $SEEVIO_API_KEY" \
  -H "Content-Type: application/json" \
  --data '{
  "model": "seedance-2-5",
  "input": {
    "prompt": "A cat surfing at sunset, cinematic lighting",
    "duration": 5,
    "resolution": "720p",
    "generation_type": "text-to-video",
    "aspect_ratio": "16:9",
    "generate_audio": true
  }
}'

Exemplo de resposta de criação de tarefa

Após a aceitação da solicitação acima, a API retornará esta resposta em formato JSON. O taskId é o identificador da tarefa usado para consultas de status subsequentes; credits representa a quantidade de créditos reservados para esta tarefa. Esta resposta confirma a criação da tarefa, mas não significa que o vídeo esteja pronto. Você precisará consultar periodicamente o status da tarefa ou configurar um Webhook para receber o vídeo finalizado.

{
  "taskId": "3f2aK9mR7xQp4TnZ8bLc6YwH",
  "credits": 100
}

Criar uma tarefa

POST https://api.seevio.ai/v1/videos/generations

Envie um objeto JSON contendo o modelo e as configurações de entrada (input), além de um callback_url opcional. Sempre especifique o ID do modelo indicado nesta página; omitir o campo seleciona por padrão seedance-2-0.

Corpo da requisição

CampoTipoObrigatórioDescrição e restrições
model
stringSim

ID do modelo. Para usar o Seedance 2.5, defina este campo como seedance-2-5.

callback_url
stringNão

Endpoint HTTPS público para retornos assíncronos (POST) de conclusão ou falha. Redes privadas e localhost não são permitidos.

Exemplo: https://example.com/webhooks/seevio
input
objectSim

Configurações de geração. Deve conter uma descrição de texto (prompt) não vazia.

Parâmetros de entrada

image_urls é obrigatório em image-to-video. O modo reference-to-video requer pelo menos uma referência entre image_urls, video_urls e audio_urls.
Quando draft_task_id estiver presente, omita os campos prompt, generation_type, image_urls, video_urls, audio_urls, duration, aspect_ratio, seed, generate_audio, web_search e omni_reference_task_type, mesmo que os valores correspondam aos do rascunho. Estas configurações são herdadas. Não combine draft=true com draft_task_id.

Forneça image_urls, video_urls e audio_urls como arrays de strings de URL (string[]). Cada URL fornecida deve estar acessível publicamente via HTTPS, incluindo mídias ignoradas pelo modo selecionado.

CampoTipoObrigatórioPadrãoDescrição e restrições
input.draft
booleanNãofalse

Criar uma prévia de rascunho em 480p. Apenas para o Seedance 2.5. Mutuamente exclusivo com draft_task_id.

Valores suportados
true | false
input.draft_task_id
stringNão—

Crie um vídeo final em 1080p a partir de um rascunho da API que pertença à sua conta, esteja concluído e tenha sido criado há menos de 7 dias. Informe o taskId retornado por esta API e omita os campos de geração herdados.

Exemplo: 3f2aK9mR7xQp4TnZ8bLc6YwH
input.output_format
stringNãomp4

Container de saída do vídeo. Suporta mp4 e mov, incluindo requisições de rascunho e de vídeo final.

Valores suportados
mp4 | mov
input.prompt
stringCondicional—

Obrigatório para gerações comuns e para criar um rascunho. Não envie este campo ao gerar um vídeo final usando draft_task_id; o prompt do rascunho será herdado automaticamente.

Exemplo: A cat surfing at sunset
input.generation_type
stringNãotext-to-video

text-to-video utiliza apenas o prompt; image-to-video utiliza de 1 a 2 imagens; reference-to-video utiliza referências de imagem, vídeo e/ou áudio.

Valores suportados
text-to-video | image-to-video | reference-to-video
input.image_urls
string[]Condicional[]

image-to-video: 1 imagem para o primeiro frame, ou 2 imagens ordenadas para o primeiro e o último frames. reference-to-video: até 30 imagens. Ignorado no modo text-to-video.

Exemplo: ["https://example.com/first-frame.jpg"]
input.video_urls
string[]Condicional[]

Encaminhado apenas em reference-to-video; limite combinado de até 10 vídeos e 30 segundos. Ignorado nos outros modos.

Exemplo: ["https://example.com/source.mp4"]
input.audio_urls
string[]Condicional[]

Encaminhado apenas em reference-to-video; limite combinado de até 10 arquivos de áudio e 30 segundos. Ignorado nos outros modos.

Exemplo: ["https://example.com/music.mp3"]
input.duration
integerNão5

Duração da saída: de 4 a 30 segundos, padrão 5. duration=-1 é aceito para rascunhos e no modo reference-to-video. Para o vídeo final, omita a duração; ela será herdada do rascunho.

Valores suportados
-1 | 4–30
Exemplo: 5
input.aspect_ratio
stringNãoadaptive

Proporção de tela de saída. adaptive permite que o modelo decida a proporção ideal. O modo image-to-video aceita apenas adaptive; omita este campo ou defina-o como adaptive.

Valores suportados
16:9, 4:3, 1:1, 3:4, 9:16, 21:9, adaptive
Exemplo: adaptive
input.resolution
stringNão720p

A geração padrão adota 720p. Rascunhos suportam apenas 480p (padrão de rascunho). Vídeos finais suportam apenas 1080p (padrão de vídeo final).

Valores suportados
480p | 720p | 1080p
Exemplo: 720p
input.generate_audio
booleanNãotrue

Solicita a geração de áudio sincronizado.

Valores suportados
true | false
Exemplo: true
input.watermark
booleanNãofalse

Solicita a aplicação de marca d'água de IA no vídeo gerado.

Valores suportados
true | false
Exemplo: false
input.web_search
booleanNãofalse

Permite pesquisa na web quando suportada pelo modelo.

Valores suportados
true | false
Exemplo: false
input.return_last_frame
booleanNãofalse

Solicita o último frame. O resultado da consulta conterá data.last_frame_url quando o frame estiver disponível; caso contrário, será null.

Valores suportados
true | false
Exemplo: true

Campos booleanos devem ser preenchidos com true ou false no JSON, não com strings ou números.

Resposta de criação

O retorno HTTP 200 traz o taskId (string) e os credits (número). Isso confirma a criação da tarefa, não a sua conclusão. O valor abaixo equivale ao exemplo de início rápido (5 segundos em 720p).

{
  "taskId": "3f2aK9mR7xQp4TnZ8bLc6YwH",
  "credits": 100
}

Prévia em rascunho → final em 1080p

O Seedance 2.5 suporta um fluxo de trabalho em duas etapas: gerar um rascunho (Draft) em 480p para conferir os aspectos visuais e o movimento, e depois reutilizá-lo para criar o vídeo final em 1080p. Ambas as etapas usam POST /v1/videos/generations e criam tarefas distintas e faturáveis.

O modo de rascunho ajuda a reduzir custos ao testar diferentes ideias. Em vez de gerar cada teste diretamente em 1080p, você pode criar rascunhos de 480p a um custo menor, escolher a melhor opção e usar esse rascunho para gerar o resultado final em alta definição.

Use um rascunho concluído em até 7 dias após a sua criação para gerar o vídeo final. O rascunho deve pertencer à mesma conta de API. Use o taskId retornado por esta API.

1. Gerar um rascunho de 480p

Defina input.draft=true e forneça o prompt, referências e configurações usuais de geração. A resolução padrão é 480p no modo Draft; outras resoluções serão rejeitadas. Você pode ativar return_last_frame para o rascunho, conforme demonstrado abaixo.

curl --fail-with-body https://api.seevio.ai/v1/videos/generations \
  -H "Authorization: Bearer $SEEVIO_API_KEY" \
  -H "Content-Type: application/json" \
  --data '{
  "model": "seedance-2-5",
  "input": {
    "prompt": "A cat surfing at sunset, cinematic lighting",
    "draft": true,
    "duration": 5,
    "resolution": "480p",
    "return_last_frame": true
  }
}'
{
  "taskId": "3f2aK9mR7xQp4TnZ8bLc6YwH",
  "credits": 50
}

2. Aguardar a conclusão do rascunho

Salve o taskId retornado na resposta de criação e consulte o endpoint GET /v1/tasks/TASK_ID até que o status mude para completed. A resposta da consulta exibirá is_draft=true; assista ao vídeo prévio em data.results. Quando solicitado e disponível, o último frame estará em data.last_frame_url.

Você também pode receber um Webhook quando o rascunho for concluído. Defina callback_url no nível superior da requisição de criação do rascunho. Após a conclusão, uma notificação será enviada para essa URL, e seu serviço poderá processar o callback para salvar o resultado, atualizar o status da tarefa ou iniciar seu próprio processamento subsequente. Consulte a seção Webhooks desta página para ver o formato do callback.

curl --fail-with-body https://api.seevio.ai/v1/tasks/3f2aK9mR7xQp4TnZ8bLc6YwH \
  -H "Authorization: Bearer $SEEVIO_API_KEY"
{
  "id": "3f2aK9mR7xQp4TnZ8bLc6YwH",
  "created_at": 1788652800,
  "model": "seedance-2-5",
  "is_draft": true,
  "draft_task_id": null,
  "status": "completed",
  "billing_status": "charged",
  "credits": 50,
  "failed_reason": null,
  "data": {
    "results": [
      "https://cdn.seevio.ai/api/videos/example.mp4"
    ],
    "video_expires_at": "2026-09-07T00:00:00Z",
    "last_frame_url": "https://cdn.seevio.ai/api/images/draft-last-frame.jpg",
    "processing_time": 48
  }
}

3. Gerar o vídeo final em 1080p

Substitua draft_task_id neste exemplo pelo taskId do seu rascunho concluído. O vídeo final herdará o conteúdo e a duração do rascunho. A resolução padrão é 1080p e nenhuma outra será aceita. As opções output_format, watermark e return_last_frame podem ser configuradas individualmente para cada vídeo final; callback_url permanece na raiz da requisição.

Quando draft_task_id estiver presente, omita os campos prompt, generation_type, image_urls, video_urls, audio_urls, duration, aspect_ratio, seed, generate_audio, web_search e omni_reference_task_type, mesmo que os valores correspondam aos do rascunho. Estas configurações são herdadas. Não combine draft=true com draft_task_id.
curl --fail-with-body https://api.seevio.ai/v1/videos/generations \
  -H "Authorization: Bearer $SEEVIO_API_KEY" \
  -H "Content-Type: application/json" \
  --data '{
  "model": "seedance-2-5",
  "input": {
    "draft_task_id": "3f2aK9mR7xQp4TnZ8bLc6YwH",
    "resolution": "1080p",
    "output_format": "mp4",
    "watermark": false,
    "return_last_frame": true
  }
}'

A resposta contém um novo taskId para o vídeo final. Consulte esse novo ID ou aguarde pelo seu webhook. A resposta de consulta do vídeo final terá is_draft=false e draft_task_id igual ao ID da tarefa de API do rascunho original. O rascunho original continua disponível. Cada requisição de vídeo final aceita cria uma nova tarefa faturada separadamente.

{
  "taskId": "final_7mQx2pN8kR4vT9cL6bW3",
  "credits": 150
}

Faturamento de rascunhos e vídeos finais

Os rascunhos usam as taxas de 480p listadas acima, incluindo entradas de vídeo de referência se houver. Os vídeos finais utilizam a taxa exclusiva de saída de 1080p de 30 créditos por segundo; a entrada de vídeo de referência não é faturada novamente. Por exemplo, um rascunho de 5 segundos sem vídeo de referência custa 50 créditos, e o vídeo final de 5 segundos custará 150 créditos adicionais.

Para duration=-1, o rascunho e o vídeo final correspondente reservam créditos para até 30 segundos de saída cada um, acrescido da entrada de vídeo de referência apenas para o rascunho. Após a conclusão, o valor final é ajustado para a duração real do vídeo produzido quando puder ser determinada, e os créditos reservados não utilizados são devolvidos. Um vídeo final pode reservar até 900 créditos.

Uma origem que não esteja concluída, que tenha expirado, que não seja um rascunho ou que seja inacessível será rejeitada com HTTP 400 (invalid_request). Resolução inválida, campos herdados preenchidos ou parâmetros conflitantes com o rascunho também resultam em HTTP 400. Créditos insuficientes geram HTTP 402.

Modos de geração e exemplos

Substitua as URLs de exemplo de media.com pelos seus próprios arquivos HTTPS públicos. Os links de exemplo servem apenas para ilustrar a estrutura da requisição e não representam arquivos reais para download.

Texto para vídeo

Geração a partir de um prompt de texto. Referências de mídia enviadas neste modo são desconsideradas.

curl --fail-with-body https://api.seevio.ai/v1/videos/generations \
  -H "Authorization: Bearer $SEEVIO_API_KEY" \
  -H "Content-Type: application/json" \
  --data '{
  "model": "seedance-2-5",
  "input": {
    "prompt": "A cat surfing at sunset, cinematic lighting",
    "duration": 5,
    "resolution": "720p",
    "generation_type": "text-to-video",
    "aspect_ratio": "16:9",
    "generate_audio": true
  }
}'

Primeiro frame

Envie uma imagem para servir como o primeiro frame e descreva a ação desejada no prompt.

curl --fail-with-body https://api.seevio.ai/v1/videos/generations \
  -H "Authorization: Bearer $SEEVIO_API_KEY" \
  -H "Content-Type: application/json" \
  --data '{
  "model": "seedance-2-5",
  "input": {
    "prompt": "A cat surfing at sunset, cinematic lighting",
    "duration": 5,
    "resolution": "720p",
    "generation_type": "image-to-video",
    "image_urls": [
      "https://example.com/first-frame.jpg"
    ],
    "aspect_ratio": "adaptive"
  }
}'

Primeiro e último frames

Envie duas URLs de imagem em ordem: primeiro frame e depois o último frame. Este exemplo também solicita o retorno do último frame gerado de forma isolada.

curl --fail-with-body https://api.seevio.ai/v1/videos/generations \
  -H "Authorization: Bearer $SEEVIO_API_KEY" \
  -H "Content-Type: application/json" \
  --data '{
  "model": "seedance-2-5",
  "input": {
    "prompt": "A cat surfing at sunset, cinematic lighting",
    "duration": 5,
    "resolution": "720p",
    "generation_type": "image-to-video",
    "image_urls": [
      "https://example.com/first-frame.jpg",
      "https://example.com/last-frame.jpg"
    ],
    "aspect_ratio": "adaptive",
    "return_last_frame": true
  }
}'

Referência multimodal

Combine referências de imagem, vídeo e áudio. O prompt continua obrigatório. O envio de um vídeo de referência altera a fórmula de faturamento.

curl --fail-with-body https://api.seevio.ai/v1/videos/generations \
  -H "Authorization: Bearer $SEEVIO_API_KEY" \
  -H "Content-Type: application/json" \
  --data '{
  "model": "seedance-2-5",
  "input": {
    "prompt": "Follow the reference camera movement and keep the character consistent. Use the audio for ambience.",
    "duration": 5,
    "resolution": "720p",
    "generation_type": "reference-to-video",
    "image_urls": [
      "https://example.com/character.jpg"
    ],
    "video_urls": [
      "https://example.com/camera.mp4"
    ],
    "audio_urls": [
      "https://example.com/ambience.mp3"
    ],
    "aspect_ratio": "adaptive"
  }
}'

Referência de áudio

Use áudio como o único tipo de referência, acompanhado pelo prompt de texto obrigatório que descreve o vídeo desejado.

curl --fail-with-body https://api.seevio.ai/v1/videos/generations \
  -H "Authorization: Bearer $SEEVIO_API_KEY" \
  -H "Content-Type: application/json" \
  --data '{
  "model": "seedance-2-5",
  "input": {
    "prompt": "Create a coastal sunrise scene matching the rhythm of this audio.",
    "duration": 5,
    "resolution": "720p",
    "generation_type": "reference-to-video",
    "audio_urls": [
      "https://example.com/music.mp3"
    ]
  }
}'

Edição de vídeo

Para a edição de vídeo no Seedance 2.5, a duração deve ser definida como -1 e a proporção de tela (aspect_ratio) como adaptativa. Ambas as configurações são obrigatórias, caso contrário, a geração falhará.

Descreva a edição e envie o vídeo original. Defina duration=-1 e utilize a proporção adaptive. Use um trecho de origem com pelo menos 4 segundos para este fluxo. A regra de faturamento para duration=-1 está explicada acima.

curl --fail-with-body https://api.seevio.ai/v1/videos/generations \
  -H "Authorization: Bearer $SEEVIO_API_KEY" \
  -H "Content-Type: application/json" \
  --data '{
  "model": "seedance-2-5",
  "input": {
    "prompt": "Edit the source video: change the character’s coat to blue and preserve the camera movement.",
    "duration": -1,
    "resolution": "720p",
    "generation_type": "reference-to-video",
    "video_urls": [
      "https://example.com/source.mp4"
    ],
    "aspect_ratio": "adaptive"
  }
}'

Extensão de vídeo

Para a extensão de vídeo do Seedance 2.5, o aspect_ratio deve ser definido como adaptive; caso contrário, a geração poderá falhar. Defina a duração normalmente para o tempo de vídeo desejado dentro do intervalo suportado; não é necessário usar -1.

Descreva como o vídeo de origem deve continuar. Utilize a proporção adaptive e defina uma duração de saída padrão dentro do limite do modelo.

curl --fail-with-body https://api.seevio.ai/v1/videos/generations \
  -H "Authorization: Bearer $SEEVIO_API_KEY" \
  -H "Content-Type: application/json" \
  --data '{
  "model": "seedance-2-5",
  "input": {
    "prompt": "Continue the camera movement from the source video, revealing a forest clearing.",
    "duration": 8,
    "resolution": "720p",
    "generation_type": "reference-to-video",
    "video_urls": [
      "https://example.com/source.mp4"
    ],
    "aspect_ratio": "adaptive"
  }
}'

Consultar tarefa

GET https://api.seevio.ai/v1/tasks/{taskId}

Substitua o ID de exemplo pelo taskId recebido no retorno da criação. As consultas só retornam tarefas de propriedade do usuário associado à chave de API; IDs inexistentes ou de terceiros retornam HTTP 404.

Recomendamos consultar a cada 10 ou 20 segundos inicialmente, aplicar recuo (backoff) caso receba HTTP 429 e parar assim que o status for completed ou failed. Para produção, prefira webhooks. Cada exemplo abaixo executa uma consulta única.

curl --fail-with-body https://api.seevio.ai/v1/tasks/3f2aK9mR7xQp4TnZ8bLc6YwH \
  -H "Authorization: Bearer $SEEVIO_API_KEY"
StatusDescrição e restrições
queuedAceito e aguardando na fila de processamento.
generatingGeração em andamento.
completedTarefa concluída com sucesso. Baixe o conteúdo em data.results antes do prazo de expiração.
failedTarefa falhou. Verifique os campos failed_reason e billing_status.
CampoTipoDescrição e restrições
idstring
Identificador único da tarefa. Corresponde ao taskId retornado na criação.
created_atnumber
Data de criação da tarefa em timestamp Unix (segundos).
modelstring
O ID do modelo público utilizado para esta tarefa.
is_draftboolean
True para rascunhos em 480p; false para vídeos finais ou comuns.
draft_task_idstring | null
O ID da tarefa de API do rascunho de origem para um vídeo final; null para rascunhos e vídeos comuns.
billing_statusstring
status do faturamento: reserved (reservado), charged (cobrado), refunded (reembolsado) ou refund_failed (falha no reembolso).
creditsnumber
Créditos reservados para esta tarefa. Este valor é mantido mesmo após um reembolso; verifique o billing_status para saber o resultado financeiro final.
failed_reasonstring | null
Motivo da falha em tarefas malsucedidas; null nos demais casos. Consultas de tarefas com falha não retornam o objeto data.
dataobject
Presente em consultas de tarefas que não falharam. Contém o resultado gerado e os detalhes de processamento.
data.resultsstring[]
Lista de URLs do vídeo gerado. Fica vazia até a conclusão ou caso o vídeo já tenha expirado.
data.video_expires_atstring | null
Prazo de expiração do vídeo no formato ISO 8601 (retorna null até que esteja disponível). Salve o arquivo gerado antes deste limite.
data.last_frame_urlstring | null
URL do último frame (quando solicitado e disponível), caso contrário retorna null.
data.processing_timenumber | null
Duração do processamento do provedor em segundos (quando disponível), caso contrário retorna null.

Tarefa concluída: resposta da consulta com os resultados do vídeo

Quando a consulta retornar status=completed, significa que a geração do vídeo foi concluída. Recupere as URLs do vídeo em data.results e faça o download antes da data em data.video_expires_at. O status billing_status=charged indica que os créditos reservados foram cobrados.

{
  "id": "3f2aK9mR7xQp4TnZ8bLc6YwH",
  "created_at": 1788652800,
  "model": "seedance-2-5",
  "is_draft": false,
  "draft_task_id": null,
  "status": "completed",
  "billing_status": "charged",
  "credits": 100,
  "failed_reason": null,
  "data": {
    "results": [
      "https://cdn.seevio.ai/api/videos/example.mp4"
    ],
    "video_expires_at": "2026-09-07T00:00:00Z",
    "last_frame_url": null,
    "processing_time": 48
  }
}

Tarefa falhou: resposta da consulta com detalhes do erro e cobrança

Quando a consulta retornar status=failed, significa que a geração falhou. Verifique o motivo em failed_reason e o resultado do estorno em billing_status. Neste exemplo, refunded indica que os créditos foram devolvidos. O campo credits mantém o valor original reservado, e a resposta não inclui data.

{
  "id": "3f2aK9mR7xQp4TnZ8bLc6YwH",
  "created_at": 1788652800,
  "model": "seedance-2-5",
  "is_draft": false,
  "draft_task_id": null,
  "status": "failed",
  "billing_status": "refunded",
  "credits": 100,
  "failed_reason": "provider_failed"
}

Webhooks

Defina o callback_url na requisição de criação para receber um POST em JSON assim que a tarefa for concluída ou falhar. Responda com status 2xx em até 15 segundos. Envios malsucedidos serão reentados; trate as requisições de forma idempotente utilizando o ID da tarefa.

O seu endpoint de callback deve aceitar requisições POST com um corpo no formato JSON (Content-Type: application/json).

Criar tarefa contendo callback

curl --fail-with-body https://api.seevio.ai/v1/videos/generations \
  -H "Authorization: Bearer $SEEVIO_API_KEY" \
  -H "Content-Type: application/json" \
  --data '{
  "model": "seedance-2-5",
  "input": {
    "prompt": "A cat surfing at sunset, cinematic lighting",
    "duration": 5,
    "resolution": "720p",
    "generation_type": "text-to-video",
    "aspect_ratio": "16:9",
    "generate_audio": true
  },
  "callback_url": "https://example.com/webhooks/seevio"
}'

Tarefa concluída: payload de callback de sucesso

Quando a geração é bem-sucedida, o callback retorna status=completed. Use o id para identificar a tarefa e data.results para obter as URLs do vídeo. Certifique-se de baixar e salvar os resultados antes do prazo em data.video_expires_at.

created_at indica a criação do evento; task_created_at indica a criação da tarefa, em segundos Unix. Os exemplos mostram os campos recomendados; as respostas podem incluir campos adicionais.

{
  "id": "3f2aK9mR7xQp4TnZ8bLc6YwH",
  "created_at": 1788652848,
  "model": "seedance-2-5",
  "status": "completed",
  "task_created_at": 1788652800,
  "billing_status": "charged",
  "credits": 100,
  "failed_reason": null,
  "data": {
    "results": [
      "https://cdn.seevio.ai/api/videos/example.mp4"
    ],
    "video_expires_at": "2026-09-07T00:00:00Z",
    "last_frame_url": null,
    "processing_time": 48
  }
}

Falha na tarefa: payload de callback de erro

Se a geração falhar, o callback retornará status=failed. Utilize o id para identificar a tarefa, failed_reason para verificar o motivo do erro e credits_refunded para saber a quantidade de créditos reembolsados.

{
  "id": "3f2aK9mR7xQp4TnZ8bLc6YwH",
  "created_at": 1788652848,
  "model": "seedance-2-5",
  "status": "failed",
  "task_created_at": 1788652800,
  "billing_status": "refunded",
  "credits": 100,
  "failed_reason": "provider_failed",
  "credits_refunded": 100
}

Exemplo de código receptor

export async function POST(request: Request) {
  const callbackData = await request.json();

  if (callbackData.status === "completed") {
    const videoUrls = callbackData.data.results;
    // Save the video URLs and mark this task as completed in your application.
    console.log(callbackData.id, videoUrls);
  }

  if (callbackData.status === "failed") {
    const { failed_reason, credits_refunded } = callbackData;
    // Record the failure reason and refunded credits for this task.
    console.error(callbackData.id, failed_reason, credits_refunded);
  }

  return new Response(null, { status: 200 });
}

Este exemplo em Next.js lê o corpo do callback em JSON e trata diretamente as tarefas concluídas e com falha. Recomendamos implementar persistência e eliminação de duplicidades por ID de tarefa na sua aplicação, além de enfileirar processos demorados antes de responder ao callback.

Requisitos de mídia e limitações

  • Todas as URLs de mídia e de callback devem ser links públicos em HTTPS. Evite usar localhost, IPs privados e arquivos que exijam cookies ou autenticação. As URLs de vídeo/áudio de referência devem apontar diretamente para os arquivos de mídia legíveis.
  • No modo reference-to-video, envie ao menos uma referência, respeitando os limites de até 30 imagens, 10 vídeos, 10 arquivos de áudio e 50 referências combinadas. A duração total de vídeo e de áudio não deve exceder 30 segundos cada.
  • O modo text-to-video desconsidera todas as referências de mídia. O modo image-to-video processa apenas as imagens de primeiro e último frame, ignorando arquivos de vídeo e áudio. Use o modo reference-to-video para combinar mídias.
  • Cada arquivo de áudio ou vídeo de referência deve ter entre 2 e 30 segundos. Para fluxos de edição de vídeo, utilize trechos de origem de pelo menos 4 segundos.

Requisitos de imagem

  • Cada imagem deve ter menos de 30 MB.
  • Formatos aceitos: jpeg, png, webp, bmp, tiff, gif.
  • Proporção (largura ÷ altura): entre 0,4 e 2,5, inclusive.
  • A largura e a altura devem ter entre 300 e 6.000 pixels cada, inclusive.

Requisitos de vídeo

  • Formatos aceitos: mp4, mov.
  • Cada vídeo não deve exceder 100 MB.
  • Taxa de quadros: de 24 a 60 FPS, inclusive.
  • Proporção (largura ÷ altura): entre 0,4 e 2,5, inclusive.
  • Total de pixels (largura × altura): de 407.696 a 8.295.044, inclusive. Por exemplo, 614 × 664 = 407.696 e 3.326 × 2.494 = 8.295.044. Estes são exemplos de contagem de pixels, e não requisitos fixos de largura e altura.

Requisitos de áudio

  • Formatos aceitos: wav, mp3.
  • Cada arquivo de áudio não deve exceder 15 MB.

Erros

Erros de requisição retornam um objeto contendo code e message. Uma tarefa aceita com sucesso ainda pode falhar posteriormente durante o processamento; monitore seu status por consulta ou configure um callback de falha.

{
  "error": {
    "code": "invalid_request",
    "message": "input.prompt is required."
  }
}
HTTPCampoO que fazer
400invalid_request
Corrija a estrutura do JSON, prompts ausentes, intervalos de parâmetros ou URLs de mídia antes de tentar novamente.
401invalid_api_key
Verifique o token Bearer e se a chave de API continua ativa.
402insufficient_credits
Adicione créditos à conta ou reduza o custo da geração. A resposta pode indicar os saldos necessário e disponível.
403forbidden
Verifique a restrição aplicada à conta descrita na mensagem de erro.
404not_found
Confirme se o ID da tarefa está correto e se ela foi criada pela mesma chave de API utilizada.
429rate_limited
Aguarde o tempo indicado no cabeçalho Retry-After antes de realizar novas tentativas.
500internal_error
Examine a mensagem de erro e os logs da API. Reenvie com cautela; novas tentativas de criação geram novas cobranças.

Limites de requisição

Criação de tarefas: por padrão, cada chave de API permite até 100 requisições por minuto. No momento, limites personalizados não estão disponíveis.

Consulta de tarefas: por padrão, cada chave de API permite até 120 requisições por minuto. As requisições de consulta e de criação de tarefas são contabilizadas separadamente.

Respostas com HTTP 429 incluem o cabeçalho Retry-After: 60 para criação e Retry-After: 5 para consultas. Implemente recuo gradual (backoff) e evite consultas mais frequentes do que o recomendado.