Nano Banana 2

API kılavuzu ve entegrasyon referansı: uç nokta, girdi alanları, fiyatlar, webhook ve hatalar.

Mod

Bu modelin 2 modu var; alanlar, çıktı ve fiyatlar seçili moda göredir. Modu istekte category_id ile seçin (örneklerde hazır). Göndermezseniz girdinize uyan mod, o da yoksa varsayılan mod çalışır.

İstek ve yanıt

POST
https://kolayzeka.com/api/models/nano-banana-2-image-editing/generate

Gövde: { "input": {…alanlar}, "category_id"?: sayı, "webhook_url"?: "https://…" }. Alanlar aşağıda; tanımlı olmayan bir alan 422 döner.

cURL · JSON

curl -X POST https://kolayzeka.com/api/models/nano-banana-2-image-editing/generate \
  -H "Authorization: Bearer YOUR_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
  "input": {
    "prompt": "Prompt",
    "num_images": 1,
    "aspect_ratio": "auto",
    "output_format": "png",
    "safety_tolerance": "4",
    "resolution": "1K",
    "limit_generations": true,
    "enable_web_search": false
  },
  "webhook_url": "https://your-server.com/hooks/kolayzeka"
}'

cURL · multipart (dosya yükleyerek)

curl -X POST https://kolayzeka.com/api/models/nano-banana-2-image-editing/generate \
  -H "Authorization: Bearer YOUR_API_TOKEN" \
  -F 'input[prompt]=Prompt' \
  -F 'input[num_images]=1' \
  -F 'input[aspect_ratio]=auto' \
  -F 'input[output_format]=png' \
  -F 'input[safety_tolerance]=4' \
  -F 'input[resolution]=1K' \
  -F 'input[limit_generations]=true' \
  -F 'input[enable_web_search]=false' \
  -F 'input[image_urls][]=@./image_urls-1.jpg' \
  -F 'webhook_url=https://your-server.com/hooks/kolayzeka'
Üretim asenkrondur. POST, 202 ve status: "queued" döner; sonuç henüz yoktur. Sonucu GET https://kolayzeka.com/api/generations/{id} ile sorgulayın ya da webhook_url verin (aynı nesne gelir). Durumlar: queued → processing → completed | failed. estimated_seconds bu modun geçmiş ortalama süresidir (null olabilir).

1 · POST yanıtı (202)

{
  "data": {
    "id": "9d1c…-uuid",
    "model": "nano-banana-2-image-editing",
    "output_type": "image",
    "source": "api",
    "status": "queued",
    "input_data": {
      "prompt": "Prompt",
      "num_images": 1,
      "aspect_ratio": "auto",
      "output_format": "png",
      "safety_tolerance": "4",
      "resolution": "1K",
      "limit_generations": true,
      "enable_web_search": false
    },
    "output_data": null,
    "thumbnail_url": null,
    "credit_cost": 71697,
    "duration": null,
    "estimated_seconds": 15,
    "error_message": null,
    "webhook_url": "https://your-server.com/hooks/kolayzeka",
    "created_at": "2026-06-29T12:00:00.000000Z",
    "updated_at": "2026-06-29T12:00:00.000000Z"
  },
  "success": true
}

2 · Tamamlandı (GET /generations/{id} veya webhook)

{
  "data": {
    "id": "9d1c…-uuid",
    "model": "nano-banana-2-image-editing",
    "output_type": "image",
    "source": "api",
    "status": "completed",
    "input_data": {
      "prompt": "Prompt",
      "num_images": 1,
      "aspect_ratio": "auto",
      "output_format": "png",
      "safety_tolerance": "4",
      "resolution": "1K",
      "limit_generations": true,
      "enable_web_search": false
    },
    "output_data": {
      "result": "https://<signed-url>/output.jpg"
    },
    "thumbnail_url": "https://<signed-url>/thumb.jpg",
    "credit_cost": 71697,
    "duration": 4.52,
    "estimated_seconds": 15,
    "error_message": null,
    "webhook_url": "https://your-server.com/hooks/kolayzeka",
    "created_at": "2026-06-29T12:00:00.000000Z",
    "updated_at": "2026-06-29T12:00:05.000000Z"
  },
  "success": true
}

3 · Başarısız

{
  "data": {
    "id": "9d1c…-uuid",
    "model": "nano-banana-2-image-editing",
    "output_type": "image",
    "source": "api",
    "status": "failed",
    "input_data": {
      "prompt": "Prompt",
      "num_images": 1,
      "aspect_ratio": "auto",
      "output_format": "png",
      "safety_tolerance": "4",
      "resolution": "1K",
      "limit_generations": true,
      "enable_web_search": false
    },
    "output_data": null,
    "thumbnail_url": null,
    "credit_cost": 0,
    "duration": null,
    "estimated_seconds": 15,
    "error_message": "Sağlayıcı yoğun, lütfen tekrar deneyin.",
    "webhook_url": "https://your-server.com/hooks/kolayzeka",
    "created_at": "2026-06-29T12:00:00.000000Z",
    "updated_at": "2026-06-29T12:00:00.000000Z"
  },
  "success": true
}
  • Sonuç output_data.result alanındadır (imzalı URL, süreli: kalıcı tutmak için kendi depolamanıza indirin).
  • Medya URL'leri imzalıdır ve süresi dolar; eski bir URL için işi tekrar GET edin, taze URL gelir.
  • Geçmiş: GET https://kolayzeka.com/api/generations (en yeni önce, sayfa başına 20, ?page=).

Fiyat ve teklif

Fiyat kredi cinsindendir ve seçtiğiniz seçeneklere (kalite, boyut, süre, adet…) göre değişir. Varsayılan ayarlarla bu mod ≈ 71697 kredi.

POST
https://kolayzeka.com/api/models/nano-banana-2-image-editing/quote

Çalıştırmadan, tam bu girdinin fiyatı. Token gerekmez; girdiyi üretimdeki gibi doğrular.

cURL

curl -X POST https://kolayzeka.com/api/models/nano-banana-2-image-editing/quote \
  -H "Content-Type: application/json" \
  -d '{"input":{"prompt":"Prompt","num_images":1,"aspect_ratio":"auto","output_format":"png","safety_tolerance":"4","resolution":"1K","limit_generations":true,"enable_web_search":false}}'

Yanıt

{
  "success": true,
  "data": {
    "credits": 71697,
    "basis": "per_image",
    "exact": true,
    "mode": {
      "category_id": null,
      "label": "Mod"
    }
  }
}
  • exact: false: fiyat çıktıya bağlı (ör. token, gerçek süre); teklif tipik değerle hesaplanır.
  • Kredi, istek kabul edilince teklif tutarı kadar ayrılır. İş bitince gerçek tutara göre fark düşülür ya da iade edilir; iş başarısız olursa tamamı iade edilir. Kesin tutar: sonuçtaki credit_cost.
  • Bakiye: GET https://kolayzeka.com/api/me → credit_balance. Yetmezse 402 insufficient_credits.

Girdi alanları

input içine gönderilir. Tip etiketi gönderilecek JSON değeridir (string, integer, number, boolean, url, array<url>). Aynı liste makine-okunur olarak GET https://kolayzeka.com/api/ai-models/nano-banana-2-image-editing yanıtında.

prompt
zorunlu
string

Prompt · The prompt for image editing.

num_images
isteğe bağlı
number

Number of Images · The number of images to generate.

Varsayılan: 1 (gönderilmezse bu kullanılır)

Sınırlar: en az 1 · en çok 4

seed
isteğe bağlı
number

Seed · The seed for the random number generator.

aspect_ratio
isteğe bağlı
string

Aspect Ratio · The aspect ratio of the generated image. Supports extreme ratios: 4:1, 1:4, 8:1, 1:8.

Kabul edilen değerler:"auto""21:9""16:9""3:2""4:3""5:4""1:1""4:5""3:4""2:3""9:16""4:1""1:4""8:1""1:8"

Varsayılan: "auto" (gönderilmezse bu kullanılır)

output_format
isteğe bağlı
string

Output Format · The format of the generated image.

Kabul edilen değerler:"jpeg""png""webp"

Varsayılan: "png" (gönderilmezse bu kullanılır)

safety_tolerance
isteğe bağlı
string

Safety Tolerance · The safety tolerance level for content moderation. 1 is the most strict (blocks most content), 6 is the least strict.

Kabul edilen değerler:"1""2""3""4""5""6"

Varsayılan: "4" (gönderilmezse bu kullanılır)

image_urls
isteğe bağlı
array<url>
dosya

Image URLs · The URLs of the images to use for image-to-image generation or image editing. Optional when at least one of `video_url`, `audio_url`, or `pdf_url` is provided.

JSON'da herkese açık bir https URL listesi gönderin, ya da dosyayı multipart ile yükleyin: -F 'input[image_urls][]=@./dosya.jpg'

system_prompt
isteğe bağlı
string

System Prompt · Optional system instruction that steers the model's persona and output style across the request. Leave blank to omit; when provided, it is sent as the system instruction to Gemini (or as a system message on OpenAI-compatible providers).

resolution
isteğe bağlı
string

Resolution · The resolution of the image to generate.

Kabul edilen değerler:"0.5K""1K""2K""4K"

Varsayılan: "1K" (gönderilmezse bu kullanılır)

video_url
isteğe bağlı
string

Video URL · Optional video to use as input context. Accepts an http(s)/data URL to a video file (downloaded and sent inline, max 15MB) or a YouTube URL (passed through to the model without downloading).

audio_url
isteğe bağlı
string

Audio URL · Optional audio file to use as input context. Accepts an http(s)/data URL (downloaded and sent inline, max 15MB).

pdf_url
isteğe bağlı
string

PDF URL · Optional PDF document to use as input context. Accepts an http(s)/data URL (downloaded and sent inline, max 15MB).

limit_generations
isteğe bağlı
boolean

Limit Generations · Experimental parameter to limit the number of generations from each round of prompting to 1. Set to `True` to to disregard any instructions in the prompt regarding the number of images to generate and ignore any intermediate images generated by the model. This may affect generation quality.

Varsayılan: true (gönderilmezse bu kullanılır)

enable_web_search
isteğe bağlı
boolean

Enable Web Search · Enable web search for the image generation task. This will allow the model to use the latest information from the web to generate the image.

Varsayılan: false (gönderilmezse bu kullanılır)

thinking_level
isteğe bağlı
string

Thinking Level · When set, enables model thinking with the given level ('minimal' or 'high') and includes thoughts in the generation. Omit to disable.

Kabul edilen değerler:"minimal""high"

Kimlik doğrulama

Her istekte Authorization: Bearer YOUR_API_TOKEN. Token'ı Profil sayfasında oluşturun. Katalog ve teklif (/ai-models, /quote) token istemez. Ayrıntılar: geliştirici rehberi.

Webhook

İsteğe bir webhook_url (https) ekleyin; iş bitince oraya imzalı bir POST gelir. Gövde { event, success, data }: data, durum endpoint'inin döndüğü nesnenin aynısıdır. Sorgulamaya gerek kalmaz; uzun işler (video, çok adımlı uygulamalar) için önerilir.

Gelen başlıklar

X-KolayZeka-Event: generation.completed // veya generation.failed

X-KolayZeka-Signature: sha256=<hex>

User-Agent: KolayZeka-Webhook/1.0

İmza = ham gövdenin, hesabınızın webhook imzalama anahtarı ile HMAC-SHA256'sı. Anahtarı Profil sayfasında oluşturun (bir kez gösterilir). Anahtar yoksa webhook gönderilmez.

Doğrulama · Node.js

import crypto from 'node:crypto';

// rawBody: the request body exactly as received (before JSON.parse).
const expected = 'sha256=' + crypto
  .createHmac('sha256', process.env.KOLAYZEKA_WEBHOOK_SECRET)
  .update(rawBody)
  .digest('hex');
const given = req.headers['x-kolayzeka-signature'] ?? '';

if (given.length !== expected.length ||
    !crypto.timingSafeEqual(Buffer.from(expected), Buffer.from(given))) {
  return res.status(401).end();
}

Doğrulama · PHP / Laravel

$expected = 'sha256='.hash_hmac('sha256', $request->getContent(), config('services.kolayzeka.webhook_secret'));

abort_unless(hash_equals($expected, (string) $request->header('X-KolayZeka-Signature')), 401);
  • 2xx dönün. Diğer yanıtlar ve ağ hataları 30 sn arayla en çok 5 kez yeniden denenir.
  • Aynı iş için birden fazla gelebilir: data.id ile tekilleştirin.
  • Özel / iç ağ / bulut-metadata adresleri reddedilir (422 invalid_webhook_url).

Hatalar

Her hata aynı şekildedir: { success: false, code, error, … }. Kodunuzu code'a göre yazın; error insan için mesajdır.

HTTPcodeNe zaman
400
invalid_modeModelin şu an çalıştırılabilir bir modu yok (geçici; başka model deneyin).
401
unauthenticatedBearer token yok, geçersiz ya da iptal edilmiş.
402
insufficient_creditsBakiye yetmiyor. Yanıtta balance (bakiye) ve required (gereken) var.
403
forbiddenBu kaynağa erişim yetkiniz yok.
404
not_foundModel / uygulama / iş yok, aktif değil ya da size ait değil.
405
method_not_allowedEndpoint bu HTTP metodunu kabul etmiyor.
422
validation_failedGirdi şemaya uymuyor. errors alanı: alan → mesajlar.
422
invalid_webhook_urlwebhook_url https değil, çözümlenmiyor ya da özel / iç ağ adresi.
429
rate_limitedHız sınırı aşıldı. retry_after saniye sonra tekrar deneyin.
500
server_errorBeklenmeyen hata. Tekrar denemeden önce listeden (GET /api/generations) işin oluşup oluşmadığına bakın.

402 örneği

{
  "success": false,
  "code": "insufficient_credits",
  "error": "Yetersiz kredi. Bakiye: 40, Gerekli: 55",
  "balance": 40,
  "required": 55
}

422 örneği

{
  "success": false,
  "code": "validation_failed",
  "error": "Doğrulama başarısız oldu.",
  "errors": {
    "quality": [
      "`quality` alanı şunlardan biri olmalıdır: low, medium, high."
    ]
  }
}