Gemini Batch API: SUCCEEDED image batch jobs unretrievable. batches.get 503s at the default deadline and 504s at extended deadlines (results billed, inaccessible)

We use the Gemini API (generativelanguage, model gemini-3-pro-image-preview, Developer API with API key). We submitted 386 batch jobs totaling 57,872 image requests at 2K resolution (385 jobs x 150 requests + 1 job x 122 requests), all with inline requests. All 386 report JOB_STATE_SUCCEEDED, and we have been billed, but the 385 jobs with 150 requests are unretrievable through the API.

Symptoms and diagnosis we performed:

  1. batches.list() succeeds and shows all jobs SUCCEEDED. generate_content() works.
  2. batches.get on any 150-request job returns 503 UNAVAILABLE after exactly ~60 s, every retry, for 3+ days.
  3. Sending “X-Server-Timeout: ” extends the front-end deadline: with 100 the request fails at ~101 s, with 600 at ~601 s, and with 3600 the connection is held for the full hour and still returns 504 DEADLINE_EXCEEDED (reproduced 4 times back-to-back). A payload that assembles in <60 s at 122 requests but cannot assemble in 3,600 s at 150 requests is not slow. It is hitting a hard internal limit and will never complete.
  4. Our one 122-request job streams fine (headers arrive in <60 s, ~1 GB body). Each 2K image is ~8 MB on the wire (base64, and the payload is duplicated in metadata.output and response), so a 150-request job is ~1.2 GB. The sharp cliff between 122 (<60 s) and 150 (>600 s, possibly never) suggests an internal response-size limit around 1 GiB rather than slow assembly.
  5. Field masks do not help: ?fields=name,done also 503/504s, so the mask is applied only after full assembly.
  6. No fallback exists for inline jobs: files.list() is empty, and there is no pagination, no Range support, and no :results endpoint.

Impact: 57,750 billed images (385 jobs x 150) are inaccessible. Estimated charge ~$3,869 at the $0.067/image 2K batch rate.

Request, in order of preference: (a) emit these jobs’ results to downloadable output files (the file path has no such size problem), or provide any paginated/per-request retrieval; or (b) raise the internal limit or deadline so batches.get can serve these payloads; or © credit the generation cost for the unretrievable jobs.

Results are documented as retained for 6 weeks after completion; these jobs completed 2026-07-03, so we would appreciate resolution as soon as possible.

Sample job names (10 of 385; full list on request):

batches/k1qt5jz2eyu0fbxj2w27h63qkmggrm4vs4yd batches/8enw7fv1ygcdgxi9ytk422wqhur7ckku7bde batches/ljpq4lpltpeba3o1ctpgcqwfrxhig888axcx batches/96m6321vurzwhbl96iju640kdzoh02q2mg9n batches/17un21ithw81h5g44zolm25qf2ukouuhjdio batches/amrcyzg7naarxlzrizxi8e7qgzrmbu42w0h0 batches/z2s16kvoe4m8josynbkrjiz8dchfmmjibpb8 batches/rokru93emulynkb59uxyto91phuohe20qchq batches/d6h50bu9q5obp7c2nfck8n9t92yacnj7x7qe batches/xotoosq3f7lytj6rs8d1q16rabz3oxpdpwzr

Environment: google-genai Python SDK and raw REST, Gemini Developer API (API key), model gemini-3-pro-image-preview, image_config aspect_ratio 1:1, image_size 2K, response_modalities [“IMAGE”], inline requests.

Batch completion time (UTC): 2026-07-03, ~05:00