Kling 4.0
Genera video con Kling 4.0 partendo da testo, dal primo e dall'ultimo fotogramma o usando riferimenti multimodali. Questa pagina descrive l'intero flusso di lavoro, dalla richiesta al risultato finale.
ID del modello API: kling-4-0
La generazione è asincrona. Salva il taskId restituito alla creazione del task, quindi interroga lo stato o ricevi un webhook.
Funzionalità
| Funzionalità | Valori supportati |
|---|---|
| Risoluzione video | 720p · 1080p |
| Durata video | 3–30 s |
| Proporzioni | auto, 16:9, 9:16, 1:1, 21:9 |
| Immagini di riferimento | Fino a 10 immagini |
| Video di riferimento | Fino a 5 video |
| File audio di riferimento | Fino a 3 file audio |
| Tutti i riferimenti combinati | Fino a 15 file di riferimento in totale |
| Video di riferimento (Σ) | 30 secondi |
| seed | Non supportato |
Prezzi e crediti
La generazione di video viene tariffata in crediti in base alla durata fatturabile in secondi. Senza un video di input, la durata fatturabile corrisponde alla durata del video generato; in presenza di un video di input, include anche la durata del video di riferimento.
La tabella seguente mostra i crediti addebitati al secondo e non il costo totale di un'operazione. La tariffa varia a seconda del modello, della risoluzione finale e dell'eventuale inserimento di video di riferimento nella modalità reference-to-video. Per il calcolo del costo totale, consulta le formule e gli esempi riportati sotto la tabella.
| Risoluzione video | Senza video in input | Con video in input |
|---|---|---|
720p | 13 crediti al secondo | 8 crediti al secondo |
1080p | 20 crediti al secondo | 13 crediti al secondo |
- Senza video in input: secondi generati × tariffa senza video.
- Con video in ingresso, T è la durata totale in secondi dei video di riferimento misurata dal server. Si arrotonda per eccesso il totale finale dei crediti.
ceil((duration + max(duration, T)) × rate) - I soli riferimenti di immagini o audio utilizzano la tariffa senza video. La tariffa con video si applica esclusivamente nella modalità da riferimento a video quando vengono forniti video come input.
Esempi di calcolo dei costi
Video da testo a video da 5 secondi a 720p: 5 × 13 = 65 crediti.
Video generato da 5 secondi a 720p con video di riferimento da 5 secondi: (5 + 5) × 8 = 80 crediti.
I crediti vengono prenotati all'invio e addebitati solo a completamento avvenuto. I task falliti o andati in timeout avviano la procedura di rimborso. Lo stato di fatturazione refund_failed indica che il rimborso non è andato a buon fine; verifica i log delle API o contatta l'assistenza.
Autenticazione
Crea una chiave API nella dashboard. La chiave completa viene mostrata una sola volta. Conservala sul tuo server e inviala come token Bearer in ogni richiesta.
URL di base
https://api.seevio.aiAuthorization: Bearer sk_live_your_api_key
Content-Type: application/jsonImposta la variabile d'ambiente SEEVIO_API_KEY prima di eseguire questi esempi. Gli esempi in JavaScript vengono eseguiti sul server con Node.js; gli esempi in Python utilizzano la libreria requests.
Avvio rapido
Invia questa richiesta minima, salva il taskId restituito e usa l'esempio di query del task riportato di seguito. Il valore dei crediti nella risposta di creazione corrisponde all'importo prenotato.
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"
}
}'Esempio di risposta alla creazione del task
Una volta accettata la richiesta precedente, l'API restituisce questa risposta JSON. taskId è l'identificativo del task da utilizzare per le successive verifiche sullo stato; credits indica il numero di crediti riservati a questo task. Questa risposta conferma la corretta creazione del task, non che il video sia pronto. Sarà necessario monitorare periodicamente lo stato del task o utilizzare un Webhook per ricevere il video finale.
{
"taskId": "3f2aK9mR7xQp4TnZ8bLc6YwH",
"credits": 65
}Crea un task
POST https://api.seevio.ai/v1/videos/generationsInvia un oggetto JSON contenente model e input, oltre a un callback_url opzionale. Specifica sempre l'ID del modello mostrato in questa pagina; se omesso, verrà selezionato automaticamente seedance-2-0.
Corpo della richiesta
| Campo | Tipo | Obbligatorio | Descrizione e vincoli |
|---|---|---|---|
model | string | Sì | ID modello. Per utilizzare Kling 4.0, imposta questo campo su kling-4-0. |
callback_url | string | No | Endpoint HTTPS pubblico per le chiamate POST di callback in caso di completamento o errore. Non sono consentiti host locali o reti private. Esempio: https://example.com/webhooks/seevio |
input | object | Sì | Parametri di input |
Parametri di input
| Campo | Tipo | Predefinito | Descrizione e vincoli |
|---|---|---|---|
input.generation_type | string | text-to-video | text-to-video | image-to-video | reference-to-video |
input.prompt | string | — | Fino a 8000 caratteri. Facoltativo solo per la generazione da immagini. Numera i riferimenti per tipo e ordine nell’array a partire da @Image1, @Video1 e @Audio1. |
input.duration | integer | 5 | 3–30 s |
input.resolution | string | 720p | 720p | 1080p |
input.aspect_ratio | string | Dipende dalla modalità | Valori supportati auto16:99:161:121:9Un rapporto fisso determina il formato di uscita. Se omesso o impostato su auto, il testo usa 16:9 e l’immagine segue il primo fotogramma. La modalità di riferimento determina il rapporto dalle immagini o dai video di riferimento. |
input.image_urls | string[] | [] | Per generare da immagini, indica il primo fotogramma seguito dall’eventuale ultimo. La modalità di riferimento accetta fino a 10 immagini. |
input.keyframe_urls | string[] | [] | Fotogrammi intermedi in ordine per la generazione da immagini. Fino a 9 senza ultimo fotogramma oppure 8 con esso. |
input.video_urls | string[] | [] | Solo per la modalità di riferimento. Fornisci gli URL HTTPS dei video da usare come guida per l’azione o i movimenti di camera. Fino a 5 clip da 2 a 30 secondi ciascuna, per un totale massimo di 30 secondi. |
input.audio_urls | string[] | [] | Solo per la modalità di riferimento. Fornisci gli URL HTTPS delle clip audio da usare come guida per voci o suoni. Fino a 3 clip da 5 a 30 secondi ciascuna. |
input.keep_original_sound | boolean | false | Se video_urls contiene un video di riferimento, true conserva l’audio originale e false (predefinito) genera nuovo audio. Senza video di riferimento il parametro viene ignorato. |
Risposta di creazione
La risposta HTTP 200 restituisce taskId (stringa) e credits (numero). Questo conferma la creazione del task, non il suo completamento. L'importo indicato sotto corrisponde all'avvio rapido a 720p di 5 secondi.
{
"taskId": "3f2aK9mR7xQp4TnZ8bLc6YwH",
"credits": 65
}Modalità di generazione ed esempi
Da testo a video
Genera a partire da un prompt testuale. Gli URL dei file multimediali non vengono considerati in questa modalità.
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"
}
}'Primo fotogramma
Fornisci un'immagine come primo fotogramma e descrivi il movimento nel 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"
]
}
}'Primo e ultimo fotogramma
Per generare da immagini, indica il primo fotogramma seguito dall’eventuale ultimo. La modalità di riferimento accetta fino a 10 immagini.
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"
]
}
}'Esempio con fotogrammi chiave: una rosa sboccia
Crea un time-lapse di 8 secondi da quattro foto con la stessa inquadratura. In image_urls inserisci il bocciolo chiuso e la rosa sbocciata come primo e ultimo fotogramma. In keyframe_urls inserisci prima i petali che iniziano ad aprirsi, poi il fiore semiaperto. Il video passa dal bocciolo attraverso queste due fasi fino alla piena fioritura. L’array stabilisce l’ordine e il modello decide i tempi.
Sostituisci gli URL di esempio con i tuoi file HTTPS accessibili pubblicamente. Gli URL di esempio servono solo a illustrare la struttura della richiesta e non sono risorse scaricabili.
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"
]
}
}'Riferimento multimodale
Combina riferimenti immagine, video e audio. Il prompt rimane obbligatorio. L'inserimento di un video di riferimento modifica la formula di fatturazione.
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
}
}'Interroga un task
GET https://api.seevio.ai/v1/tasks/{taskId}Sostituisci l'ID di esempio con il taskId restituito alla creazione. Le query restituiscono solo i task associati all'utente della chiave API; ID non accessibili o inesistenti restituiscono HTTP 404.
Come punto di partenza, effettua un polling ogni 10–20 secondi, rallenta le richieste in caso di HTTP 429 e interrompi quando lo stato diventa completed o failed. Per gli ambienti di produzione, consigliamo l'uso dei webhook. Ogni esempio di codice seguente esegue una singola query.
curl --fail-with-body https://api.seevio.ai/v1/tasks/3f2aK9mR7xQp4TnZ8bLc6YwH \
-H "Authorization: Bearer $SEEVIO_API_KEY"| Stato | Descrizione e vincoli |
|---|---|
queued | Accettato e in attesa di elaborazione. |
generating | Generazione in corso. |
completed | Completato con successo. Scarica il file da data.results prima della scadenza. |
failed | Errore definitivo. Verifica failed_reason e billing_status. |
| Campo | Tipo | Descrizione e vincoli |
|---|---|---|
id | string | Identificatore del task. Corrisponde al taskId della risposta di creazione. |
created_at | number | Data e ora di creazione del task in formato Unix timestamp (secondi). |
model | string | L'ID pubblico del modello utilizzato per questo task. |
billing_status | string | Stato di fatturazione: reserved, charged, refunded o refund_failed. |
credits | number | Crediti prenotati per questo task. Questo valore viene conservato anche dopo un rimborso; verifica billing_status per determinare l'esito finanziario. |
failed_reason | string | null | Causa del problema per i task falliti; null in caso contrario. Le query fallite omettono la sezione data. |
data | object | Presente nelle query dei task non falliti. Contiene i dettagli di output ed elaborazione. |
data.results | string[] | Array di URL dei video. Vuoto fino al completamento o dopo la scadenza del video. |
data.video_expires_at | string | null | Scadenza del video in formato ISO 8601, oppure null prima che sia disponibile. Salva il file prima di questa data. |
data.last_frame_url | string | null | URL dell'ultimo fotogramma quando richiesto e disponibile, altrimenti null. |
data.processing_time | number | null | Durata di elaborazione del task in secondi, se disponibile; altrimenti null. |
Task completato: risposta alla query con i risultati video
Quando la query restituisce status=completed, la generazione del video è terminata. Puoi trovare gli URL del video in data.results; assicurati di scaricarli prima della data indicata in data.video_expires_at. Lo stato billing_status=charged indica che i crediti prenotati sono stati effettivamente addebitati.
{
"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
}
}Task fallito: risposta alla query con dettagli sul fallimento e sulla fatturazione
Se la query restituisce status=failed, significa che la generazione non è andata a buon fine. Consulta failed_reason per conoscerne il motivo e billing_status per l'esito del rimborso. In questo esempio, lo stato refunded indica che i crediti sono stati riaccreditati. La voce credits mostra la quota inizialmente prenotata e la risposta non include la chiave 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"
}Webhook
Imposta callback_url nella richiesta di creazione per ricevere una richiesta POST JSON al completamento o al fallimento del task. Restituisci una risposta 2xx entro 15 secondi. Gli invii non riusciti verranno riprovati; gestisci le notifiche duplicate in modo idempotente tramite l'ID del task.
L'endpoint di callback deve accettare richieste POST con un corpo in formato JSON (Content-Type: application/json).
Crea un task con 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"
}'Attività completata: payload di callback riuscito
In caso di generazione riuscita, la callback conterrà lo stato status=completed. Utilizza id per identificare l'attività e data.results per recuperare gli URL dei video. Assicurati di scaricare e salvare i risultati prima della scadenza indicata in data.video_expires_at.
created_at indica la creazione dell’evento; task_created_at quella del task, in secondi Unix. Gli esempi mostrano i campi consigliati; le risposte possono contenere campi aggiuntivi.
{
"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
}
}Attività non riuscita: payload di callback fallito
In caso di errore durante la generazione, la callback conterrà lo stato status=failed. Utilizza id per identificare l'attività, failed_reason per conoscere il motivo del fallimento e credits_refunded per verificare il numero di crediti riaccreditati.
{
"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
}Esempio di ricevitore
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 });
}Questo esempio in Next.js legge il corpo JSON della callback e gestisce direttamente le attività completate e fallite. Ti consigliamo di aggiungere logiche di persistenza e deduplicazione dei task-ID per la tua applicazione, e di accodare i processi più lenti prima di confermare la callback.
Requisiti e limitazioni dei media
- Tutti i media e gli URL di callback devono essere URL HTTPS pubblici. Evita l'uso di localhost, IP privati o file che richiedono cookie o autenticazione. Gli URL dei file video/audio di riferimento devono indirizzare a file multimediali leggibili direttamente.
- Ogni video non deve superare i 100 MB.
- Ogni file audio non deve superare i 15 MB.
- Fino a 15 file di riferimento in totale