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.

4 min readSume
All posts

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.

Imagen 4 shutdown and a Sume target (Google deprecations page and Sume docs, read 2026-10-07)
Retired Google idShutdownGoogle's replacementSume id to try
imagen-4.0-generate-0012026-08-17gemini-nano-banana-2.1google/nano-banana-2.1
imagen-4.0-ultra-generate-0012026-08-17gemini-nano-banana-2.1google/nano-banana-2.1
imagen-4.0-fast-generate-0012026-08-17gemini-nano-banana-2.1google/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
fi

Where 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

All Developers posts

Written by Sume