All questionsReddit

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

GET /v1/reddit/subreddits/{name}/posts?sort=new
curl "https://api.openhandle.dev/v1/reddit/subreddits/synthetic/posts?sort=new" \
  -H "Authorization: Bearer $OPENHANDLE_API_KEY"
TypeScript SDK
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' })));
200 OK
{
  "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-Remaining and X-Ratelimit-Reset tell 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 userPublic data
Posting, commenting, voting, messagingSubreddit listings, post pages, comment threads
Reading a private subreddit you belong toPublic profiles, their posts and comments
Moderation actions and modmailSearch across posts, profiles, and subreddits
Keep it in PRAWMove it to Openhandle

When this does not work

The limits you will see instead, and what they mean.

SituationStatusCode
You passed 10 requests per second on one key429RATE_LIMITED
The subreddit is private, quarantined, or banned403PROFILE_PRIVATE
The subreddit never existed404PROFILE_NOT_FOUND
429 Too Many Requests
{
  "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.

For agents