
Die Kling 4.0 API auf PoYo verwendet eine einzige Modell-ID, kling-4.0, für Text-zu-Video, Generierung aus erstem/letztem Frame, visuelle Referenzen und Videobearbeitung. Sie senden eine Anfrage, speichern die Task-ID und fragen den Status ab, bis der Task abgeschlossen ist. Dieser Leitfaden folgt dem aktuellen PoYo-Schema, Stand 24. Oktober 2026; die Feldnamen anderer Anbieter sind nicht austauschbar.
Öffnen Sie den Kling 4.0 Playground, um die Eingaben visuell auszuprobieren, oder lesen Sie die API-Dokumentation.
Das erste Video mit cURL generieren
Setzen Sie POYO_API_KEY in Ihrer Shell-Umgebung und senden Sie dann diese fünfsekündige Anfrage. Bewahren Sie den Schlüssel auf Ihrem Server auf, nicht im Browser-Code.
curl --fail-with-body https://api.poyo.ai/api/generate/submit \
-H "Authorization: Bearer $POYO_API_KEY" \
-H 'Content-Type: application/json' \
-d '{
"model": "kling-4.0",
"input": {
"prompt": "A paper boat floats beneath a stone bridge. One continuous low tracking shot, soft morning light, gentle water sounds, no speech or on-screen text.",
"duration": 5,
"resolution": "720p",
"aspect_ratio": "16:9"
}
}'
Lesen Sie data.task_id aus der JSON-Antwort; eine erfolgreiche Übermittlung ist noch kein fertiges Video. Ersetzen Sie YOUR_TASK_ID unten durch diesen Wert:
curl --fail-with-body \
https://api.poyo.ai/api/generate/status/YOUR_TASK_ID \
-H "Authorization: Bearer $POYO_API_KEY"
Die dokumentierten Status sind not_started, running, finished und failed. Ist der Task abgeschlossen, finden Sie in data.files eine Video-file_url. Bei einem Fehler prüfen Sie error_message und bewahren die Task-ID für die Diagnose auf. Um einen bestehenden Task abzufragen, müssen Sie ihn nicht erneut übermitteln.
Eine begrenzte Polling-Schleife in Python
Installieren Sie requests und führen Sie den Code in Ihrem Backend aus. Er prüft sowohl HTTP- als auch Anwendungsfehler, bricht bei einem fehlgeschlagenen Task ab und begrenzt die Wartezeit auf 30 Minuten. Ein Timeout bedeutet: Fragen Sie denselben Task später erneut ab. Eine automatisch wiederholte Übermittlung könnte einen zweiten kostenpflichtigen Job erzeugen.
import os
import time
import requests
base = "https://api.poyo.ai"
session = requests.Session()
session.headers["Authorization"] = "Bearer " + os.environ["POYO_API_KEY"]
def checked(response):
response.raise_for_status()
body = response.json()
if body.get("code") not in (0, 200):
raise RuntimeError(body.get("message") or "PoYo API error")
return body["data"]
task = checked(session.post(base + "/api/generate/submit", json={
"model": "kling-4.0",
"input": {
"prompt": "A paper boat floats beneath a stone bridge. Slow tracking shot.",
"duration": 5,
"resolution": "720p",
"aspect_ratio": "16:9",
},
}, timeout=60))
task_id = task["task_id"]
print("Task:", task_id, flush=True)
deadline = time.monotonic() + 1800
while time.monotonic() < deadline:
task = checked(session.get(
base + "/api/generate/status/" + task_id, timeout=60))
if task["status"] == "failed":
raise RuntimeError(task.get("error_message") or "Generation failed")
if task["status"] == "finished":
videos = [f["file_url"] for f in task.get("files", [])
if f.get("file_type") == "video"]
if not videos:
raise RuntimeError("Finished task returned no video")
print(videos[0])
break
time.sleep(10)
else:
raise TimeoutError("Check the saved task ID again: " + task_id)
Den richtigen Eingabemodus wählen
| Ziel | Felder innerhalb von input | Wichtige Einschränkung |
|---|---|---|
| Text-zu-Video | prompt oder multi_prompt | Genau eines angeben |
| Erster/letzter Frame | image_urls mit einer oder zwei geordneten URLs | aspect_ratio weglassen |
| Referenzgenerierung | reference_image_urls, reference_video_urls oder kling_elements | Höchstens ein optionaler erster Frame |
| Footage bearbeiten | video_url und prompt | Kein image_urls, multi_prompt, reference_video_urls oder aspect_ratio |
Das Quellvideo-Feld wählt den Bearbeitungsmodus, auch wenn zusätzlich Referenzbilder vorhanden sind. Bei Bild-zu-Video legt das erste Bild den Start-Frame fest; ein zweites Bild definiert den End-Frame. Referenzbilder steuern Identität oder Stil und bedeuten nicht dasselbe wie Rahmen-Frames.
Grenzen, die Sie vor dem Senden prüfen sollten
Die Generierung unterstützt ganzzahlige Dauern von 3 bis 30 Sekunden in 720p oder 1080p. Ein normaler Prompt ist in diesem PoYo-Schema auf 26.000 Zeichen begrenzt. Jede multi_prompt-Einstellung akzeptiert bis zu 512 Zeichen; ohne Angabe beträgt die Dauer einer Einstellung fünf Sekunden. Die Einstellungsdauern müssen zusammen 3–30 Sekunden ergeben, und eine explizite Gesamtdauer auf oberster Ebene muss dieser Summe entsprechen.
Referenzen erlauben bis zu 10 Bilder, fünf Videos und sieben Subjekte, innerhalb eines Gesamtlimits von 15 Assets. Ein erster Frame zählt sowohl zum Bild- als auch zum Gesamtlimit. Jedes Referenz- oder Subjektvideo muss 3–30 Sekunden lang sein; ihre tatsächliche Gesamtdauer darf 30 Sekunden nicht überschreiten. Runden Sie Dauern nicht ab, um eine zu große Eingabe durch die Validierung zu bringen.
Die erste Rechnung verstehen
Eine fünfsekündige 720p-Anfrage ohne Videoeingabe kostet 142,5 Credits, also $0.7125 beim aktuell angegebenen Umrechnungskurs. Eine Videoeingabe verändert sowohl den Tarif als auch die abrechenbare Dauer. Sehen Sie sich die Preisbeispiele an, bevor Sie einen Workflow mit Referenzvideo oder Bearbeitung kalkulieren.
Das offizielle Creator-Produkt bewirbt zusätzliche Steuerungen, darunter mehrere Keyframes. Das PoYo-Schema bietet hier bis zu zwei Rahmen-Frames und Prompts pro Einstellung; senden Sie keine erfundenen Felder wie keyframes, seed, negative_prompt oder generate_audio an diesen Endpunkt. Für funktionierende Beispiele lesen Sie weiter im Prompt-Leitfaden und im Omni-Reference-Tutorial.
Häufig gestellte Fragen
Lautet die API-Modell-ID kling-4-0? Nein. Das ist der Seiten-Slug. Die Modell-ID in der Anfrage ist kling-4.0.
Kann ich hier 4K anfordern? Dieser PoYo-Endpunkt akzeptiert derzeit nur 720p und 1080p. Prüfen Sie das Schema des Anbieters, statt Marketing-Angaben aus der Creator-App zu übernehmen.
Kann ich einen Callback verwenden? Die Submit-Anfrage unterstützt ein callback_url auf oberster Ebene. Wie Callbacks verarbeitet werden, entnehmen Sie der aktuellen Dokumentation; das obige Polling-Beispiel ist nicht darauf angewiesen.
Wo fange ich an? Starten Sie mit einer kurzen reinen Textanfrage, speichern Sie Task-ID und Ergebnis und fügen Sie dann im Playground nacheinander jeweils eine Eingabemodalität hinzu.