Vai alla documentazione
In questa pagina

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 video720p · 1080p
Durata video3–30 s
Proporzioniauto, 16:9, 9:16, 1:1, 21:9
Immagini di riferimentoFino a 10 immagini
Video di riferimentoFino a 5 video
File audio di riferimentoFino a 3 file audio
Tutti i riferimenti combinatiFino a 15 file di riferimento in totale
Video di riferimento (Σ)30 secondi
seedNon 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 videoSenza video in inputCon video in input
720p13 crediti al secondo8 crediti al secondo
1080p20 crediti al secondo13 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.ai
Authorization: Bearer sk_live_your_api_key
Content-Type: application/json

Imposta 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/generations

Invia 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

CampoTipoObbligatorioDescrizione e vincoli
model
stringSì

ID modello. Per utilizzare Kling 4.0, imposta questo campo su kling-4-0.

callback_url
stringNo

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
objectSì

Parametri di input

Parametri di input

CampoTipoPredefinitoDescrizione e vincoli
input.generation_typestringtext-to-videotext-to-video | image-to-video | reference-to-video
input.promptstring—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.durationinteger53–30 s
input.resolutionstring720p720p | 1080p
input.aspect_ratiostringDipende dalla modalità
Valori supportatiauto16:99:161:121:9

Un 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_urlsstring[][]Per generare da immagini, indica il primo fotogramma seguito dall’eventuale ultimo. La modalità di riferimento accetta fino a 10 immagini.
input.keyframe_urlsstring[][]Fotogrammi intermedi in ordine per la generazione da immagini. Fino a 9 senza ultimo fotogramma oppure 8 con esso.
input.video_urlsstring[][]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_urlsstring[][]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_soundbooleanfalseSe 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

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.

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"
StatoDescrizione e vincoli
queuedAccettato e in attesa di elaborazione.
generatingGenerazione in corso.
completedCompletato con successo. Scarica il file da data.results prima della scadenza.
failedErrore definitivo. Verifica failed_reason e billing_status.
CampoTipoDescrizione e vincoli
idstring
Identificatore del task. Corrisponde al taskId della risposta di creazione.
created_atnumber
Data e ora di creazione del task in formato Unix timestamp (secondi).
modelstring
L'ID pubblico del modello utilizzato per questo task.
billing_statusstring
Stato di fatturazione: reserved, charged, refunded o refund_failed.
creditsnumber
Crediti prenotati per questo task. Questo valore viene conservato anche dopo un rimborso; verifica billing_status per determinare l'esito finanziario.
failed_reasonstring | null
Causa del problema per i task falliti; null in caso contrario. Le query fallite omettono la sezione data.
dataobject
Presente nelle query dei task non falliti. Contiene i dettagli di output ed elaborazione.
data.resultsstring[]
Array di URL dei video. Vuoto fino al completamento o dopo la scadenza del video.
data.video_expires_atstring | null
Scadenza del video in formato ISO 8601, oppure null prima che sia disponibile. Salva il file prima di questa data.
data.last_frame_urlstring | null
URL dell'ultimo fotogramma quando richiesto e disponibile, altrimenti null.
data.processing_timenumber | 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