Videogenerierungs-API
Erstelle Veo 3.1 Aufgaben für Text-zu-Video und Bild-zu-Video mit deinem API-Schlüssel und frage das Ergebnis über denselben /api/status Endpunkt ab, den du für Bilder nutzt.
Authentifizierung
Sende deinen API-Schlüssel bei jeder Anfrage als Bearer-Token. Verwende denselben Schlüssel zum Erstellen einer Aufgabe und zum Abfragen ihres Status. Schlüssel erstellst du auf der Seite API Keys in deinem Dashboard.
Authorization: Bearer YOUR_API_KEYModelle und Credits
Setze das Feld model auf einen der folgenden Werte. Jeder andere Wert wird mit HTTP 400 abgelehnt, und es wird nichts abgebucht.
| model-Wert | Modell | Text zu Video (Credits) | Bild zu Video (Credits) |
|---|---|---|---|
veo3_fast | Veo 3.1 Fast (Standard) | 25 | 35 |
veo3 | Veo 3.1 Quality | 180 | 180 |
veo3-fast wird als Alias von veo3_fast akzeptiert. Ohne model wird veo3_fast verwendet. Der Preis für Bild zu Video gilt, sobald image_urls mindestens eine URL enthält.
Videoaufgabe erstellen
Prüft die Anfrage, bucht Credits ab und gibt eine task_id zurück. Das Video wird asynchron erzeugt: Frage /api/status ab oder setze callback_url, um das Ergebnis zu erhalten.
Textbeschreibung des zu erzeugenden Videos.
veo3_fast (Alias veo3-fast) oder veo3. Jeder andere Wert liefert HTTP 400. Standardwert veo3_fast.
Öffentliche Bild-URLs für Bild zu Video. Mit 1 Bild entsteht das Video rund um dieses Bild. Mit 2 Bildern werden sie zum ersten und letzten Frame. imageUrls (camelCase) wird als Alias akzeptiert. Werden beide Felder gesendet, gilt image_urls.
16:9, 9:16 oder Auto. Auto schneidet das Video passend zum hochgeladenen Bild zu. Standardwert 16:9.
Bei true wird der Prompt vor der Generierung ins Englische übersetzt. Standardwert true.
Wasserzeichentext für das Video.
Öffentliche URL, die nach Abschluss der Aufgabe eine POST-Anfrage mit dem Endergebnis erhält.
Nicht unterstützte Felder
duration, resolution und image_url (Einzahl) gehören nicht zu dieser API und werden ignoriert. Die Videolänge bestimmt das Modell. Übergib Bilder als Array 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"
}
}Aufgabenstatus prüfen
Video-Task-IDs beginnen mit veo und enden mit bksv. /api/status erkennt sie automatisch und liefert die Video-URL, sobald die Aufgabe abgeschlossen ist.
Die task_id aus POST /api/video/generate.
Setze veo3, um eine Videoabfrage zu erzwingen, wenn die task_id nicht dem Format veo…bksv entspricht.
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"
}Statuswerte
IN_PROGRESS·status_code: 3— das Video wird noch erzeugt. Frage weiter ab.COMPLETED·status_code: 1— das Video ist fertig. response enthält die Video-URL.FAILED·status_code: 2— die Generierung ist fehlgeschlagen. error_message nennt den Grund, und die Credits werden automatisch erstattet.
Abrechnung und Rückerstattungen
- Credits werden beim Erstellen der Aufgabe abgebucht, bevor die Generierung beginnt.
- Liefert die Erstellungsanfrage nicht HTTP 200, gibt es keine Aufgabe, und die abgebuchten Credits werden sofort erstattet. Die Antwort nennt die erstatteten Credits.
- Endet eine erstellte Aufgabe später mit FAILED, werden ihre Credits automatisch erstattet, und consumed_credits in der Statusantwort wird 0.
Beispiel für die Abfrage
Die Videogenerierung dauert meist einige Minuten. Frage alle 10 Sekunden ab, solange status_code 3 ist, und höre bei 1 oder 2 auf.
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
Wenn du callback_url setzt, senden wir beim Abschluss oder Fehlschlag der Aufgabe eine POST-Anfrage mit diesem JSON. Die URL muss aus dem öffentlichen Internet erreichbar sein.
{
"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"
}
}Häufige Fehler
{
"code": 400,
"message": "prompt is required",
"data": null
}