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.
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
works
works
works
works
gemini-3.5-flash
403 permission_denied
403 permission_denied
works
–
gemini-3.6-flash
403 permission_denied
403 permission_denied
works
–
gemini-3.7-flash
403 permission_denied
403 permission_denied
works
–
gemini-3.8-flash
403 permission_denied
403 permission_denied
works
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+.
I’d like to clarify the size limit, because it differs from the official documentation.
Your reply says external URL fetching works “for files up to 15 MB”, while the File input methods page (last updated 2026-09-23) lists 100 MB per
request/payload for External URLs and does not mention 15 MB.
Could you clarify the following?
Which limit is correct for external URLs on Gemini 3.5+ — 15 MB or 100 MB?
Or do both apply — i.e. 100 MB for the total of all files in one request, and 15 MB for each individual file?
Has the 15 MB per-file limit always existed, or was it introduced with the recent fix for the 403 PERMISSION_DENIED issue?
Does the limit differ by MIME type (e.g. application/pdf vs image/*) or by model (e.g. gemini-3-flash-preview vs Gemini 3.5+)?
What error (HTTP status / error status) is returned when a file exceeds the limit? We would like to handle it explicitly and fall back to the Files API.
In any case, it would be very helpful if the documentation could be updated to match the actual behavior, since we size our upload limits based on it.
Thanks for flagging! We’ve updated the File input methods page to show the correct limit which is 15MB for external URLs. For files larger than 15MB, please upload with the Files API.