Endpoints
Vidéo (tâches asynchrones)
POST /videos crée une tâche ; interrogez GET /videos/{id} puis téléchargez le résultat. Veo, Sora, Kling et d'autres modèles vidéo.
Essayer dans le playgroundGénérez des vidéos avec Veo 3.1, Sora 2 Pro, Kling, Seedance, Runway, Wan, Hailuo et d'autres. La génération vidéo prend de quelques dizaines de secondes à plusieurs minutes : elle s'exécute donc comme une tâche asynchrone : vous créez une tâche, interrogez son statut, puis téléchargez le résultat.
| Étape | Requête |
|---|---|
| 1. Créer | POST /api/v1/videos |
| 2. Interroger | GET /api/v1/videos/{id} |
| 3. Télécharger | GET /api/v1/videos/{id}/content?index=0 |
Créer une tâche
POST https://api14.com/api/v1/videos
| Paramètre | Type | Obligatoire | Description |
|---|---|---|---|
model | string | oui | Un identifiant de modèle vidéo, par ex. google/veo-3.1-fast. |
prompt | string | oui | Ce qui se passe dans la vidéo. |
duration | number | non | Durée en secondes. Par défaut, la première durée prise en charge par le modèle. |
resolution | string | non | par ex. 720p, 1080p. Doit être prise en charge par le modèle. |
aspect_ratio | string | non | par ex. 16:9, 9:16. |
generate_audio | boolean | non | Génère une bande-son quand c'est pris en charge (true par défaut). |
image | string | non | Première image sous forme d'URL ou d'URI data: (image-vers-vidéo). |
Durées, résolutions et ratios pris en charge par modèle : GET /videos/models (public) ou la page du modèle.
Vérification du solde
Avant l'envoi de la tâche, la passerelle estime son prix à durée × prix par seconde pour la résolution demandée (et l'option audio). Si votre solde est inférieur à l'estimation, la requête échoue avec 402 insufficient_balance et rien n'est lancé.
Réponse
{
"id": "vid_01JABCDEF",
"status": "queued",
"polling_url": "/api/v1/videos/vid_01JABCDEF"
}
Interroger la tâche
GET https://api14.com/api/v1/videos/{id}
{
"id": "vid_01JABCDEF",
"status": "completed",
"generation_id": "gen-1791100000-abc",
"unsigned_urls": ["/api/v1/videos/vid_01JABCDEF/content?index=0"],
"usage": { "cost": 1.2 }
}
status | Signification |
|---|---|
queued | En attente du fournisseur. |
in_progress | Rendu en cours. |
completed | Terminé ; unsigned_urls liste les sorties. |
failed, cancelled, expired | Terminé sans résultat ; voir error. Vous n'êtes pas facturé. |
Interrogez toutes les 5 à 10 secondes. Seul le compte qui a créé la tâche peut la lire ; les autres identifiants renvoient 404 not_found.
Télécharger le résultat
GET https://api14.com/api/v1/videos/{id}/content?index=0
Renvoie les octets de la vidéo (généralement video/mp4) avec votre clé d'API. Les URL de sortie pointent toujours vers la passerelle, jamais vers le fournisseur en amont. Si le fichier n'est pas prêt ou a expiré, vous obtenez content_unavailable.
Exemple
import OpenAI from "openai";
const client = new OpenAI({
baseURL: "https://api14.com/api/v1",
apiKey: process.env.API14_API_KEY,
});
// Video generation is asynchronous: submit, then poll until completed.
let job = await client.post("/videos", { body: {
"model": "google/veo-3.1-fast",
"prompt": "A drone shot over turquoise ocean waves at sunrise",
"duration": 8,
"resolution": "720p",
"aspect_ratio": "16:9"
} });
while (!["completed", "failed"].includes(job.status)) {
await new Promise((r) => setTimeout(r, 5000));
job = await client.get(`/videos/${job.id}`);
}
console.log(job.status, job.unsigned_urls);
Facturation
Vous êtes facturé une seule fois, quand la tâche atteint completed, au coût réel du fournisseur. Les tâches échouées, annulées et expirées sont gratuites. Les tâches se terminent aussi en arrière-plan : une tâche que vous n'interrogez jamais est tout de même réglée et apparaît dans Utilisation.
Erreurs
| Statut | Code | Quand |
|---|---|---|
| 402 | insufficient_balance | Le solde est inférieur au prix estimé de la tâche. |
| 403 | plan_required | Votre forfait n'inclut pas les modèles vidéo. |
| 404 | model_not_found / not_found | Modèle inconnu, ou identifiant de tâche qui n'est pas le vôtre. |
| 502 | upstream_unavailable | Le statut n'a pas pu être lu ; réessayez. |
Voir Erreurs.