imagen-4.0-ultra-generate-001 ended Aug 17: the Sume images request
Google shut down three imagen-4.0 ids on Aug 17, 2026. A curl call to POST /v1/images that branches on 200 or 202, with an Idempotency-Key and a catalog check.

Replace the retired call with POST /v1/images, send a model id you read from GET /v1/images/models, and branch on the status code: 200 carries the images, 202 carries a job envelope. Google's deprecations page lists imagen-4.0-generate-001, imagen-4.0-ultra-generate-001 and imagen-4.0-fast-generate-001 as shut down on August 17, 2026, with gemini-nano-banana-2.1 as the named replacement.
What changed on the Google side
Google's page gives one date for all three Imagen 4 ids and one successor. Google lists gemini-nano-banana-2.1 with no shutdown date announced. On Sume the same family is google/nano-banana-2.1 (the bare nano-banana-2.1 also works), and nano-banana-2 is retired and runs as 2.1.
| Retired Google id | Shutdown | Google's replacement | Sume id to try |
|---|---|---|---|
| imagen-4.0-generate-001 | 2026-08-17 | gemini-nano-banana-2.1 | google/nano-banana-2.1 |
| imagen-4.0-ultra-generate-001 | 2026-08-17 | gemini-nano-banana-2.1 | google/nano-banana-2.1 |
| imagen-4.0-fast-generate-001 | 2026-08-17 | gemini-nano-banana-2.1 | google/nano-banana-2.1 |
The request
The script writes the body to out.json and reads the status code. A 202 means the 30-second wait ended or the job went async; poll the status_url in the envelope. The Idempotency-Key makes a retry return the original job.
Sume also lists Imagen 4 Fast and Ultra in its image picker, but I did not check the live catalog from the API. Run GET /v1/images/models and use whatever id it returns instead of trusting a name from a blog.
status=$(curl -s -o out.json -w '%{http_code}' https://api.sume.com/v1/images \
-H "Authorization: Bearer $SUME_API_KEY" -H "Content-Type: application/json" \
-H "Idempotency-Key: satchel-hero-0007" \
-d '{"model":"google/nano-banana-2.1","prompt":"studio photo of a leather satchel","aspect_ratio":"1:1"}')
if [ "$status" = 200 ]; then
jq -r '.data[].url' out.json # 200: images are in the body
else
jq -r '.data.status_url' out.json # 202: a job envelope, poll this URL
fiWhere behavior differs
Sume's image route returns hosted URLs, not base64, and token counts in usage are always 0 because images are metered per image. It does not stream (stream: true returns 400) and takes no seed. Read price from the per-model endpoints route before a batch; the swap changes cost as well as quality.
Sources
Related posts
More in Developers
- Japanese speech to text API: Sume STT with language_code ja
Transcribe Japanese audio with Sume STT: send language_code ja, read word times, and test a sample first. $0.01 per audio minute, 10 minute jobs.
- A job id is not a run id: poll image and video generation via /v1/jobs
Image and video generate routes create jobs, not runs. Poll GET /v1/jobs/:id/status until terminal is true. waitForRun is for run ids only.
- Job id or run id? Which Sume endpoint to poll for each product
Jobs, Format runs, Actions and Agent Completions have different ids, poll URLs and webhook events. Which to poll for each product, and which SDK helper to call.
- terminal, result_ready or status: which check ends a Sume poll loop?
Stop on terminal, fetch on result_ready, branch on status. Three fields in the Sume status payload, three different jobs, and a Python loop that uses each once.
Written by Sume