API de geração de vídeo
A API de geração de vídeo cria trabalhos de vídeo assíncronos. Uma solicitação de criação retorna HTTP 202 com um ID de trabalho; use esse ID para consultar o trabalho até ele chegar a succeeded ou failed e, em seguida, baixe o MP4 concluído.
Os exemplos usam https://api.icodeeasy.cc como URL base. Todas as chamadas de endpoint documentadas abaixo exigem sua chave de API; a única exceção é uma URL assinada do arquivo de resultado retornada após o sucesso:
Authorization: Bearer <your API key>
Endpoints
| Finalidade | Método e rota |
|---|---|
| Criar um trabalho de vídeo | POST /v1/videos/generations |
| Consultar um trabalho | GET /v1/videos/tasks/{id} |
| Baixar o conteúdo concluído | GET /v1/videos/tasks/{id}/content |
| Excluir um trabalho concluído ou com falha | DELETE /v1/videos/tasks/{id} |
Início rápido em cinco minutos
1. Crie um trabalho
curl -X POST https://api.icodeeasy.cc/v1/videos/generations \
-H 'Authorization: Bearer <your API key>' \
-H 'Content-Type: application/json' \
-d '{
"model": "doubao-seedance-2.5",
"prompt": "uma rua de cidade futurista sob a chuva, câmera avançando lentamente, reflexos de neon no asfalto molhado",
"resolution": "480p",
"ratio": "9:16",
"duration": 4,
"generate_audio": true
}'
A criação retorna HTTP 202:
{
"id": "vid_1785398400000000000",
"task_id": "vid_1785398400000000000",
"object": "video.generation.job",
"status": "queued",
"model": "doubao-seedance-2.5",
"created_at": "2026-07-30T08:00:00Z",
"updated_at": "2026-07-30T08:00:00Z"
}
Use task_id como o identificador recomendado para consulta, download e exclusão; id permanece com o mesmo valor durante o período de compatibilidade. Uma resposta 202 significa que o trabalho foi aceito, não que o vídeo já está concluído.
2. Consulte o trabalho
Copie o task_id da resposta de criação para TASK_ID:
TASK_ID='vid_1785398400000000000'
curl "https://api.icodeeasy.cc/v1/videos/tasks/${TASK_ID}" \
-H 'Authorization: Bearer <your API key>'
Consulte aproximadamente uma vez a cada 5 segundos. Não crie outro trabalho enquanto o atual estiver em queued ou running.
{
"id": "vid_1785398400000000000",
"object": "video.generation.job",
"status": "running",
"model": "doubao-seedance-2.0",
"created_at": "2026-07-30T08:00:00Z",
"updated_at": "2026-07-30T08:00:20Z",
"progress": 42
}
progress é uma estimativa e pode não estar presente. Considere status, e não o progresso, como a informação oficial.
3. Baixe o vídeo
Depois que status se tornar succeeded, a resposta incluirá url e o cost_rmb final:
{
"id": "vid_1785398400000000000",
"object": "video.generation.job",
"status": "succeeded",
"model": "doubao-seedance-2.0",
"created_at": "2026-07-30T08:00:00Z",
"updated_at": "2026-07-30T08:01:18Z",
"progress": 100,
"url": "/v1/videos/tasks/vid_1785398400000000000/content",
"cost_rmb": 0.528
}
Baixe pela rota canônica de conteúdo autenticado e siga os redirecionamentos:
TASK_ID='vid_1785398400000000000'
curl -L "https://api.icodeeasy.cc/v1/videos/tasks/${TASK_ID}/content" \
-H 'Authorization: Bearer <your API key>' \
-o result.mp4
A rota de conteúdo aceita HTTP Range e os cabeçalhos condicionais de download mais comuns. Solicitar o conteúdo antes do sucesso retorna 409 video_not_ready.
Ciclo de vida do trabalho e novas tentativas seguras
| Status | Significado | Ação do cliente |
|---|---|---|
queued | Aceito e aguardando o início | Continue consultando o mesmo trabalho |
running | O vídeo está sendo gerado | Continue consultando o mesmo trabalho |
succeeded | Sucesso terminal; o conteúdo está pronto | Baixe e armazene o resultado |
failed | Falha terminal | Leia error.code; crie um novo trabalho somente se decidir tentar novamente |
Regras para novas tentativas:
- Depois de receber HTTP
202, continue consultando otask_idretornado. Repetir a solicitação de criação pode criar outro trabalho. - Solicitações
GETde consulta e download podem ser repetidas com segurança. - Se a criação retornar
submission_unknown, não envie outra solicitação. O trabalho pode já ter sido aceito; entre em contato com o suporte informando o horário, o modelo e um resumo do prompt. - Depois de uma falha terminal confirmada em
failed, crie um novo trabalho somente quando quiser gerar outro vídeo.
Webhooks e callback_url não são compatíveis. Em vez disso, consulte o endpoint do trabalho.
Referência da solicitação de criação
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
model | string | Sim | ID canônico do modelo. Não há modelo padrão; valores ausentes ou vazios retornam 400 invalid_request. |
prompt | string | Texto obrigatório nos modelos padrão | Coloque todas as instruções de texto aqui. Para Motion Control, é opcional quando os dois ativos de referência são fornecidos. |
content | array | Ao usar referências | Lista de mídias de referência contendo apenas itens de URL HTTPS pública de imagem/vídeo. |
resolution | string | Não | Nível de resolução da saída. O padrão e os valores permitidos dependem do modelo. Não é aceito por Motion Control. |
ratio | string | Não | Proporção da saída. aspect_ratio é aceito como alias. Não é aceito por Motion Control. |
duration | integer | Não | Segundos solicitados. O padrão e os valores permitidos dependem do modelo. Não é aceito por Motion Control. |
generate_audio | boolean | Não | Gera áudio quando houver suporte. Os valores padrão estão na tabela de modelos. Não é aceito por Motion Control. |
motion_mode | string | Somente Motion Control | std ou pro; o padrão é std. |
character_orientation | string | Somente Motion Control | image ou video; o padrão é image. Controla o limite de duração do vídeo de referência. |
keep_original_sound | boolean | Somente Motion Control | Mantém o som do vídeo de referência; o padrão é true. |
Coloque todas as instruções de texto em prompt. Use content somente para imagens e vídeos de referência.
Lista de mídias de referência (content)
content é uma lista porque um trabalho pode precisar de quadro inicial e final, várias imagens de referência sem ordem ou uma imagem e um vídeo para Motion Control. Informe diretamente uma string de URL HTTPS no campo image_url ou video_url de cada item.
[
{ "type": "image_url", "image_url": "https://cdn.example.com/first.png", "role": "first_frame" },
{ "type": "image_url", "image_url": "https://cdn.example.com/last.png", "role": "last_frame" }
]
- Tipos de imagem:
image_urlouinput_image. - Tipos de vídeo:
video_urlouinput_video. - Papéis de quadro:
first_frameelast_frame. Um último quadro sempre exige um primeiro quadro. - Papéis de movimento: um
reference_imagee umreference_video. - As imagens de referência do Grok não têm papel;
reference_imagetambém é aceito. - No momento, áudio de referência não é compatível.
- A mídia deve usar uma URL HTTPS pública que permaneça válida enquanto o trabalho a lê.
- Coloque imagens em
image_urle vídeos emvideo_url.
Solicitação completa com primeiro e último quadro
Hospede as duas imagens em URLs HTTPS públicas e coloque essas URLs diretamente em content:
curl -X POST https://api.icodeeasy.cc/v1/videos/generations \
-H 'Authorization: Bearer <sua chave de API>' \
-H 'Content-Type: application/json' \
-d '{
"model": "doubao-seedance-2.0",
"prompt": "a câmera se move suavemente do primeiro para o último quadro",
"content": [
{"type":"image_url","image_url":"https://cdn.example.com/first.png","role":"first_frame"},
{"type":"image_url","image_url":"https://cdn.example.com/last.png","role":"last_frame"}
],
"resolution": "480p",
"ratio": "9:16",
"duration": 4,
"generate_audio": true
}'
É permitido enviar apenas o primeiro quadro. Não é permitido enviar o último quadro sem incluir o primeiro quadro na mesma solicitação.
Receitas por modelo
Seedance: texto, primeiro quadro e último quadro
Seedance 2.5, Seedance 2.0 Standard, Fast, Mini e Seedance 1.5 Pro aceitam geração de vídeo a partir de texto e geração orientada pelo primeiro e/ou último quadro. Imagens de referência exigem papéis de quadro explícitos; Seedance 2.5 aparece primeiro nesta família.
{
"model": "doubao-seedance-2.5",
"prompt": "the camera circles a glass sculpture as morning light changes",
"content": [
{ "type": "image_url", "image_url": "https://cdn.example.com/seedance-first.png", "role": "first_frame" },
{ "type": "image_url", "image_url": "https://cdn.example.com/seedance-last.png", "role": "last_frame" }
],
"resolution": "720p",
"ratio": "16:9",
"duration": 6,
"generate_audio": true
}
Os valores padrão do Seedance 2.5 são 480p, 9:16, 4 segundos e áudio gerado ativado. Com o primeiro quadro ou primeiro e último quadros, a proporção é normalizada para adaptive.
MiniMax H3: texto, primeiro quadro e último quadro
MiniMax-H3 aceita geração de texto para vídeo e com primeiro/último quadro pela mesma solicitação pública. Aceita 768P ou 2K, durações de 4 a 15 segundos e as proporções 21:9, 16:9, 4:3, 1:1, 3:4 e 9:16. Os valores padrão são 768P, 9:16 e 5 segundos. Não envie generate_audio: o contrato público do H3 não tem uma alternância de solicitação para áudio gerado.
Kling: geração orientada por quadros
{
"model": "kling-v3",
"prompt": "a train enters the station through light fog",
"content": [
{ "type": "image_url", "image_url": "https://cdn.example.com/kling-first.png", "role": "first_frame" },
{ "type": "image_url", "image_url": "https://cdn.example.com/kling-last.png", "role": "last_frame" }
],
"resolution": "1080p",
"ratio": "16:9",
"duration": 5,
"generate_audio": true
}
Diferenças importantes entre os modelos Kling:
kling-v2-6: o último quadro exige1080p; o áudio gerado só está disponível em1080pe não pode ser combinado com um último quadro.kling-3.0-turbo: somente o primeiro quadro; sem áudio gerado.kling-v3ekling-v3-omni: aceitam primeiro/último quadro e áudio gerado.kling-v3-omnitambém aceita até duas imagens de referência sem papel, mas não misture imagens sem papel com imagens que tenham papéis de quadro na mesma solicitação.kling-video-o1: primeiro/último quadro; sem áudio gerado.
Grok: imagens de referência sem ordem
O Grok aceita até sete URLs de imagens de referência. Não atribua os papéis first_frame ou last_frame.
{
"model": "grok-imagine-1.5-video",
"prompt": "clouds roll over a canyon while the camera rises",
"content": [
{ "type": "image_url", "image_url": "https://cdn.example.com/grok-reference.png" }
],
"resolution": "480p",
"ratio": "16:9",
"duration": 6
}
Os valores padrão do Grok são 480p, 9:16 e 6 segundos. Áudio gerado não é compatível.
Kling Motion Control
Forneça uma imagem HTTPS pública e um vídeo MP4 HTTPS público de 3 a 30 segundos:
{
"model": "kling-v3-motion-control",
"prompt": "preserve the character identity and follow the reference motion",
"content": [
{ "type": "image_url", "image_url": "https://cdn.example.com/character.png", "role": "reference_image" },
{ "type": "video_url", "video_url": "https://cdn.example.com/motion.mp4", "role": "reference_video" }
],
"motion_mode": "std",
"character_orientation": "image",
"keep_original_sound": true
}
character_orientation: "image": o vídeo de referência deve ter de 3 a 10 segundos.character_orientation: "video": o vídeo de referência deve ter de 3 a 30 segundos.- Não envie
resolution,ratio,durationougenerate_audiocom um modelo Motion Control.
Tabela de recursos dos modelos
| ID canônico do modelo | Resolução / modo | Duração | Proporção | Referências | Áudio padrão |
|---|---|---|---|---|---|
doubao-seedance-2.5 | 480p, 720p | 4–30 s | 16:9, 4:3, 1:1, 3:4, 9:16, 21:9, adaptive | Primeiro + último quadro; proporção normalizada para adaptive com orientação por quadros | Ativado |
doubao-seedance-2.0 | 480p, 720p, 1080p, 4K | 4–15 s | 16:9, 9:16, 1:1, 4:3, 3:4, 21:9, adaptive | Primeiro + último quadro | Ativado |
doubao-seedance-2.0-fast | 480p, 720p | 4–15 s | Igual ao Seedance 2.0 | Primeiro + último quadro | Ativado |
doubao-seedance-2.0-mini | 480p, 720p | 4–15 s | Igual ao Seedance 2.0 | Primeiro + último quadro | Ativado |
doubao-seedance-1-5-pro | 480p, 720p, 1080p | 4–12 s | 16:9, 9:16, 1:1, 4:3, 3:4, 21:9 | Primeiro + último quadro | Ativado |
MiniMax-H3 | 768P, 2K | 4–15 s | 21:9, 16:9, 4:3, 1:1, 3:4, 9:16 | Primeiro + último quadro | Sem alternância pública de áudio gerado |
kling-v2-6 | 720p, 1080p | 5 ou 10 s | 16:9, 9:16, 1:1 | Primeiro + último quadro condicional | Desativado |
kling-3.0-turbo | 720p, 1080p | 3–15 s | 16:9, 9:16, 1:1 | Somente primeiro quadro | Não compatível |
kling-v3 | 720p, 1080p, 4K | 3–15 s | 16:9, 9:16, 1:1 | Primeiro + último quadro | Ativado |
kling-v3-omni | 720p, 1080p, 4K | 3–15 s | 16:9, 9:16, 1:1 | Primeiro + último ou até 2 imagens sem papel | Ativado |
kling-video-o1 | 720p, 1080p | 5 ou 10 s | 16:9, 9:16, 1:1 | Primeiro + último quadro | Não compatível |
kling-v2-6-motion-control | std, pro | Vídeo de referência | — | 1 imagem + 1 vídeo | Som original ativado |
kling-v3-motion-control | std, pro | Vídeo de referência | — | 1 imagem + 1 vídeo | Som original ativado |
grok-imagine-1.5-video | 480p, 720p | 6–30 s | 16:9, 9:16, 1:1, 3:2, 2:3 | Até 7 imagens sem papel | Não compatível |
Para modelos padrão, os valores opcionais omitidos usam os padrões de cada modelo exibidos acima. O próprio model é sempre obrigatório. O serviço valida as combinações antes de iniciar o trabalho.
Comportamento da resposta e do download
Todas as respostas de trabalho usam este formato:
| Campo | Significado |
|---|---|
id | ID de trabalho restrito ao proprietário, usado para consulta, conteúdo, exclusão e suporte |
object | Sempre video.generation.job |
status | queued, running, succeeded ou failed |
model | ID canônico do modelo após a normalização de aliases |
created_at, updated_at | Timestamps UTC no formato RFC 3339 |
progress | Progresso aproximado da geração, omitido quando não estiver disponível |
url | Presente somente após o sucesso; pode ser um caminho de conteúdo do relay ou um caminho assinado para um arquivo do relay |
cost_rmb | Cobrança final do trabalho, presente após a liquidação bem-sucedida |
error.code | Categoria estável da falha em um trabalho com falha |
Prefira GET /v1/videos/tasks/{id}/content em vez de presumir um formato fixo para a URL retornada. Use -L ou ative redirecionamentos no seu cliente HTTP. O endpoint autenticado de conteúdo pode retornar 200, 206 Partial Content ou um redirecionamento para armazenamento gerenciado pelo relay.
Uma URL assinada de arquivo do relay pode ser aberta sem uma chave de API; quem possuir a URL completa terá acesso ao vídeo. Não a exponha em logs públicos, páginas ou ferramentas de análise no cliente.
Excluir um trabalho terminal seguro retorna HTTP 204 e também pode remover seu arquivo de vídeo gerenciado pelo relay. Baixe e armazene qualquer resultado necessário antes de excluir o trabalho. A exclusão é rejeitada com 409 video_delete_unsafe enquanto um trabalho estiver em execução ou a cobrança não estiver liquidada. Excluir o registro local do trabalho não cancela uma geração que já começou.
Tratamento de erros
Os erros HTTP usam este formato:
{
"error": {
"type": "invalid_request",
"message": "model is not supported"
}
}
| HTTP | Tipo de erro | Significado / ação |
|---|---|---|
400 | invalid_request | Modelo, campos, URL de mídia, papéis, duração, proporção ou combinação de modelo inválidos; corrija a solicitação |
401 | unauthorized | A chave de API está ausente, é inválida ou está desativada |
402 | insufficient_balance | O saldo não cobre o trabalho solicitado; a geração não é iniciada |
404 | not_found | O trabalho não existe ou pertence a outra conta |
409 | video_not_ready | O conteúdo foi solicitado antes do sucesso terminal |
409 | video_delete_unsafe | Ainda não é seguro excluir o trabalho |
413 | request_too_large | O corpo JSON da solicitação de criação excede o limite |
502 | upstream_error | Falha na geração do vídeo ou no download do resultado |
503 | video_service_unavailable, upstream_quota_exceeded, video_price_unavailable | A capacidade do serviço de vídeo ou o preço público atual está temporariamente indisponível |
503 | submission_unknown | A aceitação do trabalho é incerta; não envie uma duplicata |
Uma resposta de trabalho com falha pode ter este formato:
{
"id": "vid_1785398400000000000",
"object": "video.generation.job",
"status": "failed",
"model": "doubao-seedance-2.0",
"error": { "code": "generation_failed" }
}
Cobrança
A geração de vídeo usa o saldo da conta, e não a cota mensal.
preço do trabalho = preço exibido em RMB por segundo para o modelo/especificação selecionado × segundos faturáveis
Consulte os preços atuais por segundo na página de preços. A resolução, o áudio gerado ou o modo Motion Control podem selecionar uma linha diferente de preço por segundo. Para modelos padrão, os segundos faturáveis correspondem à duration solicitada; para Motion Control, correspondem à duração detectada do vídeo de referência, arredondada para cima até um segundo inteiro.
O saldo deve ser suficiente para cobrir o trabalho no momento da criação. Saldo insuficiente retorna 402 antes do início da geração. O cost_rmb do trabalho concluído com sucesso é a cobrança final oficial. Um trabalho que comprovadamente falhou não é cobrado.
Guias relacionados
API de geração de imagens
Envie prompts e dimensões à API de imagens compatível com OpenAI e entenda resultados síncronos, links, erros e informações de cobrança.
API de Consulta de Saldo
Consulte o saldo com token Bearer para ver saldo em CNY, cota diária do plano, vencimento e o significado dos campos da resposta.