Genace

generate_content_free_tier_requests, limit: 0 — Nano Banana (Gemini image) API free tier quota error

HTTP 429 RESOURCE_EXHAUSTED Do not retry as-is

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-image produced an error naming gemini-2.5-flash-preview-image, and a request to gemini-3-pro-image-preview produced one naming gemini-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) with limit: 0.
  • In the QuotaFailure details, the quotaId values end in -FreeTier, for example GenerateRequestsPerDayPerProjectPerModel-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

  1. 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.
  2. 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.
  3. 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.
  4. Do not chase the model name in the error. The forum poster switched from the preview image model to gemini-2.5-flash-image and 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.

Error text last verified against the sources below on .

Where these facts come from