A client can turn an API provider’s request to wait into an immediate retry if it mishandles the Retry-After header. Sergey Shinder describes that failure in an SMS login-code system: the provider sent a retry time as a date, but the client expected an integer and fell back to zero seconds. The reported result was a burst of requests after HTTP 429 responses.
What happened in the SMS login-code incident?
In his DEV Community account, Sergey Shinder says the client had treated Retry-After as an integer number of seconds for three years. After the SMS provider moved its API behind a new gateway on Monday, June 15, 2026, the header began arriving as a date, such as Mon, 15 Jun 2026 08:02:31 GMT.
As an Amazon Associate I earn from qualifying purchases.
The client tried to parse that date as an integer. According to Shinder, its exception handler then used a zero-second delay, so each HTTP 429 response was followed immediately by another request. Forty sender workers did this together during the system’s busiest half-hour of the week. Shinder says the provider’s abuse protection suspended the account for an hour within four minutes, preventing people from receiving login codes; some users whose sessions had expired over the weekend could not sign in. These are the author’s incident claims, not independently verified statistics.
Recommended Free Tools
What does Retry-After mean?
RFC 9110, published by the IETF in June 2022, permits two forms: an HTTP-date or a delay in seconds. The field tells a user agent how long it ought to wait before making a follow-up request. The standard’s wording is explicit: “The Retry-After field value can be either an HTTP-date or a number of seconds to delay after receiving the response.” RFC 9110 §10.2.3.
#1 Best Overall
A client that only accepts an integer handles only one of the two permitted forms. When a server sends the date form, converting a parse error into zero does not mean “use a safe default”; it means retry immediately. In Shinder’s telling, a signal to slow down therefore became traffic that looked to the provider like an attack.
Independent reader supportYour contribution helps us test, update, and keep practical guides available for everyone.How can a retry policy avoid this failure?
Shinder says the team changed its client to parse both forms, calculate a delay from date values using its own clock, and clamp the result between one second and ten minutes. Those bounds describe the team’s reported implementation, not a range mandated by the RFC or a universal recommendation.
Quick Recap
Best Value
- Used Book in Good Condition
Rank #4
- Used Book in Good Condition
Rank #2
- Handle both valid forms. Parse delay-seconds and HTTP-date instead of assuming an integration will always use the representation seen so far.
- Make parse failure conservative. Shinder says an unparseable value now triggers a long wait with jitter rather than a zero-delay retry.
- Prevent synchronized bursts. Jitter spreads retries over time; a shared retry budget across workers prevents each worker from independently multiplying traffic.
- Keep the failure observable. The reported change logs the raw header value so an unexpected representation can be diagnosed.
- Test the protocol contract. Shinder says the team added contract tests for every form allowed by the specification for every header it reads.
- Plan for provider unavailability. The team’s account says it fails over to a second SMS provider after two minutes. That is a reported system setting, not a general failover threshold.
Product prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on Amazon at the time of purchase will apply.
What’s actually slowing this PC down?
Pick the symptom - the matching free tool is one click away.




