Reddit API

Reddit User posts API

List a Reddit user's posts by username, sorted by new, top, hot, or controversial, with cursor pagination.

POST/v1/run/reddit.user_posts
Uptime
100.00%
30d · 6 calls
Requests
6
30d · weekly, last 12 wks
Response
2.1s
median · 30d

Try it

Make your first request

requireFieldsarray
Optional; omit it and routing is unchanged, with the cheapest source serving. Name the output fields this request must be able to return, for example `isArchived` or `isLocked`, and it is served only by a source that returns every one of them. Fields you do not name are still returned whenever the serving source has them. This can raise your price: when the cheapest source cannot return a named field, a dearer source serves, and you are quoted and charged its price. A named field can still be absent on a post that genuinely lacks it. Naming a combination that no single source returns together is refused as invalid input, with no charge. On a paginated walk it applies to the first page only; later pages stay with the source that page chose, at the price it was quoted.
Open in
Get a free key
Sample response
Free runs return only the first 3 results. Fund a key to get the full response.
{
  "data": {
    "nextCursor": "example",
    "posts": [
      {
        "author": "Alex Rivera",
        "createdUtc": 12.5,
        "id": "a1b2c3d4",
        "isArchived": false,
        "isLocked": true,
        "media": [
          {
            "height": 42,
            "type": "general",
            "url": "https://example.com/page",
            "videoUrl": "https://example.com/page",
            "width": 1024
          }
        ],
        "numComments": 12500,
        "permalink": "https://example.com/page",
        "score": 5,
        "selftext": "A short example description of this item.",
        "subreddit": "example",
        "title": "Example title",
        "url": "https://example.com/page"
      }
    ]
  },
  "found": true
}
Response interface
interface RedditUserPostsResponse {
  data: {
    nextCursor: string | null;
    posts: {
      author: string;
      createdUtc: number;
      id: string;
      isArchived?: boolean;
      isLocked?: boolean;
      media?: {
        height?: number;
        type: string | null;
        url: string;
        videoUrl?: string;
        width?: number;
      }[];
      numComments?: number;
      permalink: string;
      score?: number;
      selftext?: string;
      subreddit?: string;
      title: string;
      url?: string;
    }[];
  } | null;
  found: boolean;
}

Full parameter and response reference - every field, type, and example for this endpoint.

Reference

Request, response, and price

Last verified 2026-09-16 · uptime and latency measured over 30d
POST /v1/run/reddit.user_posts
curl -X POST https://api.getanyapi.com/v1/run/reddit.user_posts \
  -H "Authorization: Bearer $ANYAPI_KEY" \
  -H "Content-Type: application/json" \
  -d '{"username":"spez"}'
FieldTypeExample value
Request body
usernamestring"spez"Reddit username without the leading u/ prefix (e.g. "spez").
cursorstringOpaque pagination cursor from a previous response's nextCursor. Omit for the first page; pass it back to fetch the next page.
requireFieldsarrayOptional; omit it and routing is unchanged, with the cheapest source serving. Name the output fields this request must be able to return, for example `isArchived` or `isLocked`, and it is served only by a source that returns every one of them. Fields you do not name are still returned whenever the serving source has them. This can raise your price: when the cheapest source cannot return a named field, a dearer source serves, and you are quoted and charged its price. A named field can still be absent on a post that genuinely lacks it. Naming a combination that no single source returns together is refused as invalid input, with no charge. On a paginated walk it applies to the first page only; later pages stay with the source that page chose, at the price it was quoted.
sortenumSort order for the user's posts. Defaults to new (most recent first).
Response
dataobjectOne page of the user's posts, or null when the user was not found.
data.nextCursorcan requirestringOpaque cursor for the next page of this user's posts; pass it back as the `cursor` input to fetch the following page. Null when there are no more pages.
data.postsobject[]The user's posts in feed order. Posts hosted on the user's own profile (r/u_<name>) are included and carry an empty subreddit. Populated whenever the provider has data for the entity.
data.posts[].authorstringAuthor username, without the u/ prefix. Populated whenever the provider has data for the entity.
data.posts[].createdUtccan requirenumberUTC epoch timestamp in seconds (Unix time). Multiply by 1000 for a JS Date in milliseconds.
data.posts[].idstringReddit post ID (base-36, without the t3_ prefix). Populated whenever the provider has data for the entity.
data.posts[].isArchivedcan requirebooleanTrue when Reddit has archived the thread, which blocks new comments and votes. Archiving is a per-community setting, so an old thread is not necessarily archived. Absent when the source that served this request does not report it, which means unknown rather than false.
data.posts[].isLockedcan requirebooleanTrue when a moderator has locked the thread, which blocks new comments. Absent when the source that served this request does not report it, which means unknown rather than false.
data.posts[].mediacan requireobject[]Photo, video, and GIF attachments on the post. Empty when the post has none.
data.posts[].media[].heightinteger
data.posts[].media[].typestringOne of photo, video, or gif, or null when the serving source wraps a thumbnail it cannot classify.
data.posts[].media[].urlstringImage URL. For a video or GIF this is the poster/thumbnail frame.
data.posts[].media[].videoUrlstringPlayable video file URL. Present only for video and gif items.
data.posts[].media[].widthinteger
data.posts[].numCommentscan requireintegerTotal number of comments on the post.
data.posts[].permalinkstringCanonical reddit.com thread path for the post (e.g. "/r/golang/comments/abc123/..."). Differs from url, which is the destination link. Empty if the upstream omits it. Populated whenever the provider has data for the entity.
data.posts[].scorecan requireintegerNet score (upvotes minus downvotes) at fetch time.
data.posts[].selftextcan requirestringBody text of a self post, as Markdown. Empty on a link post, which has no body.
data.posts[].subredditstringSubreddit name, without the r/ prefix. Populated whenever the provider has data for the entity.
data.posts[].titlestringPost title. Populated whenever the provider has data for the entity.
data.posts[].urlstringThe post's destination link (the external URL for link posts, or the thread URL for self posts). Populated whenever the provider has data for the entity.
foundbooleanWhether the user's post feed was returned.
Price
Price per requestUSD$0.00038
Price /1k reqUSD$0.38

FAQ

About the Reddit User posts API

The AnyAPI Reddit User posts API returns Reddit user posts data as normalized JSON from one POST call to /v1/run/reddit.user_posts. List a Reddit user's posts by username, sorted by new, top, hot, or controversial, with cursor pagination. AnyAPI routes each request across 3 sources and falls back automatically when one fails. It costs from $0.38 per 1,000 requests, in US dollars with no subscription and no monthly minimum. Over the last 30 days, 100.0% of Reddit user posts calls through AnyAPI succeeded, with a median response time of 2.1 seconds across 6 measured calls.

It costs from $0.38 per 1,000 requests, in US dollars with no subscription and no monthly minimum. You fund one USD wallet, each call draws it down, and a failed request costs $0.

List a Reddit user's posts by username, sorted by new, top, hot, or controversial, with cursor pagination. The response is normalized JSON with the same envelope every AnyAPI endpoint returns, so parsing a second endpoint is a change of URL and nothing else.

Over the last 30 days, 100.0% of Reddit user posts calls through AnyAPI succeeded, with a median response time of 2.1 seconds across 6 measured calls. These are AnyAPI's own measurements of traffic through the gateway, recomputed continuously, not a published service-level target.