Nano Banana 2 Billing: 1,120 Tokens Flat, and the Pro Surcharge Nobody Documents
Measured on the live endpoint: Nano Banana 2 bills exactly 1,120 tokens whatever you prompt, Nano Banana Pro adds reasoning tokens that scale with prompt length, and asking for 512px silently costs you 1.5x.
Nano Banana 2 bills exactly 1,120 tokens for a 1K image, and that number does not move no matter what you prompt. Its sibling Nano Banana Pro does move — it adds reasoning tokens that scale with prompt length, on top of the same fixed image tokens. That difference is the source of a long-running billing confusion, and it is not in either model’s documentation.
Everything below was measured against the live endpoint on 7 September 2026.
Nano Banana 2: google/gemini-3.1-flash-image
Nano Banana 2 Lite: google/gemini-3.1-flash-lite-image
Nano Banana Pro: google/gemini-3-pro-image
Endpoints: /v1/images/generations, /v1/chat/completions
Image tokens: 1,120 at 1K · 1,680 at 2K · 2,520 at 4K
Reasoning tokens: none on 2 and Lite · 223–377 measured on Pro
Rate: $60 per 1M output image tokens (Nano Banana 2)
The Measurement
Two prompts against google/gemini-3.1-flash-image — one of eight tokens, one of fifty-one — produced identical billing:
| Prompt | prompt_tokens | completion_tokens | image_tokens | reasoning_tokens |
|---|---|---|---|---|
| ”A single red apple on a white table” | 8 | 1,120 | 1,120 | none |
| 51-token architectural prompt | 51 | 1,120 | 1,120 | none |
The output side is a constant. Prompt length changes what you pay on input, which at $0.50 per million is rounding error, and nothing else.
Now the same test on google/gemini-3-pro-image:
| Prompt | image_tokens | reasoning_tokens | output_tokens |
|---|---|---|---|
| ”red apple” | 1,120 | 223 | 1,343 |
| 30-word architectural prompt | 1,120 | 377 | 1,497 |
Pro’s image half is fixed and its reasoning half is not. A longer prompt bought 69% more reasoning tokens. This is why a per-image price computed from the token table alone always understates Pro, and never understates Nano Banana 2.
If you have been trying to reconcile an image bill against a quoted per-image figure, that is the reconciliation: check output_tokens_details and see which of the two fields is present.
{"output_tokens": 1343,
"output_tokens_details": {"image_tokens": 1120, "reasoning_tokens": 223},
"total_tokens": 1357}
The 512px Trap
Asking for the cheapest tier does not get you the cheapest tier. We passed size: "512x512", decoded the returned PNG, and measured the actual pixels:
| Requested | Actual output | Billed tokens |
|---|---|---|
512x512 | 1024×1024 | 1,120 |
1024x1024 | 1024×1024 | 1,120 |
2048x2048 | 2048×2048 | 1,680 |
4096x4096 | 4096×4096 | 2,520 |
The three larger sizes are honoured exactly and bill exactly as Google’s token table says. The 512 request is silently upgraded. Google’s table prices a 0.5K image at 747 tokens; you get 1,120 instead, so a draft you budgeted at $0.0448 costs $0.0672 — 1.5x.
The lever that does work is the model. google/gemini-3.1-flash-lite-image returned the same 1,120 tokens at half the rate, $0.0336 per image. For draft-and-select workflows, switch model rather than shrinking size.
What It Actually Costs
Computed from the measured token counts at the live catalog rates:
| Model | 1K | 2K | 4K |
|---|---|---|---|
gemini-3.1-flash-lite-image | $0.0336 | — | — |
gemini-3.1-flash-image | $0.0672 | $0.1008 | $0.1512 |
gemini-3-pro-image | ~$0.137 | — | — |
Pro is quoted as approximate on purpose: $0.1344 of it is fixed image tokens and the rest is reasoning, which moved between $0.0027 and $0.0045 across our two prompts. It is the only model of the three whose per-image cost you cannot state as a single number.
These match Google’s own list at every tier — 1,120 × $60/M is $0.0672, and so on. The rate card is not where the surprises are; output_tokens_details is.
Calling It
curl -X POST https://api.ofox.ai/v1/images/generations \
-H "Authorization: Bearer $OFOX_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "google/gemini-3.1-flash-image",
"prompt": "A single red apple on a white table",
"size": "1024x1024"
}'
Returns data[0].b64_json. Read usage.output_tokens_details on the response and you will know your real per-image cost immediately, rather than inferring it from a pricing page.
Use /v1/images/generations, not /v1/chat/completions. The chat route accepts these models and returns HTTP 200 with finish_reason: "stop" — and no image. We measured content of length zero with no images key on the message, while still being billed the full 1,120 tokens. It looks like a successful call and costs like one.
The Error Bodies
Captured live, so you can match them exactly:
Marketing name instead of model ID. “Nano Banana 2” is not a callable string:
{"error":{"message":"Model 'google/nano-banana-2' not found","type":"model_not_found","code":404}}
Missing prompt:
{"error":{"code":null,"message":"prompt cannot be empty","param":null,"type":"invalid_request_error"}}
Batching. n: 2 fails with an upstream Google error that leaks through the gateway:
{"error":{"message":"Invalid JSON payload received. Unknown name \"numberOfImages\" at 'generation_config.image_config': Cannot find field.","type":"INVALID_ARGUMENT"}}
There is no batch parameter on this route. Loop over single requests.
A size the model will not take returns a generic api_error rather than a validation message, so if you get “An error occurred while processing your request” on an image call, suspect your size string before anything else.
What to Take Away
- On Nano Banana 2, prompt length is free on the output side. Write the long prompt. It costs the same 1,120 tokens as the short one.
- On Nano Banana Pro, prompt length is not free. Budget it as a range, not a number, and read
reasoning_tokensbefore scaling. - Do not use
sizeas a cost lever below 1K. Use Lite. - Alarm on
usage, not on the rate card. Both facts above are visible inoutput_tokens_detailson every response and invisible in any pricing table.
Related
- GPT Image 2 release guide — the other flagship image model, with a different billing shape again.
- GPT Image 2 generation failures — error handling on the OpenAI image route.
- Qwen 3.8 Flash reasoning tokens — the same reasoning-token billing trap on the language side, where a low ceiling returns empty content you still pay for.
Sources
- https://ofox.ai/models/google/gemini-3.1-flash-image
- https://ai.google.dev/gemini-api/docs/pricing
- https://discuss.ai.google.dev/t/i-am-confused-on-pricing-for-nano-banana-pro-i-am-getting-2000-output-tokens-instead-of-1120-for-a-1k-image/121299
Model IDs, rates and endpoints were read from the live Ofox /v1/models endpoint on 7 September 2026. Token counts are from live /v1/images/generations and /v1/chat/completions calls the same day: four sizes and two prompt lengths against google/gemini-3.1-flash-image, two prompt lengths against google/gemini-3-pro-image, and one call each against google/gemini-3.1-flash-lite-image. Output dimensions were verified by decoding the returned PNG and reading the IHDR header rather than trusting the request. Error bodies are quoted verbatim from live responses. This is a small sample on one route on one day, not a specification — re-run it on your own account before building a cost model on it, and expect undocumented behaviour like the 512px upgrade to change without notice. The linked Google forum thread reports a related discrepancy on Google’s direct API that was still open when last updated in March 2026; we did not reproduce that thread’s numbers and are not claiming its cause.
Frequently Asked Questions
- How many tokens does Nano Banana 2 use per image?
- Exactly 1,120 for a 1K image, and it does not move with prompt complexity. We sent an eight-token prompt and a fifty-one-token prompt to google/gemini-3.1-flash-image and both returned completion_tokens 1120 with output_tokens_details.image_tokens 1120 and no reasoning tokens at all. The tiers are 1,120 at 1K, 1,680 at 2K and 2,520 at 4K, which matches Google's published token table.
- Why is my Nano Banana Pro image costing more than the quoted price?
- Because Pro adds reasoning tokens on top of the fixed image tokens, and Nano Banana 2 does not. On google/gemini-3-pro-image we measured output_tokens_details of image_tokens 1120 plus reasoning_tokens 223 on a short prompt and 377 on a long one. The image half is fixed; the reasoning half scales with your prompt, so a per-image price quoted from the token table alone will always understate Pro.
- Does Nano Banana 2 charge thinking tokens?
- Not on the requests we measured. Across four sizes and two prompt lengths, google/gemini-3.1-flash-image returned output_tokens_details containing image_tokens only, with no reasoning_tokens field. Its sibling google/gemini-3-pro-image returned reasoning_tokens on every call. If you are being billed for thinking on an image model, check which of the two you are actually calling.
- Why does asking for 512x512 not make Nano Banana 2 cheaper?
- Because the request is served at 1024x1024 anyway and billed at 1,120 tokens. We passed size 512x512, decoded the returned PNG and measured 1024x1024. Google's own token table prices a 0.5K image at 747 tokens, so a request you expected to cost $0.0448 costs $0.0672 instead, about 1.5x. If you want a cheap draft tier, switch model rather than shrinking size.
- What is the model ID for Nano Banana 2?
- google/gemini-3.1-flash-image on Ofox. The marketing name Nano Banana 2 is not a valid string and returns {"error":{"message":"Model 'google/nano-banana-2' not found","type":"model_not_found","code":404}}. Nano Banana Pro is google/gemini-3-pro-image and the cheap tier is google/gemini-3.1-flash-lite-image.
- How much does Nano Banana 2 cost per image?
- At $60 per million output image tokens, the measured token counts give $0.0672 at 1K, $0.1008 at 2K and $0.1512 at 4K. Nano Banana 2 Lite is half that at 1K, $0.0336, for the same 1,120 tokens at a $30 per million rate. Nano Banana Pro lands near $0.137 once its reasoning tokens are counted.
- Can I request more than one image per call?
- Not on this route. Passing n greater than 1 fails with an upstream Google error, Invalid JSON payload received. Unknown name "numberOfImages" at 'generation_config.image_config': Cannot find field. Loop over single requests instead.


