Seedance 2.5.
Dentro do seu produto.
Transforme texto, imagens e mídias de referência em vídeo com uma única API. Use seus créditos Seedance 3.0, mantenha seu fluxo de trabalho e desenvolva com um processo claro da solicitação ao resultado.
{
"model": "seedance-2.5",
"mode": "text-to-video",
"prompt": "A paper boat drifting into the morning light",
"duration": 5,
"resolution": "720p",
"aspectRatio": "16:9"
}Seu primeiro vídeo em poucas solicitações.
Salve sua chave como SEADANCE_API_KEY no servidor. Defina SEADANCE_REQUEST_KEY com um valor exclusivo para este vídeo (por exemplo, usando uuidgen) e mantenha esse valor nas novas tentativas. Verifique se sua conta tem créditos suficientes. Este exemplo reserva 350 créditos para um vídeo de 5 segundos em 720p. Copie o id retornado para consultar o status.
export SEADANCE_API_KEY="sd_live_your_key"
# Keep this value for retries; choose a new value for a new video.
export SEADANCE_REQUEST_KEY="${SEADANCE_REQUEST_KEY:-$(uuidgen)}"
curl --fail-with-body "https://seedance3ai.dev/api/v1/videos" \
-H "Authorization: Bearer $SEADANCE_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: $SEADANCE_REQUEST_KEY" \
--data '{
"model": "seedance-2.5",
"mode": "text-to-video",
"prompt": "A paper boat floating through a sunlit stream, gentle camera movement",
"aspectRatio": "16:9",
"resolution": "720p",
"duration": 5
}'Esta documentação nunca inicia uma geração automaticamente. Enviar uma solicitação de criação consome seus créditos.
Faça a autenticação pelo seu servidor.
Toda chamada à API usa Authorization: Bearer sd_live_…. Não inclua chaves em navegadores, aplicativos móveis, repositórios públicos ou código do cliente. A chave completa é exibida uma única vez; você pode revogá-la no painel da API.
https://seedance3ai.dev/api/v1Permissões padrão das chaves: videos:write para uploads e geração; videos:read para modelos e status das tarefas; account:read para créditos. O acesso e os limites da conta se aplicam a todas as chaves.
Crie uma tarefa de vídeo.
/api/v1/videosUse Content-Type: application/json e um Idempotency-Key exclusivo para cada geração planejada. O servidor pode levar algum tempo para obter a aceitação da tarefa pelo provedor. Se a conexão atingir o tempo limite, repita o mesmo corpo com a mesma chave. HTTP 202 significa que a tarefa foi aceita, não concluída. Idempotency-Key aceita de 1 a 128 caracteres ASCII imprimíveis, sem espaços.
| Parâmetro | Valores e requisitos |
|---|---|
modelstring | seedance-2.5Obrigatório. A API oferece suporte ao Seedance 2.5 atualmente. |
modestring | text-to-video | image-to-video | reference-to-videoObrigatório. Escolha o modo de entrada; os campos de mídia devem corresponder a esse modo. |
promptstring | 3–30.000 caracteresObrigatório. Descreva a cena, o movimento e o áudio. |
durationinteger | 4, 5, 6, 8, 10, 12, 15, 20, 25, 29, 30Obrigatório, em segundos. A edição usa a duração do vídeo original, arredondada para cima na cobrança. |
resolutionstring | 480p | 720p | 1080pObrigatório. Define a tarifa em créditos. |
aspectRatiostring | 1:1 | 4:3 | 3:4 | 16:9 | 9:16 | 21:9Obrigatório. A geração a partir de imagem usa a proporção do primeiro quadro. |
firstFrameUrl / lastFrameUrlstring | publicObjectUrl do arquivo enviadoA geração a partir de imagem exige um primeiro quadro. O último quadro é opcional. |
referenceImageUrlsstring[] | Até 30 imagensPara reference-to-video. Primeiro, envie todos os arquivos para sua conta. |
referenceVideoUrls / referenceAudioUrlsstring[] | Até 10 vídeos / 10 arquivos de áudioCada grupo pode totalizar no máximo 30 segundos. O servidor valida a mídia antes da geração. |
referenceTaskTypestring | reference | edit | extendOpcional; o padrão é reference. edit e extend exigem reference-to-video com exatamente um vídeo original. |
generateAudioboolean | trueOpcional. Seedance 2.5 inclui áudio nativo; false é rejeitado. |
batchCountinteger | 1Opcional. Um vídeo por solicitação. |
Esses campos permitem que o Seedance 2.5 trabalhe com texto, quadros iniciais e finais, referências multimodais, edição e extensão de vídeo. GET /models é a referência atualizada para os recursos e preços disponíveis.
Exemplo de solicitação de imagem para vídeo
{
"model": "seedance-2.5",
"mode": "image-to-video",
"prompt": "A paper boat floating through a sunlit stream, gentle camera movement",
"aspectRatio": "16:9",
"resolution": "720p",
"duration": 5,
"firstFrameUrl": "YOUR_UPLOADED_PUBLIC_OBJECT_URL"
}Exemplo de solicitação com referências
{
"model": "seedance-2.5",
"mode": "reference-to-video",
"prompt": "A paper boat floating through a sunlit stream, gentle camera movement",
"aspectRatio": "16:9",
"resolution": "720p",
"duration": 5,
"referenceImageUrls": [
"YOUR_UPLOADED_IMAGE_URL"
],
"referenceVideoUrls": [
"YOUR_UPLOADED_VIDEO_URL"
]
}Envie uma vez. Use a URL como referência.
Envie POST /uploads com fileName, contentType, size (em bytes) e kind (image, video ou audio). Antes de expiresAt, envie os bytes originais do arquivo para uploadUrl com PUT e os cabeçalhos requiredHeaders. Após concluir o upload, use publicObjectUrl na solicitação de geração. As referências devem pertencer à mesma conta; URLs externas arbitrárias e entradas em base64 não são aceitas.
// Node.js 20+ · upload once, then use publicObjectUrl
import { readFile } from "node:fs/promises";
const bytes = await readFile("./first-frame.jpg");
const signed = await fetch("https://seedance3ai.dev/api/v1/uploads", {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.SEADANCE_API_KEY}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
fileName: "first-frame.jpg", contentType: "image/jpeg",
size: bytes.length, kind: "image",
}),
});
const upload = await signed.json();
if (!signed.ok) throw new Error(JSON.stringify(upload));
const stored = await fetch(upload.uploadUrl, {
method: "PUT", headers: upload.requiredHeaders, body: bytes,
});
if (!stored.ok) throw new Error("Upload failed");
console.log(upload.publicObjectUrl);
// Use this URL as firstFrameUrl in an image-to-video request.O tamanho e o tipo de conteúdo declarados devem corresponder ao arquivo enviado. URLs de upload expiram; solicite outra se necessário. A duração, as dimensões e o formato da mídia são validados antes da geração.
Acompanhe a tarefa até a conclusão.
GET /videos/:id retorna a tarefa atual. Consulte a cada 5–10 segundos, pare ao receber succeeded ou failed e respeite o intervalo de Retry-After quando ele estiver presente. As consultas são limitadas às tarefas de API da sua conta. A integração atual usa consultas periódicas.
curl --fail-with-body "https://seedance3ai.dev/api/v1/videos/TASK_ID" \
-H "Authorization: Bearer $SEADANCE_API_KEY"queuedprocessingsucceeded / failed{
"id": "a1b2c3d4-1234-4567-8901-abcdef123456",
"status": "succeeded",
"credits_reserved": 350,
"created_at": "2026-10-27T00:00:00.000Z",
"output": {
"url": "https://your-result-host.example/video.mp4"
},
"error": null,
"refund_status": "not_applicable"
}output é null até que um vídeo esteja disponível. Uma tarefa com falha inclui um erro; consulte refund_status para verificar o reembolso dos créditos. Baixe os resultados concluídos assim que possível. Excluir um vídeo não reinicia sua solicitação: repetir esse Idempotency-Key retorna 410 video_deleted e não pode criá-lo novamente.
Conheça o custo em créditos antes de integrar.
A geração pela API usa os mesmos créditos da conta e as mesmas tarifas do Seedance 2.5 que o site. Os créditos são reservados quando uma solicitação é aceita. Gerações com falha devolvem esses créditos ao saldo de créditos avulsos. Uma falha de validação anterior à criação da tarefa não gera um vídeo sujeito a cobrança.
480p
30créditos / segundo de saída
+ 20 créditos / segundo de vídeo de referência
720p
70créditos / segundo de saída
+ 50 créditos / segundo de vídeo de referência
1080p
160créditos / segundo de saída
+ 90 créditos / segundo de vídeo de referência
Custo = duração da saída × tarifa de saída, mais a duração de qualquer vídeo de referência × tarifa de referência. A duração dos vídeos de referência é medida no servidor; o total é arredondado para baixo para segundos inteiros na cobrança. O áudio nativo está incluído. Por exemplo, 5 segundos em 720p custam 350 créditos, ou 600 créditos com um vídeo de referência de 5 segundos.
curl --fail-with-body "https://seedance3ai.dev/api/v1/models" \
-H "Authorization: Bearer $SEADANCE_API_KEY"
curl --fail-with-body "https://seedance3ai.dev/api/v1/credits" \
-H "Authorization: Bearer $SEADANCE_API_KEY"Veja os créditos disponíveis, o histórico de solicitações e os limites da conta no painel da API. Adicione créditos pela página de preços do site usando a mesma conta; não existe saldo separado nem endpoint de recarga da API. Não é necessária uma assinatura ativa se você tiver créditos disponíveis suficientes. A expiração da assinatura e as regras dos créditos avulsos são as mesmas do uso pelo site.
Adicionar créditos não aumenta os limites de frequência, concorrência ou uso diário da API, nem reativa uma conta desativada. O limite diário contabiliza todos os créditos reservados, incluindo os de gerações com falha reembolsadas, e é reiniciado às 00:00 UTC. Entre em contato com o suporte se sua aplicação precisar de limites maiores.
Ver planos e adicionar créditosTente novamente com segurança. Evite cobranças duplicadas.
Use um Idempotency-Key para cada vídeo planejado e mantenha-o junto com o corpo exato da solicitação até conhecer o resultado. Chaves novas representam gerações novas. Uma resposta de erro contém error.code, error.message e request_id; informe o ID da solicitação ao entrar em contato com o suporte.
| HTTP | Significado | Próximo passo |
|---|---|---|
| 400 | Solicitação inválida | Verifique a mensagem de erro, os campos e as restrições de mídia antes de tentar novamente. |
| 401 | Chave de API inválida | Verifique o cabeçalho Bearer. Chaves revogadas não podem ser reutilizadas. |
| 402 | Créditos insuficientes | Adicione créditos à mesma conta Seedance 3.0. |
| 403 | Acesso negado | O acesso à API está desativado ou a chave não tem a permissão necessária. |
| 404 | Vídeo não encontrado | Use o ID de uma tarefa criada pela sua conta por meio desta API. |
| 409 | Conflito na solicitação | Para request_in_progress, aguarde e tente novamente com o mesmo corpo e a mesma chave. idempotency_conflict indica que a chave foi reutilizada com um corpo diferente. request_expired ou request_previously_failed confirma que nenhum vídeo foi enviado para geração: corrija o problema informado e use uma nova chave. |
| 410 | Vídeo excluído | video_deleted indica que a solicitação original foi processada, mas o vídeo foi excluído. A chave não pode gerar o vídeo novamente. Pare de tentar; use uma nova chave apenas se quiser iniciar intencionalmente uma nova geração sujeita a cobrança. |
| 429 | Limite da conta | Respeite Retry-After. Os limites de frequência, tarefas simultâneas e créditos diários são compartilhados entre todas as chaves. Os limites diários são reiniciados às 00:00 UTC. |
| 500 / 503 | Erro temporário do serviço | Mantenha o Idempotency-Key. Repita o mesmo envio; não crie uma nova chave quando o resultado for incerto. |
Se o envio retornar request_in_progress, aguarde e repita a mesma solicitação. Nunca troque por uma chave nova apenas para contornar um tempo limite. Se o reembolso de uma tarefa com falha ainda estiver pendente, guarde o ID da tarefa e entre em contato com o suporte.
Pronto para conectar sua aplicação?
Crie uma chave e desenvolva sua primeira integração.