exceeded retry limit, last status: 429 Too Many Requests
The message
exceeded retry limit, last status: 429 Too Many RequestsWhat it means
The server answered 429, too many requests, and the reply didn't match any of the limits Codex knows how to explain, such as your plan's usage limit or an empty credit balance. Codex gives up on the turn straight away.
What to do
Check status.openai.com first. If you run several sessions or sub-agents at once, cut them back. On a third-party provider, it's that provider's rate limit.
This is Codex reporting an HTTP 429 from the server it sends your prompts to, in a form that sounds more final than it is:
exceeded retry limit, last status: 429 Too Many Requests, request id: ...
A 429 means "too many requests", and on its own it doesn't say whose limit you hit. A GitHub search on September 25, 2026 found 88 issues in openai/codex quoting "exceeded retry limit", and 58 of them carry the 429. We read how the 0.157.0 release decides what to call a 429, and went through what OpenAI's staff said on the busiest threads.
How Codex sorts a 429
When the reply comes back 429, Codex looks inside it for a reason it recognizes. If the server says you've used up your plan's allowance, you get the "You've hit your usage limit" message. Codex says so separately when your plan doesn't include Codex. For an API account out of credit or over a spend cap, it prints Quota exceeded. Check your plan and billing details.
Anything else ends up here: a 429 with no reason Codex can map, labeled with the status and a request ID. So this line is, pretty much by definition, the 429 Codex couldn't explain.
The name is older than the behavior
We expected to find a retry loop that had run out. In 0.157.0 there isn't one for this case. The HTTP layer is set to retry server errors and network failures but not 429s, and the turn loop treats this error as final, so the first 429 of this kind ends the turn.
Older releases did retry. In August 2025, on version 0.23.0, a user on OpenRouter's free models got a run of lines ending retrying 4/5 in 1.471s before the final failure. That's where the "retry limit" wording comes from. A rate limit that arrives partway through a streamed reply is handled differently, by the way: it shows up as rate limit exceeded: and Codex does retry that one.
What's usually behind it
An OpenAI outage. On June 3, 2026 Eric Traut, who answers many Codex issues for OpenAI, replied to one of these on a Pro account: "We have an active incident", and "No need to upload logs or provide `/feedback`. This is not a client-side issue." In February he put a similar wave down to "server overload at a peak usage time". The February reporter had over 99% of their usage left, so the meters in Codex won't tell you anything here. Check status.openai.com before you change anything.
Too many things running at once. An issue opened August 30 (#41702, still open with no staff reply on September 25) describes 429s on a Pro account once around five sub-agents ran across two sessions, while one session with three worked. A second reporter saw the same from late August, with more than two or three simultaneous streams failing across every session. If you run parallel agents, try fewer.
Someone else's rate limit. If you've pointed Codex at another provider, the 429 is theirs, and a commenter on that OpenRouter thread said as much about its free tier. Traut told an Azure user in March that a 429 "is not ephemeral" and is "generally categorized as a non-retriable error". Raising Codex's retry settings won't help, since 429s are excluded from the HTTP retry anyway.
The 401 and 400 lines
Early builds printed an authentication failure as stream error: exceeded retry limit, last status: 401 Unauthorized and retried it five times, which was never going to work. In 0.157.0 Codex first tries to recover from a 401 by refreshing your sign-in, and one that still fails comes out as "unexpected status 401 Unauthorized" with the server's text and a request ID appended. A 400 usually shows the server's own error body. Those are different code paths with different fixes, so this page stays with the 429.
For the Claude side of the same status code, see Claude's 429 rate limit error.
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.
exceeded retry limit, last status: 429 Too Many Requests, request id:⚠ stream error: exceeded retry limit, last status: 429 Too Many Requests; retrying 4/5 in 1.471sstream error: exceeded retry limit, last status: 401 Unauthorizedexceeded retry limit, last status: