Genace

Resource exhausted, please try again later. — Vertex AI 429 when calling Veo, Imagen or Gemini image API

HTTP 429 RESOURCE_EXHAUSTED Safe to retry

The exact error

429 Resource exhausted. Please try again later. Please refer to https://cloud.google.com/vertex-ai/generative-ai/docs/error-code-429

You sent a generation request through Vertex AI (Google’s docs now brand it Gemini Enterprise Agent Platform) and there was no capacity left to serve it. This is a capacity response, not a complaint about the prompt or parameters.

What it means

Google’s Vertex error-code-429 guide says a 429 is returned when “the number of your requests exceeds the capacity allocated to process requests”, and it maps each quota framework to its own message. This string is the one listed for pay-as-you-go. Projects on Provisioned Throughput get a different message (“Too many requests. Exceeded the Provisioned Throughput.”), so seeing this one tells you the request was served from shared, non-reserved capacity.

The guide is not model-specific: it covers generative AI requests on Vertex in general, so the same reasoning applies whether the call was to Gemini, an Imagen model or Veo. It also names a cause that surprises people: acceleration limits. A sharp jump in traffic can trigger 429s even when the steady-state rate would be fine.

Staying under your visible quota may not protect you either. In python-genai issue #2001, users report persistent 429s from Gemini on Vertex on a paid Tier 1 account while “well within” configured quota, and a later commenter reports the same on a regional Vertex endpoint. The issue was closed as stale without a root cause being posted, so treat it as a community report, not an explanation.

How to confirm it’s this

  • HTTP status is 429 and the status field is RESOURCE_EXHAUSTED.
  • The message points you to the Vertex error-code-429 page. Note the punctuation: the guide lists the message with a comma, while the payload quoted in issue #2001 has a full stop. Match on the status, not the exact sentence.
  • The request went through Vertex (a Google Cloud project and a location), not a Gemini API key. If the message instead names a quota metric with limit: 0, you have a different problem (see below).
  • If you have a Provisioned Throughput subscription and still see this exact message, the request was not served from your reserved capacity.

Fix

These are the options Google’s 429 guide lists for pay-as-you-go:

  1. Use the global endpoint instead of a regional one whenever possible.
  2. Retry with truncated exponential backoff (details below).
  3. Request more quota. If the model uses quotas, submit a Quota Increase Request. If it uses Standard pay-as-you-go, smooth your traffic and avoid large spikes instead.
  4. Ramp up gradually. To avoid acceleration limits, increase traffic slowly and keep usage patterns consistent. This matters for batch jobs that fan out hundreds of image or video requests at once.
  5. Buy reserved capacity. Provisioned Throughput gives a more consistent level of service. If you already have it and hit the Provisioned Throughput message, the guide says to either drop the header so overages spill into pay-as-you-go, or add GSUs.

Retry or not

Yes, retry, with backoff. Google’s 429 guide says that without reserved capacity “you can try your request again” and recommends truncated exponential backoff. The Gemini API troubleshooting guide gives the same advice for 429 RESOURCE_EXHAUSTED: wait about a second, then grow the delay (2s, 4s, 8s), add random jitter so parallel workers do not retry in lockstep, and set a maximum number of attempts.

For agent code, two practical points:

  • Resend the identical payload. The request was rejected for capacity, not content, so there is nothing for the agent to rewrite.
  • Put a ceiling on total wait time. Commenters in issue #2001 describe 429s persisting for days; no backoff schedule fixes that. When the ceiling is hit, fail the task clearly and alert a human to pursue quota or support, rather than looping.

When it’s not this

  • A free-tier metric with limit: 0. That is a Gemini API key whose project has no free allowance for the image model. Retrying never helps. See the free-tier page linked below.
  • A spend-based limit on the Gemini API. Google’s rate-limits page says hitting the per-10-minute spend cap also returns 429 RESOURCE_EXHAUSTED, but on a Gemini API key rather than Vertex.
  • 503 with “The model is overloaded.” Also capacity, but a server-side status rather than a quota response.
  • 500 INTERNAL. A generic server-side error, not a quota or capacity response.

Error text last verified against the sources below on .

Where these facts come from