How to Get a Reddit API Key in 2026 (And What to Do When You Can't)
Get a Reddit API key in 2026: register a script app, read the client ID, client secret, and User-Agent, and handle the new manual-approval wall. Plus the no-approval REST alternative when your request gets rejected.

Getting a Reddit API key in 2026 is two problems wearing one name. The first is mechanical: register an app, copy a client ID and a client secret, set a User-Agent. The second is the one nobody warns you about: actually getting approved to use them. This guide covers both, with the exact steps, the credential reference, and a working fallback for when Reddit's approval form sends back a rejection.
TL;DR: A Reddit "API key" is really three values, a client ID, a client secret, and a User-Agent string, that you get by registering a "script" app at reddit.com/prefs/apps. The mechanical setup takes five minutes. The hard part in 2026 is that new API access routes through a manual approval form under Reddit's Responsible Builder Policy, and small projects are frequently rejected. If you are blocked, a managed REST API like api.redditapis.com returns the same posts, comments, and user data with no Reddit app and no approval wall.
What is a Reddit API key?
A Reddit API key is not a single secret string the way a Stripe or OpenAI key is. Reddit uses OAuth2, so what people call an "API key" is actually a pair of app credentials, a client ID and a client secret, that you exchange for a short-lived bearer token, plus a User-Agent header that identifies your app on every request. You generate the credentials once by registering an application on your Reddit account; you generate a fresh token from them whenever the old one expires (every hour for most flows).
This three-part shape trips up first-timers who go looking for a single "API key" field and never find one. There isn't one. Once you internalize that "key" means "client ID + client secret + User-Agent," the rest of the setup is straightforward. The full token-exchange flow, including the https://www.reddit.com/api/v1/access_token call, is covered in the Reddit API authentication and OAuth guide.
How to get a Reddit API key: step by step
To get your credentials, register a script application from your Reddit account preferences. The whole flow lives at one URL and takes about five minutes:
- Log in to Reddit and open https://www.reddit.com/prefs/apps.
- Scroll to the bottom and click "create another app..." (or "create application").
- Give it a name (e.g.
subreddit-monitor). - Select the "script" app type. Script apps are the right choice for server-side bots and data tools you control; "web app" is for OAuth flows where end users log in.
- Leave the description blank or short, and set the redirect URI to
http://localhost:8080. Script apps don't use the redirect, but the field is required. - Click "create app".
Reddit then renders your app. The client ID is the short string directly under the app name (easy to miss). The client secret is labeled and sits next to it. Copy both. You now have your "API key."
This is also exactly what this video tutorial walks through if you prefer to watch the clicks:
The mechanical part ends here. The next part is where 2026 diverges sharply from every older tutorial you'll find.
The credential triple: client ID, client secret, User-Agent
Every authenticated Reddit API call needs all three credentials working together, and each fails in its own way when it's wrong:
- Client ID , your app's public identifier. Shown beneath the app name. Safe to expose in client config; it is not secret on its own.
- Client secret , the private half. You send the ID and secret as HTTP Basic auth to the token endpoint to receive a bearer token. Treat it like a password, never commit it to git, and rotate it if it leaks.
- User-Agent , a descriptive header you write yourself in the format
platform:appname:version (by /u/username), for examplepython:subreddit-monitor:v1.2 (by /u/yourname). Reddit's rules require a unique agent; the defaultpython-requests/2.xis throttled or blocked.
Here is the token exchange in Python, the moment all three come together:
import requests
auth = requests.auth.HTTPBasicAuth("YOUR_CLIENT_ID", "YOUR_CLIENT_SECRET")
headers = {"User-Agent": "python:subreddit-monitor:v1.2 (by /u/yourname)"}
data = {"grant_type": "client_credentials"}
resp = requests.post(
"https://www.reddit.com/api/v1/access_token",
auth=auth, data=data, headers=headers,
)
token = resp.json()["access_token"]
print(token)
A missing or generic User-Agent is the single most common reason a correct script returns 429 Too Many Requests, so set it before you debug anything else. The full rate-limit behavior, including the per-minute ceilings and the headers Reddit returns, is in the Reddit API rate limits guide for 2026, and the no-PRAW request patterns are in the Reddit API Python tutorial.
The 2026 approval wall (what the old tutorials skip)
Here is what changed, and why your five-minute setup might still leave you locked out: new Reddit API access now routes through a manual approval form governed by Reddit's Responsible Builder Policy. Registering the app is no longer the same as being allowed to use it at scale, and approvals skew toward established, commercial, clearly-scoped use cases.
The developer who summarized the mechanics most cleanly:

George Barnev
@gbarnev
Reddit is adding new API restrictions. 👀 - New OAuth tokens now need approval - Only one app per account - Current access won't be affected /for now/ New users face a long approval process. Mods are pushing developers toward Devvit, which restricts further 3rd-party apps. How… Show more

New OAuth tokens need approval, one app per account, and existing access keeps working "for now." The official position is documented in the Reddit API access wiki, which now opens by requiring you to read the Responsible Builder Policy, the Developer Terms, and the Data API Terms before you touch anything.
The lived experience on r/redditdev is blunter. This thread is one of many where a detailed, good-faith request was rejected:
Why is getting API keys so difficult?
I tried to obtain the API keys through the request form. Despite having explained my small, personal project in detail, my request was rejected. I have no intention of exploiting the data for commercial purposes or…
The poster explained a small, personal project in detail and was rejected anyway, a pattern repeated across the subreddit. On X, builders describe the same wall in real time, like one developer who got a flat rejection after explaining their use case, and another whose product shipped with Reddit marked "pending API approval." The signal is consistent: the form is not a formality, and a clean rejection is a common outcome, not an edge case.
Is the Reddit API free in 2026?
Yes, with a real asterisk. Reddit's Data API has a free tier capped at 100 queries per minute per OAuth client for non-commercial use, and a paid commercial tier introduced in the 2023 pricing overhaul (reported around $0.24 per 1,000 calls for high-volume commercial access). So the API itself is free to start, but "free" in 2026 does not mean "instant", the free tier sits behind the same approval form as everything else.
That distinction matters for planning. If your project is non-commercial and you can wait, the free tier costs nothing.
If you are on a deadline, the gating cost is time, not dollars. The full tier-by-tier comparison, including where indexed third-party APIs land on price, is in Reddit API pricing vs Apify, and the broader shift toward usage-based access is covered in Reddit's usage-based AI data licensing.
To understand why the wall exists at all, it helps to know the history. Through mid-2023 the Reddit API was effectively free and open, which is how community tools and third-party apps like Apollo flourished. In June 2023 Reddit introduced commercial pricing and steep rate limits, a change widely reported as the trigger for the subreddit blackouts and the shutdown of Apollo and most third-party clients. It also killed Pushshift, the research index a generation of academics relied on; the best Pushshift alternatives guide covers what replaced it. The 2025-2026 manual-approval wall is the next turn of that same screw: having priced commercial access, Reddit is now gating who gets in at all. Reading the timeline this way makes the planning call obvious, the direction of travel is toward more friction, not less, so building in a fallback is not pessimism, it is just paying attention to the trend.
Start building with RedditAPI
Reads $0.002, votes $0.005, writes $0.012, DMs $0.025. $0.50 free credits.
What to do when you can't get approved
If the form rejects you, or you simply cannot wait on an unpredictable timeline, you have three realistic moves:
- Re-apply with a tighter description. Make the use case specific, name the data you read, link a privacy policy, and frame it commercially if it is. Vague personal-project descriptions are the most-rejected category.
- Use the unauthenticated
.jsonendpoints for light, public reads. Appending.jsonto most Reddit URLs returns JSON without a token, but Reddit filters datacenter and cloud IPs aggressively, so server-side calls often return 403 regardless of how correct your code is. This path is fine for a laptop script and unreliable for production. - Read through a managed REST API that needs no Reddit app. This is the path teams blocked by the wall actually ship on. The demand is visible in the market, here is an independent developer announcing exactly this kind of alternative the week Reddit's restrictions bit:

Rodrigo Fernández
@fdezromero
Reddit .json endpoints blocked? Anonymous API access gone? If your bot, scraper or app broke this week, I built an alternative REST API and MCP for reading Reddit data (posts, comments, users, subreddits, search) with no OAuth and no approval process. https://t.co/d7umIWkqED
A managed API such as api.redditapis.com exposes posts, comments, users, subreddits, and search behind a single key you get in minutes, with no OAuth dance, no app registration, and no Responsible Builder Policy review. One authenticated GET returns a clean JSON payload and a pagination cursor:
import requests
headers = {"Authorization": "Bearer YOUR_API_KEY"}
params = {"q": "api key", "subreddit": "redditdev", "limit": 25}
resp = requests.get(
"https://api.redditapis.com/api/reddit/search",
headers=headers, params=params,
)
posts = resp.json()["posts"]
print(len(posts), "posts")
The tradeoff is the usual build-vs-buy one: the official OAuth path is free and first-party but gated and rate-limited; a managed API costs money but removes the approval risk and the IP-block problem. Many teams run both, prototype on the managed API to keep moving, and migrate to an approved OAuth app later if and when approval lands. The decision framework is laid out in PRAW vs a managed REST API and the REST vs PRAW data-access comparison.
Verifying your key works
Once you have credentials, confirm they work before you build on them. The minimal smoke test is to fetch a token (the snippet above) and then call an authenticated endpoint with it:
headers = {
"Authorization": f"bearer {token}",
"User-Agent": "python:subreddit-monitor:v1.2 (by /u/yourname)",
}
me = requests.get("https://oauth.reddit.com/api/v1/me", headers=headers)
print(me.status_code, me.json().get("name"))
A 200 with your username confirms the full chain: credentials valid, token issued, User-Agent accepted. A 401 means the client ID or secret is wrong; a 403 usually means a User-Agent or IP problem; a 429 means you tripped the rate limit (check the X-Ratelimit-Remaining header). For the complete error-code map and retry patterns, see the authentication guide and the rate limits reference. If you are migrating off the deprecated Pushshift index, the best Pushshift alternatives breakdown covers historical-data sources.
Which app type should you choose?
Reddit's create-app screen offers three types, and picking the wrong one is a quiet source of auth failures later:
- script , for bots and data tools that act as one Reddit account you control (yours). Authenticates with
grant_type=client_credentialsorpassword. This is the right choice for server-side monitoring, research scrapers, and personal automation. It is the type 90% of readers of this guide want. - web app , for applications where other users log in with their own Reddit accounts (the classic OAuth redirect flow). Choose this only if you are building a multi-user product that posts or reads on behalf of your users. It requires a real, reachable redirect URI.
- installed app , for mobile or client-side apps with no server to hold a secret. These use the implicit/PKCE flow and do not get a client secret at all.
If you are reading "how to get a Reddit API key," you almost certainly want script. The official Reddit OAuth documentation at github.com/reddit-archive/reddit/wiki/OAuth2 lays out the exact grant type each app type uses, and the authentication guide walks the token exchange for each. Pick script, and the client_credentials snippet earlier in this post is all you need.
Native OAuth vs .json vs a managed API
Once you understand the credential triple and the approval wall, the real decision is which access path to build on. There are three, and they trade setup, reliability, and cost differently:
| Path | Auth needed | Approval? | Reliability | Best for |
|---|---|---|---|---|
| Official OAuth API | client ID + secret + token | Yes (manual form, 2026) | High once approved | Production apps that got grandfathered or approved |
Unauthenticated .json |
none (User-Agent only) | No | Low (datacenter IPs 403'd) | Laptop scripts, light public reads |
| Managed REST API | one bearer key | No | High (own access pool) | Teams blocked by approval, or shipping on a deadline |
The official OAuth path is free and first-party, but in 2026 it is gated behind the approval form and capped at 100 queries per minute on the free tier. The .json path needs no key at all, but Reddit filters most cloud and datacenter IP ranges, so the same script that works on your laptop returns 403 from a server. A managed REST API such as api.redditapis.com trades a per-call cost for removing both problems at once: no app, no approval, and a clean residential-grade access pool so server-side calls do not get filtered. The full economics, including where each path lands per 1,000 calls, are in Reddit API pricing vs Apify, and the residential-IP problem specifically is covered in the best residential proxies for Reddit scraping.
The approval wall in developers' own words
The gap between "registered an app" and "actually have access" is the defining frustration of the 2026 Reddit API. It is worth reading the primary sources, because they tell you what the form does not.
One developer captured the rejection experience directly:

Carel Martten
@CMartten
Gotta love how Reddit basically killed their API for anyone trying to build new stuff. You need to request special access through a form and based on /r/redditdev, nobody's getting approved. Just also got this rejection: "We have reviewed your recent request for access.
"Reddit basically killed their API for anyone trying to build new stuff... based on /r/redditdev, nobody's getting approved." That is not a fringe complaint. A first-time builder hit the same wall trying to ship a simple app:

maybelefttwiter
@projectK77
This happened 1 day before I tried creating the app Reddit api now needs approval 😞 its been 2 days and no reply. lets hope I get access soon. https://t.co/DGx81skm72

"Reddit api now needs approval. it's been 2 days and no reply." The r/redditdev megathreads echo this at volume, the recurring questions are "I need Reddit API key" and "why is getting API keys so difficult." The lesson for planning: treat approval as a maybe, not a step, and have a fallback path ready before you need it.
The cheapest Reddit API. Try it free.
Reads from $0.002 per call. $0.50 free credits. No credit card required.
Common Reddit API key errors and fixes
Even with valid credentials, four errors account for almost every "my key doesn't work" report. Here is what each one actually means:
401 Unauthorized, the client ID or client secret is wrong, or you sent them to the wrong host. Token requests go tohttps://www.reddit.com/api/v1/access_tokenwith HTTP Basic auth; authenticated reads go tohttps://oauth.reddit.comwithAuthorization: bearer <token>. Mixing the hosts returns 401.403 Forbidden, usually not a credential problem at all. The top causes are a missing or generic User-Agent, a datacenter/cloud IP that Reddit has filtered, or a private/quarantined subreddit. If your code is correct and still 403s from a server, the IP filter is the likely culprit, which is exactly the failure a managed API's access pool removes.429 Too Many Requests, you exceeded the rate ceiling (100 req/min authenticated, 60 unauthenticated) or you are using a generic User-Agent that Reddit throttles hard. Read theX-Ratelimit-RemainingandX-Ratelimit-Resetheaders and back off. The rate limits guide has the full header reference.404on what should exist , often a deleted/removed item, but on search it can mean you hit the OAuth host without a token. Confirm the host matches your auth state.
For the complete error map plus retry-with-backoff patterns
, the REST vs PRAW comparison and the Python tutorial both include production-grade handling. The PRAW library itself documents its automatic rate-limit handling at praw.readthedocs.io.
How to keep your Reddit API key secure
Because the client secret is exchanged for full read/write access on your account, treat it like a production credential, not a config value:
- Never commit it. Put the client ID, secret, and any token in environment variables or a secrets manager, never in source. A secret pushed to a public repo is compromised the moment it lands, and GitHub's secret scanning will often flag it before you do.
- Use a dedicated bot account. Register the app under a throwaway Reddit account scoped to the integration, not your personal account, so a leak does not expose your main identity or its history.
- Rotate on exposure. Reddit lets you regenerate the secret from the same app preferences screen. If a secret leaks, rotate immediately; the old token keeps working until it expires, so rotation plus a short token TTL limits the blast radius.
- Scope the User-Agent honestly. Reddit's Data API Terms require accurate identification; a deceptive User-Agent is a terms violation that can get the app banned, which is a far worse outcome than a rejection.
These are the same hygiene rules any API credential deserves, but they matter more here because Reddit's enforcement is account-level: a banned app can take the account with it. If you would rather not hold Reddit credentials at all, a managed API isolates that risk, your key talks to the managed service, and the service holds the Reddit-side access.
A complete working example: monitor a subreddit
To make the credential triple concrete, here is an end-to-end script that takes your client ID, client secret, and User-Agent and prints the newest posts in a subreddit. This is the smallest useful program that proves your key works for real reads, not just a token fetch.
import requests
CLIENT_ID = "YOUR_CLIENT_ID"
CLIENT_SECRET = "YOUR_CLIENT_SECRET"
USER_AGENT = "python:subreddit-monitor:v1.2 (by /u/yourname)"
# 1. Exchange credentials for a bearer token
auth = requests.auth.HTTPBasicAuth(CLIENT_ID, CLIENT_SECRET)
token_resp = requests.post(
"https://www.reddit.com/api/v1/access_token",
auth=auth,
data={"grant_type": "client_credentials"},
headers={"User-Agent": USER_AGENT},
)
token = token_resp.json()["access_token"]
# 2. Use the token against the OAuth host
headers = {"Authorization": f"bearer {token}", "User-Agent": USER_AGENT}
resp = requests.get(
"https://oauth.reddit.com/r/redditdev/new",
headers=headers,
params={"limit": 10},
)
for child in resp.json()["data"]["children"]:
post = child["data"]
print(post["title"], "->", post["score"], "points")
Three things in this script are the difference between working and broken in 2026. First, the token call hits www.reddit.com while the read hits oauth.reddit.com, two different hosts for two different jobs. Second, the User-Agent is present on both calls; drop it from either and you get throttled. Third, the token expires in roughly an hour, so a long-running monitor has to refresh it, which is why production code wraps the token fetch in a function and re-calls it on a 401. The no-PRAW Python tutorial builds this into a reusable client, and the search API tutorial extends it to keyword queries.
The same task against a managed REST API collapses the two-host, token-refresh dance into one authenticated call:
import requests
resp = requests.get(
"https://api.redditapis.com/api/reddit/posts",
headers={"Authorization": "Bearer YOUR_API_KEY"},
params={"subreddit": "redditdev", "sort": "new", "limit": 10},
)
for post in resp.json()["posts"]:
print(post["title"], "->", post["upvotes"], "upvotes")
No token exchange, no host juggling, no expiry handling. That simplicity is the entire value proposition when the official path is gated, and it is why the build-vs-buy decision so often lands on "buy to unblock, migrate later if approval comes."
"API key" vs token vs credentials: clearing up the terms
A lot of the confusion around getting a Reddit API key is really vocabulary confusion, so it is worth nailing the terms down once:
- A client ID and client secret are your app credentials. They are long-lived, you generate them once, and they identify the application.
- A bearer token (or access token) is short-lived. You trade the credentials for it, it lasts about an hour, and it is what actually authorizes each read or write.
- "API key" is the informal umbrella term people use for "the stuff I need to call the API," which in Reddit's case means the credentials plus the User-Agent plus the ability to mint tokens from them.
When a tutorial says "paste your API key here," it almost always means the client ID or the secret, not a token. When Reddit's docs say "OAuth token," they mean the short-lived bearer string. Keeping these straight saves hours of debugging, because the fix for a bad credential is different from the fix for an expired token. This distinction is the same across most modern APIs that use OAuth2 rather than a single static key, and it is codified in the OAuth2 framework at datatracker.ietf.org/doc/html/rfc6749. For the Reddit-specific token lifecycle, refresh flow, and scopes, the authentication and OAuth guide is the reference, and the full Data API overview maps every endpoint those tokens unlock.
The bottom line
The mechanics of a Reddit API key haven't really changed: register a script app, copy the client ID and secret, set a descriptive User-Agent, exchange them for a token. What changed in 2026 is the gate in front of them. New access runs through a manual approval form that rejects a meaningful share of legitimate, well-described projects, with no SLA and no guarantee.
So plan for both outcomes. Register your app and submit the form, it costs nothing and your existing access (if you have it) is grandfathered. But if you are shipping on a deadline, do not let an unpredictable approval queue block the build. Prototype against a managed REST API that returns the same data without the wall, and migrate later if approval lands. The teams that ship in 2026 are not the ones who waited longest on the approval queue; they are the ones who kept building while the form sat in review. Get a key in minutes, or read the full Reddit Data API overview to see every endpoint before you choose a path.
Frequently asked questions.
Log in to Reddit, go to https://www.reddit.com/prefs/apps, click 'create another app...', choose the 'script' type, set the redirect URI to http://localhost:8080, and click 'create app'. Reddit then shows you two values: a client ID (the short string under the app name) and a client secret. Those two strings plus a descriptive User-Agent are your 'API key'. The catch in 2026 is that new API access increasingly routes through a manual approval form governed by Reddit's Responsible Builder Policy, and small or personal projects are frequently rejected. If you are blocked, a managed REST API like [api.redditapis.com](/signup) returns the same post, comment, and user data with no Reddit app and no approval step.
Reddit does not issue a single 'API key' string. You get three pieces: (1) client ID, your app's public identifier shown directly beneath the app name; (2) client secret, the private password you exchange for an OAuth bearer token (never commit it); and (3) User-Agent, a descriptive header string you create yourself in the format `platform:appname:version (by /u/username)`. All three are required on authenticated calls. The client ID and secret get traded for a token at https://www.reddit.com/api/v1/access_token, and the User-Agent must be present on every request or Reddit returns 429 or 403. See the [authentication and OAuth guide](/blogs/reddit-api-authentication-oauth-2026).
The Reddit Data API has a free tier capped at 100 queries per minute per OAuth client for non-commercial use, and a paid commercial tier introduced in 2023 (reported at roughly $0.24 per 1,000 API calls for high-volume commercial access). The free tier is technically free but gated behind the same manual approval process, so 'free' does not mean 'instant' in 2026. For a full breakdown of tiers and where third-party APIs sit on price, see [Reddit API pricing vs Apify](/blogs/reddit-api-pricing-vs-apify).
Since late 2025 Reddit routes new OAuth token requests through a manual approval form tied to its Responsible Builder Policy, and approvals favor established, commercial, or clearly-scoped use cases. Developers on r/redditdev report rejections for small personal projects even with detailed descriptions. Common rejection triggers are a vague use-case description, a personal (non-commercial) project, a missing privacy policy, or a redirect URI that looks like a throwaway. You can re-apply with a tighter description, or read data through an indexed third-party REST API that does not require a Reddit app at all.
For light, public, read-only access you can still hit `https://www.reddit.com/r/<subreddit>.json` unauthenticated at low volume, but Reddit filters most datacenter and cloud IPs, so server-side calls frequently return 403 with no key involved. For anything production (reliable reads, search, pagination, comment trees) you need either an approved OAuth app or a managed REST API that maintains its own access pool. The managed route is why teams blocked by the approval wall still ship. Compare the paths in [REST vs PRAW](/blogs/reddit-data-api-rest-vs-praw-2026).
The User-Agent is a header string that identifies your app to Reddit. Reddit's API rules require a unique, descriptive User-Agent in the format `<platform>:<app ID>:<version> (by /u/<username>)`, for example `python:subreddit-monitor:v1.2 (by /u/yourname)`. Generic agents like the default `python-requests/2.x` are rate-limited hard or blocked outright. A missing or generic User-Agent is the single most common reason a technically-correct script returns 429 Too Many Requests. See the [rate limits guide](/blogs/reddit-api-rate-limits-2026).
There is no published SLA. Developers report waits ranging from a couple of days to several weeks, and many report no response at all. Reports on r/redditdev and X describe submitting the form and hearing nothing for days. Because the timeline is unpredictable, teams on a deadline either build against an indexed third-party API immediately and migrate later, or run both paths in parallel so a rejection does not block the build.
Yes. The 2025-2026 restrictions apply to NEW OAuth token requests; existing, already-approved API credentials continue to function. This is confirmed in community threads about the access changes. The practical effect is a moat: teams that registered apps before the tightening keep their access, while new builders face the approval form. If you are starting fresh in 2026 and cannot wait on approval, a managed REST API is the fastest path to the same data. [Get a key in minutes](/signup).
Keep reading.
Continue exploring related pages.
Reddit API use cases
14 use cases from AI training to brand monitoring and DMs.
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.
Affiliate program
Earn 20% lifetime commissions — capped at $5,000/yr.
Similar reads.
More guides on the Reddit API, scraping, pricing, and MCP servers.








