Reddit API for threads, subreddits and search
Fetch a post with its comment tree, walk a subreddit feed, read a user’s history, or search across Reddit. One API key, no app approval to wait for.
request.ts
import { Bridgly } from "@bridgly/sdk";const client = new Bridgly({ apiKey: "bgly_YOUR_KEY" });const res = await client.reddit.listSubredditPosts({ subreddit: "programming", sort: "top", time: "week", count: 10});if (res.type === "success") { console.log(res.data);}npm install @bridgly/sdk
All 14 Reddit endpoints
A post lookup returns the post and its comments in one call, with replies nested under their parents the way Reddit shows them. Each comment carries its score, depth, author, timestamps and whether the author is the original poster.
Subreddit lookups return subscriber and active-user counts, the community type, what kinds of post it allows, and its rules. Feed endpoints return a subreddit’s posts sorted by hot, new, top or rising, or its most recent comments.
For a user you get karma, account age and status flags, plus their recent posts, recent comments, or both interleaved. Search covers posts, comments, communities and users separately, or all of them in one mixed result.
Posts and comments
A single thread, or a single comment with the conversation under it.
POST/reddit/get-post
A post with score, upvote ratio, flair and media, plus its comment tree nested by reply1 credit per requestDocs →
Request body
urlstringrequired- Full URL of the Reddit post to fetch (with or without query).
Response
200 OK · application/json
{ "timeMs": 1840, "creditsCost": 1, "data": { "post": { "id": "string", "fullname": "string", "title": "string", "author": "string", "authorFullname": "string", "selftext": "string", "score": 0, "ups": 0, "downs": 0, "upvoteRatio": 0, "numComments": 0, "numCrossposts": 0, "totalAwardsReceived": 0, "gilded": 0, "createdUtc": 0, "createdAt": "string", "editedUtc": 0, "editedAt": "string", "permalink": "string", "postUrl": "string", "url": "string", "subreddit": "string", "subredditId": "string", "subredditUrl": "string", "subredditPrefixed": "string", "subredditSubscribers": 0, "subredditType": "string", "linkFlairText": "string", "domain": "string", "thumbnail": "string", "distinguished": "string", "isSelf": true, "isVideo": true, "isOriginalContent": true, "over18": true, "spoiler": true, "stickied": true, "pinned": true, "archived": true, "contestMode": true, "locked": true }, "comments": [ { "id": "string", "fullname": "string", "author": "string", "authorFullname": "string", "authorFlairText": "string", "body": "string", "score": 0, "ups": 0, "downs": 0, "scoreHidden": true, "controversiality": 0, "totalAwardsReceived": 0, "gilded": 0, "createdUtc": 0, "createdAt": "string", "editedUtc": 0, "editedAt": "string", "permalink": "string", "commentUrl": "string", "depth": 0, "isSubmitter": true, "stickied": true, "collapsed": true, "locked": true, "distinguished": "string", "parentId": "string", "postId": "string", "postFullname": "string", "subreddit": "string", "subredditId": "string", "subredditPrefixed": "string", "subredditType": "string", "subredditUrl": "string", "replies": [ {} ] } ] }}POST/reddit/get-comment
One comment with the replies under it and the post it belongs to1 credit per requestDocs →
Request body
permalinkstringrequired- Permalink of the Reddit comment to fetch — an absolute URL or a site-relative path, e.g. "/r/programming/comments/1u3a0cd/title/labc123/".
Response
200 OK · application/json
{ "timeMs": 1840, "creditsCost": 1, "data": { "post": { "id": "string", "fullname": "string", "title": "string", "author": "string", "authorFullname": "string", "selftext": "string", "score": 0, "ups": 0, "downs": 0, "upvoteRatio": 0, "numComments": 0, "numCrossposts": 0, "totalAwardsReceived": 0, "gilded": 0, "createdUtc": 0, "createdAt": "string", "editedUtc": 0, "editedAt": "string", "permalink": "string", "postUrl": "string", "url": "string", "subreddit": "string", "subredditId": "string", "subredditUrl": "string", "subredditPrefixed": "string", "subredditSubscribers": 0, "subredditType": "string", "linkFlairText": "string", "domain": "string", "thumbnail": "string", "distinguished": "string", "isSelf": true, "isVideo": true, "isOriginalContent": true, "over18": true, "spoiler": true, "stickied": true, "pinned": true, "archived": true, "contestMode": true, "locked": true }, "comment": { "id": "string", "fullname": "string", "author": "string", "authorFullname": "string", "authorFlairText": "string", "body": "string", "score": 0, "ups": 0, "downs": 0, "scoreHidden": true, "controversiality": 0, "totalAwardsReceived": 0, "gilded": 0, "createdUtc": 0, "createdAt": "string", "editedUtc": 0, "editedAt": "string", "permalink": "string", "commentUrl": "string", "depth": 0, "isSubmitter": true, "stickied": true, "collapsed": true, "locked": true, "distinguished": "string", "parentId": "string", "postId": "string", "postFullname": "string", "subreddit": "string", "subredditId": "string", "subredditPrefixed": "string", "subredditType": "string", "subredditUrl": "string", "replies": [ {} ] } }}Subreddits
Community metadata and rules, the post feed, and the live comment stream.
POST/reddit/get-subreddit
Subreddit details: description, subscribers, active users, allowed post types and rules1 credit per requestDocs →
Request body
subredditstringrequired- Subreddit name, with or without the "r/" prefix, e.g. "programming".
Response
200 OK · application/json
{ "timeMs": 1840, "creditsCost": 1, "data": { "id": "string", "fullname": "string", "name": "string", "namePrefixed": "string", "title": "string", "description": "string", "publicDescription": "string", "subscribers": 0, "activeUserCount": 0, "over18": true, "quarantine": true, "subredditType": "string", "submissionType": "string", "lang": "string", "url": "string", "subredditUrl": "string", "createdUtc": 0, "iconUrl": "string", "bannerUrl": "string", "headerImageUrl": "string", "primaryColor": "string", "keyColor": "string", "bannerBackgroundColor": "string", "wikiEnabled": true, "restrictPosting": true, "restrictCommenting": true, "allowImages": true, "allowVideos": true, "allowGalleries": true, "allowPolls": true, "spoilersEnabled": true, "rules": [ { "shortName": "string", "description": "string", "violationReason": "string", "kind": "string", "priority": 0, "createdUtc": 0 } ], "siteRules": [ "string" ] }}POST/reddit/list-subreddit-posts
A subreddit’s posts sorted by hot, new, top or rising1 credit per requestDocs →
Request body
subredditstringrequired- Subreddit name, with or without the "r/" prefix, e.g. "programming".
sortenum- Feed ordering. Defaults to "hot".
- hot | new | top | rising
timeenum- Restrict results to a recent window. Defaults to "all".
- hour | day | week | month | year | all
countinteger · 1–10 · default 10- Number of posts to return (1–10). Defaults to 10.
afterstring- Pagination cursor (a Reddit fullname returned as `after` from a previous page).
Response
200 OK · application/json
{ "timeMs": 1840, "creditsCost": 1, "data": { "posts": [ { "id": "string", "fullname": "string", "title": "string", "author": "string", "authorFullname": "string", "selftext": "string", "score": 0, "ups": 0, "downs": 0, "upvoteRatio": 0, "numComments": 0, "numCrossposts": 0, "totalAwardsReceived": 0, "gilded": 0, "createdUtc": 0, "createdAt": "string", "editedUtc": 0, "editedAt": "string", "permalink": "string", "postUrl": "string", "url": "string", "subreddit": "string", "subredditId": "string", "subredditUrl": "string", "subredditPrefixed": "string", "subredditSubscribers": 0, "subredditType": "string", "linkFlairText": "string", "domain": "string", "thumbnail": "string", "distinguished": "string", "isSelf": true, "isVideo": true, "isOriginalContent": true, "over18": true, "spoiler": true, "stickied": true, "pinned": true, "archived": true, "contestMode": true, "locked": true } ], "subreddit": "string", "after": "string" }}POST/reddit/list-subreddit-comments
The newest comments posted anywhere in a subreddit1 credit per requestDocs →
Request body
subredditstringrequired- Subreddit name, with or without the "r/" prefix, e.g. "programming".
afterstring- Pagination cursor (a Reddit fullname returned as `after` from a previous page).
countinteger · 1–10 · default 10- Number of comments to return (1–10). Defaults to 10.
Response
200 OK · application/json
{ "timeMs": 1840, "creditsCost": 1, "data": { "comments": [ { "id": "string", "fullname": "string", "author": "string", "authorFullname": "string", "authorFlairText": "string", "body": "string", "score": 0, "ups": 0, "downs": 0, "scoreHidden": true, "controversiality": 0, "totalAwardsReceived": 0, "gilded": 0, "createdUtc": 0, "createdAt": "string", "editedUtc": 0, "editedAt": "string", "permalink": "string", "commentUrl": "string", "depth": 0, "isSubmitter": true, "stickied": true, "collapsed": true, "locked": true, "distinguished": "string", "parentId": "string", "postId": "string", "postFullname": "string", "subreddit": "string", "subredditId": "string", "subredditPrefixed": "string", "subredditType": "string", "subredditUrl": "string", "replies": [ {} ], "linkTitle": "string", "linkPermalink": "string", "linkAuthor": "string", "linkAuthorUrl": "string", "linkUrl": "string", "linkNumComments": 0, "linkOver18": true } ], "subreddit": "string", "after": "string" }}Users
A profile, and the most recent things that account posted or commented.
POST/reddit/get-user
Profile: post and comment karma, account age and status flags1 credit per requestDocs →
Request body
usernamestringrequired- Reddit username, with or without the "u/" prefix, e.g. "spez".
Response
200 OK · application/json
{ "timeMs": 1840, "creditsCost": 1, "data": { "id": "string", "username": "string", "profileUrl": "string", "commentKarma": 0, "linkKarma": 0, "createdUtc": 0, "iconUrl": "string", "isGold": true, "isMod": true, "isEmployee": true, "verified": true, "hasVerifiedEmail": true, "acceptFollowers": true }}POST/reddit/list-user-posts
A user’s most recent posts1 credit per requestDocs →
Request body
usernamestringrequired- Reddit username, with or without the "u/" prefix, e.g. "spez".
countinteger · 1–10 · default 10- Number of posts to return (1–10). Defaults to 10.
Response
200 OK · application/json
{ "timeMs": 1840, "creditsCost": 1, "data": [ { "id": "string", "fullname": "string", "title": "string", "author": "string", "authorFullname": "string", "selftext": "string", "score": 0, "ups": 0, "downs": 0, "upvoteRatio": 0, "numComments": 0, "numCrossposts": 0, "totalAwardsReceived": 0, "gilded": 0, "createdUtc": 0, "createdAt": "string", "editedUtc": 0, "editedAt": "string", "permalink": "string", "postUrl": "string", "url": "string", "subreddit": "string", "subredditId": "string", "subredditUrl": "string", "subredditPrefixed": "string", "subredditSubscribers": 0, "subredditType": "string", "linkFlairText": "string", "domain": "string", "thumbnail": "string", "distinguished": "string", "isSelf": true, "isVideo": true, "isOriginalContent": true, "over18": true, "spoiler": true, "stickied": true, "pinned": true, "archived": true, "contestMode": true, "locked": true } ]}POST/reddit/list-user-comments
A user’s most recent comments with the post each was left on1 credit per requestDocs →
Request body
usernamestringrequired- Reddit username, with or without the "u/" prefix, e.g. "spez".
countinteger · 1–10 · default 10- Number of comments to return (1–10). Defaults to 10.
Response
200 OK · application/json
{ "timeMs": 1840, "creditsCost": 1, "data": [ { "id": "string", "fullname": "string", "author": "string", "authorFullname": "string", "authorFlairText": "string", "body": "string", "score": 0, "ups": 0, "downs": 0, "scoreHidden": true, "controversiality": 0, "totalAwardsReceived": 0, "gilded": 0, "createdUtc": 0, "createdAt": "string", "editedUtc": 0, "editedAt": "string", "permalink": "string", "commentUrl": "string", "depth": 0, "isSubmitter": true, "stickied": true, "collapsed": true, "locked": true, "distinguished": "string", "parentId": "string", "postId": "string", "postFullname": "string", "subreddit": "string", "subredditId": "string", "subredditPrefixed": "string", "subredditType": "string", "subredditUrl": "string", "replies": [ {} ], "linkTitle": "string", "linkPermalink": "string", "linkAuthor": "string", "linkAuthorUrl": "string", "linkUrl": "string", "linkNumComments": 0, "linkOver18": true } ]}POST/reddit/list-user-overview
A user’s recent posts and comments together, newest first1 credit per requestDocs →
Request body
usernamestringrequired- Reddit username, with or without the "u/" prefix, e.g. "spez".
countinteger · 1–10 · default 10- Number of overview items to return (1–10). Defaults to 10.
Response
200 OK · application/json
{ "timeMs": 1840, "creditsCost": 1, "data": [ { "type": "post", "post": { "id": "string", "fullname": "string", "title": "string", "author": "string", "authorFullname": "string", "selftext": "string", "score": 0, "ups": 0, "downs": 0, "upvoteRatio": 0, "numComments": 0, "numCrossposts": 0, "totalAwardsReceived": 0, "gilded": 0, "createdUtc": 0, "createdAt": "string", "editedUtc": 0, "editedAt": "string", "permalink": "string", "postUrl": "string", "url": "string", "subreddit": "string", "subredditId": "string", "subredditUrl": "string", "subredditPrefixed": "string", "subredditSubscribers": 0, "subredditType": "string", "linkFlairText": "string", "domain": "string", "thumbnail": "string", "distinguished": "string", "isSelf": true, "isVideo": true, "isOriginalContent": true, "over18": true, "spoiler": true, "stickied": true, "pinned": true, "archived": true, "contestMode": true, "locked": true } } ]}Search
Full-text search with sort order and a time window. Post search can be limited to one subreddit.
POST/reddit/search/posts
Posts matching a query, optionally inside one subreddit1 credit per requestDocs →
Request body
querystringrequired- The text to search Reddit for, e.g. "openai", "best keyboard".
subredditstring- Restrict the search to a single subreddit (name with or without the "r/" prefix). Only applies to post search.
sortenum- Result ordering. Defaults to "relevance".
- relevance | hot | top | new | comments
timeenum- Restrict results to a recent window. Defaults to "all".
- hour | day | week | month | year | all
afterstring- Pagination cursor (a Reddit fullname returned as `after` from a previous page).
limitinteger · 1–10 · default 10- Number of results to return (1–10). Defaults to 10.
Response
200 OK · application/json
{ "timeMs": 1840, "creditsCost": 1, "data": { "posts": [ { "id": "string", "fullname": "string", "title": "string", "author": "string", "authorFullname": "string", "selftext": "string", "score": 0, "ups": 0, "downs": 0, "upvoteRatio": 0, "numComments": 0, "numCrossposts": 0, "totalAwardsReceived": 0, "gilded": 0, "createdUtc": 0, "createdAt": "string", "editedUtc": 0, "editedAt": "string", "permalink": "string", "postUrl": "string", "url": "string", "subreddit": "string", "subredditId": "string", "subredditUrl": "string", "subredditPrefixed": "string", "subredditSubscribers": 0, "subredditType": "string", "linkFlairText": "string", "domain": "string", "thumbnail": "string", "distinguished": "string", "isSelf": true, "isVideo": true, "isOriginalContent": true, "over18": true, "spoiler": true, "stickied": true, "pinned": true, "archived": true, "contestMode": true, "locked": true } ], "query": "string", "after": "string" }}POST/reddit/search/comments
Comments matching a query, with the post and subreddit1 credit per requestDocs →
Request body
querystringrequired- The text to search Reddit for, e.g. "openai", "best keyboard".
subredditstring- Restrict the search to a single subreddit (name with or without the "r/" prefix). Only applies to post search.
sortenum- Result ordering. Defaults to "relevance".
- relevance | hot | top | new | comments
timeenum- Restrict results to a recent window. Defaults to "all".
- hour | day | week | month | year | all
afterstring- Pagination cursor (a Reddit fullname returned as `after` from a previous page).
limitinteger · 1–10 · default 10- Number of results to return (1–10). Defaults to 10.
Response
200 OK · application/json
{ "timeMs": 1840, "creditsCost": 1, "data": { "comments": [ { "commentId": "string", "commentFullname": "string", "permalink": "string", "commentUrl": "string", "parentId": "string", "parentFullname": "string", "postId": "string", "postFullname": "string", "postTitle": "string", "postPermalink": "string", "postUrl": "string", "postNsfw": true, "postSpoiler": true, "subreddit": "string", "subredditId": "string", "subredditPrefixed": "string", "subredditUrl": "string", "subredditNsfw": true, "subredditQuarantined": true, "author": "string", "authorUrl": "string", "body": "string", "createdAt": "string", "createdUtc": 0 } ], "query": "string", "after": "string" }}POST/reddit/search/communities
Subreddits matching a topic, with subscriber counts1 credit per requestDocs →
Request body
querystringrequired- The text to search Reddit for, e.g. "openai", "best keyboard".
subredditstring- Restrict the search to a single subreddit (name with or without the "r/" prefix). Only applies to post search.
sortenum- Result ordering. Defaults to "relevance".
- relevance | hot | top | new | comments
timeenum- Restrict results to a recent window. Defaults to "all".
- hour | day | week | month | year | all
afterstring- Pagination cursor (a Reddit fullname returned as `after` from a previous page).
limitinteger · 1–10 · default 10- Number of results to return (1–10). Defaults to 10.
Response
200 OK · application/json
{ "timeMs": 1840, "creditsCost": 1, "data": { "communities": [ { "id": "string", "fullname": "string", "name": "string", "namePrefixed": "string", "title": "string", "description": "string", "subscribers": 0, "over18": true, "subredditType": "string", "url": "string", "communityUrl": "string", "iconUrl": "string", "bannerUrl": "string", "createdUtc": 0 } ], "query": "string", "after": "string" }}POST/reddit/search/users
User accounts matching a name, with karma1 credit per requestDocs →
Request body
querystringrequired- The text to search Reddit for, e.g. "openai", "best keyboard".
subredditstring- Restrict the search to a single subreddit (name with or without the "r/" prefix). Only applies to post search.
sortenum- Result ordering. Defaults to "relevance".
- relevance | hot | top | new | comments
timeenum- Restrict results to a recent window. Defaults to "all".
- hour | day | week | month | year | all
afterstring- Pagination cursor (a Reddit fullname returned as `after` from a previous page).
limitinteger · 1–10 · default 10- Number of results to return (1–10). Defaults to 10.
Response
200 OK · application/json
{ "timeMs": 1840, "creditsCost": 1, "data": { "users": [ { "id": "string", "username": "string", "profileUrl": "string", "commentKarma": 0, "linkKarma": 0, "createdUtc": 0, "iconUrl": "string", "isGold": true, "isMod": true, "isEmployee": true, "verified": true, "hasVerifiedEmail": true, "acceptFollowers": true } ], "query": "string", "after": "string" }}POST/reddit/search/all
Posts, communities and users in one mixed result1 credit per requestDocs →
Request body
querystringrequired- The text to search Reddit for, e.g. "openai", "best keyboard".
subredditstring- Restrict the search to a single subreddit (name with or without the "r/" prefix). Only applies to post search.
sortenum- Result ordering. Defaults to "relevance".
- relevance | hot | top | new | comments
timeenum- Restrict results to a recent window. Defaults to "all".
- hour | day | week | month | year | all
afterstring- Pagination cursor (a Reddit fullname returned as `after` from a previous page).
limitinteger · 1–10 · default 10- Number of results to return (1–10). Defaults to 10.
Response
200 OK · application/json
{ "timeMs": 1840, "creditsCost": 1, "data": { "results": [ { "id": "string", "fullname": "string", "title": "string", "author": "string", "authorFullname": "string", "selftext": "string", "score": 0, "ups": 0, "downs": 0, "upvoteRatio": 0, "numComments": 0, "numCrossposts": 0, "totalAwardsReceived": 0, "gilded": 0, "createdUtc": 0, "createdAt": "string", "editedUtc": 0, "editedAt": "string", "permalink": "string", "postUrl": "string", "url": "string", "subreddit": "string", "subredditId": "string", "subredditUrl": "string", "subredditPrefixed": "string", "subredditSubscribers": 0, "subredditType": "string", "linkFlairText": "string", "domain": "string", "thumbnail": "string", "distinguished": "string", "isSelf": true, "isVideo": true, "isOriginalContent": true, "over18": true, "spoiler": true, "stickied": true, "pinned": true, "archived": true, "contestMode": true, "locked": true, "type": "post" } ], "query": "string", "after": "string" }}Why not the official Reddit API?
Reddit now reviews every request for Data API access before it is granted, and its Data API Terms require a separate agreement with Reddit for commercial use. Bridgly is self-serve: create a key and make the first call in a minute.
No approval to wait for
Registering an OAuth app no longer gets you access on its own. With Bridgly there is no application form and no review.
No OAuth to manage
There is no client ID, client secret or token refresh. Every request carries one API key in the Authorization header.
Threads in one call
A post comes back with its comments already nested by reply, and each comment flags whether its author is the original poster.
Your first Reddit call
Terminal
curl -X POST "https://api.bridgly.app/reddit/list-subreddit-posts" \ -H "Authorization: Bearer $BRIDGLY_KEY" \ -H "Content-Type: application/json" \ -d '{ "subreddit": "programming", "sort": "top", "time": "week", "count": 10}'With Bridgly connected to your AI agent, ask:
Get this week’s top 10 posts in r/programming and tell me which topics come up most.
What people build with Reddit data
Monitor a brand or a product
Search posts and comments for a name on a schedule, sorted by new, and alert on the threads where people are asking for help or comparing you to a competitor.
Research what a market actually says
Pull the top posts of the year from the subreddits your customers live in, with full comment trees, and read the complaints in their own words.
Give an agent or a RAG pipeline real discussion
A thread with its replies nested is a compact, high-signal document. Fetch the post, flatten the tree, and index it.
Find communities worth joining
Search communities by topic and rank them by subscriber count, then read each one’s rules before you post there.
What the Reddit API does not do
- Comment branches that Reddit collapses behind "load more comments" are not expanded. Fetch a comment in that branch by its permalink to go deeper.
- User post, comment and overview lists return the 10 most recent items and take no cursor.
- Read-only. There are no endpoints to post, comment, vote or send messages.
- Private and banned subreddits, and content removed by moderators, are not returned.
Reddit API questions
Do I need a Reddit API key or to register an OAuth app?
No. You authenticate to Bridgly with one API key and send the subreddit, username, URL or query you are interested in. There is no Reddit app, client secret or token refresh to manage.
Do I get the whole comment tree for a post?
You get the comments Reddit loads with the thread, nested by reply. Branches Reddit collapses behind a "load more comments" link are left out. To go deeper into one branch, fetch a comment in it by its permalink.
Can I search inside a single subreddit?
Yes, for posts. Send the subreddit name along with your query to the post search endpoint. The other search types always search all of Reddit.
How is Reddit priced?
Lookups of a single post, comment, subreddit or user cost 1 credit. Feeds, user history and search cost 2 credits per request, whether they return one result or ten. What a credit costs in dollars depends on your pricing package, and goes as low as $1 per 1,000 credits at volume.
What do I get for a deleted or missing post?
A 404, and no charge. Error responses never consume credits.
Is Bridgly affiliated with Reddit?
No. Bridgly is an independent service. You are responsible for using the data in line with the laws and terms that apply to you.
Your API key and credits work on every platform. See all platforms.
Common terms for Reddit API access
- Reddit API
- Reddit data API
- Reddit API alternative
- Reddit scraper API
- Reddit comments API
- Reddit search API
- Subreddit posts API
- Reddit API without OAuth
- Reddit API pricing
- Reddit user history API
Start pulling Reddit data
100 free credits, no card. Your first call takes a minute.