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.002 / 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",
"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.
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 Profile
Fetch a Reddit user's full profile by username: karma sub-buckets, creation date, employee/gold/verified flags, icon, banner, bio and profile-sub data.
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.
