What you’ll learn
- Does nano-banana-pro bill per image or per token?
- Can I send nano-banana-pro edits to /v1/images/edits?
- Is a failed image task charged?
- Does the resolution I choose change the nano-banana-pro price?
- Which field proves what I was actually charged?
A cheap-looking image model can still produce a surprising invoice if you misread its billing unit. Nano Banana Pro API pricing on TokenLab is a good example. nano-banana-pro lists a per-image price, while its Gemini-named neighbors gemini-3-pro-image and gemini-3.1-flash-image list per-token prices. This guide puts those entries side by side, works through a batch estimate, and shows the two request shapes you will actually send. It also explains how to confirm the final charge. Every number comes from TokenLab's live model API and docs, observed on 2026-10-03.
Key Takeaways
nano-banana-prolists a base price of USD 0.067 per image, with a listed range of 0.067 to 0.12 across its price entries (live model API, observed 2026-10-03).nano-banana-2lists 0.0335 per image andnano-banana-2-litelists 0.0168, so Pro's base price is about double the first and four times the second.gemini-3-pro-imageandgemini-3.1-flash-imageare token-priced, so a per-image budget formula does not apply to them.- Nano Banana reference-image requests go to
/v1/images/generationswithoperation: "image-to-image", not to/v1/images/edits. - The final charge lives in Usage and in
billing_transaction_id, not in your estimate. - This guide has no benchmark data, so it makes no claim that Pro output looks better than the cheaper IDs.
Nano Banana Pro API pricing at a glance
We read the catalog entries for five image models and put them in one table. The price block for nano-banana-pro says "has additional price entries", and we did not find an itemized per-resolution breakdown in the evidence. So the table shows what is listed and no more.
| Model ID | Pricing unit | Listed price entries (USD) | Source | Observed |
|---|---|---|---|---|
nano-banana-pro |
per_image | Base per_request 0.067; range summary 0.067 to 0.12; text-output entry native-gemini-text-output-20260723 (per_token): input 1, output 6 |
live model API | 2026-10-03 (pricing updated 2026-10-02T16:53:30.068Z) |
nano-banana-2 |
per_image | Base per_request 0.0335; range 0.0225 to 0.0755; text-output entry (per_token): input 0.25, output 1.5 |
live model API | 2026-10-03 |
nano-banana-2-lite |
per_image | Base per_request 0.0168; single range value 0.0168; entry google-1k (1k, text-to-image and image-to-image): 0.0168 |
live model API | 2026-10-03 |
gemini-3-pro-image |
per_token | Input 1 and output 6 per 1M for text output; image-output entry: 60 | live model API | 2026-10-03 |
gemini-3.1-flash-image |
per_token | Input 0.25 and output 1.5 per 1M for text output; image-output entry: 30 | live model API | 2026-10-03 |
Two details in the table are easy to miss.
- The catalog says
nano-banana-proimage output "keeps the existing per-image resolution tiers". It does not say which tier maps to 0.067 and which maps to 0.12. ReadGET /v1/models/nano-banana-pro/pricingfor that mapping before you commit a budget, as the billing guide advises. - The text-output entry on
nano-banana-prois token-priced. Treat it as a separate line item from the per-image charge, and check whether your requests ever produce text output.
The billing docs also warn against hard-coding copied price tables. Our table is a dated snapshot, and your code should read the price when it needs one.
Working a batch estimate
Imagine a team that generates 200 product images in one run. We multiplied the listed prices to see the spread. These are estimates, not quotes.
| Model | Working | Estimate (USD) |
|---|---|---|
nano-banana-pro, base price |
200 × 0.067 | 13.40 |
nano-banana-pro, top of listed range |
200 × 0.12 | 24.00 |
nano-banana-2, base price |
200 × 0.0335 | 6.70 |
nano-banana-2, top of listed range |
200 × 0.0755 | 15.10 |
nano-banana-2-lite |
200 × 0.0168 | 3.36 |
Now add regeneration. If the team rejects 20% of results and redoes them on nano-banana-pro at the base price, that is 40 extra images. The total becomes 240 × 0.067 = 16.08, again an estimate. The async docs say a failed task is not charged, but a retry of a failed generation creates a new task and may create a new charge. Retries that succeed are billed like any other completed image.
The spread between 13.40 and 24.00 is the real uncertainty. It comes from the price entries we cannot map to resolutions from the evidence alone. Run a small test batch at your target resolution, then compare the Usage record with the arithmetic above.
When to pick nano-banana-pro over the cheaper IDs
Documented differences are thinner than you might hope. Here is what the docs and catalog support.
- Selectors.
nano-banana-proandnano-banana-2both supportaspect_ratioplusresolution(1k,2k,4k) for text-to-image and image-to-image. Fornano-banana-2-lite, the only price entry we found is at1k, and its accepted request formats are "not listed" in the catalog. If you need 2k or 4k output, we found no documented support for it on Lite. - Delivery.
nano-banana-prolists both TokenLab Verified and Official delivery as available for both operations.gemini-3-pro-imagelists Verified only. - Price. Pro's base price is 0.067, against 0.0335 and 0.0168. The catalog gives no reason beyond that for the gap.
- Lifecycle. All three show an active lifecycle stage with no replacement model and no deprecation date. The source article called
nano-bananaandnano-banana-editdeprecated, but we found no evidence of that, so we dropped the claim. Check the model page before you rely on either ID.
What we did not benchmark matters more than the list above. We have no image-quality, prompt-adherence, text-rendering, or latency data for any of these models. So we cannot say Pro looks better than nano-banana-2. A sound approach is to render the same 20 prompts on each candidate and compare the outputs by eye. Then compare the cost per accepted image in Usage. That is the method the billing docs suggest as well: the lowest listed price is not always the lowest cost per completed task.
One generation request and one edit request
Both calls below use POST /v1/images/generations. The image generation guide says Nano Banana-style reference generation does not belong on /v1/images/edits. Always send model explicitly, because image APIs have no default.
Text-to-image, using the fields the Create Image reference lists for Google image families:
curl -X POST "https://api.tokenlab.sh/v1/images/generations" \
-H "Authorization: Bearer sk-your-api-key" \
-H "Content-Type: application/json" \
-d '{
"model": "nano-banana-pro",
"prompt": "A cinematic portrait of a white cat sitting on a rainy windowsill",
"aspect_ratio": "16:9",
"resolution": "2k"
}'
Edit, meaning reference-image generation with operation: "image-to-image" and image_urls:
curl -X POST "https://api.tokenlab.sh/v1/images/generations" \
-H "Authorization: Bearer sk-your-api-key" \
-H "Content-Type: application/json" \
-d '{
"model": "nano-banana-pro",
"operation": "image-to-image",
"prompt": "Keep the product shape, change the background to a bright studio setup",
"image_urls": ["https://example.com/input/product.png"],
"aspect_ratio": "1:1",
"resolution": "2k"
}'
Some rules from the docs, observed 2026-10-03:
- Reference URLs must be public
httporhttps. Avoid private network URLs, embedded credentials, fragments, and signed URLs that may expire before processing starts. - For a private or header-protected source image, send a multipart
imagefile instead ofimage_urls. images[]andfile_idare not accepted on this endpoint.- Set your HTTP client timeout to at least 120 seconds. If the response carries
status: "pending",task_id, orpoll_url, followpoll_urlinstead of waiting. - Poll with
GET /v1/tasks/{id}. The async jobs guide suggests checking every 5 to 10 seconds, and stopping atcompletedorfailed.
Save the returned URL, task ID, model, and your own job ID. Eligible result URLs may be retained as media copies for 30 days, and media_retention.items shows each item's status and expires_at.
Confirming the final charge
An estimate is only a plan. The billing docs describe where the real number appears.
- Reserve and release. Some async tasks reserve the estimated cost at creation. A completed task is charged once. A failed task releases or refunds the pending amount.
- Read the transaction ID. Non-streaming responses include
billing_transaction_idwhen billing finishes before the response is sent. The same value may appear in theX-Billing-Transaction-IDheader. Async tasks include it after completion. - Open Usage. The Usage page shows history by model and a cost breakdown. Compare it with your estimate.
- Keep the IDs together. Store
request_id,task_id,billing_transaction_id, and your own job ID in one record. - Escalate with evidence. If Usage shows no final charge or released amount after the task finishes, email support@tokenlab.sh with the Request ID and task ID.
Delivery option also affects price. Verified uses TokenLab public prices, Official uses a price layer based on the maker's public price, and Auto tries Verified first. You pay for the option that completes the request, so note which one served your test batch.
FAQ
Does nano-banana-pro bill per image or per token?
The base entry is per image: per_request 0.067 with unit per_image. The catalog also lists a text-output entry priced per token, at input 1 and output 6. Check the pricing endpoint to see which entry your request types trigger.
Can I send nano-banana-pro edits to /v1/images/edits?
No. The docs say Nano Banana reference-image requests, including nano-banana-pro, belong on /v1/images/generations with operation: "image-to-image" and image_urls. The edits endpoint is documented for models such as gpt-image-2.
Is a failed image task charged?
The billing guide says a failed task is not charged, and any reserved amount is released or refunded. A retry creates a new task and may create a new charge. Deduplicate by your own job ID so a timeout does not trigger a second create request.
Does the resolution I choose change the nano-banana-pro price?
The catalog says image output keeps per-image resolution tiers, and its listed range runs from 0.067 to 0.12. The evidence does not map tiers to 1k, 2k, or 4k. Read GET /v1/models/nano-banana-pro/pricing and confirm with a test request in Usage.
Which field proves what I was actually charged?
Use billing_transaction_id, or the X-Billing-Transaction-ID header, and match it to the record in Usage. Streaming can finish before billing does, so Usage is the fallback when the header is absent.
To compare these IDs with other image models on your own prompts, start from the Models directory.
Sources
Prices checked 2026-10-03
- TokenLab Docs: Image generationSources checked 2026-10-03
- TokenLab Docs: Create ImageSources checked 2026-10-03
- TokenLab Docs: Edit ImageSources checked 2026-10-03
- TokenLab Docs: Async jobs and pollingSources checked 2026-10-03
- TokenLab Docs: Billing and pricingSources checked 2026-10-03
- TokenLab live model API: nano-banana-proSources checked 2026-10-03
- TokenLab live model API: nano-banana-2Sources checked 2026-10-03
- TokenLab live model API: nano-banana-2-liteSources checked 2026-10-03



