Video Üretim API'si
API anahtarınızla Veo 3.1 metinden videoya ve görselden videoya görevleri oluşturun, sonucu görseller için kullandığınız aynı /api/status uç noktasından alın.
Kimlik doğrulama
Her istekte API anahtarınızı Bearer token olarak gönderin. Görev oluşturmak ve durumunu sorgulamak için aynı anahtarı kullanın. Anahtarları panelinizdeki API Keys sayfasında oluşturabilirsiniz.
Authorization: Bearer YOUR_API_KEYModeller ve krediler
model alanına aşağıdaki değerlerden birini yazın. Başka bir değer HTTP 400 ile reddedilir ve kredi düşülmez.
| model değeri | Model | Metinden videoya (kredi) | Görselden videoya (kredi) |
|---|---|---|---|
veo3_fast | Veo 3.1 Fast (varsayılan) | 25 | 35 |
veo3 | Veo 3.1 Quality | 180 | 180 |
veo3-fast, veo3_fast için takma ad olarak kabul edilir. model gönderilmezse veo3_fast kullanılır. image_urls en az bir URL içerdiğinde görselden videoya fiyatı uygulanır.
Video görevi oluşturma
İsteği doğrular, krediyi düşer ve bir task_id döndürür. Video eşzamansız üretilir: sonucu almak için /api/status'u sorgulayın veya callback_url ayarlayın.
Üretilecek videonun metin açıklaması.
veo3_fast (takma ad veo3-fast) veya veo3. Başka bir değer HTTP 400 döndürür. Varsayılan değer veo3_fast.
Görselden videoya için herkese açık görsel URL'leri. 1 görselle video bu görselin etrafında oluşturulur. 2 görselle bunlar ilk ve son kare olur. imageUrls (camelCase) takma ad olarak da kabul edilir. İki alan birlikte gönderilirse image_urls kullanılır.
16:9, 9:16 veya Auto. Auto videoyu yüklenen görsele göre kırpar. Varsayılan değer 16:9.
true olduğunda prompt, üretimden önce İngilizceye çevrilir. Varsayılan değer true.
Videoya eklenecek filigran metni.
Görev bittiğinde nihai sonucu içeren bir POST isteği alacak herkese açık URL.
Desteklenmeyen alanlar
duration, resolution ve tekil image_url bu API'nin parçası değildir ve yok sayılır. Video süresini model belirler. Görselleri image_urls dizisi olarak gönderin.
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"
}
}Görev durumunu kontrol etme
Video görev kimlikleri veo ile başlar ve bksv ile biter. /api/status bunları otomatik tanır ve görev tamamlandığında video URL'sini döndürür.
POST /api/video/generate tarafından döndürülen task_id.
task_id veo…bksv biçiminde değilse video sorgusunu zorlamak için veo3 yazın.
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"
}Durum değerleri
IN_PROGRESS·status_code: 3— video hâlâ üretiliyor. Sorgulamaya devam edin.COMPLETED·status_code: 1— video hazır. response video URL'sini içerir.FAILED·status_code: 2— üretim başarısız oldu. error_message nedenini açıklar ve krediler otomatik olarak iade edilir.
Ücretlendirme ve iadeler
- Krediler, görev oluşturulurken, üretim başlamadan önce düşülür.
- Oluşturma isteği HTTP 200 döndürmezse görev oluşmaz ve düşülen krediler hemen iade edilir. Yanıt, kaç kredinin iade edildiğini belirtir.
- Oluşturulan bir görev daha sonra FAILED olarak biterse kredileri otomatik iade edilir ve durum yanıtındaki consumed_credits 0 olur.
Sorgulama örneği
Video üretimi genellikle birkaç dakika sürer. status_code 3 olduğu sürece 10 saniyede bir sorgulayın, 1 veya 2 olduğunda durun.
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
callback_url ayarlarsanız, görev tamamlandığında veya başarısız olduğunda bu JSON gövdesiyle bir POST isteği göndeririz. URL'ye internetten erişilebilmelidir.
{
"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"
}
}Sık karşılaşılan hatalar
{
"code": 400,
"message": "prompt is required",
"data": null
}