Why does PRAW return 429, and how do I get more throughput?
A 429 from PRAW means your OAuth client used its quota, about 100 queries per minute per client. PRAW already sleeps to respect the X-Ratelimit headers, so a 429 usually means several processes share one client, or a listing loop fetched more than you thought. Reddit does not sell a higher free quota. More throughput needs a commercial data agreement.
For public subreddits, posts, comments, and profiles, Openhandle answers 10 requests per second per key with no per-minute cap, billed per answered request. Keep PRAW for what needs a logged-in user. Move the public reads.
Checked September 2026 · request and response run against the API · no affiliate links
curl "https://api.openhandle.dev/v1/reddit/subreddits/synthetic/posts?sort=new" \
-H "Authorization: Bearer $OPENHANDLE_API_KEY"import { OpenHandle } from '@openhandle/sdk';
const openhandle = new OpenHandle({ apiKey: process.env.OPENHANDLE_API_KEY! });
const subreddits = ['synthetic', 'synthetic', 'synthetic'];
// Ten reads per second per key. No per-minute quota.
const pages = await Promise.all(subreddits.map(name => openhandle.reddit.subreddit(name).posts.list({ sort: 'new' })));{
"platform": "reddit",
"resource": "post",
"capturedAt": "2026-09-18T12:59:20Z",
"source": "live",
"data": [
{
"id": "t3_reddit1",
"title": "Synthetic Reddit post",
"community": { "handle": "synthetic", "displayHandle": "r/synthetic" },
"createdAt": "2026-08-09T15:30:00Z",
"metrics": { "score": 0, "upvoteRatio": 0.5, "comments": 0 }
}
],
"meta": { "cursors": { "next": "b3BhcXVlLWN1cnNvcg" } }
}Trimmed to one post. Reddit endpoints are in beta. The example is a Test subreddit, so you can run it on a free Test key.
Fix the 429 inside PRAW first
- —One client per process. Two workers on the same client ID share one quota and step on each other. Give each worker its own registered app, or serialize them.
- —Count the hidden requests. Iterating a listing fetches 100 items per request.
submission.comments.replace_more()can fire dozens of requests for one thread. Set a limit. - —Read the headers.
X-Ratelimit-RemainingandX-Ratelimit-Resettell you the truth. PRAW exposes them on the response. - —Do not create clients to dodge it. Reddit ties quota to the account and the app. Spinning up clients to multiply quota is what gets accounts banned.
Split the work
| Needs a logged-in user | Public data |
|---|---|
| Posting, commenting, voting, messaging | Subreddit listings, post pages, comment threads |
| Reading a private subreddit you belong to | Public profiles, their posts and comments |
| Moderation actions and modmail | Search across posts, profiles, and subreddits |
| Keep it in PRAW | Move it to Openhandle |
When this does not work
The limits you will see instead, and what they mean.
| Situation | Status | Code |
|---|---|---|
| You passed 10 requests per second on one key | 429 | RATE_LIMITED |
| The subreddit is private, quarantined, or banned | 403 | PROFILE_PRIVATE |
| The subreddit never existed | 404 | PROFILE_NOT_FOUND |
{
"error": {
"code": "RATE_LIMITED",
"message": "Too many requests. Retry after the Retry-After header.",
"requestId": "req_01j8…",
"retryable": true
}
}Openhandle rate limits are per second, per key, never billed, and higher on request. Honor Retry-After. Reddit endpoints are in beta.
Read next
More Reddit questions
Send your agent ahead.
Paste the prompt into your agent and it sets everything up. Or come yourself, it takes five minutes.