> ## Documentation Index
> Fetch the complete documentation index at: https://docs.runflow.io/llms.txt
> Use this file to discover all available pages before exploring further.

# Nano Banana Pro

> Nano Banana Pro is Google's new state-of-the-art image generation and editing model

<Info>
  Pricing: **\$0.15/image**. Endpoint: `POST /v1/models/google/nano-banana-pro/runs`.
</Info>

Nano Banana Pro is Google's new state-of-the-art image generation and editing model

## Overview

* **Endpoint**: [https://api.runflow.io/v1/models/google/nano-banana-pro/runs](https://api.runflow.io/v1/models/google/nano-banana-pro/runs)
* **Model ID**: google/nano-banana-pro
* **Provider**: Google
* **License**: commercial
* **Last Updated**: 2026-04-13

## Pricing

* **Base price**: \$0.15/image
* **Note**: Usage-based, per image

# Nano Banana Pro API

**Endpoint:** `POST /v1/models/google/nano-banana-pro/runs`

## Run the model

### Python

```python theme={"dark"}
import requests

response = requests.post(
    "https://api.runflow.io/v1/models/google/nano-banana-pro/runs",
    headers={"Authorization": "Bearer RUNFLOW_API_KEY"},
    json={
        "input": {
            "prompt": "A cathedral made entirely of stained glass, viewed from inside looking up at the rose window ceiling. Sunlight streams through panels depicting vineyard scenes with grapes and golden wheat. The floor reflects rainbow light patterns. Photorealistic, shot on medium format camera, golden hour"
        },
        "callback_url": "https://your-server.com/webhook"
    },
)

data = response.json()
print(data)
```

### Node.js

```javascript theme={"dark"}
const response = await fetch(
  "https://api.runflow.io/v1/models/google/nano-banana-pro/runs",
  {
    method: "POST",
    headers: {
      "Authorization": "Bearer RUNFLOW_API_KEY",
      "Content-Type": "application/json",
    },
    body: JSON.stringify({
        "input": {
            "prompt": "A cathedral made entirely of stained glass, viewed from inside looking up at the rose window ceiling. Sunlight streams through panels depicting vineyard scenes with grapes and golden wheat. The floor reflects rainbow light patterns. Photorealistic, shot on medium format camera, golden hour"
        },
        "callback_url": "https://your-server.com/webhook"
    }),
  }
);

const data = await response.json();
console.log(data);
```

### cURL

```bash theme={"dark"}
curl -X POST https://api.runflow.io/v1/models/google/nano-banana-pro/runs \
  -H "Authorization: Bearer $RUNFLOW_API_KEY" \
  -H "Content-Type: application/json" \
  --data-binary @- <<'JSON'
{
    "input": {
        "prompt": "A cathedral made entirely of stained glass, viewed from inside looking up at the rose window ceiling. Sunlight streams through panels depicting vineyard scenes with grapes and golden wheat. The floor reflects rainbow light patterns. Photorealistic, shot on medium format camera, golden hour"
    },
    "callback_url": "https://your-server.com/webhook"
}
JSON
```

## Request parameters

| Parameter      | Type           | Required | Description                                                 |
| -------------- | -------------- | -------- | ----------------------------------------------------------- |
| `input`        | object         | required | Model input parameters. See "Input schema" below.           |
| `callback_url` | string \| null | optional | Webhook URL - POSTed when the run reaches a terminal state. |
| `metadata`     | object \| null | optional | Arbitrary key-value pairs attached to the run.              |

## Input schema

| Field               | Type    | Required | Allowed values               | Description                                                                                                                                                                                           |
| ------------------- | ------- | -------- | ---------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `prompt`            | string  | required | Any                          | The text prompt to generate an image from.                                                                                                                                                            |
| `aspect_ratio`      | string  | optional | Any                          | The aspect ratio of the generated image.                                                                                                                                                              |
| `enable_web_search` | boolean | optional | Any                          | 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.                                                          |
| `resolution`        | string  | optional | `1K`, `2K`, `4K`             | The resolution of the image to generate.                                                                                                                                                              |
| `num_images`        | integer | optional | Any                          | The number of images to generate.                                                                                                                                                                     |
| `output_format`     | string  | optional | `jpeg`, `png`, `webp`        | The format of the generated image.                                                                                                                                                                    |
| `sync_mode`         | boolean | optional | Any                          | If `True`, the media will be returned as a data URI and the output data won't be available in the request history.                                                                                    |
| `safety_tolerance`  | string  | optional | `1`, `2`, `3`, `4`, `5`, `6` | The safety tolerance level for content moderation. 1 is the most strict (blocks most content), 6 is the least strict.                                                                                 |
| `seed`              | integer | optional | Any                          | The seed for the random number generator.                                                                                                                                                             |
| `limit_generations` | boolean | optional | Any                          | 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. |

## Output schema

| Field           | Type | Description                                                                                         |
| --------------- | ---- | --------------------------------------------------------------------------------------------------- |
| `outputs`       | json | Unified output array - one entry per generated artifact with url/type/width/height/duration/etc.    |
| `model_data`    | json | Model-specific extra fields (prompt, description, actual\_prompt, masks, etc.) keyed by field name. |
| `nsfw_detected` | json | true if the provider flagged output as NSFW, false if cleared, null if not checked.                 |
| `seed`          | json | Deterministic seed used for generation, or null if the provider doesn't return one.                 |
| `timing`        | json | Provider timing info (inference\_ms etc.), or null.                                                 |

## Callback payload

When you provide a `callback_url`, Runflow POSTs to it once the run reaches a terminal state.

| Field          | Type           | Description                                                    |
| -------------- | -------------- | -------------------------------------------------------------- |
| `event`        | string         | Event type: "run.completed", "run.failed", or "run.cancelled". |
| `run_id`       | string         | The unique identifier of the run.                              |
| `status`       | string         | Terminal status: "succeeded", "failed", or "cancelled".        |
| `output`       | object \| null | The run output. Null if the run failed or was cancelled.       |
| `duration_ms`  | number \| null | Total run duration in milliseconds.                            |
| `created_at`   | string \| null | ISO 8601 timestamp when the run was created.                   |
| `completed_at` | string \| null | ISO 8601 timestamp when the run reached terminal state.        |
| `metadata`     | object \| null | The metadata object passed at run creation, if any.            |

* **Retries:** 3 attempts with exponential backoff (1s, 2s). Retries on 5xx / network errors only.
* **Headers:** `Runflow-Request-Id` is always sent. `Runflow-Signature` is sent if a signing secret is configured.

## Additional Resources

* [Playground](https://app.runflow.io/models/google/nano-banana-pro)
* [API Reference](https://app.runflow.io/models/google/nano-banana-pro?tab=api)
* [Documentation](https://docs.runflow.io)
* [OpenAPI](https://docs.runflow.io/api/openapi.public.json)

## Related

<CardGroup cols={2}>
  <Card title="Browse all models" icon="grid" href="/models">Browse the catalog.</Card>
  <Card title="Run lifecycle" icon="play" href="/concepts/runs">Callbacks, polling, statuses.</Card>
  <Card title="Callbacks" icon="webhook" href="/concepts/callbacks">Handle async results.</Card>
  <Card title="Pricing" icon="coin" href="/concepts/pricing">How requests bill out.</Card>
</CardGroup>
