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.

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.
| Id | Where it is used | Note |
|---|---|---|
| gemini-nano-banana-2.1 | Google Gemini API | Name on Google's pricing page |
| google/nano-banana-2.1 | Sume POST /v1/images | Current catalog id |
| nano-banana-2.1 | Sume image router id | Short form of the same row |
| google/nano-banana-2, nano-banana-2 | Sume | Retired 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
- Gemini Omni video references: 3 clips of 3 s each, $1.31 all in
Sume's Omni route takes up to 3 reference clips of 3 s each. Trimming three source clips at $0.02 each plus a 10 s 720p render at $1.25 is $1.31.
- Gemini Omni reference-to-video: 3-second clips and IMAGE_REF tags
Omni on Sume takes up to 10 reference images and 3 reference videos of at most 3 s each, addressed as <IMAGE_REF_0> and <VIDEO_REF_0> in the prompt.
- Gemini Omni video edit on Sume: how an unknown clip length is priced
Omni edit takes a video_url and a prompt; output follows the source length. Sume reserves 8 s ($1.00 at 720p) when unknown and accepts a hint up to 30 s.
- Typed Sume video client from the OpenAPI JSON, after Sora
Sume publishes OpenAPI 3.0.3 at api.sume.com/reference/json. List the four video operations, then use the SDK's generated calls instead of hand-typing the wire.
Written by Sume