TL;DR
7 min readReddit'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.
| Limit | Value | Where Reddit states it |
|---|---|---|
| Authenticated queries | 100 queries per minute (QPM) per OAuth client id | Reddit Data API Wiki |
| Averaging window | Currently 10 minutes, to support bursting | Reddit Data API Wiki |
| Effective window budget | 1,000 queries per rolling 10 minutes | Derived from the two rows above |
| Unauthenticated traffic | Blocked outright; the default rate limit does not apply | Reddit Data API Wiki |
| Chat messages | 2,000 per day per recipient, 3,000 per day total | Reddit Data API Wiki |
| Chat rooms, bot accounts | Up to 300 joins per day | Reddit Data API Wiki |
| Legacy published figure | 60 requests per minute for OAuth2 clients | reddit-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.
| Header | What Reddit says it reports |
|---|---|
X-Ratelimit-Used | Approximate number of requests used in this period |
X-Ratelimit-Remaining | Approximate number of requests left to use |
X-Ratelimit-Reset | Approximate 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.

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
Get Started
Reddit, X, Bluesky & HN
Real-time intent alerts
Unlimited AI replies
Ranked by buyer intent

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
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
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


When is scraping Reddit legal? The User Agreement answers before any court does
Two answers to is scraping Reddit legal: US courts stopped treating public scraping as a crime, and Reddit bans it by contract without written consent.


Reddit Post Karma vs Comment Karma: What Each Number Counts
Reddit splits your score into post karma vs comment karma. Here is what each one counts, why it never matches votes, and what subreddit gates check.


Every Reddit Engagement Rate You See Was Built by Somebody Else
A Reddit engagement rate exists in no Reddit product. What the API returns, what post insights show, and the three rates people build out of those parts.

