Reddit Data API in 2026: REST Endpoints, No PRAW, No OAuth
Pull Reddit posts at $0.002 per call with a third-party REST API. Bearer token, no PRAW, no OAuth flow. Python examples, real endpoints, real pricing.

The Reddit Data API in 2026 offers two paths for accessing Reddit content programmatically. The official Reddit Data API requires OAuth, a registered developer app, and a commercial tier starting at an estimated $12,000 per year minimum. A third-party REST adapter accepts a bearer token and charges $0.002 per GET read with no annual contract, no developer-app registration, and no OAuth flow. This guide covers the REST adapter path in full, including all three core read endpoints, cursor-based pagination, the complete post object schema, and a PRAW migration map.
Not affiliated with Reddit Inc. redditapis.com is an independent third-party REST proxy for Reddit's API.
What you will have after reading:
- A working Python client for all three core read endpoints
- A clear cost model for your workload
- A one-hour PRAW migration plan
- Production error handling for 429, 401, and 500 responses
Cost: $0.002 per GET read. Free credit: $0.10 at /signup. No card required.
The Two Paths for Reddit Data Access in 2026
Reddit data access in 2026 splits into two paths that differ sharply on setup time, cost structure, and engineering overhead. The official path requires OAuth authentication, a registered developer app, commercial approval from Reddit Inc, and an estimated $12,000 per year minimum. The third-party REST adapter path requires a bearer token from signup, costs $0.002 per call, and takes 30 minutes to ship.
- Official path: an estimated $12,000/year minimum, OAuth required, 2-4 week setup, contractual with Reddit Inc
- Third-party REST path: $0.002 per call, bearer token, 30-minute setup, no contract required
Path 1: Reddit Inc's official Data API. The Standard commercial tier opens at $12,000 per year minimum plus per-call fees, per Reddit's Data API terms. Getting on that tier requires a registered developer app, commercial approval from Reddit, an OAuth flow with client ID and secret, and usually a 2 to 4 week wait from application to first production call. Reddit published the updated API pricing structure in 2023, and the Standard tier minimum has remained the dominant barrier for teams without enterprise budgets.
Path 2: Third-party REST adapter. You sign up at /signup, get a bearer token, and call endpoints. No developer app registration. No OAuth flow. No annual contract. Per-call pricing means you pay for exactly what you use. A 10,000-read-per-month workload costs an estimated $20.
For bootstrapped developers, the 2023 API pricing shift created real uncertainty. One builder of a Reddit-based research tool paused development and marketing entirely during the API drama, waiting to understand whether the product could survive on the new economics.

Fed 🐻
@foliofed
Few months ago I broke rule #1: "Just don't stop" During the Reddit API drama, I felt the platform risk & paused dev/marketing until I had more info Turns out churn is a thing, and it hurts w/o new business. Its been a tough summer, but we're back! Reminder - Just don't st… Show more

The two paths serve genuinely different buyers. If you need a contractual relationship with Reddit Inc for compliance or procurement reasons, only the official path provides that. If you need data fast and cost efficiently, the REST adapter path finishes in 30 minutes.
PRAW Authentication vs REST Bearer Token: A Side by Side
PRAW is a Python wrapper for Reddit's official OAuth API. It handles the OAuth token dance, refresh cycles, and rate-limit handling for you, but it still requires everything the OAuth path demands:
- A registered developer app at reddit.com/prefs/apps with an approved
client_id - A
client_secretstored securely in your environment - A
user_agentstring that matches Reddit's format exactly - Standard tier approval from Reddit Inc if you need commercial volume
The PRAW setup path runs to nine meaningful steps before you make your first API call. The REST adapter path runs to one: sign up, get a key, set the Authorization header.
# PRAW setup: 9 steps compressed to code
import praw
reddit = praw.Reddit(
client_id="YOUR_CLIENT_ID", # step 3: from registered app
client_secret="YOUR_CLIENT_SECRET", # step 3: from registered app
user_agent="my-app/1.0 (by u/youruser)", # must match Reddit's format
)
# Now you wait for Standard tier approval if you need volume
# REST adapter: 1 step
import os, requests
API_KEY = os.environ["REDDITAPIS_KEY"]
BASE_URL = "https://api.redditapis.com"
HEADERS = {"Authorization": f"Bearer {API_KEY}"}
# Ready to call
The OAuth deprecation discussed at length on r/redditdev in 2023 locked out many teams that had relied on PRAW's unofficial tier. The Pushshift access removal in June 2023 compounded the problem for research workloads. The REST adapter path emerged as the fastest route for teams who need data without the approval overhead.
The commercial license requirement is the core obstacle on the official PRAW path. One developer whose product depended on the Reddit API described the situation plainly after Reddit tightened commercial requirements in November 2025.

Fed 🐻
@foliofed
Wait but why? You've probably read the post, and I can't share more specifics It comes down to the Reddit API requiring paid products to obtain a commercial license I went for it, it didn't work out. I have a grace period to get compliant or deintegrate https://t.co/LXxLJVWyXa
The 3 Read Endpoints That Cover Most Workloads
Three GET endpoints handle the vast majority of read workflows. All three return the same post object shape, use cursor-based pagination via the same after parameter, and cost $0.002 per call (pricing).
Base URL is https://api.redditapis.com. Auth is a bearer token in the Authorization header. Response shape is documented at docs.redditapis.com and stable across versions.
| Endpoint | Use Case | Cost |
|---|---|---|
GET /api/reddit/posts |
Subreddit feed (new, hot, top, rising, controversial, best) | $0.002 |
GET /api/reddit/search |
Keyword search across Reddit or scoped to a subreddit | $0.002 |
GET /api/reddit/sub/:name/top |
Top posts by timeframe (day, week, month, year, all) | $0.002 |
The search endpoint is the workhorse for brand monitoring and topic research. The posts endpoint is the right choice for feed-style ingestion. The top endpoint is best for stable corpus building where you need the all-time or weekly best rather than a live stream.
Setup: Get an API Key in 30 Minutes
Sign up at /signup for an API key and $0.10 in free credit. That covers 50 GET calls before any payment is required.
Set the key in your environment and use this wrapper for all three endpoints:
import os
import requests
import time
API_KEY = os.environ["REDDITAPIS_KEY"]
BASE_URL = "https://api.redditapis.com"
def reddit_get(path: str, params: dict | None = None, retries: int = 3) -> dict:
"""Generic GET wrapper with retry on 429 and 500."""
for attempt in range(retries):
response = requests.get(
f"{BASE_URL}{path}",
headers={"Authorization": f"Bearer {API_KEY}"},
params=params or {},
timeout=30,
)
if response.status_code == 429:
retry_after = int(response.headers.get("Retry-After", 2 ** attempt))
time.sleep(retry_after)
continue
if response.status_code >= 500 and attempt < retries - 1:
time.sleep(2 ** attempt)
continue
response.raise_for_status()
return response.json()
response.raise_for_status()
return {}
That wrapper covers 429 rate-limit backoff, 500 server errors, and timeout. No praw.ini, no OAuth config, no client ID. The bearer token is generated when you sign up at /signup. For the complete rate limit picture, see /blogs/reddit-api-rate-limits-2026.
For a direct comparison of pulling Reddit data with and without PRAW, this tutorial shows the Reddit JSON approach using only the standard library, no wrapper required:
Endpoint 1: Subreddit Feed
The /api/reddit/posts endpoint pulls the post feed for any subreddit. It accepts sort values of new, hot, top, rising, controversial, and best, supports a limit of 1-100, and returns cursor-based pagination via the after parameter. At $0.002 per call, it is the primary endpoint for feed ingestion and monitoring pipelines.
The /api/reddit/posts endpoint pulls the post feed for any subreddit:
subreddit(required): name without ther/prefixsort(optional):new,hot,top,rising,controversial,best(defaults tonew)t(optional, only for top and controversial):hour,day,week,month,year,alllimit(optional): 1-100, defaults to 25after(optional): pagination cursor in formatt3_xxx
def get_subreddit_feed(subreddit: str, sort: str = "new", limit: int = 25) -> list[dict]:
"""Pull the latest posts from a subreddit."""
data = reddit_get("/api/reddit/posts", {
"subreddit": subreddit,
"sort": sort,
"limit": limit,
})
return data.get("posts", [])
# Pull the 50 newest posts from r/MachineLearning
posts = get_subreddit_feed("MachineLearning", sort="new", limit=50)
for p in posts[:5]:
print(f"{p['upvotes']} | {p['title'][:80]}")
The response shape includes every field you need for downstream processing: id, title, author, permalink, url, link_url, text, subreddit, upvotes, comments, upvote_ratio, is_self, is_crosspost, crosspost_origin, created_utc, created (ISO-8601), plus flag fields like over_18, stickied, locked, spoiler. The author_info object carries premium status and flair if you need it. Full schema at docs.redditapis.com.
Start building with RedditAPI
Reads $0.002, votes $0.005, writes $0.012, DMs $0.025. $0.50 free credits.
Endpoint 2: Keyword Search
The /api/reddit/search endpoint runs keyword search across all of Reddit or scoped to a single subreddit. It accepts the q query string, an optional subreddit scope, sort options (relevance, new, hot, top, comments), and cursor-based pagination. This is the primary endpoint for brand monitoring, competitor research, and topic tracking, all at $0.002 per call.
The /api/reddit/search endpoint runs Reddit-wide or subreddit-scoped keyword search:
q(required): the search querysubreddit(optional): limit results to a specific subredditsort(optional):relevance,new,hot,top,commentst(optional):hour,day,week,month,year,allnsfw(optional, boolean): include NSFW contentlimit(optional): 1-100after(optional): pagination cursor
def search_reddit(query: str, subreddit: str | None = None, sort: str = "new", limit: int = 25) -> list[dict]:
"""Search Reddit for a query, optionally scoped to a subreddit."""
params = {"q": query, "sort": sort, "limit": limit}
if subreddit:
params["subreddit"] = subreddit
data = reddit_get("/api/reddit/search", params)
return data.get("posts", [])
# Find all mentions of "GPT-5" in the last week
mentions = search_reddit("GPT-5", sort="new", limit=100)
for m in mentions[:10]:
print(f"r/{m['subreddit']} | {m['upvotes']} ups | {m['title'][:80]}")
This is the workhorse endpoint for brand monitoring, competitor watch, and topic-level trend tracking. For sustained monitoring loops, pair it with the pagination pattern below and a short sleep between pages to stay within sustainable call rates. See /blogs/reddit-api-rate-limits-2026 for the recommended polling intervals.
Endpoint 3: Top Posts by Timeframe
The /api/reddit/sub/:name/top endpoint pulls top posts from a subreddit ranked by score within a fixed timeframe. The t parameter accepts hour, day, week, month, year, or all. The subreddit name is a path parameter rather than a query string. Use t=all for stable corpus building and t=day for trend detection, both at $0.002 per call.
The /api/reddit/sub/:name/top endpoint pulls top posts ranked by score within a timeframe. Subreddit name is a path parameter, not a query parameter:
def get_top_posts(subreddit: str, timeframe: str = "week", limit: int = 25) -> list[dict]:
"""Pull top posts from a subreddit by timeframe."""
data = reddit_get(f"/api/reddit/sub/{subreddit}/top", {
"t": timeframe,
"limit": limit,
})
return data.get("posts", [])
# Top 25 posts in r/Python this month
top = get_top_posts("Python", timeframe="month", limit=25)
for t in top:
print(f"{t['upvotes']} ups | {t['comments']} comments | {t['title'][:80]}")
For research workflows that need a stable corpus (paper analysis, sentiment baselines, longitudinal studies), t=all returns the all-time top posts for a subreddit. For trend detection, t=day or t=hour gives you the fastest signal. This endpoint pairs well with the search endpoint for topic-specific corpus building: search first to find the relevant subreddits, then pull top posts from each.
Pagination: Cursor-Based and Stable
Pagination across all three Reddit Data API read endpoints uses a cursor in the t3_xxx format, returned as the after field in each response. Pass the cursor as the after query parameter on the next call to fetch the following page. The cursor is stable, meaning new posts arriving between calls do not shift your position. When after is absent or null, you have reached the last page.
Every response includes an after cursor. To paginate, pass it as the after query parameter on the next call:
def paginate_subreddit(subreddit: str, max_posts: int = 500, sort: str = "new") -> list[dict]:
"""Paginate through a subreddit feed up to max_posts."""
all_posts: list[dict] = []
after: str | None = None
while len(all_posts) < max_posts:
params: dict = {"subreddit": subreddit, "sort": sort, "limit": min(100, max_posts - len(all_posts))}
if after:
params["after"] = after
data = reddit_get("/api/reddit/posts", params)
batch = data.get("posts", [])
all_posts.extend(batch)
after = data.get("after")
if not after:
break
return all_posts[:max_posts]
posts = paginate_subreddit("python", max_posts=300)
print(f"Fetched {len(posts)} posts")
Cursor-based pagination is stable across calls. New posts arriving between calls do not shift your offset. When after is null (or absent from the response), you have reached the last page.
The cursor format is t3_xxx, using Reddit's type-prefix ID system:
t1_for commentst2_for userst3_for posts (submissions)t4_for messagest5_for subreddits
See the Reddit ID system documentation for historical context on the fullname format.
Response Shape: The Full Post Object
Every post returned by the three Reddit Data API read endpoints shares the same JSON schema. Each object in the posts array contains core fields (id, title, author, permalink, upvotes, comments, subreddit, created_utc) plus engagement signals (upvote_ratio), classification flags (is_self, is_crosspost, over_18, stickied, locked), and an author_info object with premium and flair data. The full schema is stable across all three endpoints.
A stable, shared schema is what makes the migration from PRAW worth it in the first place: you write one parser and it works against the subreddit feed, keyword search, and top-posts endpoints without special-casing each response. Code defensively against the fields that are legitimately optional. link_url is present only on link posts and absent on self posts, crosspost_origin appears only when is_crosspost is true, and author_info.flair is null when the poster has no flair in that subreddit. Read those with .get() and a default rather than direct indexing, and your pipeline survives the edge cases that would otherwise raise a KeyError on the first unusual post in a large pull.
Understanding the full response shape lets you build downstream pipelines that do not break on edge cases. Every post in the posts array includes these fields:
{
"id": "abc123",
"title": "Show HN: I built a Reddit monitoring tool in 2 hours",
"author": "username_here",
"permalink": "/r/Python/comments/abc123/show_hn_i_built/",
"url": "https://www.reddit.com/r/Python/comments/abc123/show_hn_i_built/",
"link_url": "https://example.com/blog-post", # external link if link post
"text": "Post body text if self post",
"subreddit": "Python",
"upvotes": 847,
"comments": 112,
"upvote_ratio": 0.94,
"is_self": True, # True for text posts, False for link posts
"is_crosspost": False,
"crosspost_origin": None, # parent post ID if crossposted
"created_utc": 1748400000,
"created": "2026-05-27T18:00:00Z", # ISO-8601
"over_18": False,
"stickied": False,
"locked": False,
"spoiler": False,
"author_info": {
"premium": False,
"flair": "Contributor"
}
}
For most workloads, title, author, permalink, upvotes, comments, subreddit, created_utc, and text cover everything you need. The is_self flag tells you whether to pull body from text or follow link_url. The upvote_ratio gives you engagement quality beyond raw upvote count.
Cost Comparison at Three Volume Levels
The Reddit Data API cost comparison at three volume tiers shows the third-party REST adapter at $0.002 per call versus Reddit's Standard tier at an estimated $12,000 per year minimum. At 10,000 reads per month the REST adapter costs an estimated $20 versus roughly $1,000 amortized for the Standard tier. The crossover where Standard tier becomes cost-competitive is around 500,000 reads per month.
The cost question determines the path for most teams. Three stacks compared at three volume levels:
At 10,000 reads per month:
- PRAW + OAuth + Reddit Standard: $1,000+ (Standard tier $12K/year floor divided by 12, before per-call fees)
- Self-hosted browser automation: an estimated $80-250/month (proxies + anti-bot service) plus significant engineer time
- Third-party REST adapter: an estimated $20 (10,000 x $0.002)
At 100,000 reads per month:
- Standard tier: Still gated by the $12K annual floor ($1,000/month amortized)
- Third-party REST adapter: $200 (100,000 x $0.002)
At 1,000,000 reads per month:
- Standard tier: approximately $1,000/month (amortized floor) plus per-call fees
- Third-party REST adapter: $2,000 (approaching the point where Standard tier becomes competitive)
The crossover where Standard tier becomes cost-competitive is around 500,000 reads per month. Use /reddit-api-cost-calculator to model your exact workload. See /pricing for the current per-endpoint rate card.
The cheapest Reddit API. Try it free.
Reads from $0.002 per call. $0.50 free credits. No credit card required.
Migration from PRAW: Field-Name Map and Code Diff
Migrating from PRAW to a third-party REST adapter is a base-URL swap plus a field-name adjustment. The key mappings are: submission.title to post["title"], submission.score to post["upvotes"], submission.num_comments to post["comments"], and submission.selftext to post["text"]. Most migrations finish in under an hour because the response shapes are intentionally close.
If you have existing code calling PRAW, the migration is a base-URL swap and a response-shape adjustment:
# OLD (PRAW + OAuth + Reddit developer app)
import praw
reddit = praw.Reddit(
client_id="YOUR_CLIENT_ID",
client_secret="YOUR_CLIENT_SECRET",
user_agent="my-app/1.0",
)
for post in reddit.subreddit("python").new(limit=25):
print(post.title, post.score)
# NEW (third-party REST adapter, bearer token, pay-per-call)
import os, requests
r = requests.get(
"https://api.redditapis.com/api/reddit/posts",
headers={"Authorization": f"Bearer {os.environ['REDDITAPIS_KEY']}"},
params={"subreddit": "python", "sort": "new", "limit": 25},
)
for post in r.json()["posts"]:
print(post["title"], post["upvotes"])
Field-name map (PRAW attribute to REST JSON field):
submission.titlebecomespost["title"]submission.scorebecomespost["upvotes"]submission.permalinkbecomespost["permalink"](unchanged)submission.num_commentsbecomespost["comments"]submission.created_utcbecomespost["created_utc"]submission.authorbecomespost["author"]submission.selftextbecomespost["text"]submission.urlbecomespost["link_url"]for link posts
PRAW's attribute documentation covers the full submission surface if you have less-common attributes to map. Most migrations finish in under an hour. Sign up at /signup to get your bearer token and run the comparison against your existing PRAW code.
If your existing PRAW code runs in an asyncio context, AsyncPRAW is the async-native PRAW variant. For teams switching to the REST adapter, the requests library covers synchronous HTTP calls while httpx handles both sync and async from the same API surface, which is useful when your application mixes both patterns.
Reddit Data API in the Age of AI Search 2026
Reddit's role in the AI search ecosystem shifted substantially over the past two years. Google's AI Overviews consistently cite r/redditdev, r/learnpython, r/datascience, and dozens of niche subreddits as sources in generated answers. If your product appears in Reddit discussions, that community-generated content feeds directly into what AI systems show users when they search.
This creates several new categories of Reddit data demand in 2026:
AI agent grounding. LLMs need up-to-date, human-authored context to answer questions accurately. Reddit posts are high-quality, topic-specific, and available at scale. The REST path's pay-per-call model makes it practical to pull fresh subreddit content on demand without a standing subscription.
Training data pipelines. Fine-tuning and RLHF workflows need large, diverse text corpora. Reddit's subreddit structure lets you sample domain-specific content precisely. Paginating an entire subreddit with t=all via the top endpoint gives you a stable, reproducible corpus for repeated training runs.
SEO keyword mining. Reddit questions surface keyword opportunities that traditional keyword tools miss. Searching for [product category] recommendations across relevant subreddits surfaces long-tail queries your audience is actively using. These feed content planning, pSEO grids, and FAQ structures.
AI Overviews citation monitoring. If your brand or product appears in subreddit discussions, those threads may appear in AI-generated search results. Monitoring those discussions gives you early warning of narrative shifts before they reach broader search results. See /reddit-api-usecases for implementation patterns.
The REST adapter path is well-suited to all of these because it integrates with any HTTP client, returns structured JSON, and bills per call rather than per seat or per month. An AI pipeline that pulls 500 posts per day to ground a chatbot spends approximately $1 per day and scales linearly.
Production Patterns: Retry, Backoff, and Error Handling
Production Reddit data pipelines fail in four predictable ways: 429 Too Many Requests (back off with the Retry-After header), 401 Unauthorized (check your API key environment variable), 500 Internal Server Error (exponential backoff and retry), and requests.Timeout (increase timeout or retry). GET calls are safe to retry; POST calls are not idempotent, so add deduplication before retrying any write.
Production Reddit data pipelines fail in predictable ways. The patterns below cover the most common failure modes:
429 Too Many Requests: back off exponentially, respect theRetry-Afterheader401 Unauthorized: re-check yourREDDITAPIS_KEYenvironment variable500 Internal Server Error: transient server-side issue, retry with exponential backoffrequests.Timeout: increase timeout or retry; Reddit data is eventually consistent
import os
import time
import requests
import logging
from typing import Generator
API_KEY = os.environ["REDDITAPIS_KEY"]
BASE_URL = "https://api.redditapis.com"
log = logging.getLogger(__name__)
class RedditAPIClient:
"""Production-grade Reddit API client with retry, backoff, and pagination."""
def __init__(self, api_key: str = API_KEY):
self.headers = {"Authorization": f"Bearer {api_key}"}
self.session = requests.Session()
self.session.headers.update(self.headers)
def _get(self, path: str, params: dict | None = None, retries: int = 4) -> dict:
"""GET with exponential backoff on 429 and 5xx."""
for attempt in range(retries):
try:
resp = self.session.get(
f"{BASE_URL}{path}",
params=params or {},
timeout=30,
)
if resp.status_code == 429:
wait = int(resp.headers.get("Retry-After", 2 ** attempt))
log.warning(f"Rate limited, sleeping {wait}s (attempt {attempt + 1})")
time.sleep(wait)
continue
if resp.status_code >= 500 and attempt < retries - 1:
time.sleep(2 ** attempt)
continue
resp.raise_for_status()
return resp.json()
except requests.exceptions.Timeout:
if attempt == retries - 1:
raise
time.sleep(2 ** attempt)
return {}
def paginate(self, path: str, params: dict, max_posts: int = 1000) -> Generator[dict, None, None]:
"""Generator that paginates through results up to max_posts."""
fetched = 0
after: str | None = None
while fetched < max_posts:
page_params = {**params, "limit": min(100, max_posts - fetched)}
if after:
page_params["after"] = after
data = self._get(path, page_params)
posts = data.get("posts", [])
for post in posts:
yield post
fetched += 1
if fetched >= max_posts:
return
after = data.get("after")
if not after:
return
client = RedditAPIClient()
# Stream 500 posts from r/startups
for post in client.paginate("/api/reddit/posts", {"subreddit": "startups", "sort": "new"}, max_posts=500):
print(f"{post['upvotes']:>6} | {post['title'][:80]}")
For deeper integration patterns, see /blogs/reddit-api-python-tutorial. For rate limit handling specifically, /blogs/reddit-api-rate-limits-2026 has the complete 429 playbook. For write endpoints (DMs, comments, votes), see /blogs/how-to-send-reddit-dm-via-api.
What the REST Adapter Does Not Cover
The third-party REST adapter covers public Reddit data: subreddit feeds, keyword search, top posts by timeframe, and the full write surface at redditapis.com. It does not solve three specific cases: private subreddits and NSFW gates that require a logged-in Reddit session, real-time streaming (Reddit has no public WebSocket, polling is the floor), and frontend-only UI elements that require a headless browser regardless of API path.
Three things the REST path does not solve:
- Logged-in views. Private subreddits, NSFW gates that require an account, and user-specific feeds need an authenticated Reddit session.
- Real-time streaming. Reddit does not ship a public WebSocket. Polling at 60-second intervals is the practical floor for near-real-time workflows on any path.
- Frontend-only elements. Page elements that live only in the Reddit web UI need a headless browser regardless of which API you use.
For most data workloads, none of these limits matter. The combination of REST adapter reads plus authenticated write endpoints at /blogs/reddit-api-python-tutorial covers most use cases that would otherwise require a full OAuth integration.
How to Choose the Right Path: Decision Framework
The right Reddit data access path in 2026 comes down to three questions: volume (below 500K reads per month, the REST adapter at $0.002 per call is cheaper than the $12K Standard tier floor), compliance (regulated buyers requiring a Reddit Inc contract need the Standard tier), and speed (the REST adapter ships in 30 minutes versus 2-4 weeks for the OAuth path). For most teams, all three questions point to the REST adapter.
Three questions determine the correct path for your team:
- Volume: Are you below 500K reads per month? REST adapter wins on cost.
- Compliance: Do regulated buyers require a Reddit Inc contract? Standard tier only.
- Speed: Do you need data this sprint? REST adapter ships in 30 minutes.
Volume question: Below 500,000 reads per month, the REST adapter saves an estimated $800 to $980 per month compared to the Standard tier floor. Above 500,000 reads per month, negotiate with Reddit on Standard tier pricing and compare the per-call math against your specific volume. Use /reddit-api-cost-calculator to model your exact workload.
Compliance question: If you are selling to regulated buyers who require a contractual relationship with Reddit Inc as part of their vendor review, the Standard tier is the only path that provides that. The REST adapter route goes through redditapis.com (an independent third-party, not affiliated with Reddit Inc). For every other buyer type, this distinction is irrelevant.
Engineering speed question: The REST adapter ships in 30 minutes. The OAuth path takes 2 to 4 weeks. If you need data this week, the REST adapter is the answer.
For most teams today: you are below 500K reads per month, you are not selling to a regulated buyer who requires a Reddit Inc contract, and you need to ship this sprint. The REST adapter wins on all three questions.
To build production-ready pipelines that scale beyond basic reads, see /blogs/reddit-api-python-tutorial for the complete no-PRAW walkthrough. The full endpoint catalog is at docs.redditapis.com. Start at /signup for $0.10 in free credit with no card required.
Where to Go Next
The guides below cover the production extensions of this REST adapter path: rate limit handling, full Python pipeline examples, write endpoints for DMs and comments, and the cost calculator for volume-based budget modeling.
- /blogs/reddit-api-rate-limits-2026 covers the 429 patterns and backoff strategies for production pipelines
- /blogs/reddit-api-python-tutorial is the general no-OAuth, no-PRAW walkthrough with more code examples
- /blogs/how-to-send-reddit-dm-via-api covers the write-endpoint specifics (DMs, comments)
- /blogs/reddit-vote-api-tutorial-2026 covers programmatic voting via POST /api/reddit/vote
- /reddit-api-usecases documents production use cases with implementation patterns
- /reddit-api-alternatives compares all available Reddit data access paths
- /reddit-api-cost-calculator models your exact monthly cost at any read volume
- /pricing has the canonical per-endpoint rate card
Sign up at /signup for $0.10 in free credit and the code above runs against real Reddit data in the first 60 seconds. No card required. The full API surface for writes, votes, DMs, and account-level operations is documented at docs.redditapis.com.
Frequently asked questions.
Reddit Inc operates an official Data API on a commercial tier (Standard tier opens at $12,000 per year minimum plus per-call fees). Third-party REST adapters like redditapis.com offer the same publicly available Reddit content via pay-per-call billing at $0.002 per GET read with a bearer token, no OAuth, and no developer-app registration. The choice depends on volume, compliance posture, and engineering preference. See [/pricing](/pricing) for current rates.
Yes. PRAW wraps Reddit's official OAuth API. A third-party REST adapter exposes the same data via plain HTTP with a bearer token. The response shapes are documented and stable. Most migrations from PRAW take under an hour because the field names map cleanly (submission.title becomes post['title'], submission.score becomes post['upvotes']). Start at [/signup](/signup) and get $0.10 in free credit.
Reddit Inc's Standard tier opens at $12,000 per year minimum plus per-call fees. Third-party REST adapters charge per call. redditapis.com is $0.002 per GET read, $0.005 per vote, $0.012 per write, $0.025 per DM. Account endpoints are free. A typical monitoring workload of 10,000 reads per month costs $20 on the third-party path. See [/pricing](/pricing) for the full rate card and [/reddit-api-cost-calculator](/reddit-api-cost-calculator) for budget modelling.
Only if you use Reddit's official OAuth path (which PRAW wraps). A third-party REST adapter ships its own bearer token. You sign up at [/signup](/signup), get an API key, set the Authorization header, and call endpoints directly. No developer app registration, no client ID and secret pair, no OAuth callback URL. The full endpoint surface is at [docs.redditapis.com](https://docs.redditapis.com).
Three GET endpoints cover most read workloads. /api/reddit/posts pulls the subreddit feed with sort options. /api/reddit/search runs keyword search across Reddit or scoped to a subreddit. /api/reddit/sub/:name/top pulls top posts by timeframe. All return JSON with a posts array and an after cursor for pagination. Write endpoints exist for posting comments, voting, and DMs. See [/reddit-api-alternatives](/reddit-api-alternatives) for the full comparison.
Every response includes an after cursor in the format t3_xxx. Pass that string as the after query parameter on the next call to get the following page. Reddit pagination is cursor-based, not offset-based, so you can paginate stable result sets even when new posts arrive between calls. Stop when after returns null. See [/blogs/reddit-api-python-tutorial](/blogs/reddit-api-python-tutorial) for a complete pagination implementation.
The migration is a base-URL swap and a response-shape adjustment that typically finishes in under an hour. Field-name map: submission.title becomes post['title'], submission.score becomes post['upvotes'], submission.permalink stays the same, submission.num_comments becomes post['comments']. The endpoint shapes are intentionally close to what PRAW emits so existing code converts cleanly. Sign up at [/signup](/signup) to start.
Reddit Inc's official API imposes rate limits that vary by tier and OAuth app approval status. Third-party REST adapters handle Reddit session management internally, so you see their rate-limit behavior rather than Reddit's raw limits. For the full breakdown of 429 patterns, backoff strategies, and production-safe call patterns, see [/blogs/reddit-api-rate-limits-2026](/blogs/reddit-api-rate-limits-2026).
Yes. Reddit is one of the most frequently cited sources in Google's AI Overviews and is widely used as LLM grounding data. The third-party REST path is particularly well-suited for AI pipelines: pay-per-call billing, JSON responses, cursor pagination, and no OAuth friction. See [/reddit-api-usecases](/reddit-api-usecases) for documented production patterns.
Every GET /api/reddit/posts response includes a posts array and an after cursor. Each post object contains: id, title, author, permalink, url, link_url, text, subreddit, upvotes, comments, upvote_ratio, is_self, is_crosspost, crosspost_origin, created_utc, created (ISO-8601), over_18, stickied, locked, spoiler, and an author_info object with premium status and flair. Full schema at [docs.redditapis.com](https://docs.redditapis.com). See [/blogs/reddit-api-python-tutorial](/blogs/reddit-api-python-tutorial) for field-by-field usage examples.
Keep reading.
Continue exploring related pages.
Get a Reddit API key
Instant bearer token, no waitlist and no enterprise contract.
Reddit API use cases
14 use cases from AI training to brand monitoring and DMs.
Reddit Search API
Search posts, comments, users, and communities over one REST endpoint.
Reddit MCP server
Wrap the REST API as MCP tools for Claude, Cursor, and any MCP client.
Reddit API for AI agents
Live Reddit context for tool calls, MCP servers, and RAG pipelines.
RedditAPI pricing
Endpoint-level costs and quick monthly totals - reads from $0.002 / call.
Reddit API cost calculator
Estimate monthly spend using your request volume.
Reddit API guides and tutorials
Tutorials, walkthroughs, and API deep-dives for developers.
Reddit API alternatives
Evaluate alternatives by cost model, limits, and integration fit.
Official Reddit API vs RedditAPI
Access, setup, rate limits, and pricing, side by side.
Affiliate program
Earn 20% lifetime commissions - capped at $5,000/yr.
Reddit Vote API tutorial
Upvote and downvote a post programmatically via the REST API.
Reddit scraping benchmarks
Real throughput, error rates, and cost benchmarks for Reddit scraping.
Reddit API answers
Direct answers on cost, access, rate limits, endpoints, and auth.
How much the Reddit API costs
Per-call pricing from $0.002 a read, with $0.50 in free credits.
Reddit API in Python
One requests call with a bearer token, no PRAW and no OAuth flow.
Reddit shadowban checker
Check if a Reddit account is shadowbanned in seconds, free and no login.
Similar reads.
More guides on the Reddit API, scraping, pricing, and MCP servers.








