Model guide

Nano Banana Pro API: price per image and working code

Nano Banana Pro is Google's Gemini 3 Pro Image model, known for legible text in images and for combining many input images into one. Here is what it accepts, what an image costs, and how to call it.

What Nano Banana Pro is good at

Google released Nano Banana Pro, its Gemini 3 Pro Image model, in November 2025. Use it when the picture has to carry words or combine several sources:

  • Text in images. Posters, packaging, menus, infographics and interface mockups, where the headline has to be legible.
  • Many inputs in one image. Up to 14 input images: a product, a logo, a model, a location and a style reference can all go into a single request.
  • Precise edits. Change the background, the colour of one object or the time of day while the rest of the image stays as it was.
  • Large output. 1K, 2K and 4K, in 10 aspect ratios.

No image model is perfect with text. Short headlines are the most reliable; long paragraphs and small print are harder. Proofread every image before you publish it.

Inputs and limits

OptionNano Banana Pro
Model idnano-banana-pro
Taskstext to image and image editing
Resolution1K, 2K and 4K
Aspect ratio1:1, 16:9, 9:16, 4:3, 3:4, 3:2, 2:3, 5:4, 4:5 and 21:9
Input imagesone image to edit as image_url, or up to 14 as image_urls
Routesone route

The request format is the same as for video models, without duration and audio. A value the model does not support is rejected with a 422 before anything is charged.

Nano Banana Pro pricing (October 2026)

Nano Banana Pro is billed per generated image. These are the catalogue prices in October 2026:

Nano Banana Pro price per image
ResolutionPer image100 images1,000 images
1K$0.04$4.00$40.00
2K$0.04$4.00$40.00
4K$0.04$4.00$40.00

When you submit a job, its price is held from your prepaid balance and charged only when the image is delivered. If the job fails, the hold is released. The exact charge comes back as cost_usd. Credit packs start at $10; see the pricing page.

Other Nano Banana models

Google's lighter Nano Banana models are on Revana too, under the same key. Nano Banana 2 is Gemini 3.1 Flash Image, released in February 2026; the original Nano Banana is Gemini 2.5 Flash Image.

Nano Banana models compared
ModelResolutionAspect ratiosFrom / imageRoutes
Nano Banana Pro1K, 2K and 4K10$0.04one route
Nano Banana 20.5K, 1K, 2K and 4K14$0.03two routes
Nano Banana 2.11K, 2K and 4K14$0.03three routes
Nano Banana 2 Lite1K10$0.02two routes
Nano Banananot listednot listed$0.03one route

Generate an image with Nano Banana Pro

Send POST /v1/generations with "model": "nano-banana-pro" and a prompt. Image jobs usually finish in seconds, but the flow is the same as for video: submit, get a 202 with an id, then poll. This 2K poster costs $0.04.

cURL
export REVANA_API_KEY="sr_live_..."

# 1. Submit the job (returns 202 with the generation id)
curl https://api.revana.si/v1/generations \
  -H "Authorization: Bearer $REVANA_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "nano-banana-pro",
    "input": {
      "prompt": "A minimalist concert poster for a jazz night. Large headline at the top in a bold condensed sans-serif: \"BLUE HOUR SESSIONS\". Below it, smaller: \"Friday 8 PM, Harbour Hall\". A saxophone drawn in thin gold lines on a deep navy background.",
      "resolution": "2K",
      "aspect_ratio": "4:5"
    },
    "max_cost_usd": 0.1
  }'

# 2. Poll with the id from step 1 until status is "succeeded" or "failed"
curl https://api.revana.si/v1/generations/gen_01JBX7Q2M4 \
  -H "Authorization: Bearer $REVANA_API_KEY"
Python
import os
import time

import requests

API = "https://api.revana.si/v1"
HEADERS = {"Authorization": f"Bearer {os.environ['REVANA_API_KEY']}"}

resp = requests.post(f"{API}/generations", headers=HEADERS, json={
    "model": "nano-banana-pro",
    "input": {
        "prompt": "A minimalist concert poster for a jazz night. Large headline at the top in a bold condensed sans-serif: \"BLUE HOUR SESSIONS\". Below it, smaller: \"Friday 8 PM, Harbour Hall\". A saxophone drawn in thin gold lines on a deep navy background.",
        "resolution": "2K",
        "aspect_ratio": "4:5",
    },
    "max_cost_usd": 0.1,
})
resp.raise_for_status()
job = resp.json()

while job["status"] in ("queued", "running"):
    time.sleep(5)
    job = requests.get(f"{API}/generations/{job['id']}", headers=HEADERS).json()

if job["status"] == "succeeded":
    print(job["output"]["urls"], job["cost_usd"])
else:
    print("Failed:", job["error"])
Node.js
// Node 18 or later. Save as generate.mjs and run: node generate.mjs
const API = "https://api.revana.si/v1";
const headers = {
  Authorization: `Bearer ${process.env.REVANA_API_KEY}`,
  "Content-Type": "application/json",
};

const res = await fetch(`${API}/generations`, {
  method: "POST",
  headers,
  body: JSON.stringify({
    model: "nano-banana-pro",
    input: {
      prompt: "A minimalist concert poster for a jazz night. Large headline at the top in a bold condensed sans-serif: \"BLUE HOUR SESSIONS\". Below it, smaller: \"Friday 8 PM, Harbour Hall\". A saxophone drawn in thin gold lines on a deep navy background.",
      resolution: "2K",
      aspect_ratio: "4:5",
    },
    max_cost_usd: 0.1,
  }),
});
if (!res.ok) throw new Error(`${res.status} ${await res.text()}`);
let job = await res.json();

while (job.status === "queued" || job.status === "running") {
  await new Promise((r) => setTimeout(r, 5000));
  job = await (await fetch(`${API}/generations/${job.id}`, { headers })).json();
}

if (job.status === "succeeded") console.log(job.output.urls, job.cost_usd);
else console.error("Failed:", job.error);

The finished generation holds the image link in output.urls. Download it promptly: output links expire.

Response
{
  "id": "gen_01JC3PZK8R",
  "model": "nano-banana-pro",
  "status": "succeeded",
  "output": {
    "urls": [
      "https://cdn.revana.si/g/gen_01JC3PZK8R/0.png"
    ]
  },
  "cost_usd": 0.04,
  "attempts": 1,
  "error": null,
  "created_at": "2026-10-19T14:02:11Z",
  "completed_at": "2026-10-19T14:02:29Z"
}

Edit one image

Pass the image to change as image_url and describe the edit, including what must stay the same.

Request body
{
  "model": "nano-banana-pro",
  "input": {
    "prompt": "Change the season to winter: snow on the ground and the rooftops, a pale grey sky. Keep the house, the car and the composition exactly as they are.",
    "image_url": "https://example.com/house.jpg",
    "resolution": "2K",
    "aspect_ratio": "16:9"
  },
  "max_cost_usd": 0.1
}

Combine several images

Send up to 14 images as image_urls and refer to each by its position. This 4K product shot costs $0.04.

Request body
{
  "model": "nano-banana-pro",
  "input": {
    "prompt": "Place the perfume bottle from the first image on the marble shelf from the second image, styled like the third image: soft window light, muted greens. Keep the label text on the bottle exactly as it is.",
    "image_urls": [
      "https://example.com/bottle.jpg",
      "https://example.com/shelf.jpg",
      "https://example.com/style.jpg"
    ],
    "resolution": "4K",
    "aspect_ratio": "1:1"
  },
  "max_cost_usd": 0.1
}

Prompt tips for Nano Banana Pro

  • Quote the exact words. Put every piece of text in quotation marks and say where it goes: "headline at the top", "small print in the bottom right".
  • Describe the type. "Bold condensed sans-serif", "hand-lettered script" or "typewriter" steers the look of the lettering.
  • Lay out the page. For posters and infographics, describe the structure from top to bottom before the style.
  • Number your inputs. "The logo from the third image" is unambiguous; "the logo" is not when you send several images.
  • Say what to keep. In edits, name what must not change (faces, labels, composition) as clearly as what should.
  • Edit in steps. One change per request is easier to control than five, and a bad step is cheap to redo.

Routing and fallback

Nano Banana Pro has one route on Revana today. Where a model has more than one route, the router tries the cheapest first and moves the job on if it fails, always at the listed price. With a single route there is nothing to fall back to: if it fails, the job ends as failed and costs nothing.

Handle failed jobs in your app, for example by retrying later or offering a second model such as Nano Banana 2, which has two routes.

See every image model on the models page, the field reference in the docs, or get an API key and run the samples.

Frequently asked questions

How much does the Nano Banana Pro API cost?

In October 2026, Nano Banana Pro costs $0.04 per image at 1K, $0.04 at 2K and $0.04 at 4K. A batch of 100 images at 2K is $4.00.

What is Nano Banana Pro?

It is Google's name for Gemini 3 Pro Image, an image generation and editing model released in November 2025. It is known for legible text in images and for combining many input images.

How many input images can I send to Nano Banana Pro?

Up to 14, as image_urls. For a single image to edit, use image_url.

Which aspect ratios does Nano Banana Pro support?

The catalogue lists 1:1, 16:9, 9:16, 4:3, 3:4, 3:2, 2:3, 5:4, 4:5 and 21:9.

What is the difference between Nano Banana Pro and Nano Banana 2?

Nano Banana 2 is Gemini 3.1 Flash Image. On Revana it lists 14 aspect ratios, including very wide and very tall ones, and starts from $0.03 per image; Nano Banana Pro lists 10 and starts from $0.04.

Am I charged for an image that fails?

No. The price is held when you submit and released if the job fails. You pay only for images that are delivered.

Generate with Nano Banana Pro

One key for Nano Banana Pro, GPT Image 2 and every video model. Prepaid credit from $10, charged only for images that are delivered.