Nano Banana 4K resolution API: the tier strings Sume accepts
Google says Nano Banana 2 spans 512px to 4K. On Sume you pick a tier with resolution: 512, 1K, 2K or 4K. The default, and why 4K can return 202.

To ask Nano Banana for 4K on Sume, send resolution: "4K" to POST /v1/images with model set to google/nano-banana-2 or google/nano-banana-pro. Both take the same four tiers: 512, 1K, 2K and 4K. If you leave resolution out you get 1K, and a 4K request is one of the slow kinds that can come back as a 202 job instead of an image.
Google's announcement of Nano Banana 2 (2026-02-26) lists output from 512px to 4K. The request rules below come from Sume's Image API docs and catalog code, read 2026-09-29.
Which resolution strings does Sume accept?
Sume documents the normalized tier as 512, 1K, 2K or 4K. The lowest tier is stored as 0.5K internally, and the catalog code notes that requests may send either spelling.
| Value | Meaning |
|---|---|
512 | Lowest tier; 0.5K is accepted as the same tier |
1K | The default when resolution is omitted |
2K | Middle tier |
4K | Top tier; the one most likely to return 202 |
Can I ask for exact pixels instead?
Not on this endpoint. size is only a shorthand for a tier, and the docs say not to put custom pixels on it. Explicit pixel size is advertised by no model in v1 and returns 400 unsupported_parameter. Shape the picture with aspect_ratio and pick the tier; before pinning a value, read supported_parameters from GET /v1/images/models.
What does a 4K request look like?
Blocking calls wait up to 30 seconds. A 4K image may not finish inside that budget, so send mode: "async" and poll the job instead of holding the connection open.
curl -X POST https://api.sume.com/v1/images \
-H "Authorization: Bearer $SUME_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "google/nano-banana-2",
"prompt": "A ceramic mug on a linen cloth, soft window light",
"resolution": "4K",
"aspect_ratio": "1:1",
"mode": "async"
}'How do I check the tiers before I send?
Ask the catalog instead of trusting a blog post. The docs say a model only accepts the values its capability descriptors list, so read the resolution descriptor for the model you plan to call, then pin the tier.
curl "https://api.sume.com/v1/images/models" \
-H "Authorization: Bearer $SUME_API_KEY"Which tier should I start with?
Start at the default 1K while you tune the prompt, then rerun the winning prompt at 2K or 4K. Change only resolution between runs so any difference you see comes from the tier and not from the wording. Keep aspect_ratio fixed too, because the tier and the ratio together decide the output shape.
When you move to 4K, switch to mode: "async" at the same time. Sending a 4K call in blocking mode and getting a 202 back is normal behavior, not an error, but code that expects an image body on every 200 should also branch on the status code.
How do I collect the 4K image?
The 202 body is the standard Sume job envelope. Poll GET /v1/jobs/{id}/status and fetch GET /v1/jobs/{id}/result for the generated images. Check the status code rather than the body shape: 200 is the image response, 202 is the job envelope. Per-tier prices are in Nano Banana 2 pricing on Sume.
Sources
Related posts
More in Developers
- OpenAI Agents API remote MCP server: what to give it for Sume
OpenAI's Agents API takes MCP servers at session setup. Give it Sume's mcp.sume.com/mcp URL and an API key, and gate paid calls with idempotency_key.
- OpenAI Agents API webhooks: when the agent finishes, and Sume's
OpenAI says to stream output or use webhooks to learn when an agent finishes or needs input. Sume sends one agent.run.terminal webhook per run, never on cancel.
- Restrict API key creation: what OpenAI added, and Sume's key rules
OpenAI added admin controls to restrict API key creation on 2026-09-15. Sume keys are workspace-scoped with fixed scopes and rotate by replacement.
- Promise.allSettled vs Promise.all for a batch of API jobs
Promise.allSettled waits for every promise and reports each outcome; Promise.all rejects on the first failure. For paid API jobs, use allSettled.
Written by Sume