Reddit API

Get Reddit data with one API

The Reddit API returns subreddit posts, comments, search and user data as clean JSON.

R
/reddit/v1

11 active endpoints, on 1, 2, 3 and 5 credit tiers.

  • POST/reddit/v1/subreddit_posts
  • POST/reddit/v1/multi_subreddit_posts
  • POST/reddit/v1/post_comments
  • POST/reddit/v1/search
  • POST/reddit/v1/user
  • POST/reddit/v1/subreddit_about
  • POST/reddit/v1/communities
  • +4 more

What Reddit endpoints does ReefAPI ship?

11 live read endpoints. Read-only data API: no writes, no account actions, no dashboard access on the target site.

11 endpoints

subreddit_posts

1 cr

Posts in a subreddit, ranked by sort.

required
subreddit
optional
sub, sort, time, limit, after, page, cursor, flair, source

multi_subreddit_posts

5 cr

ONE merged newest-first feed across a whole watchlist of subreddits.

required
subreddits
optional
subs, subreddit, sub, sort, time, limit, since_utc, max_pages, after, cursor

post_comments

1 cr

Threaded comments for a post.

required
post_id
optional
id, url, sort, limit, depth, source

search

1 cr

Search posts, comments, or users by q and/or subreddit/author.

required
optional
q, query, subreddit, sub, author, type, sort, limit, flair, after, page, cursor, after_utc, before_utc, source

user

1 cr

User profile or content.

required
username
optional
user, name, kind, limit, after, page, cursor, sort, source

subreddit_about

1 cr

Subreddit metadata.

required
subreddit
optional
sub, source

communities

1 cr

Search subreddits by name/keyword.

required
q
optional
limit

trending

2 cr

Site-wide discovery.

required
optional
scope, kind, sort, time, limit, flair, after, page, source

user_search

2 cr

Find Reddit users by name/keyword.

required
q
optional
query, username, limit, after, source

load_more_comments

3 cr

Expand the collapsed 'more comments' nodes from a post_comments call.

required
post_id, more_ids
optional
link_id, id, url, comment_ids, limit, sort, source

subreddit_extras

3 cr

Public subreddit extras.

required
subreddit
optional
sub, include, wiki_page, source

Every parameter, every allowed value →

Reddit API

3 of 11 endpoints, ready to run

View docs ↗

Posts in a subreddit, ranked by sort.

1 credit1 required · 1 optional
POST/reddit/v1/subreddit_posts
ok2231 ms · 10 records · sample
{
  "ok": true,
  "meta": {
    "api": "reddit",
    "endpoint": "subreddit_posts",
    "mode": "live",
    "latency_ms": 2230.7,
    "record_count": 10,
    "cache_hit": false,
    "completeness_pct": 100
  },
  "data": {
    "posts": [
      {
        "id": "1vfemi1",
        "fullname": "t3_1vfemi1",
        "title": "Showcase Thread",
        "subreddit": "Python",
        "score": 18,
        "upvote_ratio": 0.89,
        "num_comments": 125,
        "created_utc": 1785859525,
        "url": "https://www.reddit.com/r/Python/comments/1vfemi1/showcase_thread/",
        "permalink": "https://www.reddit.com/r/Python/comments/1vfemi1/showcase_thread/",
        "selftext": "Post all of your code/projects/showcases/AI slop here. \n\nRecycles once a month.",
        "flair": "Showcase",
        "over_18": false,
        "spoiler": false,
        "stickied": true,
        "locked": false,
        "is_self": true,
        "is_video": false,
        "domain": "self.Python",
        "thumbnail": null,
        "num_crossposts": 0,
        "total_awards_received": 0,
        "edited": false
      },
      {
        "id": "1vze3ct",
        "fullname": "t3_1vze3ct",
        "title": "Thursday Daily Thread: Python Careers, Courses, and Furthering Education!",
        "subreddit": "Python",
        "score": 9,
        "upvote_ratio": 0.86,
        "num_comments": 5,
        "created_utc": 1787788810,
        "url": "https://www.reddit.com/r/Python/comments/1vze3ct/thursday_daily_thread_python_careers_courses_and/",
        "permalink": "https://www.reddit.com/r/Python/comments/1vze3ct/thursday_daily_thread_python_careers_courses_and/",
        "selftext": "# Weekly Thread: Professional Use, Jobs, and Education 🏢\n\nWelcome to this week's discussion on Python in the professional world! This is your spot to talk about job hunting, career growth, and educational resources in Python. Please note, this thread is **not for recruitment**.\n\n---\n\n## How it Works:\n\n1. **Career Talk**: Discuss using Python in your job, or the job market for Python roles.\n2. **Education Q&A**: Ask or answer questions about Python courses, certifications, and educational resources.\n3. **Workplace Chat**: Share your experiences, challenges, or success stories about using Python professionally.\n\n---\n\n## Guidelines:\n\n- This thread is **not for recruitment**. For job postings, please see r/PythonJobs or the recruitment thread in the sidebar.\n- Keep discussions relevant to Python in the professional and educational context.\n  \n---\n\n## Example Topics:\n\n1. **Career Paths**: What kinds of roles are out there for Python developers?\n2. **Certifications**: Are Python certifications worth it?\n3. **Course Recommendations**: Any good advanced Python courses to recommend?\n4. **Workplace Tools**: What Python libraries are indispensable in your professional work?\n5. **Interview Tips**: What types of Python questions are commonly asked in interviews?\n\n---\n\nLet's help each other grow in our careers and education. Happy discussing! 🌟",
        "flair": ":pythonLogo: Daily Thread",
        "over_18": false,
        "spoiler": false,
        "stickied": true,
        "locked": false,
        "is_self": true,
        "is_video": false,
        "domain": "self.Python",
        "thumbnail": null,
        "num_crossposts": 0,
        "total_awards_received": 0,
        "edited": false
      },
      {
        "id": "1vzr2eg",
        "fullname": "t3_1vzr2eg",
        "title": "Python 3.15 Release Highlights",
        "subreddit": "Python",
        "score": 175,
        "upvote_ratio": 0.93,
        "num_comments": 57,
        "created_utc": 1787829423,
        "url": "https://www.reddit.com/r/Python/comments/1vzr2eg/python_315_release_highlights/",
        "permalink": "https://www.reddit.com/r/Python/comments/1vzr2eg/python_315_release_highlights/",
        "selftext": "Python 3.15 has reached Release Candidate 1, and the final release is expected on October 1, 2026.\n\nI went through the changes and tried to summarize the ones that seem most relevant for everyday Python development without going through all the PEP numbers.\n\n\\- Faster startup with lazy imports\n\nPython 3.15 introduces lazy imports, which means some modules can be loaded only when they are actually needed instead of being loaded immediately.\n\nThis could help applications and CLI tools that spend a noticeable amount of time importing modules before doing any actual work.\n\n\\- UTF-8 becomes the default\n\nUTF-8 is becoming the default encoding, which should reduce encoding-related problems, especially when code is running on different operating systems.\n\nThis should make situations where something works on one computer but fails because of a different system encoding less common.\n\n\\- Built-in immutable dictionaries\n\nPython 3.15 adds a built-in \"frozendict\"-style immutable mapping.\n\nSimilar to how a tuple provides an immutable alternative to a list, this gives Python developers a standard way to work with dictionaries that cannot be modified.\n\n\\- JIT improvements\n\nThe JIT compiler continues to improve in Python 3.15.\n\nEarly benchmarks show performance improvements in some workloads, including roughly 8–9% on Linux and larger improvements in some Apple Silicon tests.\n\nThese numbers will obviously depend on the workload, so I would wait for more benchmarks before making broader conclusions.\n\n\\- New profiler: Tachyon\n\nPython 3.15 also introduces Tachyon, a new sampling profiler designed for very low overhead.\n\nIt can sample running programs at very high frequencies and can also be attached to an already-running process.\n\nThis could be useful for finding performance problems without having to restart an application with a profiler attached from the beginning.\n\n\\- Some terminal improvements\n\nThe interactive Python experience is getting a few smaller improvements, including colored error messages and prompts.\n\nThe \"sqlite3\" command-line interface also gets SQL keyword completion.\n\n\\- Free-threaded Python is still opt-in\n\nPython 3.15 does not make the no-GIL/free-threaded build the default.\n\nIt is still something you have to explicitly use.\n\nHowever, free-threaded Python is becoming more mature, including improvements to ABI support that should make it easier for C extension developers to support it.\n\nOverall, Python 3.15 doesn't look like a release that completely changes how Python is written. Most of the changes are focused on performance, tooling, and improving some long-standing parts of the language.\n\nSince this is already RC1, the major feature set should be mostly locked and the remaining work should mainly be bug fixes and final polishing.\n\nHas anyone here been testing the Python 3.15 beta or RC?\n\nI'm especially interested in whether lazy imports have caused compatibility problems with existing projects.",
        "flair": "News",
        "over_18": false,
        "spoiler": false,
        "stickied": false,
        "locked": false,
        "is_self": true,
        "is_video": false,
        "domain": "self.Python",
        "thumbnail": null,
        "num_crossposts": 0,
        "total_awards_received": 0,
        "edited": false
      }
    ],
    "after": "t3_1vx87dz",
    "before": null,
    "count": 10
  }
}
Real response, fetched from the live endpoint with the parameters on the left — trimmed to the first few rows, with seller names left out. Press Try it for the untrimmed response.

How the Reddit API works

Reddit is a normal ReefAPI surface — the same four rules that hold for every other engine on the key.

01
Authenticate
x-api-key header

No OAuth app, no request signing, no per-site account. One key covers all 185 engines.

02
Call
POST /reddit/v1/…

Every route is a POST with a JSON body. Parameters are validated against the published schema before anything is charged.

03
Pay
1 or 2 or 3 or 5 credits per call

Credits, not seats. Failed and blocked calls are never charged, and cache hits cost nothing.

04
Read
{ ok, data, meta, error }

One envelope everywhere. meta carries latency_ms, record_count and the endpoint that answered.

Reddit fullname prefixes, and which action hands you which one

Reddit gives every object a type-prefixed "fullname" alongside a bare base36 id, and the two are not interchangeable when you pass them back in. This table lists the prefixes that actually appeared in measured responses and the field each one arrives in. It also records what happens when you send a bad enum value versus a value that simply matches nothing, because those two failures look completely different.

Prefix or fieldWhat it identifiesMeasured example
t3_A post. Every post row carries both id and fullname, and a comment's link_id points at it.r/Python returned id 1vy0ywg with fullname t3_1vy0ywg
t1_A comment. Comment rows also carry parent_id, which is t3_ for a top-level comment and t1_ for a reply.t1_fgs7erl with parent_id t3_f08dxb and link_id t3_f08dxb
t5_A subreddit. Only subreddit_about returns it.r/Python returned fullname t5_2qh0y, subscribers 1507579
user idBase36 and unprefixed in the payload. There is no t2_ anywhere in the user record.user with kind=about for spez returned id 1w72
post_id parameterTakes the bare post id, not the fullname. A full reddit URL is accepted too.post_comments with post_id f08dxb resolved the AskReddit thread
created_utcUnix seconds as a float, UTC, on posts, comments and subreddits alike.1581069212.0 on the post, 1201230879.0 for the r/Python subreddit itself
Bad enum valueRejected before any fetch. INVALID_PARAM comes back with detail.param and detail.allowed listing the real vocabulary.sort=bogus returned INVALID_PARAM in 1.9 ms
A flair that matches nothingNot rejected. ok stays true, posts[] is empty, completeness_pct is 0.0, and pagination still offers a next_cursor.flair=NoSuchFlairXyz on r/Python returned 0 posts with has_more true

time only does anything when sort is top or controversial. Passing time=week alongside sort=hot is accepted and silently has no effect, so a "past week" feed that looks wrong is usually a sort that was never top in the first place.

What people build with Reddit

The jobs this data is most often used for.

11

endpoints

1/2/3/5

credits per call

01

Market researchers call subreddit_posts and search to track what communities say about a product.

02

RAG pipelines pull post_comments to ground an AI assistant in real Reddit discussion.

03

Social-listening tools use trending and user to monitor rising topics and influential accounts.

What Reddit data costs

The cheapest call here is 1 credit, so $15/mo (Pro) buys 10,000 of them — $1.50 per 1,000 credits. Credits roll over and never expire, and failed or blocked calls are not charged.

Full pricing →
$0.67–$1.50 / 1,000 credits
  • 1,000 free credits on signup, no card
  • One key, all 185 APIs, one credit pool
  • Failed and blocked calls are never charged
  • Credits roll over and never expire

Call it in two lines

Sign up, get 1,000 credits and one key that works on every engine. Then this is the whole protocol.

curl
curl -X POST https://api.reefapi.com/reddit/v1/subreddit_posts \
  -H "x-api-key: $REEF_KEY" \
  -H "content-type: application/json" \
  -d '{"subreddit":"python","limit":10}'
python
import requests

r = requests.post(
    "https://api.reefapi.com/reddit/v1/subreddit_posts",
    headers={"x-api-key": REEF_KEY},
    json={
  "subreddit": "python",
  "limit": 10
},
)
print(r.json()["data"])
FAQ

Have a question? We got answers.

The questions people actually ask before wiring up Reddit.

Get a free key →
What is the difference between id and fullname, and which one do I store?

id is the bare base36 key and fullname is the same key with a type prefix. A measured r/Python post came back as id 1vy0ywg and fullname t3_1vy0ywg; a comment on another thread as id fgs7erl and fullname t1_fgs7erl. Store the fullname if you are keeping posts and comments in one table, because the bare ids share a namespace and a comment id can collide with a post id. Pass the bare id back in: post_comments takes post_id f08dxb, not t3_f08dxb.

Is score the real number of upvotes?

No. Reddit deliberately fuzzes score, so it is an approximation and two reads seconds apart can disagree by a few points on a busy thread. upvote_ratio is the more stable signal and it sits right next to score on every post: a measured r/rust post had score 3 with upvote_ratio 1.0, and another had score 0 with upvote_ratio 0.33, which tells you far more about reception than the 0 does. For trend work, track the pair rather than score alone.

Does an empty selftext mean it is a link post?

No, and this one trips people up. A measured AskReddit post had is_self true and selftext "" because it is a title-only question, while a measured r/rust post had is_self false and domain i.redd.it (an image link) yet carried 573 characters of selftext underneath it. Classify a post from is_self and domain, and treat selftext as a body that may or may not be present in either case.

What do [deleted] and [removed] mean, and are they the same thing?

They are different, and a comment can be in three states. Inside a single measured thread, one comment came back with author "[deleted]" and body "[removed]" (a moderator removal), another with author "[deleted]" and body "[deleted]" (the user deleted it), and a third with author "[deleted]" but its body fully intact (the account went away, the comment stayed). These are literal string values, not nulls, so a filter on author != null will not catch any of them.

post_comments gave me 10 comments on a thread with 13,297. How do I get the rest?

The tree comes back with explicit stubs rather than silently truncating. At the top level the response carries more_ids and has_more (a measured AskReddit thread returned 241 ids there), and inside replies[] you get objects shaped {more_children: 65, more_ids: [...]} wherever Reddit collapsed a branch. Feed those ids into load_more_comments to expand a branch. A stub with more_children 0 and an empty more_ids is a leaf, not an error.

Which source should I use, and what does auto pick?

auto is the default and chooses between the live site and the archives based on what you asked for. Set source=live when you specifically need the newest posts and the live-only features, because flair filtering, page-based deep paging and the cursor in meta.pagination.next_cursor all apply to the live source; the archive sources page by after_utc and before_utc instead. Reach for the archives when you are pulling old threads, where coverage beats freshness.

How does deep paging work across the post actions?

Two ways, and they do not mix. page (1 to 20) chains the cursors server-side, so page 2 really is the batch after page 1 without you holding any state. Or take meta.pagination.next_cursor from the previous response and send it back as cursor. A measured r/Python top-of-week call returned next_cursor t3_1vxrna7 with has_more true, which is simply the fullname of the last row it handed you. Both stop at Reddit's own listing depth, not at a limit of ours.

Why does searching comments return less per row than post_comments does?

Because search with type=comment reads Reddit's live comment index, which is a discovery surface rather than a full record. Measured rows carry id, fullname, body, subreddit, permalink, link_id and post_title, but author, score, parent_id and depth all come back null. Treat it as a way to find which threads to open, then resolve the detail: post_comments returns author and score for every comment in a thread, and user with kind=comments returns them per account (a measured spez comment came back with author spez, score 8 and parent_id t1_p1wd2fi).

What is the Reddit API?

Reddit API is a ReefAPI endpoint group for posts, comments, subreddits and search. It returns live JSON through POST requests under /reddit/v1.

Is the Reddit API free to try?

Yes. ReefAPI starts with 1,000 free credits, no card required. Reddit calls use the same shared credit balance as every other ReefAPI engine.

Do I need a Reddit login or account?

No login to Reddit is needed for the API response. You call ReefAPI with your x-api-key header, and the playground can run live examples before you create a production key.

How fresh is the Reddit data?

The page example is captured from a live subreddit_posts call, and production requests fetch live data through ReefAPI rather than a static sample.

How many credits does the Reddit API use?

Reddit actions currently cost 1-5 credits per successful call. Failed or blocked calls are free, and all APIs draw from one credit pool.

Can I call Reddit from an AI assistant or MCP client?

Yes. Connect ReefAPI once through MCP and your assistant can call reddit actions with the same key, credit pool and JSON envelope used by normal REST requests.

10 Social Media APIs on the same key

One key, one credit pool, one response envelope. If you are pulling Reddit, you are one call away from the rest of the category — no second contract, no second integration.

Try it on your own data before you pay anything

The call above is the real endpoint, not a recording. A free key gives you 1,000 credits, the other 184 APIs, and the same envelope everywhere.

Endpoints, parameters and credit costs on this page are read from the live catalog and cannot drift from what the API accepts.