Gemini Image 429 Rate Limit: How Long It Lasts and How to Fix It
A Gemini image 429 is a per-minute limit (clears in a minute), a daily quota (resets midnight Pacific), a spend cap per 10 minutes, or a free-tier limit of 0.
On this page

An HTTP 429 RESOURCE_EXHAUSTED from a Gemini image model (Nano Banana 2 Lite, Nano Banana 2 or Nano Banana Pro) means your Google Cloud project ran into one of four limits, and only one of them is fixed by retrying. A per-minute limit clears within about a minute, so backoff with jitter works. A daily quota stays exhausted until midnight Pacific time. A spend-based limit looks at the last 10 minutes of spend, so it clears within 10 minutes; on Tier 1 it is $10, roughly 74 Nano Banana Pro images at 1K or 2K. A free-tier project gets a limit of 0 for image output, and no amount of waiting changes that.
Before you change any code, confirm which project the failing key belongs to and open that project's limits in AI Studio. Limits belong to the project, not the key, so a second key in the same project adds nothing.
Which Gemini image 429 you have: four causes, four fixes
Read the error body first, then compare the failure pattern with this table. The Interactions API returns a named code; generateContent returns HTTP 429 with the status RESOURCE_EXHAUSTED and, often, a quota metric in the details (Gemini API errors, rate limits).
| Cause | How it shows up | How long it lasts | What to do |
|---|---|---|---|
| Per-minute limit: requests (RPM), input tokens (TPM) or images (IPM) | rate_limit_exceeded or too_many_requests; bursts fail, the next calls a few seconds later succeed | Usually under a minute, once your rate drops | Retry with exponential backoff and jitter; cap concurrency |
| Daily quota (RPD) | quota_exceeded; every retry fails for hours, often late in your day | Until midnight Pacific time | Stop retrying; wait for the reset or request more quota |
| Spend-based limit (Tier 1 $10, Tier 2 $50, Tier 3 $200 per rolling 10 minutes) | 429 during a run of expensive calls (Pro at 4K, big batches of real-time requests) even though RPM looks fine | Up to 10 minutes | Slow down, use a cheaper size or model, move bulk work to Batch, or request an increase |
| Free-tier project calling an image model | free_tier_requests with limit: 0 on the very first image request | Never clears by waiting | Link billing to the project, or point the app at the key from your paid project |
The spend-based limit does not apply to every account. Google says whether it applies depends on billing history and account standing (rate limits). The free-tier error text in the last row comes from developer reports, not from Google's documentation, so read your own error body rather than matching strings exactly.

For a request-by-request recovery worker that reads QuotaFailure and RetryInfo, keeps finished images and resumes the rest, see the Nano Banana Pro RESOURCE_EXHAUSTED recovery guide.
How long does a Gemini 429 error last?
It depends on which limit you hit:
- Per-minute limit: seconds to about a minute. Once fewer requests, tokens or images fall inside the current minute, calls go through again.
- Daily quota: until midnight Pacific time, when Google resets requests-per-day quotas. That is 07:00 UTC while daylight saving time is in effect and 08:00 UTC in winter.
- Spend-based limit: up to 10 minutes, because Google evaluates spend over a rolling 10-minute window.
- Free-tier limit 0: indefinitely. Image output has no free tier, so the limit stays at 0 until the project is on a paid tier.
If a 429 keeps coming back past these windows, it is probably a different limit from the one you assumed. Re-read the error details before you add more retries.
Gemini image limits are per project: a new API key won't help
Google applies rate limits per project, not per API key. Keys have no billing settings of their own; they inherit their project's tier, and usage from every key in a project adds up in that project (billing). Creating another key in the same project therefore leaves the 429 exactly where it was.
Image models are measured on one more dimension than text models: images per minute (IPM), which Google describes as conceptually similar to tokens per minute. Exceeding any single dimension triggers the 429, even when the others have room. Google's documentation page no longer prints RPM or IPM numbers for the current image models; the table there still lists retired preview models. The figures that apply to your project are the ones on the AI Studio rate limit page, and they change automatically as your tier changes. Google also notes that the listed limits are not guaranteed capacity.
The current model IDs are gemini-3.1-flash-lite-image (Nano Banana 2 Lite), gemini-3.1-flash-image (Nano Banana 2) and gemini-3-pro-image (Nano Banana Pro). Each model has its own limits, so check the row for the model your code actually calls.
The $10-per-10-minute spend limit: how many images it allows
On Tier 1, the spend-based limit is $10 in any rolling 10-minute window. To know when you will hit it, divide the cap by the price of one image. Google bills image output by tokens, so the per-image price is output tokens × price per token:
- Nano Banana Pro at 1K or 2K: 1,120 tokens × $120 per million = $0.1344 (Google rounds it to $0.134)
- Nano Banana Pro at 4K: 2,000 tokens × $120 per million = $0.24
- Nano Banana 2 at 1K: 1,120 tokens × $60 per million = $0.0672
- Nano Banana 2 at 2K: 1,680 tokens × $60 per million = $0.1008
- Nano Banana 2 at 4K: 2,520 tokens × $60 per million = $0.1512
- Nano Banana 2 Lite at 1K: 1,120 tokens × $30 per million = $0.0336
Standard prices as of October 4, 2026, from Gemini API pricing. Images per window = cap ÷ price per image, rounded down:
| Model and size | Price per image | Tier 1 ($10) | Tier 2 ($50) | Tier 3 ($200) |
|---|---|---|---|---|
| Nano Banana Pro, 1K or 2K | $0.1344 | 74 | 372 | 1,488 |
| Nano Banana Pro, 4K | $0.24 | 41 | 208 | 833 |
| Nano Banana 2, 1K | $0.0672 | 148 | 744 | 2,976 |
| Nano Banana 2, 2K | $0.1008 | 99 | 496 | 1,984 |
| Nano Banana 2, 4K | $0.1512 | 66 | 330 | 1,322 |
| Nano Banana 2 Lite, 1K | $0.0336 | 297 | 1,488 | 5,952 |
For example, $10 ÷ $0.1344 = 74.4, so the 75th Pro 1K image inside 10 minutes would push a Tier 1 project over the cap. These counts are ceilings. Input tokens, reference images and Nano Banana Pro's text and thinking output ($12 per million tokens) also cost money, so the real count is a little lower.
Spread over 10 minutes, 74 Pro images is about 7.4 a minute ($10 ÷ $0.1344 ÷ 10). A Tier 1 job that keeps Nano Banana Pro busy at 8 images a minute will run into the spend limit even if its IPM allowance is higher, as long as the spend limit applies to the account. Switching that job to Nano Banana 2 at 1K roughly doubles the headroom (148 ÷ 74 = 2.0).
When you hit this limit, Google's advice is to wait and retry after a short period, reduce the rate of expensive requests, and request a rate limit increase if normal usage keeps reaching it.
Free-tier project calling an image model: limit 0
No current Gemini image model has free image output. The pricing page lists the free tier as "Not available" for all three, so an image request from a project that is still on the free tier fails on quota from the very first call. Developers usually see free_tier_requests with limit: 0 in the error.
The fix is billing, not backoff. Link an active billing account to the project in AI Studio; new accounts default to Prepay, which needs at least $5 of credit. The move from Free to Tier 1 normally takes effect immediately. If the project is already paid and you still see a free-tier limit of 0, the running app is often using a key from a different project, or billing setup is unfinished. The paid tier limit 0 guide walks through matching the key, project and billing state.
The $300 Google Cloud Free Trial does not help here: Google says its credit can't be used towards the Gemini API or AI Studio (billing).
Retry a per-minute 429 with backoff and jitter in Python
Only per-minute 429s are worth retrying in a loop. Google's troubleshooting guide recommends exponential backoff (for example 1 s, 2 s, 4 s, 8 s) with random jitter and a maximum retry count, and retrying only transient errors such as 429, 408 and 5xx. Never retry 400, 402 or 403: those mean a bad request, an empty Prepay balance or a permission problem.
The same guide says the Python SDK retries transient errors automatically, up to four times, starting at about 1 second and capping at 60 seconds. In google-genai 2.28.0, the current release as of October 5, 2026, that is not the default. A genai.Client() created without retry options sent one request to a test server that always answered 429 and raised the error immediately. That applies to client.models.generate_content; client.interactions.create in the same version retried a 429 on its own (four requests in about three seconds). Retries started only after retry options were passed:
from google import genai
from google.genai import types
# Enables the SDK's own retries: 5 attempts in total (4 retries),
# about 1 s initial delay, 60 s maximum, for 408/429/500/502/503/504.
client = genai.Client(
http_options=types.HttpOptions(retry_options=types.HttpRetryOptions())
)With that client, the same test server received five requests before the 429 was raised. The built-in retry treats every 429 the same way, so it also retries a daily quota or a limit of 0 four times. If you want the loop to stop on those, write it yourself and leave the SDK retries off:
import random
import re
import time
from google import genai
from google.genai import errors
RETRYABLE = {429, 500, 503, 504}
# Heuristic on the error text: daily or zero/free-tier quota won't refill in seconds.
STOP_429 = re.compile(r"per.?day|daily|free_tier", re.I)
def generate_with_backoff(client, prompt, model="gemini-3.1-flash-image",
max_retries=5, base_delay=2.0, max_delay=60.0):
for attempt in range(max_retries + 1):
try:
return client.models.generate_content(model=model, contents=prompt)
except errors.APIError as e:
if e.code not in RETRYABLE or attempt == max_retries:
raise
if e.code == 429 and STOP_429.search(str(e.details)):
raise # wait for the reset or fix the project instead
cap = min(max_delay, base_delay * 2 ** attempt)
time.sleep(random.uniform(0, cap)) # full jitter
client = genai.Client() # no SDK retries, so attempts don't multiply
response = generate_with_backoff(client, "A red bicycle against a white wall")Against a test server with google-genai 2.28.0, this function succeeded on the third request when the first two returned 429, gave up after six requests (one call plus five retries) when every request returned 429, and stopped after one request when the error named free_tier_requests. It was not run against a live Gemini quota. The text match is a heuristic: field names and wording vary by API version, so log the full error body and adjust the pattern to what your project actually returns.
Don't stack the two retry layers. Six loop attempts around a client that makes five requests each can send 6 × 5 = 30 requests for one image.
When Batch is the better fix for a Gemini image 429
If the images don't have to come back within seconds, stop fighting the real-time limits and send them through the Batch API. Batch requests have their own rate limits, separate from regular calls, and Google points Nano Banana users with many images to Batch for higher rate limits in exchange for a turnaround of up to 24 hours. Most jobs finish sooner, but 24 hours is the target. Batch is also billed at half the standard price: $0.067 for a Nano Banana Pro 1K or 2K image, $0.12 at 4K, and $0.0336 for a Nano Banana 2 1K image (Google's table rounds it to $0.034).
Batch works through generateContent and does not fit interactive features where a user is waiting on the image. For costs at each resolution and where Batch stops being the cheapest option, see the Nano Banana Pro Batch API cost guide.
Moving up a usage tier: Tier 2 after $100 paid and 3 days
Higher tiers raise both the rate limits shown in AI Studio and the spend-based limit. Upgrades are automatic once the project's billing account qualifies (rate limits, billing):
| Tier | How you qualify | Spend limit per 10 minutes | Monthly billing account cap |
|---|---|---|---|
| Free | Active project or free trial | Not applicable | Not applicable |
| Tier 1 | Link an active billing account | $10 | $250 |
| Tier 2 | $100 paid and 3 days since the first successful payment | $50 | $2,000 |
| Tier 3 | $1,000 paid and 30 days since the first successful payment | $200 | $20,000–$100,000+ |
Three details change what you can expect:
- Qualification counts total Google Cloud spend on the linked billing account, not just Gemini API spend.
- Free to Tier 1 usually takes effect instantly; later upgrades take effect within 10 minutes of qualifying. Google says an upgrade can be denied in rare cases.
- Inside a tier, you can request a paid tier rate limit increase. Google offers no guarantee that it will be granted.
Priority inference does not give you extra room. It has its own limits, set by default at 0.3× the standard limit for each model and tier, and its usage still counts toward overall interactive limits.
Errors that look like this 429 but need a different fix
- HTTP 402 Payment Required: your Prepay balance hit $0, so every key in every project on that billing account stops at once. Add credit; don't retry.
- Monthly billing account cap: once the account reaches its tier's monthly cap, Google pauses the Gemini API for all linked projects until the 1st of the next month. The billing page does not name the HTTP status for this pause, so check the AI Studio Spend page when every project fails at the same moment.
- 503 or "model overloaded": capacity on Google's side, not your quota. See the Gemini 3 Pro Image 503 guide and the Gemini high demand error guide.
- Gemini app or website: the app doesn't show a 429. It shows usage-limit messages, and free usage refreshes every 5 hours up to a weekly limit. The Gemini free image limit guide covers those limits.
For every image error beyond 429, including empty responses and failed generations, use the Gemini image errors guide.
A 429 on Vertex AI (Gemini Enterprise Agent Platform) means shared capacity
On Google Cloud's Vertex AI, now documented as the Gemini Enterprise Agent Platform, a pay-as-you-go 429 reads "Resource exhausted, please try again later." It means the shared capacity serving your request was not available, not that a per-project image quota ran out. As of October 5, 2026, Google's Error code 429 page recommends using the global endpoint instead of a regional one, retrying with truncated exponential backoff, smoothing traffic spikes and ramping up gradually, filing a quota increase request where a model uses quotas, or buying Provisioned Throughput for steady capacity. Model IDs and per-image costs on that platform are in the Vertex AI Nano Banana API guide.
Choosing a fix: retry, wait, Batch, a higher tier or another route

Match the fix to the limit you hit:
- Per-minute 429: keep one retry layer with backoff and jitter, and cap concurrency so you stop at the edge of the limit instead of crossing it.
- Daily quota: stop the job and resume after midnight Pacific, or request more quota.
- Spend-based limit: slow expensive calls, use Nano Banana 2 or a lower resolution where quality allows, or let the tier rise with spend and time.
- Limit 0: fix billing or the key-to-project mapping. Nothing else helps.
- Large non-urgent jobs: Batch, at half price with separate limits.
If you need real-time images before your project reaches a higher tier, a paid gateway is another route. LaoZhang API lists gemini-3-pro-image at $0.09 per call at 1K, 2K or 4K and gemini-3.1-flash-image at $0.055 per call (its public pricing as of September 24, 2026). Calls bill to a separate account, so they don't use your Google project's quota. The gateway forwards to Google's model, so Google's content rules still apply, and its own capacity and terms apply too. A response with HTTP 200 but no image is still charged as one call. At 1K or 2K, Google's own Batch price of $0.067 is cheaper if you can wait.
Disclosure: laozhang.ai is our own service. Its prices are platform pricing, not an independent comparison.
FAQ about Gemini image 429 errors
What does RESOURCE_EXHAUSTED mean in the Gemini API?
It is the status that comes with HTTP 429 when a request exceeds one of the project's limits: per-minute requests, tokens or images, daily requests, the rolling spend limit, or a free-tier limit of 0 for image output. It does not mean Google's servers are down; that shows up as 503.
How do I fix Gemini error 429?
Find which limit you hit first. Retry with backoff only for per-minute limits. Wait until midnight Pacific for a daily quota. Slow expensive requests for the spend limit. Link billing when the project is still on the free tier. Bulk jobs that can wait up to 24 hours belong in the Batch API.
Does creating a new API key fix a Gemini 429?
Not within the same project. Limits and billing tier belong to the project, and every key in it shares them. A new key only helps when the old one belonged to the wrong project, for example a free-tier project instead of your paid one.
Do failed requests count against my Gemini quota?
Yes. Google says failed requests that return 400 or 500 are not charged but still count against quota, so a tight retry loop can use up a per-minute or daily allowance without producing any images.
Sources8
External pages this guide links to, in the order they appear. Last updated Oct 5, 2026.
Sources8
External pages this guide links to, in the order they appear. Last updated Oct 5, 2026.
- 1.AI Studioaistudio.google.com/rate-limit
- 2.Gemini API errorsai.google.dev/gemini-api/docs/api-errors
- 3.rate limitsai.google.dev/gemini-api/docs/rate-limits
- 4.billingai.google.dev/gemini-api/docs/billing
- 5.Gemini API pricingai.google.dev/gemini-api/docs/pricing
- 6.troubleshooting guideai.google.dev/gemini-api/docs/troubleshooting
- 7.Batch APIai.google.dev/gemini-api/docs/batch-api
- 8.Error code 429 pagedocs.cloud.google.com/gemini-enterprise-agent-platform/models/deploy/error-code-429





