429 RESOURCE_EXHAUSTED
The message
429 RESOURCE_EXHAUSTEDWhat it means
Your Google Cloud project went over one of its Gemini API limits: requests or tokens per minute, requests per day, or a spend limit. The line under the message names which one.
What to do
Read the Quota exceeded for metric line. A per-minute limit clears if you back off and retry; a daily one waits for midnight Pacific; limit: 0 means that model has no allowance on your tier at all.
Google's Python SDK prints this when the Gemini API turns a request down for going over a limit. Here's how it looked in a notebook in Google's own cookbook repo, trimmed only at the end:
ClientError: 429 RESOURCE_EXHAUSTED. {'error': {'code': 429, 'message': 'You exceeded your current quota, please check your plan and billing details. For more information on this error, head to: https://ai.google.dev/gemini-api/docs/rate-limits. To monitor your current usage, head to: https://ai.dev/rate-limit. ', 'status': 'RESOURCE_EXHAUSTED', ...
The 429 RESOURCE_EXHAUSTED. part comes from the SDK (we read it in google-genai 2.25.0, which prints the HTTP code, then the status). Everything after it is the server's. It's the most pasted Gemini error on GitHub we could find: about 5,570 issues mention RESOURCE_EXHAUSTED alongside Gemini as of September 23, 2026.
The wording is close to OpenAI's quota error, which has its own page for OpenAI's version. The causes aren't the same, so check whose API you're calling.
The line that tells you which limit
"Quota" in the message covers several different ceilings. Google's rate-limit page lists requests per minute, input tokens per minute and requests per day, and going over any one of them is enough. The full response usually names the one you hit. Google's Gemini CLI repo keeps real responses as test fixtures, and they carry lines like these:
* Quota exceeded for metric: generativelanguage.googleapis.com/generate_content_free_tier_requests, limit: 2
Please retry in 54.887755558s.
Below that, the error's details hold a quotaId that says it more plainly. GenerateRequestsPerMinutePerProjectPerModel-FreeTier is a free-tier request count per minute. GenerateContentPaidTierInputTokensPerModelPerMinute is a paid project sending too many input tokens in a minute. If the id says PerDay, you're done until the daily reset, which the docs put at midnight Pacific time.
When it says limit: 0
This one caught us out. A metric line ending in limit: 0 isn't a busy minute. It means your project's allowance for that model on that tier is zero, so no amount of waiting helps, even though the same message still says "Please retry in" some number of seconds. Google's Gemini CLI treats it that way in its code: a 429 whose message matches limit: 0 is classed as terminal, and the CLI doesn't retry it. The docs say preview and experimental models get tighter limits, which is where people tend to meet it. The fix is a model your tier includes, or linking a billing account.
Limits are per project, not per key
The rate-limit page is blunt about this: "Rate limits are applied per project, not per API key." Making a second key in the same project gets you nothing. If two apps share a project, they share the ceiling too.
Paid projects have a spend limit on top, counted over a rolling ten minutes: $10 on Tier 1, $50 on Tier 2 and $200 on Tier 3. Go over it and you get the same 429 RESOURCE_EXHAUSTED. Tier 1 needs a linked billing account; Tier 2 needs $100 paid and three days since the first payment; Tier 3 needs $1,000 and 30 days.
One neighbor isn't a 429 at all. If you prepay and the balance hits zero, the API returns 402 payment_required, and Google's error page says not to retry it until you add credits.
What to do
For a per-minute limit, back off and retry. Google's troubleshooting page recommends exponential backoff (wait about a second, then two, then four) with some random jitter. It also says the Python SDK does this for you by default, up to four times. We didn't find that in 2.25.0. There, retries are off unless you pass retry_options (an HttpRetryOptions) in the client's HTTP options; set it and you get five attempts in all, starting at a one second wait and capped at 60, with 429 among the codes it retries.
For a daily limit or limit: 0, retrying only burns time. Check your live numbers in AI Studio at the address the message gives, move to a model your tier covers, or move up a tier. If you hit the ceiling from Gemini CLI rather than your own code, the CLI puts its own dialog over this, which we cover in “Usage limit reached for all Pro models.”
Other lines the same feature prints
Match yours against these if the one at the top of the page is not quite it. They come from the same code and mean related things.
ClientError: 429 RESOURCE_EXHAUSTED.You exceeded your current quota, please check your plan and billing details. For more information on this error, head to: https://ai.google.dev/gemini-api/docs/rate-limits.To monitor your current usage, head to: https://ai.dev/rate-limit.* Quota exceeded for metric: generativelanguage.googleapis.com/generate_content_free_tier_requests, limit: 2GenerateRequestsPerMinutePerProjectPerModel-FreeTierGenerateContentPaidTierInputTokensPerModelPerMinute