gemini-nano-banana-2.1 or google/nano-banana-2.1: which id Sume takes

Google's pricing page names the model gemini-nano-banana-2.1. Sume's image API takes google/nano-banana-2.1 and runs the old nano-banana-2 as 2.1.

5 min readSume
All posts

Send google/nano-banana-2.1 to Sume's POST /v1/images. The id gemini-nano-banana-2.1 that Google's pricing page uses is Google's own API id, not a Sume catalog id. Sume also runs the old ids nano-banana-2 and google/nano-banana-2 as Nano Banana 2.1.

Ids in play

Ids differ by API. Use the right one for the API you call.

Nano Banana ids, Google page read 2026-10-08, Sume repo as of 2026-10-08
IdWhere it is usedNote
gemini-nano-banana-2.1Google Gemini APIName on Google's pricing page
google/nano-banana-2.1Sume POST /v1/imagesCurrent catalog id
nano-banana-2.1Sume image router idShort form of the same row
google/nano-banana-2, nano-banana-2SumeRetired ids that run as 2.1

Why this matters

Google's Imagen page tells developers to migrate to Nano Banana models, naming gemini-3.1-flash-image as a Nano Banana 2 model. Those are Google ids with Google's token pricing. Sume prices per image: $0.075 at 0.5K, $0.10 at 1K, $0.15 at 2K and $0.20 at 4K. A copied Google id sent to Sume would not match a catalog row, so list the catalog first.

A startup check

Fail fast when an id you pin is missing.

import os, requests

WANT = "google/nano-banana-2.1"
r = requests.get("https://api.sume.com/v1/images/models",
                 headers={"Authorization": f"Bearer {os.environ['SUME_API_KEY']}"},
                 timeout=30)
ids = {m["id"] for m in r.json()["data"]}
if WANT not in ids:
    raise SystemExit(f"{WANT} is not in the Sume image catalog")
print("ok", WANT)

Keeping ids in config

Put the model id in an environment variable or config file, not in code. When a vendor renames a model, one config change moves you. Sume has a built-in alias for the old Nano Banana 2 id, but that is a courtesy, not a promise for every future rename.

Log the model field that comes back. Per the Sume docs, model echoes the id that you requested, so it will show the old id even when 2.1 ran. To see what actually ran, check the job record or the price: 2.1 bills at the same $0.10 per 1K image.

If you also call Google directly, keep two config keys, one for each API, so that a Google id never reaches Sume and the reverse.

Where the confusion shows up

The usual bug is a copy-paste. A developer reads Google's pricing page, copies gemini-nano-banana-2.1 and sends it to another API. The reverse also happens: a Sume id sent to Google's SDK. Both fail on the first call, which is a cheap failure, but only if the error is visible. Log the response body on any 4xx.

Another trap is quoting a price from one API against the other. Google's $0.0336 at 1K is a per-token price on Google's API, and Sume's $0.10 at 1K is a per-image price on Sume. Compare them with the gap post linked above, not by eye.

A last check is the response itself. The model echoed by Sume tells you the id you sent, not the model that ran, so for audit trails also store the price from usage.cost. At 1K that is $0.10 for Nano Banana 2.1, and a different figure would tell you that a different row served the call. Keep a small table of expected costs per id in your tests and fail the build when a number drifts.

Sources

Related posts

More in Developers

All Developers posts

Written by Sume