External URL file inputs still fail on Gemini 3.5+ (now 403 PERMISSION_DENIED, was 429) after the Sep 4 "fixed" post

Following up on Gemini API Image URLs returns 429 RESOURCE_EXHAUSTED and External URLs cause 429, both marked fixed by Google staff on Sep 4, 2026.

As of Sep 7, 2026, external URL file inputs still fail for me on every Gemini 3.5+ model. The error has changed: in August it was quota_exceeded / “Resource has been exhausted”, now it is permission_denied / “The caller does not have permission” (HTTP 403 on generateContent). It fails instantly (~0.3–0.7 s), 100% of the time.

Setup

  • Endpoint: generativelanguage.googleapis.com, paid project, tier: 2
  • Tested via both the Interactions API (POST /v1beta/interactions, streaming, @google/genai 2.18.0) and models/{model}:generateContent with file_data.file_uri. Same result on both.
  • Image: a 210-byte PNG. URLs tested: an AWS S3 presigned URL (sa-east-1) and a plain public Google-hosted image (https://www.gstatic.com/webp/gallery3/1.png).

Results

Model Presigned S3 URL Public URL (gstatic) Inline base64 Files API URI
gemini-3-flash-preview :white_check_mark: works :white_check_mark: works :white_check_mark: works :white_check_mark: works
gemini-3.5-flash :cross_mark: 403 permission_denied :cross_mark: 403 permission_denied :white_check_mark: works
gemini-3.6-flash :cross_mark: 403 permission_denied :cross_mark: 403 permission_denied :white_check_mark: works
gemini-3.7-flash :cross_mark: 403 permission_denied :cross_mark: 403 permission_denied :white_check_mark: works
gemini-3.8-flash :cross_mark: 403 permission_denied :cross_mark: 403 permission_denied :white_check_mark: works :white_check_mark: works

Exact error from the Interactions stream:

{"event_type":"error","error":{"message":"The caller does not have permission","code":"permission_denied"}}

From generateContent:

{"code":403,"message":"The caller does not have permission","status":"PERMISSION_DENIED"}

Notes

  • Same API key, same request body, only the model name changes between the passing and failing rows, so this is not a key restriction or a URL reachability issue.
  • Text-only requests, inline base64, and Files API references all work on the failing models, so the regression is isolated to the external URL fetch path on 3.5+.
  • This looks like the same symptom as 403 PERMISSION_DENIED on generateContent with file_data.file_uri since 2026-08-14, which was attributed to a server-side file-permission check regression, but now hitting external HTTPS URLs rather than Files API URIs.