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
| Recurso | Valores suportados |
|---|---|
| Resolução de saída | 480p · 720p · 1080p |
| Duração de saída | 4 a 30 segundos |
| Proporção de tela | 16:9, 4:3, 1:1, 3:4, 9:16, 21:9, adaptive |
| Imagens de referência | Até 30 imagens |
| Vídeos de referência | Até 10 vídeos |
| Arquivos de áudio de referência | Até 10 arquivos de áudio |
| Total de referências combinadas | Até 50 arquivos de referência no total |
| Duração total por grupo de vídeo/áudio | 30 segundos |
| seed | Não suportado |
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.
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ída | Sem entrada de vídeo | Com entrada de vídeo |
|---|---|---|
480p | 10 créditos/segundo | 6 créditos/segundo |
720p | 20 créditos/segundo | 12 créditos/segundo |
1080p | 30 créditos/segundo | 20 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.
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ência | Como o valor é calculado | Exemplo |
|---|---|---|
| Com vídeos de referência | Soma-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.aiAuthorization: Bearer sk_live_your_api_key
Content-Type: application/jsonDefina 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/generationsEnvie 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
| Campo | Tipo | Obrigatório | Descrição e restrições |
|---|---|---|---|
model | string | Sim | ID do modelo. Para usar o Seedance 2.5, defina este campo como seedance-2-5. |
callback_url | string | Nã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 | object | Sim | Configurações de geração. Deve conter uma descrição de texto (prompt) não vazia. |
Parâmetros de entrada
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.
| Campo | Tipo | Obrigatório | Padrão | Descrição e restrições |
|---|---|---|---|---|
input.draft | boolean | Não | false | 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 | string | Nã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 | string | Não | mp4 | 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 | string | Condicional | — | 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 | string | Não | text-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 | integer | Não | 5 | 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–30Exemplo: 5 |
input.aspect_ratio | string | Não | adaptive | 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, adaptiveExemplo: adaptive |
input.resolution | string | Não | 720p | 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 | 1080pExemplo: 720p |
input.generate_audio | boolean | Não | true | Solicita a geração de áudio sincronizado. Valores suportados true | falseExemplo: true |
input.watermark | boolean | Não | false | Solicita a aplicação de marca d'água de IA no vídeo gerado. Valores suportados true | falseExemplo: false |
input.web_search | boolean | Não | false | Permite pesquisa na web quando suportada pelo modelo. Valores suportados true | falseExemplo: false |
input.return_last_frame | boolean | Não | false | 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 | falseExemplo: 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.
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.
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.
Modos de geração e exemplos
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
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
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"| Status | Descrição e restrições |
|---|---|
queued | Aceito e aguardando na fila de processamento. |
generating | Geração em andamento. |
completed | Tarefa concluída com sucesso. Baixe o conteúdo em data.results antes do prazo de expiração. |
failed | Tarefa falhou. Verifique os campos failed_reason e billing_status. |
| Campo | Tipo | Descrição e restrições |
|---|---|---|
id | string | Identificador único da tarefa. Corresponde ao taskId retornado na criação. |
created_at | number | Data de criação da tarefa em timestamp Unix (segundos). |
model | string | O ID do modelo público utilizado para esta tarefa. |
is_draft | boolean | True para rascunhos em 480p; false para vídeos finais ou comuns. |
draft_task_id | string | null | O ID da tarefa de API do rascunho de origem para um vídeo final; null para rascunhos e vídeos comuns. |
billing_status | string | status do faturamento: reserved (reservado), charged (cobrado), refunded (reembolsado) ou refund_failed (falha no reembolso). |
credits | number | 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_reason | string | null | Motivo da falha em tarefas malsucedidas; null nos demais casos. Consultas de tarefas com falha não retornam o objeto data. |
data | object | Presente em consultas de tarefas que não falharam. Contém o resultado gerado e os detalhes de processamento. |
data.results | string[] | Lista de URLs do vídeo gerado. Fica vazia até a conclusão ou caso o vídeo já tenha expirado. |
data.video_expires_at | string | 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_url | string | null | URL do último frame (quando solicitado e disponível), caso contrário retorna null. |
data.processing_time | number | 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."
}
}| HTTP | Campo | O que fazer |
|---|---|---|
| 400 | invalid_request | Corrija a estrutura do JSON, prompts ausentes, intervalos de parâmetros ou URLs de mídia antes de tentar novamente. |
| 401 | invalid_api_key | Verifique o token Bearer e se a chave de API continua ativa. |
| 402 | insufficient_credits | Adicione créditos à conta ou reduza o custo da geração. A resposta pode indicar os saldos necessário e disponível. |
| 403 | forbidden | Verifique a restrição aplicada à conta descrita na mensagem de erro. |
| 404 | not_found | Confirme se o ID da tarefa está correto e se ela foi criada pela mesma chave de API utilizada. |
| 429 | rate_limited | Aguarde o tempo indicado no cabeçalho Retry-After antes de realizar novas tentativas. |
| 500 | internal_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.