API Vidéo
Une requête produit une vidéo. Nommez un personnage et son apparence est conservée, comme avec l'API Images.
Générer
curl -X POST https://api.aicu.ai/v1/video/generate \
-H "Authorization: Bearer $AICU_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "wan3.0-video",
"prompt": "@MeiSoleil waves at the camera on a beach at sunset",
"resolution": "720p",
"seconds": 5
}'
{
"id": "5f9c…",
"status": "processing",
"ap_cost": 7000,
"status_url": "https://api.aicu.ai/v1/video/status/5f9c…",
"url": "https://api.aicu.ai/v1/video/file/5f9c…"
}
La génération prend plus de temps qu'une requête HTTP ne le permet : l'appel renvoie donc immédiatement 202 avec un id. Interrogez status_url jusqu'à ce qu'il indique completed, puis récupérez url.
curl "https://api.aicu.ai/v1/video/status/$ID" -H "Authorization: Bearer $AICU_API_KEY"
{
"id": "5f9c…",
"status": "completed",
"ap_cost": 7000,
"url": "https://api.aicu.ai/v1/video/file/5f9c…",
"download_url": "https://api.aicu.ai/v1/video/d/…",
"download_expires_at": "2026-12-03T00:00:00.000Z"
}
curl -L "https://api.aicu.ai/v1/video/file/$ID" -H "Authorization: Bearer $AICU_API_KEY" -o out.mp4
status vaut processing, completed ou failed. Interroger toutes les 10 secondes suffit largement ; un clip de 5 secondes arrive en général en une à cinq minutes.
Transmettre la vidéo à quelqu'un
url exige votre clé API : elle est destinée à votre programme, pas à une personne. Une tâche terminée fournit aussi download_url, qui s'ouvre sans clé — c'est celle-là qu'il faut mettre dans un e-mail, un message de chat ou une page web.
# S'ouvre dans un navigateur. Sans clé, sans en-tête.
open "$(curl -s "https://api.aicu.ai/v1/video/status/$ID" \
-H "Authorization: Bearer $AICU_API_KEY" | jq -r .download_url)"
Ajoutez ?dl=1 pour que le navigateur enregistre le fichier au lieu de le lire.
Le lien expire 30 jours après la création de la vidéo ; download_expires_at en donne le moment exact. Passé ce délai, comme pour un jeton qui n'a jamais existé ou dont la forme est incorrecte, le lien renvoie le même 404 — sans préciser lequel des cas, si bien qu'un lien que vous partagez ne révèle rien sur les autres.
Gardez une copie de tout ce dont vous avez besoin plus longtemps. Le lien sert à remettre le résultat, pas à le stocker.
Choisir un modèle
model choisit le modèle vidéo. Si vous l'omettez, vous obtenez gemini-omni-1.1-flash, ce qui permet aux appels existants de continuer à fonctionner.
model | Origine | Résolutions | Secondes | Idéal pour |
|---|---|---|---|---|
gemini-omni-1.1-flash (par défaut) | 360p / 720p / 1080p | 5 à 10, décidé par le modèle | Le rapport qualité-prix en 720p. Vous êtes facturé pour la durée réellement produite. | |
wan3.0-video | Alibaba | 480p / 720p / 1080p | 2 à 10 | La qualité, avec le son. Conserve un personnage à partir d'une seule image de référence. |
wan3.0-video-prime | Alibaba | 480p / 720p / 1080p | 2 à 10 | La même qualité, en un tiers à la moitié du temps. |
La liste à jour, avec les limites et les tarifs de chaque modèle, se trouve toujours dans GET /v1/models (type: "video"). Un modèle ou une résolution hors de ces plages renvoie 400 au lieu d'être arrondi en silence.
Champs
| Champ | Signification |
|---|---|
model | Voir ci-dessus. Par défaut gemini-omni-1.1-flash. |
prompt | Ce qui se passe dans le plan. Un @Name placé n'importe où dans le texte sélectionne ce personnage et est retiré du prompt. |
character | Équivaut à écrire @Name, sous forme de champ séparé. Un personnage enregistré fournit sa propre image de référence ; le nom de votre propre personnage exige reference_image. |
reference_image | Image en base64 utilisée comme référence du personnage. Jusqu'à environ 8 MB. |
first_frame | Image en base64 qui devient la première image, pour animer un storyboard. Ne peut pas être combinée avec reference_image. |
last_frame | Image en base64 qui devient la dernière image. Utilisez-la avec first_frame et le modèle comble le mouvement entre les deux. |
resolution | Dépend du modèle (tableau ci-dessus). Par défaut 720p. Détermine le prix. |
seconds | Dépend du modèle (tableau ci-dessus). Par défaut 5. Détermine le prix. |
aspect_ratio | 16:9 (par défaut), 9:16, ou 1:1 si le modèle le prend en charge. Avec first_frame, ce sont les images qui décident du format. |
visibility | public liste le résultat avec sa ligne de crédit ; private ne conserve rien. |
Première et dernière image
Donnez le début et la fin, et laissez le modèle trouver le chemin entre les deux.
{
"model": "wan3.0-video",
"first_frame": "<base64 of the opening shot>",
"last_frame": "<base64 of the closing shot>",
"prompt": "the camera slowly pulls back as she turns toward the window",
"seconds": 5
}
Deux images d'une même planche contact (voir plus bas) forment une paire naturelle : même éclairage, même personnage, moment différent.
Prix
À la seconde de vidéo terminée, selon le modèle et la résolution. 1 USD = 10,000 AP. Les tarifs en vigueur figurent sur la page des tarifs et dans GET /v1/models (type: "video") ; les changements de tarif sont annoncés dans les Actualités sept jours à l'avance.
Les AP sont réservés au démarrage de la tâche et intégralement restitués si la tâche échoue ou dépasse le délai. Une génération échouée ne coûte rien. Quand le modèle décide de la durée, le maximum est réservé et la différence est restituée une fois la vidéo terminée. Vous pouvez avoir trois tâches en cours simultanément par clé.
Scope
La vidéo exige le scope video. Il n'est pas inclus dans les anciennes clés : une clé émise uniquement pour les images n'a jamais été prévue pour dépenser aux tarifs de la vidéo. Ajoutez-le depuis votre page de clés, ou émettez une nouvelle clé, qui reçoit tous les scopes publics disponibles.
Un appel sans ce scope renvoie 403 forbidden_scope avec required_scope: "video".
Personnages
Un personnage enregistré n'a besoin que de son nom.
{ "prompt": "@SakiNoire walks through a neon backstreet at night", "seconds": 5 }
Votre propre personnage a besoin d'une image de lui, exactement comme dans l'API Personnages.
{ "character": "luc4", "reference_image": "<base64>", "prompt": "sitting at a cafe, typing on a laptop" }

La même référence qui produit cette image fixe est celle qui maintient le personnage stable d'une image à l'autre. Placez les mots décrivant l'apparence officielle du personnage avant la scène ; la référence fixe l'aspect général et les mots tiennent les détails.
Réussir la première image
Une vidéo ne vaut que ce que vaut l'image dont elle part, et l'API Images est juste là. Une technique qui marche bien : demandez une planche contact, puis donnez la planche au modèle vidéo.
curl -X POST https://api.aicu.ai/v1/images/generations \
-H "Authorization: Bearer $AICU_API_KEY" -H "Content-Type: application/json" \
-d '{"model":"gpt-image-2.5-flare","size":"1024x1536","quality":"medium",
"prompt":"A 3x3 contact sheet of snapshots a child took on a phone, 9:16. Low angles, feet, the dog’s nose up close, the sky, a palm, a parent seen from below, a toy on the floor. Everyday and lived-in. No text or logos."}'
Demander les photos d'un enfant vous donne des contre-plongées, parce que c'est à cette hauteur que se trouvent ses yeux. Demander des ratés d'amateur vous donne du flou de bougé, un pouce devant l'objectif et un contre-jour brûlé. Vous n'avez eu à décrire rien de tout cela.
| Les photos d'un enfant | Ratés d'amateur | Les instantanés d'un personnage |
|---|---|---|
![]() | ![]() | ![]() |
Chaque case de la planche est une première image utilisable. Passez-en une comme reference_image et décrivez le mouvement dans prompt.
Erreurs
| Statut | Code | Que faire |
|---|---|---|
| 400 | invalid_parameter | Vérifiez model, resolution, seconds ou la taille des images |
| 402 | insufficient_ap | Rechargez. Rien n'a été lancé. |
| 403 | forbidden_scope | Ajoutez le scope video à la clé |
| 429 | rate_limited | Trois tâches sont déjà en cours pour cette clé. Attendez qu'une se termine. |
| 5xx | generation_failed | Réessayez. Les AP réservés ont déjà été restitués. |
Assistance
- Répondez à n'importe quel e-mail d'api@aicu.ai, ou utilisez https://aicu.ai/contact
- État du service : https://api.aicu.ai/status · Actualités et avis de prix : https://api.aicu.ai/news
© 2026 AICU Inc.


