Skip to content
Rate Limit Story

429 explained in plain words

Your API said 429. Here is what it actually meant.

Paste the response headers. Rate Limit Story reads the limit, what is left, when it resets and how long to wait, then writes a four panel story and a ready reply for the client who hit the wall.

See supported APIs
  1. Client

    Sending batch 501 of 600…

  2. API

    Too many requests! Token bucket is empty.

  3. Rate Limit Story

    Wait 20 s, then retry with a little jitter.

Demo strip. The numbers come from the OpenAI style sample.

What it is

A free header reader for rate limits. It understands Retry After, the X RateLimit family, the IETF RateLimit fields and the formats used by GitHub, OpenAI, Anthropic, Shopify and Discord.

Who it is for

API owners, developer support, partner managers and anyone whose client just sent a screenshot of a 429 with no context.

What it solves

Rate limit headers are cryptic, mix Unix times with seconds and differ per vendor. People guess, retry too fast and get blocked for longer.

Tell the story of a response

Everything is read in this tab. Nothing you paste is uploaded or stored.

Load a sample
Paste raw headers, curl -i output or a JSON object of headers. The status line is optional.

No story yet

Paste the headers from a failing call, or load one of the samples.

Headers never leave this page. Remove auth or cookie headers before sharing a screenshot anyway.

Headers it understands

Mix headers from different styles in one paste. Names are not case sensitive.

Retry After

Retry-After: 20

Seconds or an HTTP date. When present, it wins over every other reset hint.

X RateLimit family

X-RateLimit-Limit: 5000
X-RateLimit-Remaining: 0
X-RateLimit-Reset: 1792661820

Used by GitHub, Twitter style APIs and many others. Reset can be Unix seconds, milliseconds or seconds from now, and it says which one it picked.

IETF RateLimit

RateLimit-Policy: "default";q=100;w=60
RateLimit: "default";r=7;t=42

The standard fields with quota, window, remaining and time to reset.

OpenAI and Anthropic

x-ratelimit-remaining-tokens: 0
x-ratelimit-reset-tokens: 18.4s

Separate request and token buckets with durations like 6m0s. The empty bucket is marked as the one holding you back.

Shopify and Discord

X-Shopify-Shop-Api-Call-Limit: 38/40
X-RateLimit-Reset-After: 2.75

Used out of size counters, reset after seconds, buckets, scopes and global limits.

How to use it

  1. Copy the headers

    From the browser network tab, curl -i, your logs or the screenshot a client sent. Only the header lines matter.

  2. Paste and tell the story

    Each bucket is read on its own and the one that is empty or closest to empty becomes the main character.

  3. Read the four panels

    What happened, where you stand, when it resets and what to do, with times in UTC and in your own time zone.

  4. Send the reply

    Copy the ready reply into the ticket, or copy the full story for your own notes.

Good to know

  • It explains the headers you paste. It does not call the API and cannot see limits the API keeps to itself.
  • When a reset value is ambiguous, numbers above one billion are treated as Unix time and smaller ones as seconds.
  • The safe pace needs both a limit and a window length. Many APIs only send the limit.
  • Times in your zone use the clock of this device.

Questions

Why does GitHub send 403 instead of 429?

GitHub answers some rate limited calls with 403. The story still treats it as limited when remaining is zero.

Which wins, Retry After or the reset time?

Retry After. It is the server telling you exactly how long to wait, while reset describes the whole window.

What is jitter and why add it?

A small random extra delay. Without it, every client that was blocked retries at the same second and trips the limit again.

Is it safe to paste real headers?

The page sends nothing anywhere. Still, remove Authorization and cookie headers before you share anything.

Talk to the builder

Questions, ideas or a job offer? Send a message on X or Telegram.

Support the builder

If this tool saved you time, you can send a tip to this EVM address from your own wallet.

0xd28Fd90eD69092bd01598f237aad33a0cc9c3EeA