IL-0408 OpenRouter · 2026-02-17ai-infradatabase
OpenRouter's API returned 500s and false 401 "User not found" errors when its API key cache dropped and came back empty
OpenRouter checks API keys against its database through an external caching layer from a third-party provider; normally the cache answers almost every authentication check and only a small fraction of requests reach the database. In both incidents the caching layer dropped all of its connections to the database and started returning errors, which failed about 20% of requests with 500. Within minutes the cache recovered and reconnected, but all cached entries had been invalidated, so every incoming request needed a fresh database lookup. The database could not handle the sudden spike in lookups, and the resulting timeouts reached users as 401 "User not found" errors.
On 17 February an internal alert fired at 5:28 AM, a minute after impact began. A concurrent denial-of-service attack was taken for the cause and blocked with WAF rules at 5:50, and service came back when the cache had fully repopulated at 6:05, 38 minutes after the start. The caching provider began investigating after the first incident, but diagnosing and fixing the failure took time. On 19 February the cache failed the same way at 7:36 AM without an attack, the alert fired at 7:38, and service was restored when the cache had repopulated at 8:11, after 35 minutes. OpenRouter then deployed targeted protections within hours. The changes it has deployed are circuit breakers that detect caching layer failures and refill a cold cache in a controlled way instead of letting every request fall through to the database at once, and a 503 instead of a 401 when an authorization lookup cannot complete. The caching provider deployed fixes for the failure mode behind both incidents.
- Severity
- –
- Scope
- All OpenRouter API endpoints and the chatroom: on 17 February about 20% of API requests failed, then 80-90%; on 19 February partial failures, then near-total downtime
- Users affected
- A portion of OpenRouter users
- Region
- –
- Time to detect
- 1m
- Time to resolve
- 38m
Symptoms
At 5:27 AM UTC on 17 February 2026 part of OpenRouter's users started getting 500 errors on all API endpoints, and from 5:40 AM many requests failed with 401 "User not found" errors although their API keys were valid. The chatroom was degraded at the same time. The same pattern came back at 7:36 AM UTC on 19 February.
On 17 February about 20% of API requests failed between 5:27 and 5:40 AM UTC, and 80-90% failed between 5:40 and 6:05 AM. On 19 February failures were partial between 7:36 and 7:42 AM and close to total between 7:42 and 8:11 AM. Both times the caching layer had logged occasional errors with no user-facing impact beforehand, from 5:20 AM and from 7:16 AM.
The 401 errors sent some customers into debugging their own API key configurations when nothing on their side was wrong. They were database timeouts during API key lookups, returned to users as an authentication failure.
On 17 February a denial-of-service attack was ramping up at the moment the caching layer failed. Because such attacks can cause cascading problems across the stack, and because the caching dependency had historically been extremely reliable, OpenRouter first attributed the outage to the attack, deployed WAF rules against it at 5:50 AM and put its effort into hardening against that attack vector. Only when the same cache failure recurred on 19 February without an attack did the real root cause become clear.
Root cause
Root cause Dependency failure
- Trigger
- The third-party caching layer in front of API key lookups dropped all of its connections to OpenRouter's database and began returning errors.
Detection
An internal alert fired one minute after impact began on 17 February, at 5:28 AM UTC, and two minutes after it began on 19 February, at 7:38 AM UTC, and the response team came online to investigate.
Remediation
- Deployed WAF rules to block the denial-of-service attack running at the same time on 17 February
Action items
- Add circuit breakers that detect caching layer failures, limit their blast radius and repopulate a cold cache in a controlled way
- Return 503 instead of 401 when an authorization lookup cannot complete because of an infrastructure problem
- The caching provider fixes the failure mode that caused both incidents
- Roll out a fallback caching mechanism so OpenRouter survives even extended downtime of the caching layer
Lessons
Answering an infrastructure failure with an authentication error made customers debug API keys that were fine, so error codes have to say what actually failed. Attributing the first outage to a concurrent denial-of-service attack, because the caching dependency had always been reliable, left the real fault in place until it recurred two days later. OpenRouter holds that redundancy against failures in its dependencies is its own responsibility, not the provider's.
Sources
Related cases
IL-0162LKE users could not reach their cluster control planes or the LKE Dashboard because an earlier database update made the internal LKE DNS service hangLinode · 2025same root cause · shared Database
IL-0489Rejoining a failed node of Magic Pages' three-node MySQL cluster broke its metadata and took customer websites downMagic Pages · 2025same root cause · shared Database
IL-0255Basecamp's two redundant links between data centers dropped together and a Redis replica resync loop stalled chat37signals · 2020same root cause · shared In-memory cache
IL-0273A power disruption took GitHub's Redis clusters offline, the app could not boot, and GitHub served 503s for 2 hoursGitHub · 2016same root cause · shared In-memory cache
Check your cluster for this
For AI tools and scripts
- This case as JSON: https://incidentlib-api.benchlet.com/cases/IL-0408
- The cases most like it: https://incidentlib-api.benchlet.com/cases/IL-0408/similar
- MCP server (Streamable HTTP, no key):
https://incidentlib-mcp.benchlet.com/mcp
The API needs no key. The MCP server offers search_incidents, get_incident, list_incidents, get_topic and vocab; both are explained on API and MCP.