Kling 4.0
Generieren Sie Videos mit Kling 4.0 mithilfe von Text, ersten und letzten Frames oder multimodalen Referenzen. Diese Seite beschreibt den gesamten Workflow von der Anfrage bis zum Ergebnis für dieses Modell.
API-Modell-ID: kling-4-0
Die Generierung erfolgt asynchron. Speichern Sie die beim Erstellen des Tasks zurückgegebene taskId, um den Status abzufragen oder einen Webhook zu empfangen.
Funktionen
| Feature | Unterstützte Werte |
|---|---|
| Ausgabeauflösung | 720p · 1080p |
| Ausgabedauer | 3–30 s |
| Seitenverhältnis | auto, 16:9, 9:16, 1:1, 21:9 |
| Referenzbilder | Bis zu 10 Bilder |
| Referenzvideos | Bis zu 5 Videos |
| Referenzaudiodateien | Bis zu 3 Audiodateien |
| Alle Referenzen kombiniert | Insgesamt bis zu 15 Referenzdateien |
| Referenzvideos (Σ) | 30 Sekunden |
| seed | Nicht unterstützt |
Preise & Credits
Die Videogenerierung wird in Credits auf Basis der abrechenbaren Dauer in Sekunden abgerechnet. Ohne Video-Input entspricht die abrechenbare Dauer der Ausgabedauer; mit Video-Input umfasst sie zusätzlich die Dauer des Referenzvideos.
In der folgenden Tabelle sind die berechneten Credits pro Sekunde aufgeführt, nicht die Gesamtkosten eines Auftrags. Die Rate hängt vom Modell, der Ausgabeauflösung und der Frage ab, ob im Referenz-zu-Video-Modus Referenzvideos bereitgestellt werden. Die Formeln und Beispiele unter der Tabelle zeigen, wie sich die Gesamtkosten berechnen.
| Ausgabeauflösung | Ohne Video-Input | Mit Video-Input |
|---|---|---|
720p | 13 Credits/Sekunde | 8 Credits/Sekunde |
1080p | 20 Credits/Sekunde | 13 Credits/Sekunde |
- Ohne Video-Input: Ausgabesekunden × Tarif ohne Video.
- Bei Videoeingabe ist T die vom Server gemessene Gesamtdauer der Referenzvideos in Sekunden. Erst die endgültigen Credits werden aufgerundet.
ceil((duration + max(duration, T)) × rate) - Reine Bild- oder Audioreferenzen nutzen den Tarif ohne Video. Der Tarif für Referenzvideos gilt nur im Reference-to-Video-Modus, wenn tatsächlich Videoreferenzen übergeben werden.
Abrechnungsbeispiele
5 Sekunden 720p Text-to-Video: 5 × 13 = 65 Credits.
5 Sekunden 720p Ausgabe mit einem 5-sekündigen Referenzvideo: (5 + 5) × 8 = 80 Credits.
Credits werden bei der Übermittlung reserviert und bei Erfolg abgebucht. Fehlgeschlagene Tasks oder Timeouts gehen in den Rückerstattungsprozess. Der Abrechnungsstatus refund_failed bedeutet, dass die Rückerstattung nicht abgeschlossen werden konnte; prüfen Sie die API-Protokolle oder kontaktieren Sie den Support.
Authentifizierung
Erstellen Sie einen API-Key im Dashboard. Der vollständige Key wird nur einmal angezeigt. Speichern Sie ihn auf Ihrem Server und senden Sie ihn bei jeder Anfrage als Bearer-Token mit.
Basis-URL
https://api.seevio.aiAuthorization: Bearer sk_live_your_api_key
Content-Type: application/jsonSetzen Sie die Umgebungsvariable SEEVIO_API_KEY, bevor Sie diese Beispiele ausführen. JavaScript-Beispiele laufen mit Node.js auf Ihrem Server; Python-Beispiele nutzen das requests-Paket.
Schnellstart
Senden Sie diese minimale Anfrage, speichern Sie die zurückgegebene taskId und nutzen Sie das untenstehende Beispiel zur Task-Abfrage. Der Credits-Wert in der Erstellungsantwort entspricht dem reservierten Betrag.
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"
}
}'Beispiel für die Antwort beim Erstellen eines Tasks
Nach der Annahme der oben genannten Anfrage gibt die API diese JSON-Antwort zurück. taskId ist die Aufgabenkennung für nachfolgende Statusabfragen; credits ist die Anzahl der für diese Aufgabe reservierten Credits. Diese Antwort bestätigt lediglich die Erstellung der Aufgabe, nicht die Fertigstellung des Videos. Sie müssen den Status der Aufgabe abfragen (Polling) oder einen Webhook verwenden, um die Videoergebnisse zu erhalten.
{
"taskId": "3f2aK9mR7xQp4TnZ8bLc6YwH",
"credits": 65
}Task erstellen
POST https://api.seevio.ai/v1/videos/generationsSenden Sie ein JSON-Objekt, das model und input sowie optional eine Callback-URL (callback_url) enthält. Geben Sie immer die auf dieser Seite angezeigte Modell-ID an. Wird kein Modell angegeben, wird standardmäßig seedance-2-0 ausgewählt.
Request-Body
| Feld | Typ | Erforderlich | Beschreibung & Einschränkungen |
|---|---|---|---|
model | string | Ja | Modell-ID. Um Kling 4.0 zu verwenden, setzen Sie dieses Feld auf kling-4-0. |
callback_url | string | Nein | Öffentlicher HTTPS-Endpunkt für POST-Callbacks bei Fertigstellung oder Fehlern. Private Netzwerke und localhost sind nicht erlaubt. Beispiel: https://example.com/webhooks/seevio |
input | object | Ja | Eingabeparameter |
Eingabeparameter
| Feld | Typ | Standard | Beschreibung & Einschränkungen |
|---|---|---|---|
input.generation_type | string | text-to-video | text-to-video | image-to-video | reference-to-video |
input.prompt | string | — | Bis zu 8000 Zeichen. Nur bei Bild-zu-Video optional. Referenzen je Typ in Array-Reihenfolge ab @Image1, @Video1 und @Audio1 nummerieren. |
input.duration | integer | 5 | 3–30 s |
input.resolution | string | 720p | 720p | 1080p |
input.aspect_ratio | string | Je nach Modus | Unterstützte Werte auto16:99:161:121:9Ein festes Format bestimmt das Seitenverhältnis der Ausgabe. Ohne Angabe oder bei auto nutzt der Textmodus 16:9 und der Bildmodus das Format des ersten Frames. Im Referenzmodus richtet sich das Format nach den Referenzbildern oder -videos. |
input.image_urls | string[] | [] | Bei Bild-zu-Video zuerst das Startbild, optional danach das Endbild angeben. Im Referenzmodus sind bis zu 10 Bilder erlaubt. |
input.keyframe_urls | string[] | [] | Zwischenbilder für Bild-zu-Video in Abspielreihenfolge. Bis zu 9 ohne Endbild oder 8 mit Endbild. |
input.video_urls | string[] | [] | Nur im Referenzmodus. Gib HTTPS-URLs von Videos an, die als Vorlage für Bewegungen oder Kamerafahrten dienen. Bis zu 5 Clips mit jeweils 2 bis 30 Sekunden und insgesamt höchstens 30 Sekunden. |
input.audio_urls | string[] | [] | Nur im Referenzmodus. Gib HTTPS-URLs von Audioclips als Vorlage für Stimmen oder Geräusche an. Bis zu 3 Clips mit jeweils 5 bis 30 Sekunden. |
input.keep_original_sound | boolean | false | Enthält video_urls ein Referenzvideo, behält true dessen Originalton bei. false (Standard) erzeugt neuen Ton. Ohne Referenzvideo wird diese Einstellung ignoriert. |
Antwort bei Erstellung
HTTP 200 gibt die taskId (String) und credits (Zahl) zurück. Dies bestätigt die Erstellung des Tasks, nicht dessen Fertigstellung. Der unten stehende Betrag entspricht dem 5-sekündigen 720p-Schnellstart.
{
"taskId": "3f2aK9mR7xQp4TnZ8bLc6YwH",
"credits": 65
}Generierungsmodi & Beispiele
Text-to-Video
Aus einem Text-Prompt generieren. Medien-URLs werden in diesem Modus nicht weitergeleitet.
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"
}
}'Erster Frame
Geben Sie ein Bild als ersten Frame an und beschreiben Sie die Bewegung in Ihrem 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"
]
}
}'Erster und letzter Frame
Bei Bild-zu-Video zuerst das Startbild, optional danach das Endbild angeben. Im Referenzmodus sind bis zu 10 Bilder erlaubt.
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"
]
}
}'Beispiel mit Schlüsselbildern: Eine Rose blüht auf
Erstelle aus vier Fotos aus demselben Blickwinkel einen achtsekündigen Zeitraffer. In image_urls stehen die geschlossene Knospe und die voll erblühte Rose als Start- und Endbild. In keyframe_urls folgen die ersten sich öffnenden Blütenblätter und die halb geöffnete Blüte. So führt der Ablauf von der Knospe über diese beiden Zwischenstadien zur vollen Blüte. Das Array legt die Reihenfolge fest, das Modell die Zeitpunkte.
Ersetzen Sie die Medien-URLs von example.com durch Ihre eigenen, öffentlich zugänglichen HTTPS-Dateien. Die Beispiel-URLs dienen nur zur Veranschaulichung der Request-Struktur und sind keine herunterladbaren Beispieldateien.
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"
]
}
}'Multimodale Referenz
Kombinieren Sie Bild-, Video- und Audioreferenzen. Der Prompt ist weiterhin erforderlich. Die Übergabe eines Referenzvideos ändert die Abrechnungsformel.
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
}
}'Task abfragen
GET https://api.seevio.ai/v1/tasks/{taskId}Ersetzen Sie die Beispiel-ID durch die bei der Erstellung zurückgegebene taskId. Abfragen liefern nur Tasks zurück, die dem User des API-Keys gehören; bei unzugänglichen oder unbekannten IDs wird HTTP 404 zurückgegeben.
Fragen Sie anfangs alle 10–20 Sekunden ab, drosseln Sie die Frequenz bei HTTP 429 und stoppen Sie, sobald der Status completed oder failed lautet. Nutzen Sie für die Produktion bevorzugt Webhooks. Jedes Codebeispiel unten führt eine einzelne Abfrage aus.
curl --fail-with-body https://api.seevio.ai/v1/tasks/3f2aK9mR7xQp4TnZ8bLc6YwH \
-H "Authorization: Bearer $SEEVIO_API_KEY"| Status | Beschreibung & Einschränkungen |
|---|---|
queued | Akzeptiert und wartet auf die Verarbeitung. |
generating | Generierung läuft. |
completed | Erfolgreich abgeschlossen. Laden Sie data.results vor dem Ablaufdatum herunter. |
failed | Fehlgeschlagen. Prüfen Sie failed_reason und billing_status. |
| Feld | Typ | Beschreibung & Einschränkungen |
|---|---|---|
id | string | Task-ID. Entspricht der taskId aus der Erstellungsantwort. |
created_at | number | Erstellungszeitpunkt des Tasks als Unix-Zeitstempel (Sekunden). |
model | string | Die für diesen Task verwendete öffentliche Modell-ID. |
billing_status | string | reserved, charged, refunded oder refund_failed. |
credits | number | Für diesen Task reservierte Credits. Dieser Wert bleibt auch nach einer Rückerstattung erhalten; prüfen Sie billing_status, um das genaue Abrechnungsergebnis zu sehen. |
failed_reason | string | null | Fehlerursache bei fehlgeschlagenen Tasks; andernfalls null. Fehlgeschlagene Abfrage-Antworten enthalten keine data. |
data | object | Vorhanden bei erfolgreich abgeschlossenen oder laufenden Tasks. Enthält die Ausgabe und Verarbeitungsdetails. |
data.results | string[] | Array mit Video-URLs. Leer bis zur Fertigstellung oder nach Ablauf des Videos. |
data.video_expires_at | string | null | Ablaufdatum des Videos als ISO 8601-Zeitstempel, oder null, solange es noch nicht verfügbar ist. Speichern Sie das Ergebnis vor diesem Zeitpunkt. |
data.last_frame_url | string | null | URL des letzten Frames, sofern angefordert und verfügbar, andernfalls null. |
data.processing_time | number | null | Dauer der Aufgabenverarbeitung in Sekunden, falls verfügbar, andernfalls null. |
Abgeschlossener Task: Abfrage-Antwort mit Video-Ergebnissen
Wenn die Abfrage status=completed zurückgibt, ist die Videogenerierung abgeschlossen. Rufen Sie die Video-URLs aus data.results ab und laden Sie diese vor data.video_expires_at herunter. billing_status=charged zeigt an, dass die reservierten Credits abgebucht wurden.
{
"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
}
}Fehlgeschlagener Task: Abfrage-Antwort mit Fehler- und Abrechnungsdetails
Wenn die Abfrage status=failed zurückgibt, wurde die Generierung erfolglos beendet. Unter failed_reason finden Sie die Ursache und unter billing_status das Erstattungsergebnis. In diesem Beispiel bedeutet refunded, dass die Credits zurückerstattet wurden. credits behält den ursprünglich reservierten Betrag bei, und die Antwort enthält keine 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
Setzen Sie callback_url in der Erstellungsanfrage, um einen JSON-POST zu erhalten, sobald der Task abgeschlossen ist oder fehlschlägt. Antworten Sie innerhalb von 15 Sekunden mit einem 2xx-Statuscode. Fehlgeschlagene Zustellungen werden wiederholt; verarbeiten Sie doppelte Zustellungen idempotent anhand der Task-ID.
Ihr Callback-Endpunkt muss POST-Anfragen mit einem JSON-Body (Content-Type: application/json) akzeptieren.
Task mit Callback erstellen
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"
}'Task abgeschlossen: Payload für erfolgreichen Callback
Wenn die Generierung erfolgreich war, enthält der Callback status=completed. Verwenden Sie id zur Identifizierung des Tasks und data.results, um die Video-URLs abzurufen. Laden Sie die Ergebnisse vor data.video_expires_at herunter und speichern Sie diese.
created_at ist die Ereigniszeit, task_created_at die Erstellungszeit der Aufgabe, jeweils in Unix-Sekunden. Die Beispiele zeigen empfohlene Felder; Antworten können weitere Felder enthalten.
{
"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
}
}Task fehlgeschlagen: Payload für fehlgeschlagenen Callback
Wenn die Generierung fehlschlägt, enthält der Callback status=failed. Verwenden Sie id zur Identifizierung des Tasks, failed_reason für die Fehlerursache und credits_refunded für die Anzahl der erstatteten Credits.
{
"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
}Empfänger-Beispiel
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 });
}Dieses Next.js-Beispiel liest den JSON-Callback-Body aus und verarbeitet erfolgreiche sowie fehlgeschlagene Tasks direkt. Fügen Sie für Ihre eigene Anwendung Datenpersistenz und Task-ID-Deduplizierung hinzu. Stellen Sie zeitaufwendige Prozesse in eine Warteschlange, bevor Sie den Callback bestätigen.
Medienanforderungen & Einschränkungen
- Alle Medien- und Callback-URLs müssen öffentliche HTTPS-URLs sein. Vermeiden Sie localhost, private IPs und Dateien, die Cookies oder Logins erfordern. Referenz-URLs für Video/Audio müssen direkt lesbare Mediendateien ausgeben.
- Die Dateigröße pro Video darf 100 MB nicht überschreiten.
- Die Dateigröße pro Audiodatei darf maximal 15 MB betragen.
- Insgesamt bis zu 15 Referenzdateien