RedditapisRedditapis

Rate limits

There is no per-key request quota on the Reddit data endpoints. What a 429 actually means, what Retry-After tells you, and why a fixed client-side throttle does not help.

Short version: the Reddit data endpoints have no fixed per-key request quota. If you are seeing 429, throttling to a specific requests-per-minute number is not the fix, and picking one by guesswork will slow you down without stopping the errors.

What has a quota and what does not

EndpointsLimit
GET /api/reddit/* (posts, comments, users, search, listings)No fixed per-key request quota
GET /api/account/me, GET /api/account/payments30 requests per minute
Dashboard and usage endpoints30 requests per minute
Monitoring endpointsSee Live Monitoring limits

The 30 per minute figure applies to the account endpoints only. It is not the limit on the data endpoints, and applying it there is a common and costly mistake.

So what is the 429?

It is Reddit's, relayed to you. We read Reddit through a pool of accounts. When Reddit rate-limits one of them we park it, rotate to another, and retry. You only ever see a 429 when that whole retry chain is exhausted, which makes it a transient condition rather than a quota you have crossed.

{ "error": "HTTP_429", "retry_after": 10 }

The response also carries a Retry-After header with the same value in seconds. It is a floor to honour, not a promise: the next attempt is usually served by a different, healthy account well before any per-account cooldown expires.

A 429 is not billed. You are not charged for a request that returned one.

What to do instead of a fixed throttle

  1. Treat 429 as retryable. Read Retry-After, back off exponentially from it, and add jitter so a fleet of workers does not retry in lockstep.
  2. Cap concurrency rather than requests per minute. How many calls you have in flight at once matters more here than the rate you issue them at.
  3. Do not treat 429 as fatal or as a reason to stop. The same request normally succeeds shortly afterwards.

The other retryable status

A 503 means we could not complete the call at all. It is also retryable, also carries Retry-After, and is also not billed.

{ "error": "upstream_unavailable", "message": "This request could not be completed right now. It was not billed. Please retry shortly.", "retry_after": 5 }

If 429s are constant rather than occasional

That is not normal and it is worth telling us about. Send your API key prefix and a rough timestamp to support and we will look at the traffic directly.

Independent third-party API for developers and researchers. Not affiliated with, endorsed by, or sponsored by Reddit, Inc.

On this page