Skip to content

Gemini API errors

Gemini API error 503: The model is overloaded

Google defines this as its own side: the service is temporarily overloaded or down, and the request did not run.

What the error says

HTTP status 503, type UNAVAILABLE, with the message:

The model is overloaded. Please try again later.

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 17:05 UTC.

Gemini's status page

Checks passingOur checks of the Gemini API

As of Nov 5, 2026, 5:21 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. They send a few small requests, so they cannot see load on the model you call: a 503 can still come from Gemini while they pass. Compare with Gemini's own status.

Every region, response time and incident history for Gemini

What it means

The Gemini API returns 503 with the status UNAVAILABLE when the service is temporarily running out of capacity or is down. The message usually reads "The model is overloaded. Please try again later." It is most common on newly released and preview models, and on the free tier during busy hours.

Is it you or them? Usually Gemini's: it uses this code for failures or load on its own side.

Common causes

  • High demand on the model you call, most often a new or preview model.
  • An incident on Google's side.

How to fix it

  1. Retry with exponential backoff, as in the snippet below.
  2. Switch to another model, for example a Flash model instead of a Pro one, until the error clears.
  3. Check our reading and Google's status below, and queue work that can wait.

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 503 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 503s 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.