Skip to content

Gemini API errors

Gemini API error 429: RESOURCE_EXHAUSTED

This one is usually on your side: your project passed a per-minute or per-day limit for the model, and Google refused the request.

What the error says

HTTP status 429, type RESOURCE_EXHAUSTED, with the message:

Resource has been exhausted (e.g. check quota).

Is the Gemini API down right now?

Gemini's own status page

Google Gemini (AI) reports no incident on its status page.

As of the last successful poll, 2026-11-05 15:10 UTC.

Gemini's status page

Checks passingOur checks of the Gemini API

As of Nov 5, 2026, 3:25 PM UTC, RealUptime's checks of Google Gemini (AI) passed in all 10 regions that returned a reading.

Our checks of the Gemini API pass right now. That fits a 429 that comes from your account's limits, which our checks cannot see.

Every region, response time and incident history for Gemini

What it means

The Gemini API enforces limits per project and per model on requests per minute, tokens per minute and requests per day. Passing one returns 429 with the status RESOURCE_EXHAUSTED. Free tier limits are much lower than paid tier limits, and limits apply to the Google Cloud project behind the key, not to the key itself.

Is it you or them? Usually yours: Gemini uses this code for limits and billing on your account, which no outage checker can see.

Common causes

  • The free tier's per-minute or per-day limit for the model.
  • Several keys or apps on one Google Cloud project sharing its limits.
  • Bursts of requests, or long prompts that use up tokens per minute.

How to fix it

  1. Retry with exponential backoff, as in the snippet below; per-day limits reset at midnight Pacific time.
  2. Check the project's rate limits in Google AI Studio, and turn on billing to move to the paid tier's higher limits.
  3. Spread requests out, or move work that can wait to the Batch API.

Retry with backoff

A retry loop that waits as long as Gemini asks, else doubles the wait with random jitter so many clients do not retry in step:

// Retry Gemini 429 errors with backoff and jitter.
const RETRYABLE = new Set([429, 500, 502, 503, 504, 529]);

async function withRetry(call: () => Promise<Response>, maxAttempts = 5): Promise<Response> {
  for (let attempt = 1; ; attempt++) {
    const response = await call();
    if (!RETRYABLE.has(response.status) || attempt === maxAttempts) return response;
    // Wait as long as the provider asks, else 1s, 2s, 4s... with full jitter.
    const retryAfter = Number(response.headers.get("retry-after"));
    const delayMs = retryAfter > 0 ? retryAfter * 1000 : Math.random() * 1000 * 2 ** (attempt - 1);
    await new Promise((resolve) => setTimeout(resolve, delayMs));
  }
}

See these errors grouped, and know when the API is down

RealUptime Errors takes errors from any Sentry SDK. Tag each failed call with the provider, status and model, and errors from the same code group into one issue with its count and first and last time seen, so a run of 429s shows up as one rising issue instead of a flood:

import * as Sentry from "@sentry/node";

// The DSN from your RealUptime Errors project settings.
Sentry.init({ dsn: process.env.REALUPTIME_ERRORS_DSN });

if (!response.ok) {
  Sentry.captureException(new Error(`Gemini ${response.status}`), {
    tags: { ai_provider: "google-gemini", ai_status: response.status, ai_model: model },
    fingerprint: ["google-gemini", String(response.status)],
  });
}

RealUptime Monitor can check an API endpoint from several regions every minute and alert you when it fails, and the Gemini outage page can alert you when Gemini reports an incident. Both are free to start.

Start Errors free

Related errors

Gemini's own reference: ai.google.dev/gemini-api/docs/troubleshooting. How our checks work: methodology.