Get a Reddit User's Saved Posts and Comments
Fetch the posts and comments a Reddit account has saved. Private data, requires that account's own session cookies from POST /api/reddit/login.
/api/reddit/user/:name/saved$0.002 / callThe posts and comments a Reddit account has saved. 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 read back a Redditor's saved-for-later list, a bookmark sync tool, a personal research archive, or a workflow that acts on whatever the account has saved. It cannot be used to see another Redditor's saved items: Reddit never exposes that to anyone, including this API.
Mixed listing: posts AND comments
A Redditor can save 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/saved?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/saved?${params}`,
{ headers: { Authorization: "Bearer TOKEN" } }
);
const data = await response.json();import requests
response = requests.get(
"https://api.redditapis.com/api/reddit/user/spez/saved",
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 Upvoted
Fetch the posts and comments a Reddit account has upvoted. Private data, requires that account's own session cookies from POST /api/reddit/login.
User Hidden
Fetch the posts and comments a Reddit account has hidden. Private data, requires that account's own session cookies from POST /api/reddit/login.
