Get a Reddit User's Hidden Posts and Comments
Fetch the posts and comments a Reddit account has hidden. Private data, requires that account's own session cookies from POST /api/reddit/login.
/api/reddit/user/:name/hidden$0.002 / callThe posts and comments a Reddit account has hidden. This is private
data, Reddit only serves it to the account that owns it, so the request must
carry that account's own session cookies (from
POST /api/reddit/login) and :name must match the
logged-in account. Querying it as any other account, or with no cookies,
returns 403.
When to use this
Reach for this when you need to audit or restore what an account has hidden, confirming a hide action took effect, or syncing hidden state into an external tool. It cannot be used to see another Redditor's hidden items: Reddit never exposes that to anyone, including this API.
Mixed listing: posts AND comments
A Redditor can hide either a post or a comment, so the response is one
ordered items array (the exact order Reddit itself returns, which the
after cursor tracks) with each item tagged kind: "post" or
kind: "comment". A post item has the same shape as
/api/reddit/posts; a comment item has
the same shape as /api/reddit/user/:name/comments.
Path Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
name | string | Yes | Reddit username (no u/ prefix). Must match the account the cookies belong to. |
Query Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
reddit_session | string | Yes | Session cookie from /api/reddit/login |
loid | string | Yes | Long-lived account identifier cookie |
csrf_token | string | No | Anti-CSRF cookie, not required for a read, harmless if included |
sort | string | No | new (default) | top | hot | controversial |
t | string | No | Timeframe for sort=top/controversial: hour | day | week | month | year | all |
limit | number | No | Number of items 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. |
Example
curl -H "Authorization: Bearer $TOKEN" \
"https://api.redditapis.com/api/reddit/user/spez/hidden?reddit_session=eyJhbGc...&loid=000000..."const params = new URLSearchParams({ reddit_session: "eyJhbGc...", loid: "000000..." });
const response = await fetch(
`https://api.redditapis.com/api/reddit/user/spez/hidden?${params}`,
{ headers: { Authorization: "Bearer TOKEN" } }
);
const data = await response.json();import requests
response = requests.get(
"https://api.redditapis.com/api/reddit/user/spez/hidden",
params={"reddit_session": "eyJhbGc...", "loid": "000000..."},
headers={"Authorization": "Bearer TOKEN"},
)Response Shape
{
"items": [
{
"kind": "post",
"id": "1tkez6e",
"name": "t3_1tkez6e",
"title": "...",
"author": "spez",
"permalink": "/r/announcements/comments/1tkez6e/...",
"url": "https://reddit.com/r/announcements/comments/1tkez6e/...",
"upvotes": 4210,
"comments": 1200,
"created": "2026-05-22T10:29:25.000Z"
},
{
"kind": "comment",
"id": "n1abc2d",
"author": "spez",
"body": "...",
"subreddit": "announcements",
"upvotes": 88,
"permalink": "/r/announcements/comments/xyz/_/n1abc2d/",
"url": "https://reddit.com/r/announcements/comments/xyz/_/n1abc2d/",
"post_id": "xyz",
"link_title": "...",
"link_url": "https://reddit.com/r/announcements/comments/xyz/",
"created": "2026-05-22T09:10:02.000Z"
}
],
"after": "t1_n1abc2d"
}Response Fields
| Field | Type | Notes |
|---|---|---|
items[].kind | string | "post" or "comment", tells you which shape the rest of the item follows |
items[] (post) | object | Same fields as /api/reddit/posts |
items[] (comment) | object | Same fields as /api/reddit/user/:name/comments |
after | string | null | Cursor for the next page, or null when there is no next page to request. An empty cursor does not always mean you have every item, so read listing_status (below) to find out which. See Pagination depth. |
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 item: 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.
Errors
| Status | Meaning |
|---|---|
400 | Missing reddit_session/loid, an invalid sort/t/limit, or an invalid username shape |
401 | Missing Bearer token, or the Reddit session cookies are stale (re-run /api/reddit/login) |
403 | name does not match the account the cookies belong to, the account is suspended, or the listing is otherwise not visible to it |
404 | The user does not exist |
502 | Could not complete the upstream request (retried and exhausted) |
Independent third-party API for developers and researchers. Not affiliated with, endorsed by, or sponsored by Reddit, Inc.
User Saved
Fetch the posts and comments a Reddit account has saved. Private data, requires that account's own session cookies from POST /api/reddit/login.
User Gilded
Fetch the posts and comments a Reddit account has received an award on. Private data, requires that account's own session cookies from POST /api/reddit/login.
