glossary

Inside Reddit API rate limits: 100 queries a minute, averaged over ten

Taras Shynkarenko
Taras Shynkarenko
•Updated: •7 min read
Inside Reddit API rate limits: 100 queries a minute, averaged over tenInside Reddit API rate limits: 100 queries a minute, averaged over ten

TL;DR

7 min read

Reddit's Data API allows 100 queries per minute per OAuth client id, averaged over a rolling ten minute window, which works out to 1,000 queries per window and 6,000 per hour. Every response carries X-Ratelimit-Used, X-Ratelimit-Remaining and X-Ratelimit-Reset, so you can read the remaining budget before you spend it. Exceed the limit and Reddit answers 429; commercial use needs a separate contract no matter how few queries you send.

What is the Reddit API rate limit?

Reddit's Data API enforces Reddit API rate limits of 100 queries per minute per OAuth client id, averaged over a rolling ten minute window, according to the Reddit Data API Wiki. The averaging is the part that shapes your design: Reddit measures the average across ten minutes instead of each minute in isolation, so your real budget is 1,000 queries per window and 6,000 per hour, and you can burst above 100 in a single minute as long as the window average holds. Size your polling loop against the window, not against the per-minute headline.

LimitValueWhere Reddit states it
Authenticated queries100 queries per minute (QPM) per OAuth client idReddit Data API Wiki
Averaging windowCurrently 10 minutes, to support burstingReddit Data API Wiki
Effective window budget1,000 queries per rolling 10 minutesDerived from the two rows above
Unauthenticated trafficBlocked outright; the default rate limit does not applyReddit Data API Wiki
Chat messages2,000 per day per recipient, 3,000 per day totalReddit Data API Wiki
Chat rooms, bot accountsUp to 300 joins per dayReddit Data API Wiki
Legacy published figure60 requests per minute for OAuth2 clientsreddit-archive wiki on GitHub

Last verified: 8 September 2026

Which number is current, 60 or 100?

The current figure is 100 QPM, and the 60 comes from documentation Reddit itself flags as legacy. Reddit's archived API wiki on GitHub still reads "Clients connecting via OAuth2 may make up to 60 requests per minute" and carries no version stamp, which is why it keeps resurfacing in Stack Overflow answers. The support-hosted Data API Wiki, which opens with Reddit's warning that legacy API documentation "may be out of date," is the page stating 100 QPM and the ten minute average. Build against 100 QPM and date any source quoting 60 as pre-2023.

The access rules moved in the same period. Reddit's Data API Terms carry an effective date of 19 June 2023 and a last revision of 20 July 2026, so anything older than mid-2023 describes a different product. Read what Data API access costs once free eligibility ends alongside these limits.

How do you read the X-Ratelimit response headers?

Reddit reports your remaining budget on every Data API response through three headers. The Data API Wiki defines them exactly as follows.

HeaderWhat Reddit says it reports
X-Ratelimit-UsedApproximate number of requests used in this period
X-Ratelimit-RemainingApproximate number of requests left to use
X-Ratelimit-ResetApproximate number of seconds to end of period

Two details bite people. Reddit calls all three values approximate, so a client that spends down to X-Ratelimit-Remaining: 0 collects errors instead of stopping cleanly. HTTP/2 also lowercases header names on the wire, so your client sees x-ratelimit-remaining while the docs write title case; match case-insensitively. Log all three and alert when the remaining count drops below a floor you pick. PRAW respects these headers automatically and spaces its requests accordingly.

What happens when Reddit returns 429?

Reddit answers HTTP 429 Too Many Requests once you exceed the window average, and the response can carry a retry-after header naming the wait. The reference implementation is prawcore, the HTTP layer under PRAW: its sessions.py maps too_many_requests to a TooManyRequests exception that reads retry-after off the response. Notably, 429 is absent from prawcore's RETRY_STATUSES set, which holds 500, 502, 503, 504, 408, 520 and 522, so PRAW raises on 429 instead of silently retrying.

Copy that choice. A server error deserves a retry because the request was valid, but a 429 Too Many Requests means your scheduler is wrong, and burying it in a retry loop hides the bug while burning quota. Surface the 429 and fix the schedule.

Networking cables in a server rack, representing the query budget a monitoring setup has to fit within.

How many keywords can one OAuth client id poll per hour?

Divide the hourly budget by what each keyword costs, and a subreddit-scoped monitor lands in the low tens. The arithmetic is one line:

Queries per hour = keywords x subreddits x (60 / poll interval in minutes) x pages per poll

Track one keyword across 12 subreddits, poll every 5 minutes, and pull one page per poll:

1 x 12 x (60 / 5) x 1 = 144 queries per hour per keyword

Your ceiling is 100 QPM x 60 minutes = 6,000 queries per hour, so 6,000 / 144 = 41.6, meaning 41 keywords with zero margin. Pull two pages per poll and the cost doubles to 288 per keyword per hour, dropping you to 20 keywords. Hold back 20 percent for token refreshes and retries and the single-page ceiling becomes 4,800 / 144 = 33 keywords.

Bursts are constrained separately. Each rolling ten minutes holds 1,000 queries, so a backfill firing 900 requests in the first minute leaves 100 for the following nine. Run steady monitoring and backfills under separate OAuth client ids. This calculation decides whether you build on the raw API at all, and it is the same one behind RedReplier next to running the Reddit API yourself.

RedReplier
RedReplier

Get Started

Reddit, X, Bluesky & HN

Real-time intent alerts

Unlimited AI replies

Ranked by buyer intent

A stopwatch beside a keyboard, evoking the timed wait intervals of a backoff retry schedule.

Keyword ceiling per OAuth client id
One page per poll41 keywords
Two pages per poll20 keywords
One page, 20% margin held back33 keywords
Three ways to spend the same 6,000 query hourly budget, tracking one keyword across 12 subreddits every 5 minutes.

What does exponential backoff look like against a ten minute average?

Backoff here means doubling the wait after each failure and adding random jitter so a fleet of workers does not retry in lockstep. A schedule that fits the ten minute window: wait 1, 2, 4, 8 and 16 seconds across five attempts, add up to 1 second of jitter to each, cap any wait at 60 seconds, and abandon the request after the fifth. When Reddit sends retry-after, use that value in place of your computed one.

Prawcore's own strategy is smaller by design: FiniteRetryStrategy sets DEFAULT_RETRIES = 2 and sleeps 2 * random() seconds before the first retry and 2 + 2 * random() before the last. Copy the jitter and the hard stop, because unbounded retries against an averaged window dig the hole deeper: every retry counts toward the same ten minute average that produced the 429. If your system needs exponential backoff to stay inside budget, the schedule is the defect, and choosing between polling and webhooks is the more useful conversation.

What separates the free Data API tier from commercial licensing?

The dividing line is what you do with the data, not how many queries you send. Reddit's help centre article on accessing Reddit data defines commercial purposes as "any use of our services by a business or on behalf of a business or as part of a monetized product or service," and lists subscription services, paywalled apps and data access for fees among the examples. Section 3.1 of the Data API Terms puts it in contract language: commercial purposes, use in excess of rate limits, or anything not expressly permitted "will need to enter into a separate agreement with Reddit."

So a monetized product sending 10 queries per minute needs a contract even though it never approaches the ceiling. Academic work now routes exclusively through the Reddit for Researchers programme, and Reddit's Responsible Builder Policy states that research on data collected outside it violates the policy, with enforcement running to revoked tokens and suspended accounts. Settle which side of the line you sit on before you write the client.

Every number above applies because you hold the OAuth client id. RedReplier watches Reddit alongside X, Bluesky, Facebook and Hacker News in one place, so coverage becomes a plan setting instead of a queries-per-hour calculation. It also exposes an API and an MCP server that works with Claude Code, Cursor and any standard MCP client.

Frequently asked questions

Does the 100 QPM limit apply per user or per app?

Per OAuth client id, according to Reddit's Data API Wiki. Every user your app authenticates draws on the same 100 QPM pool tied to that client id, so a multi-tenant tool gains no headroom by adding users. Registering separate client ids for genuinely separate applications is the supported way to split budgets.

What happens to requests that skip OAuth entirely?

Reddit blocks them. The Data API Wiki states that traffic not using OAuth or login credentials will be blocked and that the default rate limit does not apply, and its Rules section adds that Reddit can "freely throttle or block unidentified Data API users." No unauthenticated allowance exists to plan around.

Do the X-Ratelimit headers show the minute or the ten minute window?

They report the current period, which is the ten minute averaging window. X-Ratelimit-Reset counts down the seconds to the end of that period, so a value near 600 means the window just opened and a value near 0 means your allowance is about to refresh. Reddit labels all three approximate, so leave margin instead of spending to zero.

Does Reddit always send a Retry-After header on 429?

No. Prawcore's TooManyRequests exception reads the header with response.headers.get("retry-after") and only prints a wait instruction when it is present, so your code has to handle its absence. Use retry-after when it arrives and fall back to your own backoff schedule when it does not.

Is a User-Agent string required?

Yes, and the format is prescribed. Reddit's Data API Wiki requires <platform>:<app ID>:<version string> (by /u/<reddit username>) and notes that defaults such as "Python/urllib" or "Java" are "drastically limited." It also warns: "NEVER lie about your User-Agent."

Can I raise the limit without a commercial contract?

Moderator bots have a documented path: Reddit's Data API Wiki invites mod bot operators who need to exceed the limits to reach out through its contact form. Reddit's help centre adds that select developers needing broader access may be charged fees to lift default limits. For anything monetized, the route is the separate agreement in section 3.1 of the Data API Terms.

Does the 100 QPM limit cover Reddit chat messages too?

Chat runs under its own caps, separate from the 100 QPM query limit: 2,000 messages per day per recipient and 3,000 per day total, according to the Data API Wiki. Bot accounts get up to 300 chat room joins per day on top of that. None of it draws from the same rolling ten minute window as your regular queries.

How does Reddit treat a 429 differently from a server error?

Prawcore's RETRY_STATUSES set covers 500, 502, 503, 504, 408, 520 and 522, the codes that mean the request was valid and the server stumbled, so PRAW retries those automatically. 429 sits outside that set on purpose. Prawcore raises a TooManyRequests exception instead, because a rate limit error means your schedule is wrong, not the server.

What happens to academic research that skips the Reddit for Researchers programme?

Reddit's Responsible Builder Policy treats data collected outside the Reddit for Researchers programme as a violation. Enforcement runs to revoked tokens and suspended accounts. Academic projects are expected to route through the programme instead of pulling data on a general OAuth client id.

RedReplier
RedReplier

Get Started

Reddit, X, Bluesky & HN

Real-time intent alerts

Unlimited AI replies

Ranked by buyer intent

Why does a backfill need its own OAuth client id from steady monitoring?

Each rolling ten minute window holds 1,000 queries total, and a backfill that fires 900 requests in the first minute leaves only 100 for the remaining nine. Run that backfill on the same client id as your steady monitoring and the monitor starves for the rest of the window. Separate client ids give each job its own 1,000 query budget to spend.

See us more often in Google

One click marks RedReplier as a preferred source, so our articles sit higher in your Top Stories, AI Mode, and AI Overviews.

Before you go...

RedReplier

RedReplier

Catch every buyer asking for what you sell

RedReplier watches Reddit, X, Bluesky and Hacker News in real time, ranks every thread by buyer intent, and drafts your reply, so you get there first.

Reddit, X, Bluesky & HN

Real-time intent alerts

Unlimited AI replies

Ranked by buyer intent

Related Articles