Documentation de l'appel d'API de génération vidéo
kozeai fournit une interface de génération vidéo compatible avec OpenAI Sora, utilisant un mode de tùche **asynchrone** : soumettez d'abord la tùche pour obtenir l'identifiant `task_id`, puis interrogez son état et téléchargez le contenu vidéo une fois la tùche terminée.
Authentification
Toutes les requĂȘtes sont authentifiĂ©es Ă l'aide de `Authorization: Bearer
export KOZEAI_API_KEY="sk-your-token"
export KOZEAI_BASE_URL="https://api.kozeai.com"
Interface Aperçu
| Méthode | Chemin | Objectif |
|---|---|---|
| POST | /v1/videos/generations |
Créer une tùche vidéo |
| GET | /v1/videos/{task_id} |
Consulter l'état de la tùche |
| GET | /v1/videos/{task_id}/content |
Jouer en ligne ou Télécharger | mp4
L'identifiant de la tĂąche, sous la forme
task_12345, renvoyé par l'interface de soumission, appartient uniquement à l'utilisateur actuel.
1. Créer une tùche vidéo
curl "$KOZEAI_BASE_URL/v1/videos/generations" \
-H "Authorization: Bearer $KOZEAI_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "video-ds-2.0",
"prompt": "Une vidéo cinématographique au format 9:16 d'un chat courant sous un soleil chaud",
"seconds": 15,
"aspect_ratio": "9:16"
}'
ParamĂštres de la requĂȘte
| ParamĂštres | Type | Obligatoire | Description |
|---|---|---|---|
model |
string | Oui | Nom du modÚle vidéo, par exemple video-ds-2.0 |
prompt |
string | Oui | Description du contenu vidéo | secondes |
entier | Non | Durée de la vidéo (secondes), basée sur la plage de compatibilité du modÚle en amont |
ratio_aspect |
chaßne de caractÚres | Non | Format d'image, couramment utilisé : 9:16, 16:9, 1:1 |
images |
tableau | Non | URL ou base64 |
videos |
array | Non | URL de la vidéo de référence |
audios |
array | Non | URL de l'audio de référence |
Différents modÚles en amont peuvent prendre en charge différents paramÚtres. Les paramÚtres non listés seront transmis conformément au protocole en amont.
Vidéo générée à partir d'images (avec images de référence)
Transmettez le tableau images pour générer une vidéo à partir des images de référence :
curl &34;$KOZEAI_BASE_URL/v1/videos/generations&34; \
-H &34;Authorization: Bearer $KOZEAI_API_KEY&34; \
-H &34;Content-Type: application/json&34; \
-d {
model: video-ds-2.0,
prompt: Utilisez le style d'image de référence et créez une vidéo produit fluide,
seconds: 15,
aspect_ratio: 9:16,
images: ["https://example.com/input.png"],
"videos": ["https://example.com/input.mp4"],
"audios": ["https://example.com/input.mp3"]
}'
imagesprend en charge les URL d'images ou le base64.videos/audiossont des documents de référence facultatifs.- Lors d'un appel via l'interface de saisie semi-automatique du chat (voir fin de l'article), il suffit de joindre l'image au message ; le systÚme la convertira automatiquement en paramÚtre
images.
Réponse (soumission réussie)
{
"id": "task_12345",
"task_id": "task_12345",
"object": "video",
"model": "video-ds-2.0",
"status": "queued",
"progress": 0,
"created_at":
}
status Valeurs : queued (en file dâattente), in_progress (en cours), completed (terminĂ©), failed (Ă©chouĂ©).
2. Ătat de la tĂąche d'interrogation
Utilisez l'id renvoyé par la soumission pour interroger, avec un intervalle recommandé de 3 à 5 secondes.
curl "$KOZEAI_BASE_URL/v1/videos/task_12345" \
-H "Authorization: Bearer $KOZEAI_API_KEY"
Réponse (génération)
{
"id": "task_12345",
"object": "video",
"model": "video-ds-2.0",
"status": "in_progress",
"progress": 45,
"created_at": 1751000000
}
Réponse (Terminée)
{
"id": "task_12345",
"object": "video",
"model": "video-ds-2.0",
"status": "completed",
"progress": 100,
"created_at": 1751000000,
Une fois l'opĂ©ration terminĂ©e, `metadata.content_url` fournit l'adresse d'accĂšs direct Ă la vidĂ©o ; elle peut Ă©galement ĂȘtre tĂ©lĂ©chargĂ©e via l'interface de contenu ci-dessous.
Réponse (échec)
{
"id": "task_12345",
"object": "video",
"status": "failed",
"error": { "message": "Raison de l'échec" }
}
Télécharger le contenu vidéo
curl -L "$KOZEAI_BASE_URL/v1/videos/task_12345/content" \
-H "Authorization: Bearer $KOZEAI_API_KEY" \
-o result.mp4
- Renvoie une erreur 409 (Conflit) si la tùche n'est pas terminée (Toujours en file d'attente/en cours de génération).
- Prend en charge le tĂ©lĂ©chargement segmentĂ© et la lecture par glisser-dĂ©poser grĂące Ă l'en-tĂȘte de requĂȘte
.
- Renvoie
.
Exemple complet
JavaScript (fetch + polling)
const BASE = process.env.KOZEAI_BASE_URL;
const KEY = process.env.KOZEAI_API_KEY;
const headers = { Authorization: `Bearer ${KEY}` };
// 1. Soumettre la tĂąche
const submit = await fetch(`${BASE}/v1/videos/generations`, {
method: POST,
headers: { ...headers, Content-Type: application/json },
body: JSON.stringify({
model: video-ds-2.0,
prompt: Une vidéo commerciale fluide d'un flacon de parfum sur verre,
seconds: 15,
aspect_ratio: 9:16,
}),
});
const task = await submit.json();
const taskId = task.id;
// 2. Interroger jusqu'Ă la fin
async function poll() {
while (true) {
const res = await fetch(`${BASE}/v1/videos/${taskId}`, { headers });
const data = await res.json();
if (data.status === "completed") return data;
if (data.status === "failed") throw new Error(data.error?.message || "failed");
await new Promise((r) => setTimeout(r, 5000));
}
} const done = await poll();
// 3. Récupérer l'adresse de la vidéo
console.log('Adresse de la vidéo :', done.metadata?.content_url
|| `${BASE}/v1/videos/${taskId}/content`);
Python (requĂȘtes + interrogation)
import os, time, requests
BASE = os.environ["KOZEAI_BASE_URL"]
KEY = os.environ["KOZEAI_API_KEY"]
headers = {"Authorization": f"Bearer {KEY}"}
# 1. Soumettre la tĂąche
resp = requests.post(
f{BASE}/v1/videos/generations",
headers=headers,
json={
model": video-ds-2.0",
prompt": Une vidéo cinématographique de 9 min 16 s montrant un chat courant dans un environnement chaud lumiÚre_du_soleil,
secondes : 15,
rapport_aspect : 9:16,
},
)
id_tĂąche = resp.json()[id]
# 2. Interrogation
while True :
data = requests.get(f{BASE}/v1/videos/{task_id}, headers=headers).json()
if data["status"] == "completed":
break
if data["status"] == "failed":
raise RuntimeError(data.get("error", {}).get("message", &34;échec&34;))
time.sleep(5)
# 3. Téléchargement
mp4 = requests.get(f&34;{BASE}/v1/videos/{task_id}/content&34;, headers=headers)
with open(&34;result.mp4&34;, &34;wb&34;) as f: f.write(mp4.content)
id="-">Appelé dans l'interface de saisie semi-automatique du chat (utilisation compatible)
Le modĂšle vidĂ©o peut Ă©galement ĂȘtre appelĂ© via /v1/chat/completions, facilitant ainsi la rĂ©utilisation des clients de chat.
Lors d'une requĂȘte, il suffit de passer le nom du modĂšle vidĂ©o dans `model`, et le systĂšme le convertira automatiquement en une tĂąche vidĂ©o :
curl $KOZEAI_BASE_URL/v1/chat/completions \
-H Authorization: Bearer $KOZEAI_API_KEY \
-H Content-Type: application/json \
-d {
Model: } `renvoie "video-ds-2.0
,
&34;messages: [{&34;role: "user, "content: "a cat running in the sunshine, cinematic, 9:16}]
}
Renvoie la fin de la conversation
Le format est `message.content`, qui contient l'état de la tùche et un lien `/v1/videos/{task_id}`. Ce lien lancera la vidéo une fois la conversation terminée. La page du salon de discussion utilise cette méthode.
Les deux points d'entrĂ©e (/v1/videos/generations et /v1/chat/completions) partagent le mĂȘme systĂšme de tĂąches et ne sont pas en conflit. Pour une intĂ©gration directe, il est recommandĂ© d'utiliser la mĂ©thode standard. Interface `/v1/videos/*`.
Code d'erreur
Code d'état
Signification
401
Jeton manquant, expiré ou invalide
403
Solde insuffisant ou le groupe actuel ne dispose pas des autorisations nécessaires pour ce modÚle
404
L'ID de tùche n'existe pas ou n'appartient pas à l'utilisateur actuel ; ou le modÚle n'est pas disponible. Configuré.
409
Le contenu vidĂ©o n'est pas prĂȘt (la tĂąche est toujours en cours de mise en file d'attente/gĂ©nĂ©ration)
429
Déclenchement de la limite de débit
502
Le fournisseur en amont a échoué ou a renvoyé un résultat invalide