WORKOS · Vendor
NO FIX YET
WorkOS suffered a 23-minute outage on September 18, 2026, when a Redis failover left application connections stalled and exhausted database connection pools. Sign-in and API requests failed or timed out during that window; no attacker activity was reported.
first public Sep 18, 2026 · 1 source
Could this affect your app?
Free first check from your website. Connect your repo for the full answer.
Customers of WorkOS AuthKit, SSO, Directory Sync, Admin Portal, Audit Logs and the WorkOS API were affected between 22:40 and 23:03 UTC on September 18, 2026. The incident was an availability failure, not a security breach. The sources say the company deployed a Redis-client fix and a decryption fallback correction, and that other connection recovery work is still in progress.
Not affected if no-workos-dependency
Who cares authkit, directory-sync, saas-auth, security, sso, workos
Unknown from the sources.
Unknown from the sources.
Date: 09/18/2026
Duration: 22:40–23:03 UTC (23 minutes)
Status: Resolved
On September 18, 2026, from 22:40 to 23:03 UTC, WorkOS experienced an outage affecting authentication and other API requests. Customers encountered failed sign-ins, API errors, timeouts, and long delays. Authentication was most severely affected.
An infrastructure failover in the cache supporting our feature-flag system exposed weaknesses in application connection recovery and fallback behavior. Some connections remained stalled after the cache was available again, delaying requests and exhausting database connection pools. Service recovered by 23:03 UTC. We subsequently deployed changes to improve connection recovery. We’re sorry for the disruption this caused you and your users.
WorkOS uses feature flags to control application behavior. The affected backend services read flag data from a shared Redis datastore populated by LaunchDarkly Relay. Each application also keeps a local cache, with a 30-second expiration. While an entry is valid, the application can evaluate it locally; after it expires, the application reads Redis.
The Redis cluster already had a primary and replica in separate AWS availability zones, with automatic failover enabled. This redundancy allowed AWS to promote a replacement primary. Applications still needed to detect failed connections and reconnect to that primary.
Some requests experienced errors or delays across the following products:
Are you affected?
Tell InfraStack what you run. It checks this one, and every next one, against your stack.
Ask from here. InfraStack checks the affected versions against your stack and answers in your inbox.
InfraStack checks the affected versions against your stack and answers in Slack, with the evidence and the fix.
Customer impact lasted from 22:40 to 23:03 UTC. Across our public edge, 24.1% of recorded requests returned server errors, and 17.2% ended with the client disconnecting. The table breaks down request groups by product.
| Product | Server errors (HTTP 5xx) | Client disconnects (HTTP 499) |
|---|---|---|
| AuthKit, User Management and organization APIs | 37.22% | 24.59% |
| Hosted AuthKit (default-domain proxy) | 7.27% | 13.77% |
| SSO and connection APIs | 2.22% | 2.31% |
| Dashboard | 27.10% | 8.08% |
| Admin Portal | 24.61% | 7.47% |
| Directory Sync APIs | 0.08% | 2.80% |
| Audit Logs management APIs | 22.82% | 3.55% |
| Audit Logs event capture | 0.0006% | 0.11% |
Around 22:40 UTC, the Redis primary became unavailable to application clients. AWS ElastiCache promoted its replica, completing the failover at 22:40:17 UTC. New connections could reach the promoted node, but some existing application connections remained stalled.
Three application behaviors prolonged and amplified the interruption:
The local cache reduced normal Redis traffic, but expired entries still depended on Redis. Our two-second deadline limited how long a flag caller waited; it did not provide prompt recovery of a stale, established connection. This was a gap in our resiliency safeguards.
Responders restarted affected application instances, which triggered reconnection to the healthy Redis instance. As connections recovered and queued work drained, error rates and latency returned to normal.
We also identified a notification gap: the initial status page update did not select the affected service components. Customers subscribed only to those components therefore did not receive the incident notification.
All times are UTC.
Completed:
The following work remains open:
Our follow-up work includes: