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. |
Sending the session as headers (recommended)
The cookie fields above may be sent as x-reddit-session, x-reddit-loid and
x-reddit-csrf-token headers instead of query parameters. Same request, same
response; the difference is that a query string is written into every access,
proxy and browser-history log along the path, and a Reddit session cookie is a
credential that grants full control of the account.
The query form is unchanged and keeps working, so nothing you have built needs
to move. If you send both, the headers win, so a stale query parameter you
forgot to delete cannot quietly serve you. You can also add x-reddit-proxy to
egress from your own IP. See Authenticated reads.
curl "https://api.redditapis.com/api/reddit/user/spez/hidden?limit=25" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "x-reddit-session: YOUR_REDDIT_SESSION" \
-H "x-reddit-loid: YOUR_LOID"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.ttakesday,week,month,year,all. We forward it on every sort.
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/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.
