Nano Banana 2.1 resolution: send 512 or 0.5K, $0.075 per draft
Sume's catalog publishes the smallest Nano Banana tier as 512, and requests may send 512 or 0.5K. A draft bills $0.075; 1K, 2K and 4K bill $0.10, $0.15, $0.20.

Send resolution: "512" for Nano Banana 2.1's smallest tier on Sume. The catalog publishes that tier as 512, matching OpenRouter's spelling, and the code comment in the catalog says requests may send either 512 or 0.5K. At that tier a draft bills $0.075, against $0.10 at 1K, $0.15 at 2K and $0.20 at 4K, which are Sume's list rates of $0.06, $0.08, $0.12 and $0.16 times 1.25.
This is from the repo's price tables and catalog on origin/main, read 2026-10-08. The endpoint's pricing line shows only the 1K default of $0.10, so the other three figures come from the price tables and from usage.cost on a real response.
The four tiers
The endpoint record lists resolution as 512, 1K, 2K and 4K for both Nano Banana 2.1 and Nano Banana Pro. The 2.1 row carries the note that its list rate is the 1K default and the charge scales for the other tiers.
| resolution | Sume list rate | Billed (list x 1.25) |
|---|---|---|
| 512 (0.5K) | $0.06 | $0.075 |
| 1K | $0.08 | $0.10 |
| 2K | $0.12 | $0.15 |
| 4K | $0.16 | $0.20 |
A draft call
The sample asks for four 4:5 drafts at 512, so the expected charge is four times $0.075, or $0.30. If the call takes longer than 30 seconds Sume returns 202 with a job envelope; the sample prints the status URL in that case. 512 drafts finish fast, so 202 is unusual at this tier, while 4K is the likeliest to degrade.
import os, requests
body = {
"model": "google/nano-banana-2.1",
"prompt": "Four loose layout drafts of a coffee bag label, flat lay",
"resolution": "512",
"aspect_ratio": "4:5",
"n": 4,
}
r = requests.post(
"https://api.sume.com/v1/images",
json=body,
headers={"Authorization": f"Bearer {os.environ['SUME_API_KEY']}"},
timeout=60,
)
if r.status_code == 202:
print("job queued:", r.json()["data"]["status_url"])
else:
r.raise_for_status()
out = r.json()
print(len(out["data"]), "images, cost", out["usage"]["cost"])
Why draft small
Prompts that fail fail at every size, so the cheap tier is the place to find out. A hundred 512 drafts cost $7.50, and ten of them re-rendered at 2K cost another $1.50. Re-rendering is a new generation because Sume rejects seed, so treat the 512 draft as a rehearsal of the composition rather than a file you will upscale.
Pass the same aspect_ratio at every tier. A draft in 4:5 and a final in 1:1 are different compositions.
If you store tier names in your own database, pick one spelling and use it everywhere. Sume's catalog publishes 512, so using 512 in configuration means your values match what GET /v1/images/models returns and you can compare them directly. A second spelling in the code base is a bug waiting for a string comparison.
Pro lists the same four tiers but a different price, so look up the endpoint record for the id you call, and do not reuse 2.1's numbers for Pro.
Sources
Related posts
More in Developers
- Edit a photo with Nano Banana: aspect_ratio auto and the cost of 100
Send a product photo as input_references to Nano Banana 2.1 or Pro and set aspect_ratio auto to keep its shape. Python request and cost of 100 edits.
- Next.js 16.4 Cache Components: will a Sume webhook route break?
Next.js 16.4 turns on Cache Components in create-next-app. A POST route handler is never cached, so a Sume webhook route works if it reads the raw body.
- Next.js 16.4 GET route handler: poll a Sume job at request time
With Cache Components, Next.js 16.4 runs GET handlers at request time. A Sume job status route stays live if it sends no-store and follows the poll hint.
- Omni Flash API errors: which to retry and which to fix
A retry policy for Gemini Omni Flash 1.1 calls on Sume: 400, 401, 402, 409, 429 rate_limited, 429 queue_full and 503 each mapped to retry, wait or fix.
Written by Sume