---
id: status-codes-april-2026
slug: status-code-distribution-april-2026
title: "Provider error code distribution, April 2026"
topic: reliability
period: Apr 2026
updated: 2026-05-09
license: CC BY 4.0
canonical: https://requesty.ai/data/status-code-distribution-april-2026
---

# Provider error code distribution, April 2026

> Why do LLM provider requests fail? Among April 2026 requests on the Requesty gateway where the upstream provider returned a non-success response, 65.8% were 429 (rate limit), 19.4% were 400 (bad request: schema mismatches, oversized payloads), and 9.4% were 403 (forbidden). 5xx availability incidents (503, 502, 529, 500, 504, 520) summed to ~4.8%. Router- and gateway-level rejections are filtered out so the chart shows only what providers themselves emit when they fail.

*Topic: Reliability and ops. Period: Apr 2026. Last updated 2026-05-09.*

## Why it matters

Provider failures are dominated by rate-limiting under agentic load, not by genuine availability incidents. That changes the right mitigation: backoff plus a managed fallback chain absorbs the ~85% of failures that are 429 + 400 without provider changes; only the ~5% 5xx tail is irreducible. Designing retries on the assumption that "providers go down" misallocates engineering effort.

## Questions this answers

- Why do LLM API requests fail?
- What is the most common LLM provider error code?
- How often do AI providers rate-limit requests?
- What HTTP errors return from OpenAI and Anthropic?

## Key findings

1. 429 (rate limit) is the dominant provider failure mode at 65.8%. Providers throttle agentic workloads aggressively.
2. 400 (bad request) is second at 19.4%. Schema mismatches, unsupported parameters, oversized payloads.
3. 403 (forbidden) at 9.4%. Provider-side authorization, region, or model-access denials.
4. 5xx total (503, 502, 529, 500, 504, 520) sums to ~4.8%. Real provider availability incidents are uncommon but not zero.
5. Codes that disappear under this filter (404 collapses from 29.8% to 0.2%, 402 from 17.8% to 0.07%) confirm those rejections are router-level model-not-found and billing checks, not provider failures.

## Data

| Status code | Description | Bucket | % of rejections (percent) |
| --- | --- | --- | --- |
| 429 | Too Many Requests | auth_quota | 65.83% |
| 400 | Bad Request | client_error | 19.40% |
| 403 | Forbidden | auth_quota | 9.41% |
| 503 | Service Unavailable | server_error | 2.19% |
| 502 | Bad Gateway | gateway | 1.81% |
| 529 | Site Overloaded | server_error | 0.52% |
| 422 | Unprocessable | client_error | 0.24% |
| 500 | Internal Server | server_error | 0.21% |
| 404 | Not Found | not_found | 0.21% |
| 402 | Payment Required | auth_quota | 0.07% |
| 504 | Gateway Timeout | gateway | 0.06% |
| 401 | Unauthorized | auth_quota | 0.02% |
| 520 | Cloudflare Unknown | server_error | 0.02% |
| 499 | Client Closed | client_error | 0.01% |

## Caveats

- Restricted to status_code_origin = 'provider' AND successful = false, so router- and gateway-level rejections are excluded by design.
- A failed request can have multiple retries with different status codes; each retry is counted separately.

## Cite as

**APA.** Requesty (2026). Provider error code distribution, April 2026. Requesty Data. https://requesty.ai/data/status-code-distribution-april-2026

```bibtex
@misc{requesty_status_code_distribution_april_2026,
  author       = {{Requesty}},
  title        = {Provider error code distribution, April 2026},
  year         = {2026},
  howpublished = {\url{https://requesty.ai/data/status-code-distribution-april-2026}},
  note         = {Requesty Data}
}
```

---

Downloads: [JSON](https://requesty.ai/data/status-code-distribution-april-2026/data.json) · [CSV](https://requesty.ai/data/status-code-distribution-april-2026/data.csv) · [Markdown](https://requesty.ai/data/status-code-distribution-april-2026/data.md)