Saltar para o conteúdo principal
O OrcaRouter fala Kling nativamente para geração de vídeo. Você submete uma tarefa, faz polling do ID da tarefa pelo status e pega o MP4 renderizado quando o upstream termina (tipicamente 30 - 90 segundos). Esse padrão assíncrono submeter-depois-fazer-polling é exclusivo de vídeo. Chat / imagens / TTS todos usam request-response síncronos; o vídeo Kling não.
O endpoint de submit POST /v1/video/generations é compartilhado entre provedores de vídeo — o formato do corpo da requisição é selecionado pelo prefixo do seu model. Esta página cobre model: kling/.... Para modelos ByteDance Seedance use model: byteplus/... e siga Seedance Vídeo. O endpoint de fetch GET /v1/video/generations/{task_id} é idêntico para ambos.

Modelos

Todos os modelos suportam text-to-video e image-to-video. Recursos avançados variam:
ModeloMulti-fonte ref¹4KÁudio nativo²Multi-shot
kling/kling-v2-master
kling/kling-v2-1-master
kling/kling-v2-5-turbo
kling/kling-v2-6modo pro
kling/kling-v3
kling/kling-video-o1✓ (limitado)
kling/kling-v3-omni✓ (completo)
¹ Referência multi-fonte = os campos de metadados image_list / video_list. Roteia para o endpoint upstream Omni-Video do Kling quando presente. kling/kling-video-o1 é um subconjunto restrito (apenas 5s/10s, sem multi-shot, sem áudio); escolha kling/kling-v3-omni para a superfície Omni completa. ² Áudio nativo = o Kling auto-gera uma trilha sonora correspondente ao vídeo. Cobra extra no upstream. Alternar via metadata.sound: "on". O endpoint de submit é o mesmo para todos os modelos — POST /v1/video/generations. O que muda é quais campos metadata o upstream honra, conforme a tabela acima.

Submeter uma tarefa

Envie um POST para /v1/video/generations com model, prompt e quaisquer parâmetros específicos do upstream sob metadata:
curl https://api.orcarouter.ai/v1/video/generations \
  -H "Authorization: Bearer sk-orca-..." \
  -H "Content-Type: application/json" \
  -d '{
    "model": "kling/kling-v3-omni",
    "prompt": "cat playing piano in a sunny room",
    "metadata": {
      "mode": "std",
      "aspect_ratio": "16:9",
      "duration": "5"
    }
  }'
A resposta carrega o ID da tarefa:
{
  "id": "task_9q9oz6tjtgABYWC1QIqoz3sscgVz7ycw",
  "task_id": "task_9q9oz6tjtgABYWC1QIqoz3sscgVz7ycw",
  "object": "video",
  "model": "kling/kling-v3-omni",
  "status": "queued",
  "progress": 0,
  "created_at": 1777975188
}
POST retorna status: "queued" em minúsculas. GET retorna um envelope envelopado com status em maiúsculas (SUBMITTED / IN_PROGRESS / SUCCESS / FAILURE) — veja Fazer polling pelos resultados abaixo.

Campos comuns de metadata

Estes três se aplicam a toda variante de endpoint:
CampoTipoNotas
modestringstd (720P) / pro (1080P) / 4k. 4k apenas em kling/kling-v3 e kling/kling-v3-omni. Padrão é std para text/image-to-video, pro para Omni-Video.
aspect_ratiostring16:9 / 9:16 / 1:1. Obrigatório em Omni-Video a menos que você forneça uma referência de primeiro frame ou video_list (nesses casos é inferido do input).
durationstringDuração em segundos. Padrão "5". kling/kling-v3-omni e kling/kling-v3 aceitam "3" até "15". A família v2 (v2-master, v2-1-master, v2-5-turbo, v2-6) e kling/kling-video-o1 aceitam "5" ou "10". Veja Mapa de capacidades Kling para a faixa autoritativa por modelo.
Estes dois funcionam apenas em text-to-video e image-to-video (não em Omni-Video):
CampoTipoNotas
negative_promptstringCoisas a evitar. Máx. 2500 caracteres.
cfg_scalefloatFaixa [0, 1], padrão 0.5. Maior = adesão mais estrita ao prompt. Não suportado em modelos v2.x (kling-v2-master / v2-1-master / v2-5-turbo / v2-6).

Fazer polling pelos resultados

Use o ID da tarefa retornado no momento do submit:
curl https://api.orcarouter.ai/v1/video/generations/task_9q9oz6tjtgABYWC1QIqoz3sscgVz7ycw \
  -H "Authorization: Bearer sk-orca-..."
O formato da resposta é envelopado:
{
  "code": "success",
  "message": "",
  "data": {
    "task_id": "task_9q9oz6tjtgABYWC1QIqoz3sscgVz7ycw",
    "status": "SUCCESS",
    "progress": "100%",
    "result_url": "https://v16-kling-fdl.klingai.com/.../video.mp4?...",
    "action": "omniVideo",
    "submit_time": 1777975188,
    "start_time": 1777975241,
    "finish_time": 1777975277,
    "fail_reason": ""
  }
}
Valores de status (maiúsculas, estado bruto da tarefa):
StatusSignificado
NOT_STARTLinha da tarefa criada, ainda não despachada (transitório, geralmente abaixo de 2s)
SUBMITTEDEnviada para o upstream Kling, aguardando na fila deles
IN_PROGRESSKling está renderizando
SUCCESSConcluído. data.result_url carrega o MP4
FAILUREFalhou. data.fail_reason tem o motivo
O progresso volta como uma string percentual ("30%", "100%"), não um int. Faça polling a cada 5 - 10 segundos. Um clipe std típico de 5 segundos completa em 30 - 60 segundos; tarefas 4K, de 15 segundos e multi-shot levam 2 - 5 minutos. data.result_url é uma URL assinada pelo Kling (observe os parâmetros de query ksTime / ksSecret). Baixe ou rehospede prontamente se precisar de retenção longa — a assinatura tem uma expiração definida pelo upstream.

Variantes de endpoint

Todas as três variantes compartilham POST /v1/video/generations. O endpoint que o Kling realmente serve é determinado pelos campos que você fornece.

Text-to-video

Apenas model + prompt (+ metadata opcional acima). Sem entrada de imagem significa text-to-video:
curl https://api.orcarouter.ai/v1/video/generations \
  -H "Authorization: Bearer sk-orca-..." \
  -H "Content-Type: application/json" \
  -d '{
    "model": "kling/kling-v2-6",
    "prompt": "ocean waves at sunset, cinematic",
    "metadata": {"mode": "pro", "duration": "5"}
  }'

Image-to-video

Adicione um image de nível superior (primeiro frame) e / ou metadata.image_tail (último frame) para i2v de primeiro / último frame:
curl https://api.orcarouter.ai/v1/video/generations \
  -H "Authorization: Bearer sk-orca-..." \
  -H "Content-Type: application/json" \
  -d '{
    "model": "kling/kling-v2-master",
    "prompt": "the cat starts dancing",
    "image": "https://example.com/cat.png",
    "metadata": {"mode": "std", "duration": "5"}
  }'

Referência multi-fonte (Omni-Video)

image_list e video_list roteiam a requisição para o endpoint Omni-Video do Kling. Disponível apenas em kling/kling-video-o1 e kling/kling-v3-omni. image_list — referência multi-imagem:
{ "image_list": [{ "image_url": "...", "type": "first_frame" }] }
  • image_url (obrigatório): URL ou base64 bruto (sem o prefixo data:).
  • type (opcional): first_frame / end_frame. Omita a menos que a imagem seja destinada a uma âncora de frame. Apenas end não é suportado (sempre combine com uma imagem de primeiro frame).
video_list — referência de vídeo (máx. 1 vídeo, MP4/MOV, ≤200MB):
{ "video_list": [{ "video_url": "...", "refer_type": "base", "keep_original_sound": "yes" }] }
  • refer_type: base (edição de vídeo — o vídeo de entrada é editado; padrão) ou feature (referência de estilo/composição — gerar próximo/anterior shot).
  • keep_original_sound: yes / no.
  • Em kling/kling-v3-omni, a referência de vídeo é suportada apenas em duração 3-10s, modo std/pro (não 4K).
Quando video_list está definido, metadata.sound deve ser "off" — o Kling rejeita a combinação caso contrário.
Referencie imagens / vídeos / elementos dentro do prompt com a sintaxe <<<>>>: <<<image_1>>>, <<<video_1>>>, <<<element_1>>>. Apenas Omni. O índice combina com a ordem do array (1-based).
curl https://api.orcarouter.ai/v1/video/generations \
  -H "Authorization: Bearer sk-orca-..." \
  -H "Content-Type: application/json" \
  -d '{
    "model": "kling/kling-v3-omni",
    "prompt": "<<<image_1>>> waves at the camera, then walks toward the ocean",
    "metadata": {
      "image_list": [{"image_url": "https://example.com/person.jpg"}],
      "mode": "pro",
      "aspect_ratio": "16:9",
      "duration": "5",
      "sound": "on"
    }
  }'

Recursos avançados

Esses recursos funcionam em endpoints text-to-video, image-to-video e Omni-Video — o suporte por modelo varia. Passe-os via metadata.

Multi-shot

Gere um vídeo composto por múltiplos shots sequenciais, cada um com seu próprio prompt e duração. Disponível em kling/kling-v3 e kling/kling-v3-omni.
CampoTipoPropósito
multi_shotboolDefina como true para habilitar. O prompt de nível superior e as entradas first/end-frame são então ignorados.
shot_typestringcustomize (usar multi_prompt literalmente) ou intelligence (o Kling auto-segmenta). Obrigatório quando multi_shot=true.
multi_promptarray[{index, prompt, duration}]. 1 - 6 storyboards. duration de cada shot ≥ 1s; a soma deve ser igual à duration total da tarefa. Cada prompt ≤ 512 caracteres.

Áudio nativo

O Kling auto-gera uma trilha sonora correspondente ao vídeo. Cobra extra no upstream. Alternar via metadata.sound: "on" (padrão "off"). Suporte por modelo:
  • kling/kling-v3 e kling/kling-v3-omni: qualquer modo (std / pro / 4K)
  • kling/kling-v2-6: apenas modo pro
  • Todos os outros modelos: não suportado

Marca d’água

Passe metadata.watermark_info: {enabled: true} para imprimir a marca d’água do Kling no vídeo renderizado. O padrão é sem marca d’água.

Faturamento

O vídeo Kling cobra por tarefa. O OrcaRouter cobra exatamente o que o Kling cobra — o final_unit_deduction do upstream se torna o débito da carteira, sem margem. O custo final corresponde ao tarifário publicado pelo Kling. Uma pequena reserva de pré-consumo é feita no momento do submit para cobrir o maior custo plausível para sua requisição (ex.: 4K + áudio); a diferença é reembolsada assim que a tarefa é bem-sucedida. Veja o histórico da sua carteira no console para o gasto real por tarefa.

Usando o SDK do Kling diretamente

Se você já tem código escrito contra o SDK oficial do Kling, o OrcaRouter também fala o formato de fio nativo do Kling em /kling/v1/videos/.... Os campos do corpo permanecem planos (model_name, mode, etc.) — apenas a base URL, o cabeçalho Authorization e o valor de model_name mudam:
curl https://api.orcarouter.ai/kling/v1/videos/omni-video \
  -H "Authorization: Bearer sk-orca-..." \
  -H "Content-Type: application/json" \
  -d '{
    "model_name": "kling/kling-v3-omni",
    "prompt": "cat playing piano",
    "mode": "pro",
    "aspect_ratio": "16:9",
    "duration": "5",
    "sound": "on"
  }'
model_name deve usar a identidade de modelo do lado do OrcaRouter (o mesmo nome que você usaria em /v1/video/generations), não o nome puro do modelo do Kling. O OrcaRouter o resolve através do mapeamento de modelo do canal antes de encaminhar para o Kling.
O caminho de fetch correspondente é GET /kling/v1/videos/omni-video/{task_id} (ou text2video, image2video). Escolha o formato de fio que combina com seu código existente. Ambos cobram igualmente.

Veja também