# Why does PRAW return 429, and how do I get more throughput?

Reddit. Checked September 2026.

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.

## GET /v1/reddit/subreddits/{name}/posts?sort=new

```bash
curl "https://api.openhandle.dev/v1/reddit/subreddits/synthetic/posts?sort=new" \
  -H "Authorization: Bearer $OPENHANDLE_API_KEY"
```

```ts
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:

```json
{
  "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 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` |

```json
{
  "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.

## Related

- [Rate limits](https://openhandle.dev/docs/rate-limits): Quota headers and retry behavior.
- [Is the Reddit API free?](https://openhandle.dev/questions/is-the-reddit-api-free): What the official API costs and who needs approval.
- [How do I track brand mentions across subreddits?](https://openhandle.dev/questions/how-do-i-track-brand-mentions-across-subreddits): Search on a schedule without touching a quota.
