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" }
}
3. 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