Reddit is one of the largest data sources on the internet — over 1 billion posts, hundreds of millions of comments, and 97 million daily active users generating content across 100,000+ active subreddits.
The Reddit API gives developers, researchers, and marketers programmatic access to all of it.
But after Reddit's controversial 2023 API changes, the landscape looks very different from what it did a few years ago. If you're building a bot, scraping data for research, or automating your Reddit marketing workflows, you need to understand exactly what the API offers today — and what it costs.
This guide covers everything: authentication, rate limits, PRAW, key endpoints, and real code examples you can run today.
TL;DR: Reddit API in 2026
- The Reddit API is free for low-volume personal use (100 queries per minute).
- High-volume and commercial use requires a paid Data API tier, which starts at significant cost.
- Authentication uses OAuth2. You need a Reddit app registered at reddit.com/prefs/apps.
- PRAW (Python Reddit API Wrapper) is the easiest way to get started in Python.
- Key endpoints cover posts, comments, subreddits, users, and search.
- Reddit bots must follow strict rate limits and the rules of each subreddit.
What Is the Reddit API?
The Reddit API is a RESTful interface that lets you read and write data on Reddit programmatically.
What you can do with it:
- Fetch posts, comments, and user profiles
- Search subreddits and posts by keyword
- Submit posts and comments from your account
- Vote on content (within Reddit's ToS)
- Monitor subreddits for new activity in real time
- Build moderation tools, analytics dashboards, and automated bots
The API returns data as JSON, making it easy to parse in any programming language.
What you cannot do:
- Access private subreddits without being a member
- Bypass rate limits programmatically
- Use the API for commercial applications without a paid tier
Reddit's API has been around since 2008, but the rules around it changed dramatically in 2023 — and not in developers' favor.
The 2023 API Pricing Controversy (And Where Things Stand Now)
In April 2023, Reddit announced it would begin charging for API access starting July 1, 2023. The pricing was steep.
The numbers that caused the backlash:
At launch, Reddit set its API pricing at approximately $0.24 per 1,000 API calls. For apps like Apollo — a popular third-party Reddit client — that translated to an estimated $20 million per year in API costs. Apollo shut down. So did Reddit is Fun, RIF is Fun, and dozens of other popular apps.
Reddit's stated goal was to recapture value before its IPO (which happened in March 2024 on the NYSE). Critics argued the pricing was deliberately set to kill third-party clients.
What this means for you in 2026:
- Free tier: Available for personal, non-commercial use. Limited to 100 queries per minute (QPM).
- Paid Data API: Required for commercial use, high-volume research, and AI training. Pricing is negotiated directly with Reddit and varies significantly by use case.
- Reddit Developer Platform: Reddit launched its own first-party developer platform with more controlled app integrations.
For most developers building tools for personal use — bots, monitoring scripts, personal dashboards — the free tier is sufficient. If you're building something commercial, budget for Data API costs from day one.
Source: Reddit's Developer Terms
How to Authenticate with the Reddit API (OAuth2)
Reddit uses OAuth2 for authentication. Every API request needs to be authenticated with an access token.
Step 1: Create a Reddit App
Go to https://www.reddit.com/prefs/apps and click "create another app" at the bottom.
Fill in:
- Name: Your app name
- App type: "script" for personal use bots; "web app" for production apps
- Redirect URI:
http://localhost:8080works for scripts
After creating the app, Reddit gives you a client ID (under the app name) and a client secret.
Step 2: Request an Access Token
For "script" type apps (personal use), use the password grant flow:
import requests
import base64
CLIENT_ID = "your_client_id"
CLIENT_SECRET = "your_client_secret"
USERNAME = "your_reddit_username"
PASSWORD = "your_reddit_password"
USER_AGENT = "MyBot/0.1 by u/your_username"
auth = requests.auth.HTTPBasicAuth(CLIENT_ID, CLIENT_SECRET)
data = {
"grant_type": "password",
"username": USERNAME,
"password": PASSWORD,
}
headers = {"User-Agent": USER_AGENT}
response = requests.post(
"https://www.reddit.com/api/v1/access_token",
auth=auth,
data=data,
headers=headers,
)
token = response.json()["access_token"]
print(f"Access token: {token}")
Step 3: Make Authenticated Requests
headers = {
"Authorization": f"bearer {token}",
"User-Agent": USER_AGENT,
}
response = requests.get(
"https://oauth.reddit.com/r/python/hot",
headers=headers,
params={"limit": 10},
)
posts = response.json()["data"]["children"]
for post in posts:
print(post["data"]["title"])
Important: Access tokens expire after 1 hour. You need to refresh them. PRAW handles this automatically, which is one reason it's worth using.
Reddit API Rate Limits and Free vs Paid Tiers
Understanding rate limits is critical. Hit them and your requests start returning 429 errors.
Free tier limits:
- 100 requests per minute (QPM) — enforced per OAuth2 client
- 1,000 requests per hour in some older documentation (the QPM limit is what actually matters)
- Applies to read and write operations alike
Checking your rate limit status:
Every API response includes headers that tell you where you stand:
X-Ratelimit-Used: 43
X-Ratelimit-Remaining: 257
X-Ratelimit-Reset: 421
X-Ratelimit-Used: Requests used in the current windowX-Ratelimit-Remaining: Requests left before hitting the limitX-Ratelimit-Reset: Seconds until the window resets
Best practices for staying within limits:
- Add delays between requests (at least 2 seconds for scripts)
- Cache responses you'll need again rather than re-fetching
- Use the
limitparameter to get more data per request (up to 100 items) - Avoid hammering the same endpoint repeatedly
For paid tiers, Reddit offers significantly higher limits. Contact Reddit's business team through their developer portal to discuss pricing.
PRAW: The Python Reddit API Wrapper
PRAW is the official Python library for the Reddit API. It handles authentication, token refresh, rate limiting, and most of the boilerplate automatically.
Installation:
pip install praw
Basic setup:
import praw
reddit = praw.Reddit(
client_id="your_client_id",
client_secret="your_client_secret",
user_agent="MyBot/0.1 by u/your_username",
username="your_reddit_username",
password="your_reddit_password",
)
print(reddit.user.me())
Fetching hot posts from a subreddit:
subreddit = reddit.subreddit("python")
for post in subreddit.hot(limit=10):
print(f"{post.score:>6} | {post.title}")
Reading comments on a post:
submission = reddit.submission(url="https://www.reddit.com/r/python/comments/abc123/")
submission.comments.replace_more(limit=0)
for comment in submission.comments.list():
print(f"u/{comment.author}: {comment.body[:100]}")
Searching a subreddit:
subreddit = reddit.subreddit("learnpython")
for post in subreddit.search("API tutorial", sort="top", time_filter="month"):
print(post.title, post.url)
Submitting a post (use responsibly):
subreddit = reddit.subreddit("test")
subreddit.submit(
title="Testing PRAW submission",
selftext="This is a test post from PRAW."
)
PRAW respects Reddit's rate limits automatically. If you send requests too fast, it sleeps and retries rather than crashing. This makes it far more robust than raw HTTP requests for long-running scripts.
Key Reddit API Endpoints
The Reddit API has dozens of endpoints. These are the ones you'll actually use.
Posts (Submissions)
| Endpoint | Description |
|---|---|
/r/\{subreddit\}/hot | Hot posts in a subreddit |
/r/\{subreddit\}/new | Newest posts |
/r/\{subreddit\}/top | Top posts (use t=day/week/month/year/all) |
/r/\{subreddit\}/rising | Rising posts |
/api/submit | Submit a new post |
Comments
| Endpoint | Description |
|---|---|
/r/\{subreddit\}/comments/\{article\} | Comments on a specific post |
/api/comment | Submit a comment |
/user/\{username\}/comments | A user's comment history |
Subreddits
| Endpoint | Description |
|---|---|
/r/\{subreddit\}/about | Subreddit metadata (subscribers, rules, etc.) |
/subreddits/search | Search for subreddits by keyword |
/subreddits/popular | Popular subreddits |
/subreddits/new | Newly created subreddits |
Users
| Endpoint | Description |
|---|---|
/user/\{username\}/about | User profile data |
/user/\{username\}/submitted | A user's post history |
/user/\{username\}/overview | Posts and comments combined |
/api/v1/me | Your own authenticated account info |
Search
| Endpoint | Description |
|---|---|
/search | Site-wide search across all subreddits |
/r/\{subreddit\}/search | Search within a specific subreddit |
Raw API example — fetching subreddit metadata:
import requests
headers = {
"Authorization": "bearer YOUR_TOKEN",
"User-Agent": "MyBot/0.1 by u/your_username",
}
response = requests.get(
"https://oauth.reddit.com/r/python/about",
headers=headers,
)
data = response.json()["data"]
print(f"Subscribers: {data['subscribers']:,}")
print(f"Active users: {data['active_user_count']}")
print(f"Created: {data['created_utc']}")
Building a Simple Reddit Bot
A Reddit bot watches for specific activity and responds automatically. This section walks through a basic monitoring bot.
Use case: Alert when a keyword appears in a subreddit's new posts.
import praw
import time
reddit = praw.Reddit(
client_id="your_client_id",
client_secret="your_client_secret",
user_agent="KeywordBot/0.1 by u/your_username",
username="your_reddit_username",
password="your_reddit_password",
)
SUBREDDIT = "startups"
KEYWORDS = ["reddit api", "praw", "reddit bot"]
def check_posts():
subreddit = reddit.subreddit(SUBREDDIT)
for post in subreddit.new(limit=25):
title_lower = post.title.lower()
for keyword in KEYWORDS:
if keyword in title_lower:
print(f"[MATCH] {keyword!r} found in: {post.title}")
print(f" URL: {post.url}")
print(f" Score: {post.score}")
print()
while True:
check_posts()
time.sleep(60) # Check every 60 seconds
For streaming new posts in real time, PRAW has a built-in stream:
subreddit = reddit.subreddit("all")
for post in subreddit.stream.submissions(skip_existing=True):
if "python" in post.title.lower():
print(f"New post: {post.title}")
Critical bot rules:
- Set a descriptive User-Agent. Reddit requires this. Format:
AppName/version by u/username. - Never run a bot on a new account. Subreddits often have minimum account age and karma requirements. Analyze your Reddit profile to check before you start.
- Respect subreddit rules. Many subreddits ban bots entirely. Check the sidebar rules before deploying.
- Add delays between actions. Even with PRAW's rate limiting, adding
time.sleep(2)between writes is good practice. - Don't vote on your own content. Reddit's ToS explicitly prohibits this.
Reddit API Use Cases: Analytics, Monitoring, and Automation
The Reddit API unlocks a wide range of practical applications. Here are the most common ones.
1. Brand monitoring
Watch for mentions of your company, product, or competitors across Reddit in real time. A simple keyword stream can alert your team when someone posts about you in r/entrepreneurship or asks a question you could answer in r/SEO.
2. Sentiment analysis and market research
Reddit's comment threads are unfiltered consumer opinions. Pulling comments about a product category and running sentiment analysis gives you a real view of how people feel — something survey data can't match. According to a 2023 Cision study, 74% of adults turn to Reddit for information about brands and products, making it one of the richest sources for unstructured consumer opinion data.
3. Content inspiration and trend detection
Monitor the "rising" feed across relevant subreddits to spot content trends before they hit mainstream. If something is gaining upvotes fast in r/technology, it might be worth writing about.
4. Subreddit analytics
Pull post frequency, engagement rates, and top-performing content from subreddits relevant to your niche. This is the data behind our Reddit CQS guide — understanding what content resonates requires actually looking at the data.
5. Moderation tooling
Subreddit moderators use the API to build custom AutoModerator rules, keyword filters, ban management tools, and spam detection systems at scale.
6. Academic research
Reddit is one of the most studied platforms in computational social science. Researchers use Pushshift (when available) and the official API to study everything from political polarization to mental health language patterns.
Reddit API Free vs Paid: What You Actually Get
Here is a clear breakdown of what the free tier gives you versus what requires a paid Data API agreement.
Free tier (OAuth2 app):
- 100 requests per minute
- Access to public subreddit data, posts, and comments
- Write access (submit posts, comments, votes) through your own account
- Access to user profile data (public)
- Sufficient for personal bots, research scripts, and small-scale monitoring
Paid Data API tier:
- Required for commercial applications
- Required if your app has more than 500 users or processes more than a defined volume threshold
- Required for AI training data and large-scale data extraction
- Higher rate limits (negotiated per contract)
- Access to historical data at scale
What is "commercial use" under Reddit's terms?
Reddit's terms define commercial use broadly. If your app generates revenue — directly or indirectly — from Reddit data, you likely need a Data API agreement. This includes SaaS tools, analytics platforms sold to clients, and AI products trained on Reddit content.
For developers building internal tools, personal projects, or open-source applications, the free tier covers most needs. Just make sure you're not reselling the data or embedding it in a product that others pay to use.
FAQ: Reddit API Questions
Is the Reddit API free?
Yes, for personal and non-commercial use. Reddit provides free API access for individual developers building personal tools, bots, and research projects, up to 100 requests per minute. Commercial use, high-volume data extraction, and AI training data require a paid Data API agreement negotiated directly with Reddit.
What is reddit api python?
"Reddit API Python" typically refers to using either the raw Reddit API with the requests library or the PRAW (Python Reddit API Wrapper) library. PRAW is the most common approach — it wraps the full API in a clean Python interface, handles authentication automatically, and respects rate limits. Install it with pip install praw and follow the quickstart in the PRAW docs.
What are Reddit API rate limits?
The free tier allows 100 requests per minute (QPM). Each API response includes headers (X-Ratelimit-Remaining, X-Ratelimit-Reset) showing your remaining budget. Exceeding the limit returns a 429 status code. PRAW handles rate limits automatically by adding sleep delays when you approach the limit.
How do I get a Reddit API key?
Go to reddit.com/prefs/apps, log in, and click "create another app." Choose "script" for personal use. After creating the app, your client ID appears under the app name, and your client secret is labeled "secret." These credentials, combined with your Reddit username and password, are all you need to authenticate.
What happened to the Reddit API in 2023?
In April 2023, Reddit announced plans to charge for API access starting July 1, 2023. Pricing was set at approximately $0.24 per 1,000 API calls — steep enough that major third-party Reddit apps (Apollo, RIF is Fun, Reddit is Fun) calculated costs in the millions annually and shut down rather than pay. The changes triggered a massive protest where thousands of subreddits went dark. Reddit held firm on the pricing, completed its IPO in March 2024, and the current tiered pricing structure remains in place.
Can I use the Reddit API for automation?
Yes, within limits. The Reddit API supports automated posting, commenting, voting, and monitoring — which is how Reddit bots work. However, Reddit's Terms of Service prohibit certain types of automation: vote manipulation, spam, and impersonating real users. Subreddit rules may ban bots entirely. Always read the subreddit rules before deploying any automation, and use a descriptive User-Agent string that identifies your bot.
Is PRAW the only option for Python?
PRAW is the most popular and well-maintained Python library, but it's not the only option. asyncpraw is an async version for projects using asyncio. For lightweight use cases, raw requests calls work fine. Some developers prefer httpx for async HTTP. The underlying Reddit API is the same regardless of which library you use.
Conclusion
The Reddit API gives you access to one of the richest unfiltered data sources on the internet — but the rules around it have tightened significantly since 2023.
For personal projects and low-volume automation, the free tier is more than enough. PRAW makes Python integration straightforward, and once you understand the authentication flow and rate limits, the API itself is well-designed and consistent.
For commercial applications, factor in Data API costs early. Reddit's pricing for high-volume access is real, and building a product that depends on cheap data access is a liability.
What to do next:
- Register your app at reddit.com/prefs/apps
- Install PRAW:
pip install praw - Test your credentials with a simple
reddit.user.me()call - Start with read-only scripts before adding write operations
- Check the PRAW documentation for the full list of supported objects and methods
If you're using the API as part of a Reddit marketing workflow, combine it with our tools to analyze your Reddit profile and understand the Reddit CQS scoring system that affects your visibility.
The API is a powerful tool. Use it within the rules and it opens up an enormous amount of data.