API de génération vidéo
Créez des tâches Veo 3.1 texte-vers-vidéo et image-vers-vidéo avec votre clé API, puis suivez-les avec le même endpoint /api/status que pour les images.
Authentification
Envoyez votre clé API comme jeton Bearer dans chaque requête. Utilisez la même clé pour créer une tâche et pour consulter son statut. Vous pouvez créer des clés sur la page API Keys de votre tableau de bord.
Authorization: Bearer YOUR_API_KEYModèles et crédits
Renseignez le champ model avec l’une des valeurs ci-dessous. Toute autre valeur est refusée avec HTTP 400 et rien n’est débité.
| valeur de model | Modèle | Texte vers vidéo (crédits) | Image vers vidéo (crédits) |
|---|---|---|---|
veo3_fast | Veo 3.1 Fast (par défaut) | 25 | 35 |
veo3 | Veo 3.1 Quality | 180 | 180 |
veo3-fast est accepté comme alias de veo3_fast. Sans model, veo3_fast est utilisé. Le tarif image vers vidéo s’applique dès que image_urls contient au moins une URL.
Créer une tâche vidéo
Valide la requête, débite les crédits et renvoie un task_id. La vidéo est générée de façon asynchrone : interrogez /api/status ou indiquez callback_url pour recevoir le résultat.
Description textuelle de la vidéo à générer.
veo3_fast (alias veo3-fast) ou veo3. Toute autre valeur renvoie HTTP 400. Valeur par défaut veo3_fast.
URL publiques d’images pour l’image vers vidéo. Avec 1 image, la vidéo se construit autour de cette image. Avec 2 images, elles deviennent la première et la dernière image. imageUrls (camelCase) est accepté comme alias. Si les deux champs sont envoyés, image_urls est utilisé.
16:9, 9:16 ou Auto. Auto recadre la vidéo selon l’image envoyée. Valeur par défaut 16:9.
Si true, le prompt est traduit en anglais avant la génération. Valeur par défaut true.
Texte du filigrane ajouté à la vidéo.
URL publique qui reçoit une requête POST avec le résultat final à la fin de la tâche.
Champs non pris en charge
duration, resolution et image_url (au singulier) ne font pas partie de cette API et sont ignorés. La durée de la vidéo dépend du modèle. Envoyez les images dans un tableau image_urls.
curl -X POST "https://nanobnana.com/api/video/generate" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"prompt": "The camera slowly pushes in as the city lights turn on at dusk",
"model": "veo3_fast",
"image_urls": ["https://example.com/first-frame.jpg"],
"aspect_ratio": "16:9"
}'{
"code": 200,
"message": "success",
"data": {
"task_id": "veo24223f74e4f445ec9c4403b532cc328fbksv"
}
}Vérifier le statut d’une tâche
Les identifiants de tâches vidéo commencent par veo et se terminent par bksv. /api/status les reconnaît automatiquement et renvoie l’URL de la vidéo une fois la tâche terminée.
Le task_id renvoyé par POST /api/video/generate.
Indiquez veo3 pour forcer la recherche vidéo si le task_id ne suit pas le format veo…bksv.
curl "https://nanobnana.com/api/status?task_id=veo24223f74e4f445ec9c4403b532cc328fbksv" \
-H "Authorization: Bearer YOUR_API_KEY"{
"code": 200,
"message": "success",
"data": {
"task_id": "veo24223f74e4f445ec9c4403b532cc328fbksv",
"request": {
"prompt": "The camera slowly pushes in as the city lights turn on at dusk",
"model": "veo3_fast",
"image_urls": [
"https://example.com/first-frame.jpg"
],
"aspect_ratio": "16:9"
},
"response": null,
"status": "IN_PROGRESS",
"status_code": 3,
"status_text": "IN_PROGRESS",
"consumed_credits": 35,
"created_at": "2026-10-04 17:05:12",
"model": "veo3"
},
"model": "veo3"
}Valeurs du statut
IN_PROGRESS·status_code: 3— la vidéo est encore en cours de génération. Continuez à interroger.COMPLETED·status_code: 1— la vidéo est prête. response contient l’URL de la vidéo.FAILED·status_code: 2— la génération a échoué. error_message en donne la raison et les crédits sont remboursés automatiquement.
Facturation et remboursements
- Les crédits sont débités à la création de la tâche, avant le début de la génération.
- Si la requête de création ne renvoie pas HTTP 200, aucune tâche n’existe et les crédits débités sont remboursés immédiatement. La réponse indique le nombre de crédits remboursés.
- Si une tâche créée se termine ensuite en FAILED, ses crédits sont remboursés automatiquement et consumed_credits passe à 0 dans la réponse de statut.
Exemple d’interrogation
La génération d’une vidéo prend généralement quelques minutes. Interrogez toutes les 10 secondes tant que status_code vaut 3, et arrêtez-vous à 1 ou 2.
async function waitForVideo(taskId) {
while (true) {
const res = await fetch(`https://nanobnana.com/api/status?task_id=${taskId}`, {
headers: { Authorization: 'Bearer YOUR_API_KEY' }
});
const payload = await res.json();
if (!res.ok) throw new Error(payload.message);
const task = payload.data;
if (task.status_code === 1) return task.response[0];
if (task.status_code === 2) throw new Error(task.error_message || 'Video generation failed');
await new Promise((resolve) => setTimeout(resolve, 10000));
}
}Callback
Si vous indiquez callback_url, nous envoyons une requête POST avec ce JSON quand la tâche se termine ou échoue. L’URL doit être accessible depuis Internet.
{
"code": 200,
"message": "success",
"data": {
"request": {
"prompt": "The camera slowly pushes in as the city lights turn on at dusk",
"model": "veo3_fast",
"image_urls": [
"https://example.com/first-frame.jpg"
],
"aspect_ratio": "16:9"
},
"response": [
"https://example.com/generated-video.mp4"
],
"status": "COMPLETED",
"created_at": "2026-10-04 17:05:12"
}
}Erreurs courantes
{
"code": 400,
"message": "prompt is required",
"data": null
}