API Kling 3.0 : code de requête texte-vidéo et clips réels
Une tâche texte-vidéo tient en un seul POST avec le modèle kling-3.0. Voici le code de la requête, les champs attendus et deux clips de 5 secondes que nous avons créés et mesurés le 29 octobre 2026.
Sur cette page
- Ce que contient une requête Kling 3.0
- Le code de la requête
- Deux clips que nous avons créés
- Bateau en papier
- Théière
- Ce que les fichiers mesurent
- Ce que montrent les images
- Erreurs et limites
- FAQ
- Quelles durées accepte kling-3.0 ?
- Quelle différence entre std et pro ?
- Les clips ont-ils du son ?
- Puis-je démarrer un clip à partir d'une image ?
- Combien de temps faut-il pour générer un clip ?
Une tâche texte-vidéo de Kling 3.0 est un seul POST vers https://api.omniakey.com/v1/media/tasks avec l'identifiant de modèle kling-3.0, l'opération text_to_video et deux paramètres obligatoires : duration (5, 10 ou 15 secondes) et mode (std ou pro). La réponse contient un identifiant de tâche ; interrogez-la jusqu'au succès, puis téléchargez le MP4. Le 29 octobre 2026, nous avons créé deux clips de 5 secondes en mode standard à 1280×720 et mesuré les fichiers et les images.
Ce que contient une requête Kling 3.0
Le corps compte sept champs. Deux d'entre eux, duration et mode, sont obligatoires avec Kling et fixent la durée du clip et le niveau de qualité.
| Champ | Valeur à envoyer |
|---|---|
model | kling-3.0 |
type | video |
operation | text_to_video |
input.prompt | la scène, l'action et la caméra, dans une seule chaîne |
parameters.duration | 5, 10 ou 15, en secondes entières |
parameters.mode | std ou pro |
parameters.aspect_ratio | 16:9, 9:16 ou 1:1 |
L'exemple de la page du modèle envoie duration 6 et un champ resolution à 720p, et aucun des deux n'est valide ici : la page n'accepte que 5, 10 ou 15 secondes et indique qu'il n'existe pas de champ resolution séparé (page du modèle, consultée le 29 octobre 2026). Sa FAQ associe la sortie standard à 720P et pro à 1080P.
L'audio est présent par défaut, et la page ne liste aucun interrupteur (consultée le 29 octobre 2026). Le rapport d'aspect s'applique au texte-vidéo ; l'image-vidéo prend sa forme de la première image et refuse un ratio explicite. Ces deux exécutions ont utilisé std à 5 secondes et 16:9, tandis que le mode pro, 10 s et 15 s, 9:16 et 1:1, l'image-vidéo et une dernière image restaient hors de leur portée.
La formulation du prompt définit la scène, l'action et la caméra. Le guide de prompts Kling 3.0 détaille les parties d'un prompt et le langage de caméra.
Le code de la requête
Un seul fichier Python envoie le corps, interroge la tâche et télécharge le MP4. Il lit la clé dans OMNIAKEY_API_KEY, ajoute un Idempotency-Key aléatoire à la requête de création et attend 5 secondes entre les interrogations, jusqu'à 180 essais. Le corps porte les mêmes champs et valeurs que les deux clips de la section suivante : modèle kling-3.0, type video, operation text_to_video, duration 5, mode std, rapport d'aspect 16:9.
import json
import os
import time
import urllib.error
import urllib.request
import uuid
API = "https://api.omniakey.com/v1/media/tasks"
KEY = os.environ["OMNIAKEY_API_KEY"]
def request(method, url, body=None, extra_headers=None):
headers = {"Authorization": f"Bearer {KEY}", "User-Agent": "omniakey-example/1"}
data = None
if body is not None:
headers["Content-Type"] = "application/json"
data = json.dumps(body).encode()
headers.update(extra_headers or {})
req = urllib.request.Request(url, data=data, headers=headers, method=method)
with urllib.request.urlopen(req, timeout=120) as resp:
return json.load(resp)
def poll(url, attempts=5):
for attempt in range(attempts):
try:
return request("GET", url)
except urllib.error.HTTPError as err:
if err.code < 500 or attempt == attempts - 1:
raise
except urllib.error.URLError:
if attempt == attempts - 1:
raise
time.sleep(5 * (attempt + 1))
def text_to_video(prompt, out_path, duration=5, mode="std", aspect_ratio="16:9"):
body = {
"model": "kling-3.0",
"type": "video",
"operation": "text_to_video",
"input": {"prompt": prompt},
"parameters": {"duration": duration, "mode": mode, "aspect_ratio": aspect_ratio},
}
task = request("POST", API, body, {"Idempotency-Key": str(uuid.uuid4())})["id"]
print("task", task, flush=True)
for _ in range(180):
time.sleep(5)
state = poll(f"{API}/{task}")
if state["status"] not in ("queued", "processing"):
break
if state["status"] != "succeeded":
raise RuntimeError(state.get("error") or state["status"])
asset_url = state["assets"][0]["url"] # lien signé : durée courte, donc téléchargez tout de suite
req = urllib.request.Request(asset_url, headers={"User-Agent": "omniakey-example/1"})
with urllib.request.urlopen(req, timeout=300) as resp, open(out_path, "wb") as f:
f.write(resp.read())
return task
if __name__ == "__main__":
task = text_to_video(
"A paper boat drifts slowly down a rain-soaked street at dusk. Warm streetlights reflect on "
"the wet cobblestones. The camera follows the boat at a steady pace. No people, no text.",
"paper-boat.mp4",
)
print("done", task)
Chaque interrogation est un GET sur le chemin de la tâche, et la boucle suit le status plutôt que progress.percent, qui peut rester à 0 pendant le rendu. Quand le status n'est plus queued ni processing, le code s'arrête : succeeded mène au téléchargement depuis assets[0].url, et tout autre statut lève le message d'erreur de la tâche. Le téléchargement se fait aussitôt, car ce lien d'actif expire ; redemandez la tâche pour en obtenir un nouveau s'il a expiré. Une interrogation qui subit une connexion coupée ou une erreur serveur (5xx) est retentée jusqu'à cinq fois, avec une pause plus longue à chaque fois.
Nous avons relancé ce fichier le 29 octobre 2026 avec les mêmes réglages. La première tentative a perdu la connexion pendant l'interrogation, d'où la nouvelle logique de reprise. La seconde exécution a renvoyé la tâche task_PNB1kPopriUyfcHsXhVWY2hBOEoSUIqM, et son MP4 mesure 5.04 secondes en 1280×720 avec une piste AAC stéréo. De la création au téléchargement, il a fallu 807 secondes, contre 82.2 et 110.7 secondes pour les deux clips ci-dessous : prévoyez donc des attentes longues.
Deux clips que nous avons créés
Les deux requêtes sont parties le 29 octobre 2026 avec le corps indiqué plus haut. La tâche du paper boat est task_cbOtsBxO75cml3nOmVUu9YG3PkYXW2ja et celle de la teapot est task_M2Ub1EoCaCUa1FjOZDdWDOuEOS9nRjnt. Chaque prompt a été envoyé exactement tel qu'il est écrit.
Bateau en papier
A paper boat drifts slowly down a rain-soaked street at dusk. Warm streetlights reflect on the wet cobblestones. The camera follows the boat at a steady pace. No people, no text.

Théière
A ceramic teapot sits on a wooden table by a window. Steam rises in slow curls. Soft morning light moves across the table. The camera pushes in slowly. No people, no text.

Ce que les fichiers mesurent
Un outil de clips a mesuré chaque téléchargement le 29 octobre 2026.
- Bateau en papier — Taille: 1280×720; Fréquence d'images: 24.0 fps; Durée: 5.04 s; Audio: AAC, 2 canaux, 44.1 kHz; Niveau moyen: −50.9 dB; Niveau maximal: −34.0 dB; Coupes: aucune
- Théière — Taille: 1280×720; Fréquence d'images: 24.0 fps; Durée: 5.04 s; Audio: AAC, 2 canaux, 44.1 kHz; Niveau moyen: −54.3 dB; Niveau maximal: −35.9 dB; Coupes: aucune
- Clip issu du code — Taille: 1280×720; Fréquence d'images: 24.0 fps; Durée: 5.04 s; Audio: AAC, 2 canaux, 44.1 kHz; Niveau moyen: −48.4 dB; Niveau maximal: −20.0 dB; Coupes: aucune
Les deux premiers clips sont très silencieux : niveaux moyens de −50.9 dB et −54.3 dB, avec des pics à −34.0 dB et −35.9 dB. Le clip issu du code est plus fort, avec une moyenne de −48.4 dB et un pic à −20.0 dB. Nous n'avons mesuré que le niveau ; le contenu des pistes restait hors du champ de la mesure. Le détecteur de changements de plan n'a trouvé aucune coupe forte ni faible dans les trois, donc chaque clip se lit comme un seul plan.
Ce que montrent les images
Les deux clips suivent le prompt, et la théière ajoute un petit mouvement qui lui est propre.
Dans le clip du bateau en papier, le bateau reste près du centre du cadre pendant les 5.04 secondes tandis que la rue mouillée défile derrière lui, si bien que le plan se lit comme une caméra qui suit le bateau. Les reflets chauds des lampadaires restent sur les pavés jusqu'à la dernière image (images vérifiées le 29 octobre 2026). Aucune coupe n'interrompt le suivi.
Dans le clip de la théière, la vapeur monte en volutes lentes et s'estompe, et la lumière du matin avance sur la table en bois. La théière finit plus grande et plus vers le bas à droite qu'au départ, ce qui se lit comme un push-in avec une légère dérive latérale ; le prompt demandait un push-in lent, et la dérive est quelque chose que le prompt n'a pas demandé (images vérifiées le 29 octobre 2026).

Erreurs et limites
Une durée hors de 5, 10 et 15 renvoie HTTP 400 model_price_error, et aucune tâche n'est créée (documentation de l'API vidéo, consultée le 29 octobre 2026). Envoyez des secondes entières parmi les trois valeurs autorisées.
Une requête de création sans Idempotency-Key renvoie 400 missing_idempotency_key ; la clé peut aller jusqu'à 255 caractères. La même clé avec le même corps renvoie la tâche existante en HTTP 200 sans nouvelle facturation, tandis qu'un corps modifié sous cette clé renvoie 409 idempotency_key_reused (présentation de l'API média, consultée le 29 octobre 2026).
Le 29 octobre 2026, un POST avec le User-Agent par défaut d'urllib de Python a renvoyé HTTP 403 avec le corps error code: 1010 de Cloudflare, et notre propre en-tête User-Agent a atteint l'API. Définissez un User-Agent sur la requête de création et sur le téléchargement.
Les liens de sortie sont de courte durée : interrogez de nouveau la tâche pour obtenir une assets[].url fraîche au lieu d'en stocker une (documentation de l'API vidéo, consultée le 29 octobre 2026). Les enregistrements de tâches sont conservés 24 heures après la création (présentation de l'API média, consultée le 29 octobre 2026).
Kling 3.0 est facturé par génération et non à la seconde (documentation de l'API vidéo, consultée le 29 octobre 2026). Pour les tarifs actuels, voir les tarifs OmniaKey.
FAQ
Quelles durées accepte kling-3.0 ?
5, 10 et 15 secondes. Toute autre valeur renvoie HTTP 400 model_price_error et ne crée aucune tâche (documentation de l'API vidéo, consultée le 29 octobre 2026).
Quelle différence entre std et pro ?
La page du modèle les nomme Standard et Pro, et associe la sortie standard à 720P et pro à 1080P (consultée le 29 octobre 2026). Nous n'avons exécuté que std, donc nous n'avons pas de différence mesurée entre les deux.
Les clips ont-ils du son ?
Chaque clip porte une piste AAC à deux canaux en 44.1 kHz. Les deux premiers sont très silencieux, avec des niveaux moyens de −50.9 dB et −54.3 dB ; le clip issu du code est plus fort, avec une moyenne de −48.4 dB et un pic à −20.0 dB. Nous n'avons mesuré que le niveau et n'avons pas identifié le contenu.
Puis-je démarrer un clip à partir d'une image ?
La page du modèle liste l'image-vidéo avec une première image et une dernière image facultative (consultée le 29 octobre 2026). La première image fixe le rapport d'aspect, et un rapport explicite est refusé sur cette opération.
Combien de temps faut-il pour générer un clip ?
Dans nos deux exécutions du 29 octobre 2026, le bateau en papier a terminé en 110.7 secondes et la théière en 82.2 secondes. Les deux étaient des clips std de 5 secondes en 16:9.
Partez de la page du modèle Kling 3.0 et envoyez le même corps avec votre propre prompt.
Modèles cités dans cet article
Articles similaires
Guide des prompts Kling 3.0 : structure, exemples et vrais clips
Quatre prompts, quatre vrais clips : où sont tombés les cuts, quel dialogue est passé et où la caméra n'a pas bougé.
Kling 3.0 vs Seedance 2.5
Les deux modèles sont en ligne sur OmniaKey et peuvent servir le même plan. La différence tient au contrat de facturation : l'un facture une fois par génération selon une matrice mode et duration, l'autre facture par seconde de sortie multipliée par la résolution, et un seul accepte un plan piloté par référence.
HappyHorse 1.1 vs Kling 3.0 : test avec le même prompt et prix
Trois prompts identiques : HappyHorse 1.1 gagne la scène chargée et l'orbite du parfum, Kling 3.0 réussit le trick.
Articles récents
- API GPT Image 2.5 : générer et modifier des images en Python
- API Seedream 5.0 Pro : générer des images avec Python
- Clapping Cat Meme AI : faites applaudir votre animal avec l'image-vers-vidéo
- Utiliser les API Claude et GPT dans DeepSeek Harness
- Alternative à l'API FLUX Kontext : retoucher des images avec GPT Image 2

