Nano Banana 2 is retired on Sume: the old id still works, as 2.1

google/nano-banana-2 and nano-banana-2 still work on Sume and run as Nano Banana 2.1. The job stores the 2.1 id, and the catalog lists only 2.1.

5 min readSume
All posts

Nano Banana 2 is retired on Sume, and requests that name it do not fail. google/nano-banana-2 and the bare nano-banana-2 still work and run as Nano Banana 2.1 (google/nano-banana-2.1). The job stores the 2.1 id, and GET /v1/images/models no longer lists the retired id. So old code keeps generating, but the model you pay for and receive is 2.1.

What changes for an old integration

Retired id behavior on POST /v1/images, as of 2026-10-08
You sendWhat runsWhat the job storesIn the catalog
google/nano-banana-2Nano Banana 2.1google/nano-banana-2.1Only the 2.1 id is listed
nano-banana-2Nano Banana 2.1google/nano-banana-2.1Only the 2.1 id is listed
nano-banana-2.1Nano Banana 2.1google/nano-banana-2.1Listed
sume/autoChosen by Sumesume/autoNot listed; job.model stays sume/auto

What it costs now

Price follows the model that runs. The catalog list for Nano Banana 2.1 is $0.08 per image, and Sume bills list times 1.25 rounded up to the cent, which is $0.10. At that price 1,000 images cost $100.00. Sizes and options can change the figure, so read the live price from GET /v1/images/models before you budget a large run.

Nano Banana 2.1 price arithmetic, as of 2026-10-08
StepValue
Catalog list per image$0.08
x 1.25$0.10
100 images$10.00
1,000 images$100.00

Move the id on your side

Silent aliasing is convenient, but it hides drift. Change your config to the 2.1 id so logs, dashboards and cost reports name the model that actually ran. The script below sends the new id and prints the model stored on the job, which is the quick way to confirm the change.

Other legacy bare ids such as gpt-image-2 are accepted as aliases for their org-prefixed equivalents, so the bare forms are not errors.

import os
import httpx

key = os.environ.get("SUME_API_KEY", "")
if not key:
    raise SystemExit("set SUME_API_KEY")
headers = {"Authorization": f"Bearer {key}"}

r = httpx.post(
    "https://api.sume.com/v1/images",
    headers={**headers, "Idempotency-Key": "nb21-switch-check-001"},
    json={"model": "google/nano-banana-2.1",
          "prompt": "A matte black bottle on marble",
          "mode": "async"},
    timeout=60,
)
r.raise_for_status()
job = r.json()
print(job.get("id") or job.get("request_id"), job.get("model"))

Why aliasing is a short-term bridge

Aliases keep old code alive, but they do not tell you when a successor changes cost or behavior. Nano Banana 2.1 is a different model from Nano Banana 2, so the same prompt can look different, and a size or option that the old model took may be handled differently. Run a small side-by-side before you decide that the alias is good enough for production.

Also check what your code stores. If a database column holds the requested id and a report groups by it, your reports now mix two models under one label. Store the model from the job as well as the one you requested.

Related catalog rules

Legacy bare ids such as nano-banana-2.1 and gpt-image-2 are accepted as aliases for their org/slug equivalents. sume/auto is a separate case: it is not listed by GET /v1/images/models, the job model stays sume/auto, and Sume does not disclose which family ran. If you need a known family for a series of images, pin a catalog id.

Sources

Related posts

More in Developers

All Developers posts

Written by Sume