OpenAI Outage: Read 500 and 503 server_is_overloaded Correctly and Detect It in Your Logs
Failure facts checked on the vendor’s docs on Nov 8, 2026.
An OpenAI outage rarely means every call fails. More often one model is overloaded or slow while others work. If you read your errors as one number, a failing model hides inside healthy traffic. The details below come from OpenAI's own error and troubleshooting docs.
Errors that mean OpenAI is the problem
- 500: the server had an error processing the request. OpenAI says to retry after a brief wait and check its status page.
- 503
server_is_overloaded: typeservice_unavailable_error. The requested model is temporarily overloaded. FollowRetry-Afterwhen present, then retry, and lengthen the delay if it persists. - Timeouts and dropped connections: these may be OpenAI or your own network path. OpenAI says client-side errors that never appear in its Service Health dashboard likely never reached it.
Errors that look like outages but are not
- 429
slow_down: your request rate rose too quickly. It can happen while you are inside your normal request and token limits. - 429
credit_balance_exhausted,organization_spend_limit_exceeded,project_spend_limit_exceeded,organization_usage_limit_exceeded: OpenAI states that retrying billing, spend or quota errors will not restore access. Add credits or raise the limit.
Mixing these into an outage metric sends the on-call engineer to the wrong place. Classify by error.code, not only by HTTP status.
Example: one model degrading
This is an example, not output from a real project.
2026-11-08T13:05:10Z model=gpt-main status=200 ms=1840
2026-11-08T13:05:12Z model=gpt-main status=503 code=server_is_overloaded retry_after=4 ms=210
2026-11-08T13:05:13Z model=gpt-mini status=200 ms=620
2026-11-08T13:05:17Z model=gpt-main status=503 code=server_is_overloaded retry_after=8 ms=190
2026-11-08T13:05:19Z model=gpt-mini status=200 ms=590Both models are called, and only one fails. Per-model grouping makes that obvious. A fallback to the second model, if your product can tolerate it, turns an outage into a quality dip.
A small classifier
NEEDS_HUMAN = {"credit_balance_exhausted", "organization_spend_limit_exceeded",
"project_spend_limit_exceeded", "organization_usage_limit_exceeded"}
def kind(status, code):
if code in NEEDS_HUMAN:
return "billing_or_limit"
if status == 429:
return "rate_limited" # includes slow_down: your traffic, not their outage
if status in (500, 503) or code == "server_is_overloaded":
return "provider_side"
if status is None:
return "network_or_timeout"
return "other"Log model, status, code, retry_after, attempt number and duration for every call, then count provider_side and network_or_timeout per model. Keep rate_limited out of that count: a 429, slow_down included, means your own traffic hit a limit.
Thresholds worth starting with
- Page when
provider_sideplusnetwork_or_timeoutis above 5% for one model over five minutes, with a minimum call count. - Ticket, do not page, on any
billing_or_limitevent. It is a balance problem that will not fix itself. - Watch latency alongside errors. OpenAI notes that latency analysis is most meaningful on tiers with defined SLAs, and standard tier can vary more.
Confirm with OpenAI
The OpenAI status page publishes incidents as JSON at status.openai.com/api/v2/incidents.json, with a status, an impact and timestamped updates, so you can show open incidents next to your own error rate. Enterprise API customers also get the Service Health dashboard. In it, filter to one model, one service tier and the affected project, open the HTTP Requests tab, and read error percentage rather than counts.
Outage or something on your side
Three quick checks separate the cases. First, compare models: if only one fails, the cause is almost always an overload on that model, not your code. Second, compare time: a failure that began exactly at a deploy points to a change in your request, such as a larger prompt or a new parameter. Third, compare paths: if requests from one network, proxy or region fail while another works, the problem is between you and the API. OpenAI's own guidance says to be precise about the model, tier and project before you report an issue, and to include example request and response timestamps.
During the incident
- Respect
Retry-After, and add jitter when it is missing. - Cap retries so a long outage does not turn into a retry storm.
- Fail over to another model or a cached answer where the product allows.
- Keep request timestamps for the vendor.
Checklist
- Calls are logged per model with status and error code.
- Billing and limit errors are separated from provider errors.
- Retries honor
Retry-Afterand are capped. - Status page incidents are visible next to your error rate.
Read vendor degradation detection for the method and third-party failure monitoring for the wider family of failures. For the cost side of model APIs, see LLM spend spikes. Sazabi can watch these per-model error shares and open an issue with the evidence.
OpenAI outages facts
- 500 and 503 server errors: OpenAI documents 500 for an error on its servers and 503 with code server_is_overloaded for a temporarily overloaded model, and says to follow Retry-After when present. (OpenAI docs, accessed Nov 8, 2026)
- slow_down is about ramp speed: A 429 slow_down means your request rate rose too quickly and can occur even when you are inside your requests-per-minute and tokens-per-minute limits. (OpenAI docs, accessed Nov 8, 2026)
- Billing and spend errors are not outages: Credit balance exhausted and organization or project spend limit errors return 429 with their own codes, and retrying them will not restore access until you add credits or raise limits. (OpenAI docs, accessed Nov 8, 2026)
- Service Health dashboard: The Service Health dashboard, currently for Enterprise API customers, shows HTTP status counts per model, tier and project, and OpenAI advises filtering to one model and reading error percentage rather than counts. (OpenAI docs, accessed Nov 8, 2026)
- Client errors missing from Service Health: OpenAI says client-side errors with no matching Service Health data mean requests likely never reached OpenAI, often from timeouts, proxies or networking. (OpenAI docs, accessed Nov 8, 2026)
With Sazabi
The Sazabi agent automatically sets up sensors for your project and maintains them over time. When your code calls OpenAI, it watches a question like this one:
Tell me when the share of OpenAI calls answered with a 500, 503 or timeout is well above its usual level, per model.
When the answer turns abnormal, Sazabi investigates and opens an issue. Vendor degradation covers the signal behind it.
Frequently Asked Questions
What does 503 server_is_overloaded mean?
OpenAI documents it as the requested model being temporarily overloaded. Follow the Retry-After header when present, then retry, and increase the delay between attempts if it continues.
Is a 429 from OpenAI an outage?
Usually not. A 429 is a rate, ramp-up, credit or spend limit on your side. Credit and spend-limit 429s carry their own error codes and retrying does not fix them.
Why do my timeouts not show up in OpenAI Service Health?
OpenAI says client errors that are missing from Service Health usually mean the requests did not reach OpenAI, which points to timeouts, proxies or networking on your path.
How should I read the Service Health dashboard?
Filter to one model, one tier and the affected project, open the HTTP Requests view and look at error percentage instead of raw counts.
Sources
- 500, 503 server_is_overloaded, slow_down, credit and spend-limit 429 codes, Retry-After guidance (accessed Nov 8, 2026)
- Retry-After on 429 and 503, slow_down versus server_is_overloaded table, delay with jitter when Retry-After is missing (accessed Nov 8, 2026)
- Service Health dashboard filters, HTTP Requests view, error percentage, errors missing from Service Health (accessed Nov 8, 2026)
- Status page incidents as JSON with status, impact and timestamped incident updates (accessed Nov 8, 2026)