Kling 4.0
Gere vídeos com o Kling 4.0 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: kling-4-0
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 | 720p · 1080p |
| Duração de saída | 3–30 s |
| Proporção de tela | auto, 16:9, 9:16, 1:1, 21:9 |
| Imagens de referência | Até 10 imagens |
| Vídeos de referência | Até 5 vídeos |
| Arquivos de áudio de referência | Até 3 arquivos de áudio |
| Total de referências combinadas | Até 15 arquivos de referência no total |
| Vídeos de referência (Σ) | 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 |
|---|---|---|
720p | 13 créditos/segundo | 8 créditos/segundo |
1080p | 20 créditos/segundo | 13 créditos/segundo |
- Sem entrada de vídeo: segundos gerados × tarifa sem vídeo.
- Com vídeo de entrada, T é a duração total dos vídeos de referência em segundos medida pelo servidor. Arredonde o total final de créditos para cima.
ceil((duration + max(duration, T)) × rate) - 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 × 13 = 65 créditos.
Vídeo gerado de 5 segundos em 720p com vídeo de referência de 5 segundos: (5 + 5) × 8 = 80 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.
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": "kling-4-0",
"input": {
"prompt": "A cat surfing at sunset, cinematic lighting",
"duration": 5,
"resolution": "720p",
"generation_type": "text-to-video"
}
}'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": 65
}Criar uma tarefa
POST https://api.seevio.ai/v1/videos/generationsEnvie um objeto JSON contendo model e input, além de uma callback_url opcional. Sempre especifique o ID do modelo exibido nesta página; se omitido, o modelo padrão selecionado será 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 Kling 4.0, defina este campo como kling-4-0. |
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 | Parâmetros de entrada |
Parâmetros de entrada
| Campo | Tipo | Padrão | Descrição e restrições |
|---|---|---|---|
input.generation_type | string | text-to-video | text-to-video | image-to-video | reference-to-video |
input.prompt | string | — | Até 8000 caracteres. Opcional apenas na geração a partir de imagens. Numere as referências por tipo e ordem na lista a partir de @Image1, @Video1 e @Audio1. |
input.duration | integer | 5 | 3–30 s |
input.resolution | string | 720p | 720p | 1080p |
input.aspect_ratio | string | Depende do modo | Valores suportados auto16:99:161:121:9Uma proporção fixa define o formato de saída. Se o campo for omitido ou definido como auto, o modo de texto usa 16:9 e o modo de imagem segue o primeiro quadro. O modo de referência determina a proporção pelas imagens ou vídeos de referência. |
input.image_urls | string[] | [] | Para gerar a partir de imagens, envie o primeiro quadro e, opcionalmente, o último. O modo de referência aceita até 10 imagens. |
input.keyframe_urls | string[] | [] | Quadros intermediários em ordem para geração a partir de imagens. Até 9 sem quadro final ou 8 com ele. |
input.video_urls | string[] | [] | Apenas no modo de referência. Envie os URLs HTTPS dos vídeos que servirão de guia para a ação ou o movimento da câmera. Até 5 vídeos de 2 a 30 segundos cada, com duração total de até 30 segundos. |
input.audio_urls | string[] | [] | Apenas no modo de referência. Envie os URLs HTTPS dos clipes de áudio que servirão de guia para a voz ou o som gerado. Até 3 clipes de 5 a 30 segundos cada. |
input.keep_original_sound | boolean | false | Se video_urls contiver um vídeo de referência, true mantém o áudio original e false (padrão) gera um novo áudio. Sem vídeo de referência, o parâmetro é ignorado. |
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": 65
}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": "kling-4-0",
"input": {
"prompt": "A cat surfing at sunset, cinematic lighting",
"duration": 5,
"resolution": "720p",
"generation_type": "text-to-video"
}
}'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": "kling-4-0",
"input": {
"prompt": "A cat surfing at sunset, cinematic lighting",
"duration": 5,
"resolution": "720p",
"generation_type": "image-to-video",
"image_urls": [
"https://example.com/first.jpg"
]
}
}'Primeiro e último frames
Para gerar a partir de imagens, envie o primeiro quadro e, opcionalmente, o último. O modo de referência aceita até 10 imagens.
curl --fail-with-body https://api.seevio.ai/v1/videos/generations \
-H "Authorization: Bearer $SEEVIO_API_KEY" \
-H "Content-Type: application/json" \
--data '{
"model": "kling-4-0",
"input": {
"prompt": "",
"duration": 5,
"resolution": "720p",
"generation_type": "image-to-video",
"image_urls": [
"https://example.com/first.jpg",
"https://example.com/last.jpg"
]
}
}'Exemplo com quadros-chave: uma rosa desabrocha
Crie um vídeo em time-lapse de 8 segundos com quatro fotos do mesmo ângulo. Em image_urls, coloque o botão fechado e a rosa totalmente aberta como quadros inicial e final. Em keyframe_urls, coloque primeiro as pétalas começando a se abrir e depois a rosa entreaberta. O vídeo passa do botão pelas duas etapas intermediárias até a floração completa. A lista define a ordem e o modelo determina o momento de cada etapa.
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.
curl --fail-with-body https://api.seevio.ai/v1/videos/generations \
-H "Authorization: Bearer $SEEVIO_API_KEY" \
-H "Content-Type: application/json" \
--data '{
"model": "kling-4-0",
"input": {
"prompt": "A time-lapse of a rose opening. Keep the camera still and the light soft as the petals unfold.",
"duration": 8,
"resolution": "720p",
"generation_type": "image-to-video",
"image_urls": [
"https://example.com/rose-bud.jpg",
"https://example.com/rose-full-bloom.jpg"
],
"keyframe_urls": [
"https://example.com/rose-opening.jpg",
"https://example.com/rose-half-open.jpg"
]
}
}'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": "kling-4-0",
"input": {
"prompt": "Animate @Image1 with the movement of @Video1 and ambience from @Audio1.",
"duration": 5,
"resolution": "720p",
"generation_type": "reference-to-video",
"image_urls": [
"https://example.com/character.jpg"
],
"video_urls": [
"https://example.com/motion.mp4"
],
"audio_urls": [
"https://example.com/surf.mp3"
],
"keep_original_sound": false
}
}'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. |
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 da tarefa em segundos, quando disponível; caso contrário, 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": "kling-4-0",
"is_draft": false,
"draft_task_id": null,
"status": "completed",
"billing_status": "charged",
"credits": 65,
"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": "kling-4-0",
"is_draft": false,
"draft_task_id": null,
"status": "failed",
"billing_status": "refunded",
"credits": 65,
"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": "kling-4-0",
"input": {
"prompt": "A cat surfing at sunset, cinematic lighting",
"duration": 5,
"resolution": "720p",
"generation_type": "text-to-video"
},
"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": "kling-4-0",
"status": "completed",
"task_created_at": 1788652800,
"billing_status": "charged",
"credits": 65,
"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": "kling-4-0",
"status": "failed",
"task_created_at": 1788652800,
"billing_status": "refunded",
"credits": 65,
"failed_reason": "provider_failed",
"credits_refunded": 65
}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.
- Cada vídeo não deve exceder 100 MB.
- Cada arquivo de áudio não deve exceder 15 MB.
- Até 15 arquivos de referência no total