Skip to content

Reddit API

Updated

Read Reddit through one REST API or the hosted MCP server. Search posts and comments, export threads, research subreddits, look up accounts and find people asking for what you sell.

Overview

Base URL: https://api.chatterapi.com/v1. Every Reddit endpoint sits under /v1/reddit, and every call needs your key in the Authorization: Bearer header. See Authentication for how keys work.

  • Read-only. You can't post, comment or vote on Reddit through this API.
  • No Reddit developer account needed. Your one key covers Reddit and X.
  • Same envelope on every call: data, page on list endpoints, credits, requestId and cached. See Credits and Pagination.
  • Agents: each endpoint is also an MCP tool on the hosted server. Dots in the tool id become underscores, so reddit.search is the reddit_search tool.
  • 18+ tools (/v1/reddit/nsfw/...) only answer once the account owner turns on 18+ access in Settings. Until then they return scope_denied.
your first Reddit call
curl "https://api.chatterapi.com/v1/reddit/search?q=best%20crm&time=month&limit=5" \
  -H "Authorization: Bearer $CHATTERAPI_KEY"

Endpoints at a glance

The credits listed are the most a call can cost. We check your balance against that number before the call runs, and charge you only if the call succeeds.

EndpointMethod and pathCredits
Reddit Post SearchGET /v1/reddit/search1 credit
Reddit NSFW Post SearchGET /v1/reddit/nsfw/search2 credits (18+ setting)
Reddit Comment SearchGET /v1/reddit/comments/search2 credits
Reddit Media SearchGET /v1/reddit/media/search2 credits
Reddit ScraperGET /v1/reddit/posts/{id}1 credit
Reddit Comment ExporterGET /v1/reddit/threads/{id}3 credits
Subreddit FinderGET /v1/reddit/subreddits/search2 credits
NSFW Subreddit FinderGET /v1/reddit/nsfw/subreddits/search2 credits (18+ setting)
Subreddit StatsGET /v1/reddit/subreddits/{name}2 credits
Subreddit PostsGET /v1/reddit/subreddits/{name}/posts1 credit
Reddit User LookupGET /v1/reddit/users/{name}up to 2 credits
Reddit Account CheckerGET /v1/reddit/users/{name}/status2 credits
Reddit Comment HistoryGET /v1/reddit/users/{name}/comments2 credits
Reddit Post HistoryGET /v1/reddit/users/{name}/posts1 credit
Reddit User SearchGET /v1/reddit/users/search2 credits
Reddit Lead FinderGET /v1/reddit/leads3 credits

How Reddit inputs work

InputWhat to passExamples
Post or thread idThe base36 id, the t3_ fullname or the full post URL1g2h3j4, t3_1g2h3j4, https://www.reddit.com/r/SaaS/comments/1g2h3j4/...
SubredditThe name without r/SaaS, smallbusiness
UsernameThe name without u/spez
Search query qReddit search syntax works"exact phrase", crm OR hubspot, crm NOT salesforce, author:name
Time filter timeApplies to search and top feedshour, day, week, month, year, all

Comment trees

reddit.thread returns the post plus a flat list of comments. Rebuild the tree with each comment's parentId. A top-level comment's parent is the post. No Reddit source returns very large threads in full, so compare comments.length with reportedCommentCount and page with cursor for more.

Fields that can be null

Some fields can only be filled from our primary source. When the fallback source serves a call, those fields come back as null and the call still succeeds: subreddit rules and moderators, user bio and badges, and the full text of comments in a user's history (bodyTruncated: true marks a preview). A null means unknown, not empty.

Freshness and caching

Search results are cached for about 10 minutes and subreddit profiles for a day. A cached response says cached: true and costs the same as a fresh one, so repeated calls return the same answer without hitting Reddit again.

Endpoint reference

Every Reddit endpoint with its parameters and a request you can copy. The samples read your key from an environment variable.

GET /v1/reddit/search · 1 credit · MCP tool reddit_search · returns RedditPost[]

Search Reddit posts by keyword across all of Reddit or inside one subreddit. Returns posts with title, body, author, subreddit, score, comment count and URL, newest data within minutes. Costs 1 credit per page of up to 25 posts. Tip: Reddit operators work inside q, e.g. "exact phrase", OR, NOT, author:name.

ParameterNotes
q query, string, requiredSearch text. Reddit operators allowed.
subreddit query, stringLimit to one subreddit, e.g. SaaS.
sort query, enumResult order. One of relevance, new, hot, top, comments. Default relevance.
time query, enumTime window. One of hour, day, week, month, year, all. Default all.
nsfw query, boolean,stringInclude adult posts. true needs the 18+ setting and is billed as reddit.nsfw_search.
limit query, integerMax rows to return (1-100). Reddit pages hold about 25 rows; larger values still return one page. Range 1 to 100. Default 25.
cursor query, stringOpaque cursor from the previous response's page.nextCursor. Length 1 to 2048.
curl "https://chatterapi.com/v1/reddit/search?q=best+crm+for+small+business&time=year" \
  -H "Authorization: Bearer $CHATTERAPI_KEY"

Full reference for Reddit Post Search: response example, every field and the errors it can return.

GET /v1/reddit/nsfw/search · 2 credits · MCP tool reddit_nsfw_search · returns RedditPost[] · needs the 18+ setting

Search Reddit posts including adult (NSFW) content. Only works when the account owner has turned on 18+ access in the dashboard; otherwise it returns scope_denied. Returns the same post objects as reddit.search. Costs 2 credits per page. Tip: set nsfwOnly=true to drop safe-for-work posts from the results.

ParameterNotes
q query, string, requiredSearch text. Reddit operators allowed.
subreddit query, stringLimit to one subreddit.
sort query, enumResult order. One of relevance, new, hot, top, comments. Default relevance.
time query, enumTime window. One of hour, day, week, month, year, all. Default all.
nsfwOnly query, boolean,stringReturn only posts marked NSFW.
limit query, integerMax rows to return (1-100). Reddit pages hold about 25 rows; larger values still return one page. Range 1 to 100. Default 25.
cursor query, stringOpaque cursor from the previous response's page.nextCursor. Length 1 to 2048.
curl "https://chatterapi.com/v1/reddit/nsfw/search?q=photography&limit=10" \
  -H "Authorization: Bearer $CHATTERAPI_KEY"

Full reference for Reddit NSFW Post Search: response example, every field and the errors it can return.

Reddit Comment Search

GET /v1/reddit/comments/search · 2 credits · MCP tool reddit_search_comments · returns RedditComment[]

Search Reddit comments by keyword, the place where people actually recommend and complain about tools. Returns comment text, author, score, subreddit, the parent post title and a link. Costs 2 credits per page. Tip: comments have no time filter upstream, so sort=new and stop paging once results get older than you need.

ParameterNotes
q query, string, requiredSearch text. Reddit operators allowed.
sort query, enumResult order. Comments have no time filter, so use new to monitor. One of relevance, new, top. Default relevance.
author query, stringOnly comments by this username.
nsfw query, boolean,stringInclude comments from adult communities. true needs the 18+ setting.
limit query, integerMax rows to return (1-100). Reddit pages hold about 25 rows; larger values still return one page. Range 1 to 100. Default 25.
cursor query, stringOpaque cursor from the previous response's page.nextCursor. Length 1 to 2048.
curl "https://chatterapi.com/v1/reddit/comments/search?q=gummysearch+alternative" \
  -H "Authorization: Bearer $CHATTERAPI_KEY"

Full reference for Reddit Comment Search: response example, every field and the errors it can return.

Reddit Media Search

GET /v1/reddit/media/search · 2 credits · MCP tool reddit_search_media · returns RedditPost[]

Find Reddit image, video and gallery posts by keyword. Returns posts with a media object holding direct image or video URLs. Costs 2 credits per page. Tip: set kind=image, video or gallery to narrow results; the body field is empty for media results.

ParameterNotes
q query, string, requiredSearch text. Reddit operators allowed.
kind query, enumMedia type to return. One of image, video, gallery, all. Default all.
sort query, enumResult order. One of relevance, new, hot, top, comments. Default relevance.
time query, enumTime window. One of hour, day, week, month, year, all. Default all.
nsfw query, boolean,stringInclude adult media. true needs the 18+ setting.
limit query, integerMax rows to return (1-100). Reddit pages hold about 25 rows; larger values still return one page. Range 1 to 100. Default 25.
cursor query, stringOpaque cursor from the previous response's page.nextCursor. Length 1 to 2048.
curl "https://chatterapi.com/v1/reddit/media/search?q=saas+dashboard&limit=10" \
  -H "Authorization: Bearer $CHATTERAPI_KEY"

Full reference for Reddit Media Search: response example, every field and the errors it can return.

Reddit Scraper

GET /v1/reddit/posts/{id} · 1 credit · MCP tool reddit_scrape · returns RedditPost

Fetch one Reddit post by id or URL, with full body text, score, comment count, upvote ratio, flags and media. Costs 1 credit. Tip: to get the comments too, call reddit.thread instead (it includes the post).

ParameterNotes
id path, string, requiredPost id (1wdihhj), t3_ id, or any reddit.com / redd.it post URL.
curl "https://chatterapi.com/v1/reddit/posts/1wdihhj" \
  -H "Authorization: Bearer $CHATTERAPI_KEY"

Full reference for Reddit Scraper: response example, every field and the errors it can return.

Reddit Comment Exporter

GET /v1/reddit/threads/{id} · 3 credits · MCP tool reddit_thread · returns RedditThread

Get a Reddit post together with its comments as a flat list (rebuild the tree with parentId). Returns the post, up to about 100 comments per page, and counts of replies Reddit did not load. Costs 3 credits per page. Tip: no thread API returns every comment on very large threads; compare comments.length with reportedCommentCount.

ParameterNotes
id path, string, requiredPost id or post URL.
cursor query, stringNext page of comments. Length 1 to 2048.
curl "https://chatterapi.com/v1/reddit/threads/1wdihhj" \
  -H "Authorization: Bearer $CHATTERAPI_KEY"

Full reference for Reddit Comment Exporter: response example, every field and the errors it can return.

Subreddit Finder

GET /v1/reddit/subreddits/search · 2 credits · MCP tool reddit_communities · returns Subreddit[]

Find subreddits about a topic. Returns each community's name, title, description, subscriber count, creation date and NSFW flag (rules and moderators are not included; call reddit.subreddit for those). Costs 2 credits per page. Tip: search the problem your customer has, not your product name.

ParameterNotes
q query, string, requiredTopic to find communities for.
nsfw query, boolean,stringInclude adult communities. true is billed as reddit.nsfw_communities and needs the 18+ setting.
limit query, integerMax rows to return (1-100). Reddit pages hold about 25 rows; larger values still return one page. Range 1 to 100. Default 25.
cursor query, stringOpaque cursor from the previous response's page.nextCursor. Length 1 to 2048.
curl "https://chatterapi.com/v1/reddit/subreddits/search?q=saas+marketing" \
  -H "Authorization: Bearer $CHATTERAPI_KEY"

Full reference for Subreddit Finder: response example, every field and the errors it can return.

NSFW Subreddit Finder

GET /v1/reddit/nsfw/subreddits/search · 2 credits · MCP tool reddit_nsfw_communities · returns Subreddit[] · needs the 18+ setting

Find subreddits including adult (NSFW) communities. Requires the account's 18+ setting, otherwise returns scope_denied. Same fields as reddit.communities. Costs 2 credits per page. Tip: set nsfwOnly=true to list only communities flagged NSFW.

ParameterNotes
q query, string, requiredTopic to find communities for.
nsfwOnly query, boolean,stringReturn only communities flagged NSFW.
limit query, integerMax rows to return (1-100). Reddit pages hold about 25 rows; larger values still return one page. Range 1 to 100. Default 25.
cursor query, stringOpaque cursor from the previous response's page.nextCursor. Length 1 to 2048.
curl "https://chatterapi.com/v1/reddit/nsfw/subreddits/search?q=photography&limit=10" \
  -H "Authorization: Bearer $CHATTERAPI_KEY"

Full reference for NSFW Subreddit Finder: response example, every field and the errors it can return.

Subreddit Stats

GET /v1/reddit/subreddits/{name} · 2 credits · MCP tool reddit_subreddit · returns Subreddit

Get one subreddit's profile: title, description, subscriber count, creation date, NSFW flag, full rules, moderators and posting settings (which post types are allowed, whether posting is restricted). Costs 2 credits. Tip: read rules before drafting a post; if rules is null the data came from a fallback source that cannot see them, not because the subreddit has none.

ParameterNotes
name path, string, requiredSubreddit name, r/name or URL, e.g. SaaS.
curl "https://chatterapi.com/v1/reddit/subreddits/SaaS" \
  -H "Authorization: Bearer $CHATTERAPI_KEY"

Full reference for Subreddit Stats: response example, every field and the errors it can return.

Subreddit Posts

GET /v1/reddit/subreddits/{name}/posts · 1 credit · MCP tool reddit_subreddit_posts · returns RedditPost[]

List a subreddit's posts by hot, new, top, rising, controversial or best. Returns post objects with score, comment count and link. Costs 1 credit per page. Tip: sort=top with time=week shows what that community rewards; sort=new is the freshest feed.

ParameterNotes
name path, string, requiredSubreddit name, r/name or URL, e.g. SaaS.
sort query, enumFeed order. One of hot, new, top, rising, controversial, best. Default hot.
time query, enumUsed when sort is top or controversial. One of hour, day, week, month, year, all. Default week.
nsfw query, boolean,stringWhen false, NSFW posts are removed.
limit query, integerMax rows to return (1-100). Reddit pages hold about 25 rows; larger values still return one page. Range 1 to 100. Default 25.
cursor query, stringOpaque cursor from the previous response's page.nextCursor. Length 1 to 2048.
curl "https://chatterapi.com/v1/reddit/subreddits/SaaS/posts?sort=top&time=week" \
  -H "Authorization: Bearer $CHATTERAPI_KEY"

Full reference for Subreddit Posts: response example, every field and the errors it can return.

Reddit User Lookup

GET /v1/reddit/users/{name} · up to 2 credits (1 credit, 2 with detail=full) · MCP tool reddit_user · returns RedditUser

Look up a Reddit account by username: account age, total, post and comment karma, avatar, and when available bio and badges (verified, moderator, employee, premium). Costs 1 credit. Tip: set detail=full to always get bio and badges (2 credits); the default may return them as null.

ParameterNotes
name path, string, requiredReddit username, with or without u/, or a profile URL. 3-20 characters.
detail query, enumfull guarantees bio and badges and costs 2 credits. One of basic, full. Default basic.
curl "https://chatterapi.com/v1/reddit/users/spez" \
  -H "Authorization: Bearer $CHATTERAPI_KEY"

Full reference for Reddit User Lookup: response example, every field and the errors it can return.

Reddit Account Checker

GET /v1/reddit/users/{name}/status · 2 credits · MCP tool reddit_user_status · returns UserStatus

Check whether a Reddit account is active, suspended, or not visible (deleted, banned or shadowbanned). Returns a state, never an error, for accounts that don't exist. Costs 2 credits. Tip: run it on your own account; not_found_or_banned on an account you can log into means Reddit has shadowbanned it.

ParameterNotes
name path, string, requiredReddit username, with or without u/, or a profile URL. 3-20 characters.
curl "https://chatterapi.com/v1/reddit/users/spez/status" \
  -H "Authorization: Bearer $CHATTERAPI_KEY"

Full reference for Reddit Account Checker: response example, every field and the errors it can return.

Reddit Comment History

GET /v1/reddit/users/{name}/comments · 2 credits · MCP tool reddit_user_comments · returns RedditComment[]

List a Reddit user's recent comments with full text, subreddit, score, the post each one replies to, and a link. Costs 2 credits per page of up to 25. Tip: if bodyTruncated is true the data came from a fallback that only has previews; retry later for full text.

ParameterNotes
name path, string, requiredReddit username, with or without u/, or a profile URL. 3-20 characters.
sort query, enumOrder of the comment history. One of new, top, controversial. Default new.
limit query, integerMax rows to return (1-100). Reddit pages hold about 25 rows; larger values still return one page. Range 1 to 100. Default 25.
cursor query, stringOpaque cursor from the previous response's page.nextCursor. Length 1 to 2048.
curl "https://chatterapi.com/v1/reddit/users/spez/comments" \
  -H "Authorization: Bearer $CHATTERAPI_KEY"

Full reference for Reddit Comment History: response example, every field and the errors it can return.

Reddit Post History

GET /v1/reddit/users/{name}/posts · 1 credit · MCP tool reddit_user_posts · returns RedditPost[]

List the posts a Reddit user has submitted, newest first by default, with subreddit, score, comment count and link. Costs 1 credit per page. Tip: combine with reddit.user_comments to see where an account is active before you reach out.

ParameterNotes
name path, string, requiredReddit username, with or without u/, or a profile URL. 3-20 characters.
sort query, enumOrder of the post history. One of new, top, hot, controversial. Default new.
nsfw query, boolean,stringWhen false, NSFW posts are removed.
limit query, integerMax rows to return (1-100). Reddit pages hold about 25 rows; larger values still return one page. Range 1 to 100. Default 25.
cursor query, stringOpaque cursor from the previous response's page.nextCursor. Length 1 to 2048.
curl "https://chatterapi.com/v1/reddit/users/spez/posts" \
  -H "Authorization: Bearer $CHATTERAPI_KEY"

Full reference for Reddit Post History: response example, every field and the errors it can return.

GET /v1/reddit/users/search · 2 credits · MCP tool reddit_user_search · returns RedditUser[]

Find Reddit accounts by keyword in their name or profile. Returns profiles with karma, age, bio and badges. Costs 2 credits per page. Tip: use it to find a company's or founder's official account before calling reddit.user_posts.

ParameterNotes
q query, string, requiredKeyword to match in usernames and profiles.
nsfw query, boolean,stringInclude adult accounts. true needs the 18+ setting.
limit query, integerMax rows to return (1-100). Reddit pages hold about 25 rows; larger values still return one page. Range 1 to 100. Default 25.
cursor query, stringOpaque cursor from the previous response's page.nextCursor. Length 1 to 2048.
curl "https://chatterapi.com/v1/reddit/users/search?q=hubspot&limit=10" \
  -H "Authorization: Bearer $CHATTERAPI_KEY"

Full reference for Reddit User Search: response example, every field and the errors it can return.

Reddit Lead Finder

GET /v1/reddit/leads · 3 credits · MCP tool reddit_leads · returns Lead[]

Find Reddit posts and comments where people ask for a recommendation, compare tools, or complain about a tool in your category. Returns leads ranked by an intent score (0 to 1) with the matched phrases, so you can see why each one was picked. Costs 3 credits per page. Tip: pass competitors to catch people switching away from them.

ParameterNotes
q query, string, requiredYour product category or the problem it solves, e.g. crm or cold email. 1-60 characters.
competitors query, string or arrayUp to 5 tools people might switch away from, e.g. hubspot,pipedrive.
exclude query, string or arrayUp to 10 words that disqualify an item.
time query, enumHow far back to look. One of day, week, month, year. Default month.
minScore query, numberMinimum intent score from 0 to 1. Range 0 to 1. Default 0.3.
intents query, string or arrayWhich intents to return. Default: all three.
cursor query, stringOpaque cursor from the previous response's page.nextCursor. Length 1 to 2048.
subreddit query, stringLimit the Reddit side to one subreddit.
curl "https://chatterapi.com/v1/reddit/leads?q=crm" \
  -H "Authorization: Bearer $CHATTERAPI_KEY"

Full reference for Reddit Lead Finder: response example, every field and the errors it can return.

Response objects

These are the objects inside data. List endpoints return arrays of them.

RedditPost

FieldTypeNullableDescription
idstringnoPlatform id.
fullnamestringnoReddit fullname (t3_ for posts, t1_ for comments). Dedupe on this.
titlestringnoTitle.
bodystringnoText body. Empty for link and media posts.
authorstringyesAuthor username, null when deleted.
subredditstringnoSubreddit name without r/.
permalinkstringnoPath on reddit.com.
urlstringnoFull URL on the platform.
externalUrlstringyesLink the post points to, when it is a link post.
scorenumberyesScore (upvotes minus downvotes) as Reddit reports it.
numCommentsnumberyesComment count.
upvoteRationumberyesShare of upvotes, 0 to 1.
createdAtstringnoISO 8601 UTC timestamp.
nsfwbooleannoMarked adult content.
lockedbooleanyesComments are locked.
mediaobjectyesImages, video or gallery URLs, or null.

RedditComment

FieldTypeNullableDescription
idstringnoPlatform id.
fullnamestringnoReddit fullname (t3_ for posts, t1_ for comments). Dedupe on this.
parentIdstringyesFullname of the parent comment or post.
postIdstringyesId of the post this comment belongs to.
postTitlestringyesTitle of that post.
authorstringyesAuthor username, null when deleted.
bodystringnoText body. Empty for link and media posts.
bodyTruncatedbooleannoTrue when the text is a preview from a fallback source.
scorenumberyesScore (upvotes minus downvotes) as Reddit reports it.
subredditstringyesSubreddit name without r/.
permalinkstringyesPath on reddit.com.
urlstringyesFull URL on the platform.
createdAtstringnoISO 8601 UTC timestamp.

RedditThread

FieldTypeNullableDescription
postobjectyesThe post, or null when it could not be loaded.
commentsobject[]noFlat list of comments; rebuild the tree with parentId.
unloadedReplyStubsnumbernoReplies Reddit did not load in this page.
reportedCommentCountnumberyesComment count Reddit reports for the post.

Subreddit

FieldTypeNullableDescription
namestringnoName.
titlestringyesTitle.
descriptionstringyesDescription.
subscribersnumberyesSubscriber count.
createdAtstringyesISO 8601 UTC timestamp.
nsfwbooleanyesMarked adult content.
urlstringnoSubreddit URL.
rulesobject[]yesSubreddit rules, or null when the source cannot see them.
moderatorsobject[]yesModerators and since when, or null.
postingobjectyesPosting settings, or null.

RedditUser

FieldTypeNullableDescription
usernamestringnoUsername without u/.
idstringyesPlatform id.
createdAtstringyesISO 8601 UTC timestamp.
karmaobjectnoTotal, post and comment karma.
biostringyesProfile bio.
avatarUrlstringyesAvatar image URL.
badgesobjectyesVerified, employee, moderator and premium flags, or null.

UserStatus

FieldTypeNullableDescription
usernamestringnoUsername without u/.
stateenumnoactive, suspended, not_found_or_banned or unknown.
existsbooleanyesWhether the account exists, null when unknown.

Lead

FieldTypeNullableDescription
platformenumnoreddit or x.
kindenumnopost, comment or tweet.
idstringnoPlatform id.
urlstringnoFull URL on the platform.
textstringnoText.
authorstringyesAuthor username, null when deleted.
authorUrlstringyesAuthor profile URL.
communitystringyesSubreddit for Reddit items, null for X.
scorenumberyesScore (upvotes minus downvotes) as Reddit reports it.
createdAtstringyesISO 8601 UTC timestamp.
intentenumnoasking_for_recommendation, comparing_tools, complaining_about_tool or other.
intentScorenumbernoIntent score from 0 to 1.
matchedTermsstring[]noPhrases that made this a lead.

Recipes

Find people asking for a tool like yours

Call /v1/reddit/leads with your category in two or three words and up to five competitors. Results are ranked by intentScore from 0 to 1, and matchedTerms shows the phrases that triggered each one. One page costs 3 credits.

curl "https://api.chatterapi.com/v1/reddit/leads?q=email%20marketing%20tool&competitors=mailchimp,convertkit" \
  -H "Authorization: Bearer $CHATTERAPI_KEY"

Check an account for a shadowban

Call /v1/reddit/users/{name}/status on your own account. If you can log into it but the state is not_found_or_banned, Reddit has hidden it from everyone else. It costs 2 credits, and an account that doesn't exist returns a state rather than an error.

Read a community before posting

Call /v1/reddit/subreddits/{name} for its rules and posting settings, then /v1/reddit/subreddits/{name}/posts?sort=top&time=month to see what the community rewards.

Export a whole thread

Call /v1/reddit/threads/{id} with the post URL and keep passing page.nextCursor as cursor until page.hasMore is false. The Comment Exporter free tool shows the result without code.

Errors you'll see

CodeWhenWhat to do
not_foundThe post, subreddit or user doesn't exist, or the subreddit is private or banned.Check the id or name. Don't retry.
scope_deniedAn 18+ endpoint while 18+ access is off.Turn it on in Settings.
invalid_inputA parameter failed validation. The message names the field.Fix the request.
upstream_errorReddit or both of our sources failed.Retry with backoff. You weren't charged.
insufficient_creditsYour balance is below the call's maximum cost.Top up or wait for your monthly credits.

Every code, with response bodies and what an agent should tell the user, is on Errors.