Originally published on Extenify .
LLM API rate limits usually show up the week after launch, not during testing: a burst of users hits your backend, OpenAI, Claude or Gemini answers with HTTP 429, and your UI spins forever. The surprising part is that many 429s are not rate limits at all , and retrying them only burns time. Here is how to tell the difference, retry the ones that can succeed, and stop most of them from happening.
A 429 can mean "slow down" or "pay up"
All three providers reuse the same status code for two very different problems:
OpenAI sends 429 for traffic ("Rate limit reached", slow_down ) and also for billing codes such as credit_balance_exhausted , organization_spend_limit_exceeded and project_spend_limit_exceeded .…