Vai al contenuto principale
OrcaRouter parla Kling nativamente per la generazione video. Invii un task, fai polling dell’ID del task per il suo stato e ritiri l’MP4 renderizzato una volta che l’upstream ha completato (tipicamente 30 - 90 secondi). Questo pattern submit-then-poll asincrono è unico per il video. Chat / immagini / TTS usano tutti richiesta-risposta sincrona; Kling video no.
L’endpoint di submit POST /v1/video/generations è condiviso tra i provider video — la forma del body della richiesta è selezionata dal prefisso model. Questa pagina copre model: kling/.... Per i modelli ByteDance Seedance usa model: byteplus/... e segui Seedance Video. L’endpoint di fetch GET /v1/video/generations/{task_id} è identico per entrambi.

Modelli

Tutti i modelli supportano text-to-video e image-to-video. Le funzionalità avanzate variano:
ModelloRiferimento multi-source¹4KAudio nativo²Multi-shot
kling/kling-v2-master
kling/kling-v2-1-master
kling/kling-v2-5-turbo
kling/kling-v2-6modalità pro
kling/kling-v3
kling/kling-video-o1✓ (limitato)
kling/kling-v3-omni✓ (completo)
¹ Riferimento multi-source = i campi metadati image_list / video_list. Instrada all’endpoint upstream Omni-Video di Kling quando presente. kling/kling-video-o1 è un sottoinsieme vincolato (solo 5s/10s, senza multi-shot, senza audio); scegli kling/kling-v3-omni per la superficie Omni completa. ² Audio nativo = Kling auto-genera una colonna sonora abbinata al video. Costo aggiuntivo upstream. Si attiva tramite metadata.sound: "on". L’endpoint di submit è lo stesso per tutti i modelli — POST /v1/video/generations. Ciò che cambia è quali campi metadata l’upstream onora secondo la tabella sopra.

Inviare un task

Invia una POST a /v1/video/generations con model, prompt e qualsiasi parametro specifico dell’upstream sotto 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"
    }
  }'
La risposta contiene l’ID del task:
{
  "id": "task_9q9oz6tjtgABYWC1QIqoz3sscgVz7ycw",
  "task_id": "task_9q9oz6tjtgABYWC1QIqoz3sscgVz7ycw",
  "object": "video",
  "model": "kling/kling-v3-omni",
  "status": "queued",
  "progress": 0,
  "created_at": 1777975188
}
POST restituisce status: "queued" in minuscolo. GET restituisce un envelope incapsulato con status in maiuscolo (SUBMITTED / IN_PROGRESS / SUCCESS / FAILURE) — vedi Polling dei risultati qui sotto.

Campi metadata comuni

Questi tre si applicano a ogni variante di endpoint:
CampoTipoNote
modestringstd (720P) / pro (1080P) / 4k. 4k solo su kling/kling-v3 e kling/kling-v3-omni. Default std per text/image-to-video, pro per Omni-Video.
aspect_ratiostring16:9 / 9:16 / 1:1. Richiesto su Omni-Video a meno che tu non fornisca un riferimento di first-frame o video_list (in quei casi viene inferito dall’input).
durationstringLunghezza in secondi. Default "5". kling/kling-v3-omni e kling/kling-v3 accettano da "3" a "15". La famiglia v2 (v2-master, v2-1-master, v2-5-turbo, v2-6) e kling/kling-video-o1 accettano "5" o "10". Vedi la Mappa delle capacità Kling per l’intervallo autoritativo per modello.
Questi due funzionano solo su text-to-video e image-to-video (non Omni-Video):
CampoTipoNote
negative_promptstringElementi da evitare. Max 2500 caratteri.
cfg_scalefloatIntervallo [0, 1], default 0.5. Più alto = aderenza più stretta al prompt. Non supportato sui modelli v2.x (kling-v2-master / v2-1-master / v2-5-turbo / v2-6).

Polling dei risultati

Usa l’ID del task restituito al momento del submit:
curl https://api.orcarouter.ai/v1/video/generations/task_9q9oz6tjtgABYWC1QIqoz3sscgVz7ycw \
  -H "Authorization: Bearer sk-orca-..."
La forma della risposta è incapsulata:
{
  "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": ""
  }
}
Valori di status (maiuscolo, stato grezzo del task):
StatusSignificato
NOT_STARTRiga del task creata, non ancora inviata (transitorio, di solito sotto i 2s)
SUBMITTEDInviato all’upstream Kling, in attesa nella loro coda
IN_PROGRESSKling sta renderizzando
SUCCESSFatto. data.result_url contiene l’MP4
FAILUREFallito. data.fail_reason ha la ragione
Il progresso torna come stringa percentuale ("30%", "100%"), non come int. Fai polling ogni 5 - 10 secondi. Una clip std di 5 secondi tipica si completa in 30 - 60 secondi; i task 4K, 15 secondi e multi-shot richiedono 2 - 5 minuti. data.result_url è un URL firmato Kling (nota i query param ksTime / ksSecret). Scarica o riospita prontamente se hai bisogno di una retention lunga — la firma ha una scadenza definita upstream.

Varianti di endpoint

Tutte e tre le varianti condividono POST /v1/video/generations. L’endpoint che Kling serve effettivamente è determinato da quali campi fornisci.

Text-to-video

Solo model + prompt (+ metadata opzionali sopra). Nessun input immagine 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

Aggiungi un image di livello superiore (primo frame) e/o metadata.image_tail (ultimo frame) per i2v primo / ultimo 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"}
  }'

Riferimento multi-source (Omni-Video)

image_list e video_list instradano la richiesta all’endpoint Omni-Video di Kling. Disponibile solo su kling/kling-video-o1 e kling/kling-v3-omni. image_list — riferimento multi-immagine:
{ "image_list": [{ "image_url": "...", "type": "first_frame" }] }
  • image_url (obbligatorio): URL o base64 grezzo (senza prefisso data:).
  • type (opzionale): first_frame / end_frame. Ometti a meno che l’immagine sia intesa come ancoraggio di frame. Solo end-frame non è supportato (accoppia sempre con un’immagine first-frame).
video_list — riferimento video (max 1 video, MP4/MOV, ≤200MB):
{ "video_list": [{ "video_url": "...", "refer_type": "base", "keep_original_sound": "yes" }] }
  • refer_type: base (editing video — il video di input viene modificato; default) o feature (riferimento di stile/composizione — genera lo shot successivo/precedente).
  • keep_original_sound: yes / no.
  • Su kling/kling-v3-omni, il riferimento video è supportato solo a durata 3-10s, modalità std/pro (non 4K).
Quando video_list è impostato, metadata.sound deve essere "off" — Kling rifiuta la combinazione altrimenti.
Fai riferimento a immagini / video / elementi all’interno del prompt con la sintassi <<<>>>: <<<image_1>>>, <<<video_1>>>, <<<element_1>>>. Solo Omni. L’indice corrisponde all’ordine dell’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"
    }
  }'

Funzionalità avanzate

Queste funzionalità lavorano attraverso gli endpoint text-to-video, image-to-video e Omni-Video — il supporto per modello varia. Passale tramite metadata.

Multi-shot

Genera un video composto da più shot sequenziali, ciascuno con il proprio prompt e durata. Disponibile su kling/kling-v3 e kling/kling-v3-omni.
CampoTipoScopo
multi_shotboolImposta true per abilitare. Il prompt di livello superiore e gli input di primo/ultimo frame sono quindi ignorati.
shot_typestringcustomize (usa multi_prompt letteralmente) o intelligence (Kling auto-segmenta). Richiesto quando multi_shot=true.
multi_promptarray[{index, prompt, duration}]. Da 1 a 6 storyboard. La duration di ogni shot ≥ 1s; la somma deve uguagliare la duration totale del task. Ogni prompt ≤ 512 caratteri.

Audio nativo

Kling auto-genera una colonna sonora abbinata al video. Costo aggiuntivo upstream. Si attiva tramite metadata.sound: "on" (default "off"). Supporto per modello:
  • kling/kling-v3 e kling/kling-v3-omni: qualsiasi modalità (std / pro / 4K)
  • kling/kling-v2-6: solo modalità pro
  • Tutti gli altri modelli: non supportato

Watermark

Passa metadata.watermark_info: {enabled: true} per imprimere il watermark di Kling sul video renderizzato. Il default è nessun watermark.

Fatturazione

Il video Kling fattura per task. OrcaRouter addebita esattamente ciò che addebita Kling — il final_unit_deduction dell’upstream diventa il debito del wallet, senza ricarico. Il costo finale corrisponde al listino pubblicato da Kling. Un piccolo pre-consumo viene riservato al momento del submit per coprire il costo più alto plausibile per la tua richiesta (es. 4K + audio); la differenza viene rimborsata non appena il task ha successo. Consulta la cronologia del wallet nella console per la spesa effettiva per task.

Usare direttamente l’SDK Kling

Se hai già codice scritto contro l’SDK ufficiale di Kling, OrcaRouter parla anche il formato wire nativo di Kling su /kling/v1/videos/.... I campi del body restano piatti (model_name, mode, ecc.) — cambiano solo il base URL, l’header Authorization e il valore di model_name:
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 usare l’identità del modello lato OrcaRouter (lo stesso nome che useresti su /v1/video/generations), non il nome bare del modello Kling. OrcaRouter lo risolve attraverso il mapping dei modelli del canale prima di inoltrare a Kling.
Il path di fetch corrispondente è GET /kling/v1/videos/omni-video/{task_id} (o text2video, image2video). Scegli il formato wire che meglio si adatta al tuo codice esistente. Entrambi fatturano in modo identico.

Vedi anche