# Reddit

Reddit publishing, DMs and comments are paused while Reddit blocks third-party API access. What still works, what to expect, and the reference for when it returns.

> **Reddit is paused:**
> 
> Reddit has closed its API to third-party apps. Until Reddit restores access, publishing, DMs and comments through Pozy are paused:
> 
> - The Reddit part of a post fails with a "Reddit is temporarily unavailable" error. Other platforms in the same post still publish.
> - New Reddit messages, comments and analytics stop syncing. What was already synced stays readable.
> - Reddit-only endpoints (subreddits, flairs, votes, search) return `503` with code `PLATFORM_DISABLED`.
> - New Reddit connections are not possible. Accounts that are already connected stay connected, so you will not need to reconnect.
> 
> [Reddit Ads](https://pozy.ai/docs/ads/reddit-ads) uses a separate connection and keeps working.

When access comes back, Reddit turns on again without any action from you. Retry the posts that failed. The rest of this page is the reference for how Reddit behaves when it is available, so you can keep your integration ready. The platform id is `reddit`.

## What you can do

| Feature | When available | Status now |
| --- | --- | --- |
| Text, link, image, gallery and native video posts | Yes | Paused |
| Flair, NSFW and spoiler tags | Yes | Paused |
| Edit a published text post | Body only | Paused |
| DMs (Reddit private messages) | Text only | Paused, existing threads readable |
| Comments | List, reply, edit, delete, vote | Paused, existing comments readable |
| Search posts and browse subreddit feeds | Yes | Paused |
| Analytics | Score and comment count | Last synced values only |
| Reddit Ads | Separate connection | Working. See [Reddit Ads](https://pozy.ai/docs/ads/reddit-ads) |

## Connect

Reddit connects with OAuth through [Get OAuth connect URL](https://pozy.ai/docs/api/getConnectUrl) with platform `reddit`. New connections are refused while Reddit is paused.

A connected account has a default subreddit. [List Reddit subreddits](https://pozy.ai/docs/api/getRedditSubreddits) returns the subreddits it can post to, and [Set default subreddit](https://pozy.ai/docs/api/updateRedditSubreddits) changes the default without reconnecting.

## Post types

Every post targets one subreddit, and each subreddit has its own rules. Check them with [Get subreddit rules](https://pozy.ai/docs/api/getSubredditRules) and [Check subreddit existence](https://pozy.ai/docs/api/validateSubreddit) before you submit. Many subreddits require a flair, block automated posting, or set karma and account-age minimums. New accounts are blocked from most.

By default the first line of `content` is the title and the rest is the body, in Reddit Markdown.

```json
{
  "platform": "reddit",
  "accountId": "66b2e19d8c3f5a7e9d0b1c2d",
  "platformSpecificData": {
    "subreddit": "learnprogramming",
    "title": "What helped me learn a second language faster",
    "flairId": "a1b2c3d4-0000-1111-2222-333344445555"
  }
}
```

| Post type | How to make it |
| --- | --- |
| Text (self) post | Only `content`. The title is the first line unless you set `title` |
| Link post | Set `url`. `content` becomes the title. If the subreddit is text-only, the post is retried as a text post with the URL in the body |
| Image post | One image in `mediaItems` |
| Gallery | 2 to 20 images. Images past the 20th are dropped without an error |
| Native video | One MP4 in `mediaItems`. Uploaded to Reddit's player and transcoded to at most 1080p and 30 fps |
| Video as a link | `nativeVideo: false` posts the video URL as a link instead |

> **The title is permanent:**
> 
> Reddit titles cannot be edited after posting. Only the body of a text post can change.

### Platform fields

| Field | Type | Notes |
| --- | --- | --- |
| `subreddit` | string | Without the `r/` prefix. Defaults to the account's default subreddit |
| `title` | string, up to 300 characters | Defaults to the first line of `content` |
| `url` | URL | Makes a link post |
| `forceSelf` | boolean | Text-only self post, skips media uploads |
| `nativeVideo` | boolean, default `true` | `false` posts the video as an external link |
| `videogif` | boolean | Silent looping clip, still uploaded natively |
| `videoPosterUrl` | URL | Poster image for a native video. Defaults to the first frame |
| `flairId` | string | From [List subreddit flairs](https://pozy.ai/docs/api/getRedditFlairs). If a subreddit needs a flair and you send none, the first available flair is used |
| `flairText` | string | Free-text flair where the subreddit allows it. Ignored when `flairId` is set |
| `nsfw` | boolean, default `false` | Marks the post as over 18 |
| `spoiler` | boolean, default `false` | Only works if the subreddit has spoiler tags on |
| `sendreplies` | boolean, default `true` | `false` keeps comment replies out of the account's Reddit inbox |

For a native video with explanatory text, keep `forceSelf` unset. With body text present, an upload failure or a subreddit that blocks video fails the post instead of falling back to a link.

## Media requirements

| Images | Requirement |
| --- | --- |
| Per post | 1, or 2 to 20 as a gallery |
| Formats | JPEG, PNG, GIF |
| Max size | 20 MB |
| Recommended | 1200 x 628 px. 16:9, 4:3, 1:1 and 9:16 all work |

| Videos | Requirement |
| --- | --- |
| Per post | 1 |
| Format | MP4 |
| Max size | 1 GB. Larger files reach Reddit unchanged and Reddit refuses them |
| Resolution | Transcoded to at most 1080p and 30 fps, so upload at 1080p or lower |

## Limits

| Limit | Value |
| --- | --- |
| Title | 300 characters, required, cannot be edited |
| Body | 40,000 characters |
| Gallery | 20 images |
| New accounts | Around 10 posts a day |
| Rate limits | Reddit limits per app, so a `429` can arrive even at low volume on your side. Wait the seconds in the message, then retry |

Not available through Reddit's API: polls, crossposts, collections, live chat threads, awards, and separate upvote and downvote counts.

## Analytics

[Get post analytics](https://pozy.ai/docs/api/getAnalytics) with `platform=reddit` returns the score (as `likes`) and the comment count. Reddit does not report impressions, reach, shares, clicks or views. While Reddit is paused, these keep their last synced values.

## Inbox

When available:

| Feature | Supported |
| --- | --- |
| List and read DMs | Yes |
| Send DMs | Text only |
| List comments on your posts | Yes |
| Reply to, edit and delete your comments | Yes. Replies need the `subreddit` parameter |
| Vote on posts and comments | Yes, with [Vote on a Reddit post or comment](https://pozy.ai/docs/api/voteRedditThing) |

> **Votes must come from a person:**
> 
> Reddit's terms require every vote to be one person's own action. Automated or agent-decided voting counts as vote manipulation and can cost the account its API access.

[Search posts](https://pozy.ai/docs/api/searchReddit) and [Get subreddit feed](https://pozy.ai/docs/api/getRedditFeed) let you monitor communities for mentions. See [Mentions](https://pozy.ai/docs/inbox/mentions).

## Errors you may see

| Error | Cause | Fix |
| --- | --- | --- |
| "Reddit is temporarily unavailable" | Reddit is paused | Retry after Reddit returns |
| `503` `PLATFORM_DISABLED` | A Reddit-only endpoint while Reddit is paused | Retry after Reddit returns |
| "SUBREDDIT_NOTALLOWED" | Only trusted members can post there | Build karma or choose another subreddit |
| "NO_SELFS" | The subreddit takes links or images only | Set `url` or attach an image |
| "SUBMIT_VALIDATION_FLAIR_REQUIRED" | The subreddit needs a flair | Pass a `flairId` from the flairs list |
| "SUBREDDIT_NOEXIST" | Typo, or the subreddit is private | Check the spelling, drop the `r/` prefix |
| "Reddit requires a subreddit" | No `subreddit` and no account default | Set `platformSpecificData.subreddit` |
| "Reddit removed the post" | Moderators or AutoModerator removed it | Read the rules and adjust the content |

[Errors](https://pozy.ai/docs/getting-started/errors) covers the error format.

## Endpoints

| Endpoint | What it does |
| --- | --- |
| [`GET /v1/reddit/search`](https://pozy.ai/docs/api/searchReddit) | Search posts |
| [`GET /v1/reddit/feed`](https://pozy.ai/docs/api/getRedditFeed) | Get subreddit feed |
| [`GET /v1/reddit/comments/{postId}`](https://pozy.ai/docs/api/getRedditPostComments) | Get the comments of a Reddit post |

| Endpoint | What it does |
| --- | --- |
| [`GET /v1/accounts/{accountId}/reddit-subreddits`](https://pozy.ai/docs/api/getRedditSubreddits) | List Reddit subreddits |
| [`PUT /v1/accounts/{accountId}/reddit-subreddits`](https://pozy.ai/docs/api/updateRedditSubreddits) | Set default subreddit |
| [`GET /v1/accounts/{accountId}/reddit-subreddits/{subreddit}/rules`](https://pozy.ai/docs/api/getSubredditRules) | Get subreddit rules |
| [`GET /v1/accounts/{accountId}/reddit-flairs`](https://pozy.ai/docs/api/getRedditFlairs) | List subreddit flairs |
| [`POST /v1/accounts/{accountId}/reddit-flairs`](https://pozy.ai/docs/api/setRedditPostFlair) | Set Reddit post flair |
| [`POST /v1/accounts/{accountId}/reddit-vote`](https://pozy.ai/docs/api/voteRedditThing) | Vote on a Reddit post or comment |
| [`GET /v1/tools/validate/subreddit`](https://pozy.ai/docs/api/validateSubreddit) | Check subreddit existence |

## Webhook events

| Event | When it fires |
| --- | --- |
| [`post.failed`](https://pozy.ai/docs/webhooks/events#post-failed) | Post failed. |
| [`post.platform.failed`](https://pozy.ai/docs/webhooks/events#post-platform-failed) | Post platform failed. |
