reference / Rate Limits
Rate Limits
What the headers say, what 429 means, and the Retry-After dance.
tiers#
A house sliding window, per IP, per minute. The IP reads cf-connecting-ip first (tunnel-authoritative), the last XFF hop as fallback:
- anonymous — 120/min on every v1 read lane
- API key — 600/min with a registered bearer
bucket topology#
One shared sliding bucket per IP covers all the v1 read lanes — index, post, search, latest, changelog draw from the same v1:<ip> bucket, so spending it in one lane spends it everywhere. The tier comes from the bearer alone: a malformed or wrong-length Authorization header never errors — it silently rides the anonymous tier. Send nothing rather than something broken.
the site lanes have their own#
- chat 10/h · session 30/min · OTP 3/10min
what the headers say#
Every v1 response carries x-ratelimit-limit and x-ratelimit-remaining for your tier. Cross the line and:
HTTP/1.1 429 Too Many Requests
retry-after: 42
x-ratelimit-limit: 120
x-ratelimit-remaining: 0
{"error":"rate_limited","retryAfter":42}content-type: application/json — never an HTML error page
the retry-after dance#
Sleep for retry-after seconds, then continue — the window slides, no debt accumulates. Back off on 429 and you will essentially never see a second one.