Get a Reddit User's Recent Comments History
Fetch a Reddit user's recent comments by username, sorted by new, top, or controversial. Includes comment body, upvotes, subreddit, and cursor pagination.
/api/reddit/user/:name/comments$0.0015 / callA user's recent comments.
Path Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
name | string | Yes | Reddit username |
Query Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
sort | string | No | new (default) | top | controversial |
limit | number | No | Number of comments to return, 1-100 (default 25) |
after | string | No | Pagination cursor. Pass back the after value from the previous response exactly as issued; it is opaque and carries your paging depth. See Pagination depth. |
Paging past Reddit's cap
Reddit closes a single listing near 1000 items and then stops issuing a
cursor, so listing_status: truncated is Reddit's limit rather than the end of
the data. Every distinct combination of parameters you send is a separate
listing with its own budget, so widen across listings rather than paging
deeper into one.
What you can vary here:
sorttakesnew,top,hot,controversial, each with its own cursor.
How far these actually widen has not been measured on this endpoint. On
/api/reddit/posts two sorts ranged from 0 to 99 shared items out of 100
depending on how busy the subreddit was, so read a page of each before
assuming a second sort doubles your coverage.
Example
curl -H "Authorization: Bearer $TOKEN" \
"https://api.redditapis.com/api/reddit/user/spez/comments?sort=top"const response = await fetch(
"https://api.redditapis.com/api/reddit/user/spez/comments?sort=top",
{ headers: { Authorization: "Bearer TOKEN" } }
);import requests
response = requests.get(
"https://api.redditapis.com/api/reddit/user/spez/comments",
params={"sort": "top"},
headers={"Authorization": "Bearer TOKEN"},
)Response Shape
{
"comments": [
{
"id": "ocfdez3",
"author": "spez",
"body": "...",
"subreddit": "redditstock",
"upvotes": 77,
"permalink": "/r/redditstock/comments/abc123/title/ocfdez3/",
"url": "https://reddit.com/r/...",
"post_id": "abc123",
"parent_id": "t1_ocfa1b2",
"is_submitter": false,
"link_title": "...",
"link_url": "...",
"created": "2026-04-09T12:00:00.000Z"
}
],
"after": "t1_xyz"
}upvotes is the comment's net vote count. permalink is the comment's own path on reddit.com, the same field a post row carries, and url is that path as a full URL. post_id, link_title, and link_url refer to the parent post the comment is on (not the comment itself). post_id is the bare id (no prefix), for joining against GET /post/:id or GET /post/:id/comments. parent_id is what the comment replies to, as Reddit names it (t3_ plus the post id for a top-level comment, t1_ plus a comment id for a reply), and is_submitter is true when the commenter wrote the post.
When after comes back empty
An empty cursor means there is no next page to ask for. It does not always mean
you have every comment: Reddit often stops serving a busy listing long before it
runs out. Paging r/all on 2026-08-14 stopped after 400 posts covering about a
minute of a feed that plainly holds more.
The response tells you which happened. When after is null it also carries
listing_status, which reads complete, truncated or unknown. Only
complete means you have everything; treat the other two as a partial answer
and widen your search rather than stopping. The full field list and what to do
about each answer is in Pagination depth.
Independent third-party API for developers and researchers. Not affiliated with, endorsed by, or sponsored by Reddit, Inc.
User Achievements
List the achievements shown on a Reddit user's public achievements page, with the name, description, icons, and grant date of each. Returns an empty list for accounts that have none.
User Submitted Posts
Fetch a Reddit user's submitted posts by username, sorted by new, top, hot, or controversial. Same shape as subreddit listings, with cursor pagination.
