RedditapisRedditapis

Changelog

What shipped, and when it actually shipped. Every date here is the day the change became callable, taken from the package registry and from the published API spec rather than from the day someone got round to writing it up. Our system covers 59 REST endpoints, per our published API reference, and every change below lands against one of them.

What has changed recently in the Redditapis Reddit API?

Recent releases added advanced search filters, subreddit moderator and wiki reads, community discovery listings, subreddit rules, bulk post fetch by id, an author-grouped deep comment search, and three subreddit and user read endpoints. Entries are sourced from npm publish times for the MCP package and from the first commit in which each path appears in the published OpenAPI document, so a date on this page is the date the change became callable rather than the date it was written up.

September 7, 2026

Image and video posts, and the reason a media post is slower than the others

POST /api/reddit/submit now creates IMAGE, VIDEO and VIDEOGIF posts as well as text, link and poll, at the same $0.012 write rate and with no new endpoint. You pass image_url or video_url and we fetch the media, upload it to Reddit, and hold the request open until Reddit confirms the post.

  • /api/reddit/submit
  • You give us a URL rather than bytes. It is the only shape that works for a large video, and you almost certainly already host the file. The URL must be publicly readable over https: we fetch it server-side through the same guard our outbound webhooks use, so anything behind a login, on a private network, or on plain http is refused with a message that says which of those it was. Redirects are re-checked at every hop rather than followed blindly, because a public host answering a redirect to a private address is the standard way past a check like this.
  • A URL with no file extension is fine, and that is deliberate rather than incidental. Signed and CDN URLs usually have none, so the Content-Type your server sends decides the media type and the extension is only the fallback. An extension-only rule would have rejected a large share of real image URLs.
  • url is NOT the field for media. Putting an image URL in url asks for a link post pointing at the image, which is a different post from an image post. That combination is refused rather than guessed at, for the same reason an unsupported kind is refused by name: you would have no way to know you got the other one, and it is published under your name.
  • A video needs a poster image and video_poster_url is required. Reddit will not accept a video without one. PRAW uploads a stand-in image when the caller gives none; we do not, because an image we generated would be published as yours.
  • WHY A MEDIA POST IS CONFIRMED RATHER THAN FIRE-AND-FORGET, since it is the part that shapes the contract: Reddit processes an upload asynchronously and its submit response carries NO post id at all, only a websocket. So the POST alone genuinely cannot tell you whether the post exists. We hold your request open until Reddit confirms and return the same post_id and permalink as every other kind. If processing is still running after three minutes you get MEDIA_CONFIRM_TIMEOUT, which says plainly that the post was NOT rejected and may still appear, and asks you to check the account's recent posts before submitting again rather than posting it twice.
  • Size limits are Reddit's, not ours. We do not invent a smaller one, because a guessed limit refuses posts Reddit would have accepted. An oversized file comes back with the real numbers, for example 31.4 MB against a limit of 20.0 MB, parsed out of the XML Reddit's media host answers with instead of surfacing as an opaque failure.
  • The same honesty as the rest of this endpoint: NO post of any kind has been created through it against a real Reddit account. Every request shape is derived from PRAW, which runs against real Reddit and is open source. The endpoint count is unchanged at 59, because these are new kinds on an existing route rather than new routes.

September 7, 2026

Achievements, which Reddit's own API still calls trophies

GET /api/reddit/user/{name}/achievements returns the achievements shown on a Reddit account's public achievements page: One-Year Club, Verified Email, moderator and event awards, with the date each was granted where Reddit records one. $0.002, the ordinary read rate, because it makes exactly one upstream call.

  • /api/reddit/user/{name}/achievements
  • The route is named for what Reddit shows a reader; the upstream is named for what the feature used to be called. reddit.com/user/<name>/achievements is a web page with no JSON twin, and /user/<name>/achievements.json is a 404 rather than a 403. The same data has always been served by the old-Reddit endpoint /user/<name>/trophies.json, which was never renamed when the redesign relabelled trophies as Achievements. One list, two names.
  • An account with none returns count 0 and an empty array. That is a real answer, not an error: a new account typically has nothing until it earns Verified Email.
  • description is not always a description, and this is the field most likely to be misused. Depending on the award Reddit puts either a caption there, such as Top 20%, or a DATE STRING, such as 2021-03-24. It is passed through exactly as sent rather than parsed, because guessing which of the two you are holding is how a caption becomes a wrong timestamp. Read granted_utc when you want the grant time.
  • granted_utc is genuinely absent on some achievements, including several event awards, and comes back null rather than zero. A zero would render as 1970 in every client that formats it, which is worse than an honest absence.
  • WHY IT WAS NOT THERE SOONER, since again the reason was wrong rather than hard: this was held back on the belief that it needed an authenticated session we could not currently mint. It needs a working session, which we already had. Anonymously the upstream returns 403 with a large HTML body, and that is a bot-block page rather than an auth refusal; reading it as the latter is what kept the endpoint unbuilt.

September 6, 2026

Polls, on the same endpoint, and the reason they were not there sooner

POST /api/reddit/submit now creates POLL posts as well as text and link posts, at the same $0.012 write rate and with no new endpoint. This supersedes the note earlier today that polls were not served. Image and video are still refused by name.

  • /api/reddit/submit
  • Send kind: poll with an options array of at least two distinct, non-empty choices and a duration in whole days. Everything else is unchanged: subreddit, title, your reddit_session and loid cookies, and the same optional nsfw, spoiler, sendreplies, flair_id and flair_text passthroughs.
  • The maximum number of options and the accepted duration range are deliberately NOT enforced by us. Reddit's real limits are not something we have verified, and a guessed limit would refuse posts Reddit would have accepted. Reddit rules on them and its answer comes back as a 502 carrying its own machine-readable code, the same treatment every other subreddit rule gets.
  • WHY IT WAS NOT THERE SOONER, since the reason was wrong rather than hard: our own note said polls needed Reddit's newer GraphQL create path with a captured envelope we did not have, which made a small piece of work look like a large one. Reddit serves polls from a plain JSON endpoint, api/submit_poll_post, in the same family as the call this route already makes. The one real difference is the encoding, and it is the half that fails silently: options is an array, and an array has no form-encoded spelling that endpoint reads, so a form-encoded poll would post with its options dropped rather than erroring.
  • Sending options or duration on a non-poll kind is refused rather than ignored, for the same reason text on a link post is: a caller who sent both has one of the two wrong, and posting the other half creates something they did not ask for under their own name.
  • The same honesty applies as to the rest of this endpoint: no poll has been created through it against a real Reddit account. The endpoint count is unchanged, because this is a new kind on an existing route rather than a new route.

September 6, 2026

Create a Reddit post through the API, with the caveat up front

POST /api/reddit/submit is now in the reference. It creates a text (self) or link post in a subreddit as your own account, at the $0.012 write rate. It has NOT yet been verified end to end against a real Reddit account, and we would rather publish it with that said plainly than leave a billed capability undocumented, which is what previously had support telling a customer no such endpoint existed.

  • /api/reddit/submit
  • Send subreddit, kind and title, plus your reddit_session and loid cookies from POST /api/reddit/login. kind is self for a text post or link for a URL post; text and url carry the body. nsfw, spoiler, sendreplies, flair_id and flair_text are optional passthroughs.
  • Poll, image and video are REFUSED BY NAME with a 400, never silently downgraded to a text post. A caller who asked for a poll and quietly received a text post would have no way to discover it until a human looked at the subreddit. Those three need a different upstream path and are not served yet.
  • The honest part: the route is unit-tested and its request shape is derived from the live router, but no post has been created through it. A write that fails does so under YOUR account, in a real subreddit, so talk to support before building on it and we will verify it with you.
  • Brings the total to 57 endpoints.

September 6, 2026

Find out whether a post was quietly removed, without being told why

GET /api/reddit/post/{id}/visibility answers the question Reddit will not: is this post still publicly visible, or did it stop being so? A removed post still returns when you fetch it by id, with its title and score, so asking the post does not answer it. This fetches the post and then one page of its author's listing and compares them.

  • /api/reddit/post/{id}/visibility
  • Returns a verdict of live, not_visible or undecidable, with a plain-language reason, a confident flag, and a checked block naming exactly what was read.
  • It deliberately never tells you WHY a post is not visible. A moderator removal, an admin removal, an automated spam filter and an author who has switched their post history off are indistinguishable from outside Reddit, and only one of them is a removal. We would rather report the observation than name a cause we cannot see.
  • undecidable is a real answer, not a failure. Reddit caps how far back a listing goes, so for an author with a long history one page cannot prove a post is missing. When the listing does not certify itself complete and the post is not on it, you get undecidable instead of a guess. Ambiguity always resolves away from live, because a false live is the answer that makes you stop checking.
  • Two upstream calls, billed as one request at $0.004, twice the read rate because it does twice the work. Brings the total to 58 endpoints.

September 5, 2026

Read private subreddits and your own home feed, with your own Reddit session

Nine read endpoints now accept your own Reddit session as headers, so a private, restricted or member-only subreddit is readable as the account that belongs there instead of coming back empty. GET /api/reddit/feed is new: your own front page, which a shared account pool could never answer. Sending no session headers changes nothing at all, so existing integrations are untouched.

  • /api/reddit/feed
  • Send x-reddit-session and x-reddit-loid from POST /api/reddit/login on any of /posts, /search, /comments, /post/{id}/comments, /comments/{postId}, /sub/{name}/top and /sub/{name}/comments. Send neither and the read is served anonymously from our pool exactly as before. Send one without the other and you get a 400 naming the missing header, never a quiet anonymous read, because a private subreddit served anonymously looks EMPTY rather than inaccessible.
  • A rejected or expired cookie is a typed 401, 403 or 404, never a 200 with an empty array. Add x-reddit-proxy to make the read leave from the IP that account normally acts from, pinned across retries the same way the write endpoints pin theirs.
  • The four private listings (upvoted, saved, hidden, gilded) accept the header form too. Their existing query-parameter form is unchanged and keeps working; if you send both, the headers win.
  • redditapis-mcp gains reddit_home_feed, and its session arguments travel as headers rather than in the URL. Brings the total to 56 endpoints.

September 4, 2026

Let your AI agent report a bug or a gap to us, after you review it

Two free endpoints for agent-initiated product feedback, modelled on the feedback tool inside Claude Code. POST /feedback takes a bug, idea or missing-capability report; GET /feedback/{id} returns whether the team triaged, shipped or declined it and the response. Both are served un-prefixed on api.redditapis.com, outside the metered /api surface, so telling us what broke never costs a credit.

  • /feedback
  • /feedback/{id}
  • redditapis-mcp@0.4.0 adds reddit_feedback_send and reddit_feedback_get. The model drafts a report into a local queue the moment a tool fails or a capability is missing; nothing is sent until you review the queue and name the drafts to send. The last failing call's endpoint, status and request id are attached automatically.
  • Every non-credential error a tool returns now ends with a one-line pointer to the feedback tool, and the trigger list ships as the server's MCP instructions.
  • Rate-limited to 10 reports per minute per key. Every rejection is a 400 that names the field to fix. Brings the total to 54 endpoints.

August 11, 2026

Read your own upvoted, saved, hidden, and gilded posts and comments

Four new auth-scoped reads for an account's private listings. Unlike every other read, these need that account's own Reddit session cookies from POST /api/reddit/login -- Reddit only serves this data to the account that owns it. Each listing mixes posts and comments, so every item in the response is tagged post or comment rather than split into two separate arrays.

  • /api/reddit/user/{name}/upvoted
  • /api/reddit/user/{name}/saved
  • /api/reddit/user/{name}/hidden
  • /api/reddit/user/{name}/gilded
  • Priced at the standard $0.002 read rate, bringing the total to 59 endpoints.
  • redditapis-mcp@0.2.1 adds reddit_user_upvoted, reddit_user_saved, reddit_user_hidden, and reddit_user_gilded as native MCP tools, each taking the same session cookies as the REST call.
  • A request for a listing that does not belong to the logged-in account returns 403, not another user's private data.

August 11, 2026

Monitoring is now in the OpenAPI spec, docs, and MCP server

Live monitoring (subreddits watched in real time, matches pushed to your webhook) has been callable in production for a while, but was missing from the public API surface: not in the OpenAPI document, not in llms.txt, and not exposed as MCP tools. All 10 endpoints are published now.

  • /api/reddit/monitor/add
  • /api/reddit/monitor/list
  • /api/reddit/monitor/update
  • /api/reddit/monitor/remove
  • /api/reddit/monitor/health
  • /api/reddit/monitor/deliveries
  • /api/reddit/monitor/webhook/create
  • /api/reddit/monitor/webhook/list
  • /api/reddit/monitor/webhook/test
  • /api/reddit/monitor/webhook/delete
  • Billed as a flat monthly plan, not per call -- every one of these is free at the API level.
  • redditapis-mcp@0.2.0 adds the same 10 as native MCP tools (reddit_monitor_add, reddit_monitor_webhook_create, etc.), the first tools in that package that write anything -- they configure your own account, never Reddit itself.

August 2, 2026

Filter a search before it reaches your code

Search accepts the filters people were previously applying by hand after the fact. Ask for self-posts over a score threshold with at least twenty comments, and that is what comes back.

  • /api/reddit/search
  • Score and comment thresholds: min_score, max_score, min_comments, max_comments.
  • Flags: is_video, is_self, over_18, locked, stickied, spoiler, contest_mode.
  • Re-sort the page with sort_type, one of score, num_comments or created.
  • Filtering runs on the page that was fetched, so the response now carries a meta object with fetched, returned and filtered_out. Pass the after cursor back to filter deeper.

August 2, 2026

Read a subreddit's moderator team and its wiki

Two governance reads that previously had no route. Useful before you post anywhere programmatically, and useful for anyone mapping how a community is run.

  • /api/reddit/sub/{name}/moderators
  • /api/reddit/sub/{name}/wiki/{page}
  • The moderators route returns each moderator's username, id, mod permissions, flair text and the date they were added.
  • The wiki route returns a page's markdown and HTML, a may-revise flag, and the last revision's metadata. The page name may be multi-segment, for example index, rules, or config/sidebar.

July 31, 2026

Browse communities without knowing what to search for

Community discovery, as opposed to community search. These three list subreddits directly, so you no longer need a keyword to start exploring.

  • /api/reddit/subreddits/popular
  • /api/reddit/subreddits/new
  • /api/reddit/subreddits/default
  • Popular returns the most-subscribed communities trending right now, new returns the most recently created, and default returns Reddit's own front-page set.
  • Each takes only after and limit, and returns a subreddits list with the same per-item shape as the subreddit metadata route, plus an after cursor.

July 31, 2026

A community's rules, and a hundred posts in one call

One route for checking what a subreddit permits before you post into it, and one for hydrating post ids you already hold without spending a call on each.

  • /api/reddit/sub/{name}/rules
  • /api/reddit/by_id/{fullnames}
  • Rules returns each rule's name, description, what it applies to (posts, comments, or all), violation reason, priority and creation date, alongside Reddit's site-wide rules.
  • Bulk fetch takes up to 100 comma-separated t3_ fullnames and returns them in the same post shape as the listings, in a single request.

July 31, 2026

Deep comment search can return people instead of comments

A research mode for the question comment search could not previously answer, which is who keeps talking about this, rather than where was it said.

  • /api/reddit/search/comments/deep
  • Pass group_by=author and the response becomes the distinct accounts that mentioned your query, ranked by matching-comment count and then by total score.
  • Each author carries comment_count, total_score, the subreddits they matched in, and their top_comment. Cap the list with max_authors; meta.authors_capped flags a trim.
  • Deleted accounts are dropped rather than returned as an unusable row. The price did not change.

July 31, 2026

Subreddit metadata, a user's posts, and a community comment stream

Three reads that closed obvious holes. Before this you could read a user's comments but not their posts, and you could read one post's comment thread but not a community's live comment flow.

  • /api/reddit/sub/{name}/about
  • /api/reddit/user/{name}/submitted
  • /api/reddit/sub/{name}/comments
  • Subreddit metadata returns title, public description, subscriber count, active-user count, creation date, type and the NSFW flag.
  • A user's submitted posts arrive in the same shape as the subreddit listings, so existing parsing works unchanged.
  • The community comment stream is every new comment across a subreddit, not one post's thread.

July 24, 2026

Deep comment search returns the comments themselves

Reddit's own comment search never hands back the comment. It matches comment text and returns the parent posts, which meant the thing you searched for was not in the response. This route returns the actual matching comments.

  • /api/reddit/search/comments/deep
  • Each result carries the comment body, score, author, a permalink that lands on the comment, and the parent post.
  • Shipped the same day in a second pass, after a customer reported there was no reliable way to read past the first few posts: the after cursor is now honoured on input, the parent-post limit rose from 10 to 25, max_comments caps the return, and comments come back sorted by score.
  • The response reports completeness honestly, with comments_matched against comments_returned, plus capped and truncated flags.
  • Matching now runs on the visible comment text at word boundaries with link URLs stripped, which removed the false positives that came from matching inside a URL or across a word.

July 24, 2026

Setup guides for eight MCP clients

The MCP server worked everywhere already, but the setup differs per client and people were reverse-engineering it. There is now a page per client with the exact config block.

  • Claude Code, Claude Desktop, Cursor, VS Code, Windsurf, Kilo Code, Hermes and OpenClaw.

July 24, 2026

Three tool descriptions corrected to match the response

A correction rather than a feature, listed because a customer had already written code against the wrong description. Three MCP tools promised fields the live response does not contain.

  • Media search claimed a permalink; the response carries url.
  • Subreddit posts claimed flair and media; neither is in that response, whose fields are title, author, upvotes, comments, permalink, url and text.
  • The single-post read claimed body, selftext and media; it returns text.
  • A gate now probes every tool against the live API and fails the build if a description names a field the response lacks, so this class of drift cannot come back quietly.

July 20, 2026

Verify a hundred comments in one call

Checking whether comments still exist used to cost one call per comment. It is now one call for up to a hundred, which is the difference between a viable audit loop and an expensive one.

  • /api/reddit/comments/verify
  • /api/reddit/comments/{postId}
  • Batch verification takes a list and returns a per-comment result.
  • A third URL shape for a post's comments was added the same day, so all three spellings people had guessed at now resolve instead of one working and two returning 404.

July 19, 2026

Two comment routes that had been returning 404

Customers were calling these two shapes and getting a 404, reasonably, because they were documented in neither direction. They exist now.

  • /api/reddit/post/{id}/comments
  • /api/reddit/comment/{id}
  • Fetch a post's comment tree by post id, or a single comment by its own id.

July 12, 2026

The MCP server, and a published OpenAPI spec

Two things landed together that changed how the API is consumed. An agent can now install the tools directly, and any client generator can read the surface.

  • The redditapis-mcp package went to npm with 11 read tools covering subreddit listings, post, comment, community, user and media search, comment trees, subreddit top posts, and user profiles and comments. Stdio transport, bearer auth, per-request timeout.
  • The OpenAPI document was published for the whole surface, which is what every endpoint on this page has been added to since. It is the reason this changelog can be checked against the API rather than trusted.
  • The service currently publishes 59 endpoints. Per-call prices for each tier are on the pricing page, which is the one place they are maintained.

June 29, 2026

A free shadowban checker

A standing tool for the most common question people arrive with. It needs no API key and no account.

  • Enter a username and it reports whether that account's posts are publicly visible.

May 1, 2026

Dashboard and cost calculator

The first two things built around the API rather than in it. Both were aimed at the same question, which is what this is going to cost before you commit to it.

  • The dashboard covers keys and usage. The calculator prices a workload against this API and against the alternatives.
  • The calculator's figure for Reddit's own official API was wrong by a factor of 100 until July 24, 2026, when it was corrected. Anyone who compared costs before that date was reading a wrong number.

How this page is kept honest

A path published in the OpenAPI document is an endpoint a customer can call, so a build gate compares that document against this page and fails when a published path is named nowhere here. The same gate fails when the newest entry falls more than thirty days behind. That is why this page cannot quietly go stale again while endpoints keep shipping.

Entries before July 12, 2026 predate the published spec, so the API surface as it stood at that point is described in prose in the July 12 entry rather than listed path by path.

Call the endpoints on this page.

Everything listed here is live right now. Get a key and try the one you came for.