API
API
Nano Banana 2 API
ImageNano Banana 2 API combines real-time world knowledge with advanced reasoning to deliver stronger prompt understanding and more accurate visual results. Generate consistent multi-subject images in native 4K, support flexible aspect ratios, and create polished global typography across complex compositions. Integrate Nano Banana 2 API to build smarter, high-quality image workflows at scale.
Body
application/jsonmodelstringrequirednano-banana-2input.promptstringrequiredDescribe the image to create, or the changes to make to your reference images. Whitespace is trimmed.
Maximum length: 5,000 characters
input.imagesstring[]optionalOptional reference image URLs. Use publicly accessible HTTPS URLs only. Omit for text-to-image.
Maximum items: 14
input.aspect_ratiostringoptionalOutput width-to-height ratio. Auto lets the model choose.
Default: auto
input.resolutionstringoptionalOutput resolution tier; Omit or leave empty to use the default.
Default: 2k
Request examples
POST /api/v1/createcurl -X POST https://nanobanana.io/api/v1/create \
-H "Authorization: Bearer sk_live_your_api_key" \
-H "Content-Type: application/json" \
-d '{
"model": "nano-banana-2",
"input": {
"prompt": "A cinematic product photo of a futuristic banana-shaped camera",
"aspect_ratio": "1:1",
"resolution": "2k"
}
}'POST /api/v1/create · HTTP 201{
"data": {
"task_id": "task_example",
"model": "nano-banana-2",
"status": "processing",
"credits": 30
}
}Poll this endpoint using the returned task ID until the task is completed or failed. We recommend polling every 5 seconds to check the latest task status.
POST /api/v1/check{
"task_id": "task_example"
}Response
Task status returned by POST /api/v1/check. The IDs, URLs, and timestamps below are illustrative.
idstringrequiredTask identifier in data.id, matching the task_id used in the check request.
statusstringrequiredfailed_reasonstringoptionalOnly returned when status is failed, to explain the failure. This field is omitted for completed and processing.
Completed · completed
The download URLs are in data.data.results.
POST /api/v1/check · HTTP 200{
"data": {
"id": "task_example",
"created_at": 1791244800,
"model": "nano-banana-2",
"status": "completed",
"data": {
"results": [
"https://example.com/generated.png"
],
"processing_time": 18
}
}
}Other statuses
For processing or failed, data.data is null. This example shows failed: only failed includes failed_reason. Continue polling for processing; stop polling for failed.
POST /api/v1/check · HTTP 200{
"data": {
"id": "task_example",
"created_at": 1791244800,
"model": "nano-banana-2",
"status": "failed",
"data": null,
"failed_reason": "Generation failed."
}
}Credit usage
Credits consumed for a request generating one image.
| Resolution | 1K | 2K | 4K |
|---|---|---|---|
| Single image | 20 | 30 | 40 |
Optional parameters omitted: 20 credits
Set the listed input parameters explicitly to use the corresponding rate. Requests generating multiple images may consume more credits.
The credits field returned by POST /api/v1/create shows the amount charged for the task.
