generate_content_free_tier_requests, limit: 0 — Nano Banana (Gemini image) API free tier quota error
The exact error
Quota exceeded for metric: generativelanguage.googleapis.com/generate_content_free_tier_requests, limit: 0, model: gemini-2.5-flash-preview-image
A Gemini API call to a Nano Banana image model came back 429 because the project was checked against a free-tier quota whose limit for that model is zero. It is not a burst of too many requests. There was never any allowance to use up, so the request cannot succeed until the project’s tier changes.
What it means
Google’s rate-limits page says limits are applied per project, not per API key, and are tied to the project’s usage tier: Free covers an active project or free trial, while Tier 1 requires setting up and linking an active billing account. Your active limits are shown in AI Studio. The same page notes that image-generating models (Nano Banana) have their own Images per minute limit.
A free_tier metric with limit: 0 therefore means the request was evaluated
as free tier, and the free tier has no allowance for that model. In js-genai
issue #1322, the reporter’s usage dashboard showed zero usage; after it
refreshed, they concluded there is simply no free-key quota for Nano Banana.
That is a user’s conclusion, not a Google statement; check your own limits.
Two reported wrinkles make this confusing:
- The model in the error may not be the one you requested. In #1322, a
request to
gemini-2.5-flash-imageproduced an error naminggemini-2.5-flash-preview-image, and a request togemini-3-pro-image-previewproduced one naminggemini-3-pro-image. - Paid accounts can hit it too. In Google AI Developers Forum thread 111105, a Paid Tier 1 user got the same free-tier error, including after creating a new API key. They later reported the cause: billing had been automatically disabled when their free trial expired, even though a billing account was linked, and a billing admin had to assign a new billing account to the project.
How to confirm it’s this
- HTTP 429, status RESOURCE_EXHAUSTED, and the message lists a metric
containing
free_tier(requests or input tokens) withlimit: 0. - In the
QuotaFailuredetails, thequotaIdvalues end in-FreeTier, for exampleGenerateRequestsPerDayPerProjectPerModel-FreeTier. - Your usage for that model is at or near zero, as the reporter in #1322 saw. Exhausting a real allowance would require having used some of it.
- The rate-limits page says to check your tier on the Projects page in AI Studio. In #1322, the issue’s assignee also suggested the Cloud console: APIs & Services, then Generative Language API, then the Quotas & System Limits tab, and check current usage percentage.
Fix
- Find the project behind the key. Because limits are per project, the question is which project the key belongs to and what tier it is on, not which key you used. Rotating keys did not help the forum poster.
- If the project is on Free, set up billing. The rate-limits page says the move from Free to a paid tier starts with setting up billing in AI Studio, and that Free-to-Tier-1 upgrades typically take effect instantly.
- If you believe you already pay, check the billing link itself. The forum poster’s project showed a linked billing account but had billing disabled after the free trial ended. Confirm that billing is actually active on that specific project.
- Do not chase the model name in the error. The forum poster switched
from the preview image model to
gemini-2.5-flash-imageand got the same error. Renaming the model does not change the project’s tier.
Retry or not
No. A limit of zero cannot be waited out.
The trap for agent code: the payload still looks retryable. The example in
#1322 ends with “Please retry in 10.244322575s” and carries a RetryInfo
detail with a retryDelay. Google’s troubleshooting guide recommends
exponential backoff on 429 RESOURCE_EXHAUSTED in general, and says the
official SDKs retry 429s automatically, so a generic retry wrapper will loop on
a request that can never pass. A commenter in #1322 made the same argument:
this is a plan or model-availability stop, not a throughput limit.
Handle it explicitly: if any quota metric or quotaId in the error contains
free_tier / FreeTier and the limit is 0, fail immediately with a message
telling a human to check the project’s tier and billing.
When it’s not this
- A 429 with a non-zero limit, or the Vertex pay-as-you-go message: that is real rate limiting and backoff is correct. See the resource-exhausted page.
- A spend-based limit. The rate-limits page says paid tiers also have a
per-10-minute spend cap that returns
429 RESOURCE_EXHAUSTED. That one does clear with time. - A region block. If the message says your location is not supported, the cause is geography, not tier.
Related errors
- Resource exhausted, please try again later (429)
- User location is not supported
- The model is overloaded (503)
- OpenAI: billing hard limit reached
- OpenAI: organization must be verified
Error text last verified against the sources below on .