# Reddit Users V1 — Profile, Lookup, Follow, Block, Friend (13) (`red_crawler/reddit-users`) Actor

Full Reddit user toolkit — 8 anonymous lookups (profile, trophies, posts, comments, overview, browse, bulk-by-IDs, username) + 5 auth ops (my content, user actions, add/remove friend, friends list, show-my-flair). Use Reddit Vault or paste Token V2 + proxy.

- **URL**: https://apify.com/red\_crawler/reddit-users.md
- **Developed by:** [Red Crawler](https://apify.com/red_crawler) (community)
- **Categories:** Automation, Lead generation, Social media
- **Stats:** 4 total users, 1 monthly users, 100.0% runs succeeded, 1 bookmarks
- **User rating**: 5.00 out of 5 stars

## Pricing

from $1.99 / 1,000 results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).


# README

## Reddit Users V1

![Endpoints](https://img.shields.io/badge/endpoints-13-blue) ![Anonymous](https://img.shields.io/badge/no_auth-8_endpoints-green) ![Auth](https://img.shields.io/badge/Reddit_account-5_endpoints-orange) ![Proxy](https://img.shields.io/badge/proxy-managed-blue) ![Pricing](https://img.shields.io/badge/pricing-pay_per_result-orange)

Full Reddit user toolkit in one actor — **8 anonymous lookups** (profile, trophies, posts, comments, overview, browse, bulk-by-IDs, username availability) plus **5 auth-required actions** (your own content, follow / unfollow / block / unblock / report, add / remove friend, friends list, show / hide your flair). Pick the endpoint, fill the matching section, hit Start.

Anonymous endpoints need no credentials. Auth-required endpoints reuse a saved account from the **Reddit Vault**, or accept a Token V2 + matching proxy pasted inline.

---

### What you can do

Each username field accepts a **raw username** (`spez`), a **u/-prefixed handle** (`u/spez`), or a **full profile URL** (`https://www.reddit.com/user/spez/`). Bulk lookup accepts **raw IDs** (`abcd12`) and **t2_-prefixed** (`t2_abcd12`) — comma list or one per row.

#### Anonymous endpoints (no credentials needed)

##### 1. About — public profile

Returns a Reddit user's full public profile in one call.

**Returns:** numeric IDs (`id`, `name`), karma breakdown (`total_karma`, `link_karma`, `comment_karma`, `awardee_karma`, `awarder_karma`), badges (`is_employee`, `is_mod`, `is_gold`, `verified`, `has_verified_email`), `created_utc`, snoo / icon URLs, plus the embedded profile-subreddit object (`u_<name>`).

**Use it when:** profile QA, mod queues, lead enrichment, "is this user real / vetted / verified" checks, building dashboards of influencer / employee / mod activity.

**Example**

**Input**

```json
{
  "endpoint": "about",
  "about_username": "spez"
}
````

**Output** *(one dataset record)*

```json
{
  "endpoint": "about",
  "id": "1w72",
  "name": "spez",
  "total_karma": 937988,
  "link_karma": 182650,
  "comment_karma": 755338,
  "awardee_karma": 25000,
  "awarder_karma": 75000,
  "created_utc": 1118030400.0,
  "is_employee": true,
  "is_mod": true,
  "is_gold": true,
  "verified": true,
  "has_verified_email": true,
  "icon_img": "https://styles.redditmedia.com/t5_3k30p/styles/profileIcon_uj015iwx9s7g1.png",
  "snoovatar_img": "https://i.redd.it/snoovatar/avatars/...png",
  "subreddit": {
    "display_name_prefixed": "u/spez",
    "title": "spez",
    "public_description": "Reddit CEO",
    "subscribers": 0,
    "accept_followers": true
  },
  "accept_followers": true,
  "hide_from_robots": false,
  "pref_show_snoovatar": true
}
```

##### 2. Trophies — earned badges

Returns the user's earned Reddit trophies / awards (year-club badges, AMA, gilded, etc.).

**Returns:** array of `{kind: "t6", data: {name, icon_70, icon_40, granted_at, url, description, award_id, id}}` records.

**Use it when:** scoring account age & seniority, filtering "real" users vs. fresh throwaways, building reputation overlays.

**Example**

**Input**

```json
{
  "endpoint": "trophies",
  "trophies_username": "spez"
}
```

**Output** *(one dataset record per trophy)*

```json
{
  "endpoint": "trophies",
  "kind": "t6",
  "data": {
    "name": "15-Year Club",
    "icon_70": "https://www.redditstatic.com/awards2/15_year_club-70.png",
    "icon_40": "https://www.redditstatic.com/awards2/15_year_club-40.png",
    "granted_at": 1749182400,
    "url": null,
    "description": null,
    "award_id": null,
    "id": null
  }
}
```

##### 3. Overview — posts + comments combined

Returns a user's posts and comments interleaved in one feed (Reddit's default profile view).

**Returns:** array of items — each is either a post (`kind: t3`) or a comment (`kind: t1`) with the full Reddit listing payload. Posts get post-shaped columns front-loaded, comments get comment-shaped columns.

**Use it when:** profiling an account's activity, summarising recent contributions, training data for "is this user spammy / on-topic / mod-worthy" classifiers.

**Optional fields:** `overview_sort` (`new` / `hot` / `top` / `controversial`), `overview_time_filter` (`hour` / `day` / `week` / `month` / `year` / `all` — only for `top` / `controversial`), `overview_limit` (1–100).

**Example**

**Input**

```json
{
  "endpoint": "overview",
  "overview_username": "spez",
  "overview_sort": "new",
  "overview_limit": 25
}
```

**Output** *(one dataset record per item — comment shape shown)*

```json
{
  "endpoint": "overview",
  "id": "okpklb6",
  "name": "t1_okpklb6",
  "parent_id": "t1_okoapl8",
  "link_id": "t3_1t7d1gy",
  "author": "spez",
  "author_fullname": "t2_1w72",
  "body": "Ding ding ding",
  "score": 24,
  "ups": 24,
  "downs": 0,
  "created_utc": 1778273310.0,
  "permalink": "https://reddit.com/r/redditstock/comments/1t7d1gy/please_fire_vollero_for_buyback_mismanagement/okpklb6/",
  "is_submitter": false,
  "distinguished": "admin",
  "subreddit": "redditstock",
  "subreddit_name_prefixed": "r/redditstock",
  "subreddit_id": "t5_4x7l6b",
  "total_awards_received": 0
}
```

##### 4. Posts — submissions only

Returns only the user's submitted posts (links + self-posts), no comments.

**Returns:** array of post records with `t3_*` fullnames, post-shaped columns front-loaded.

**Use it when:** finding what an account posts about, OP profile checks, monitoring competitor / influencer posting cadence.

**Optional fields:** `posts_sort`, `posts_time_filter`, `posts_limit` (1–100).

**Example**

**Input**

```json
{
  "endpoint": "posts",
  "posts_username": "spez",
  "posts_sort": "top",
  "posts_time_filter": "year",
  "posts_limit": 10
}
```

**Output** *(one record per post)*

```json
{
  "endpoint": "posts",
  "id": "1tc6ncq",
  "name": "t3_1tc6ncq",
  "title": "Which language should I learn next?",
  "author": "spez",
  "author_fullname": "t2_1w72",
  "subreddit": "test",
  "subreddit_name_prefixed": "r/test",
  "subreddit_id": "t5_2qh23",
  "score": 1,
  "ups": 1,
  "downs": 0,
  "upvote_ratio": 1.0,
  "num_comments": 0,
  "created_utc": 1779421200.0,
  "permalink": "/r/test/comments/1tc6ncq/which_language_should_i_learn_next/",
  "url": "https://www.reddit.com/r/test/comments/1tc6ncq/which_language_should_i_learn_next/",
  "is_self": true,
  "over_18": false,
  "spoiler": false,
  "locked": false,
  "selftext": "Currently writing Python full-time...",
  "thumbnail": "self"
}
```

##### 5. Comments — comments only

Returns only the user's authored comments, no posts.

**Returns:** array of comment records with `t1_*` fullnames, comment-shaped columns front-loaded.

**Use it when:** sentiment analysis on a user, finding their take on a topic, "comments on which subs lately" audits.

**Optional fields:** `comments_sort`, `comments_time_filter`, `comments_limit` (1–100).

**Example**

**Input**

```json
{
  "endpoint": "comments",
  "comments_username": "spez",
  "comments_sort": "new",
  "comments_limit": 25
}
```

**Output** *(one record per comment — same shape as Overview's comment example)*

```json
{
  "endpoint": "comments",
  "id": "okpklb6",
  "name": "t1_okpklb6",
  "parent_id": "t1_okoapl8",
  "link_id": "t3_1t7d1gy",
  "author": "spez",
  "body": "Ding ding ding",
  "score": 24,
  "created_utc": 1778273310.0,
  "permalink": "https://reddit.com/r/redditstock/comments/1t7d1gy/please_fire_vollero_for_buyback_mismanagement/okpklb6/",
  "subreddit": "redditstock"
}
```

##### 6. Browse Users — popular / new directory

Returns Reddit's directory listing of users — either the **popular** profile-subreddits feed or the **new** feed.

**Returns:** array of profile-subreddit records (`t5_*` names with `u_<handle>` display names) — same shape as About's `subreddit` field.

**Use it when:** discovering trending / newly active accounts, sampling for outreach, building "rising users" lists.

**Optional fields:** `browse_directory` (`popular` / `new`), `browse_limit` (1–100).

**Example**

**Input**

```json
{
  "endpoint": "browse_users",
  "browse_directory": "popular",
  "browse_limit": 10
}
```

**Output** *(one record per user)*

```json
{
  "endpoint": "browse_users",
  "name": "t5_3oy63",
  "display_name": "u_thisisinsider",
  "display_name_prefixed": "u/thisisinsider",
  "title": "Business Insider",
  "public_description": "What you want to know about business...",
  "subscribers": 0,
  "created": 1507123989.0,
  "icon_img": "https://styles.redditmedia.com/t5_3oy63/styles/profileIcon_jah6n47yjv041.png",
  "primary_color": "",
  "key_color": "",
  "accept_followers": true,
  "quarantine": false,
  "over_18": false
}
```

##### 7. Users by IDs — bulk lookup by `t2_` IDs

Bulk-resolve many Reddit user IDs to compact profile records in one call. Up to **500 IDs per call** — paste them as a list or comma-separated string.

**Returns:** array — one record per resolved user with `{endpoint, name, id, created_utc, link_karma, comment_karma, profile_img, profile_color, profile_over_18}`.

**Use it when:** hydrating IDs harvested from comments / mod logs / submissions, batch enrichment of large user lists, bulk audience research.

**Example**

**Input**

```json
{
  "endpoint": "lookup",
  "lookup_ids": ["t2_1w72", "t2_29onm7dc32"]
}
```

**Output** *(one record per user)*

```json
{
  "endpoint": "lookup",
  "name": "spez",
  "id": "1w72",
  "created_utc": 1118030400.0,
  "link_karma": 182650,
  "comment_karma": 755338,
  "profile_img": "https://styles.redditmedia.com/t5_3k30p/styles/profileIcon_uj015iwx9s7g1.png",
  "profile_color": "",
  "profile_over_18": false
}
```

##### 8. Username Available — check if a name is free

Tells you whether a username is still claimable on Reddit.

**Returns:** `{endpoint, username, available}` — `available: true` means free, `false` means taken or reserved.

**Use it when:** picking new account names in bulk, brand-protection sweeps, finding free handles.

**Example**

**Input**

```json
{
  "endpoint": "username_available",
  "available_username": "my_new_reddit_handle"
}
```

**Output** *(one dataset record)*

```json
{
  "endpoint": "username_available",
  "username": "my_new_reddit_handle",
  "available": false
}
```

#### Auth-required endpoints (Reddit account needed)

These five endpoints sign in as your account and act on its behalf. Save credentials once in **Reddit Vault** and reuse them by name, or paste Token V2 + matching proxy inline.

##### 9. My Content — your own listings

Returns one of your private listings (overview / submitted / comments / upvoted / downvoted / hidden / saved / gilded).

**Returns:** array of post / comment items with the same shape as the public `overview` / `posts` / `comments` endpoints — but pulled from **your own account's view** so it includes hidden / saved / upvoted items only you can see.

**Use it when:** archiving your account's history, building a personal dashboard, exporting saved / upvoted items for a research corpus.

**Optional fields:** `my_content_sort`, `my_content_time_filter`, `my_content_limit` (1–100).

**Example**

**Input**

```json
{
  "endpoint": "my_content",
  "my_content_type": "overview",
  "my_content_sort": "new",
  "my_content_limit": 25,
  "credentialSource": "vault",
  "accountName": "motor_tip8865"
}
```

**Output** *(one record per item — post shape shown)*

```json
{
  "endpoint": "my_content",
  "id": "1tc6ncq",
  "name": "t3_1tc6ncq",
  "title": "Which language should I learn next?",
  "author": "motor_tip8865",
  "author_fullname": "t2_29onm7dc32",
  "subreddit": "test",
  "subreddit_name_prefixed": "r/test",
  "score": 1,
  "ups": 1,
  "upvote_ratio": 1.0,
  "num_comments": 0,
  "created_utc": 1779421200.0,
  "permalink": "/r/test/comments/1tc6ncq/which_language_should_i_learn_next/",
  "url": "https://www.reddit.com/r/test/comments/1tc6ncq/which_language_should_i_learn_next/",
  "is_self": true,
  "selftext": "Currently writing Python full-time..."
}
```

##### 10. User Action — follow / unfollow / block / unblock / report

One endpoint, five actions. Picks the action from a dropdown.

**Returns:** `{endpoint, action, target, success, data}` — `data` is the backend response (Reddit's raw acknowledgement, or `{}` on a clean success).

**Use it when:** silently following a competitor / influencer, blocking known spammers in bulk, reporting harassment, programmatic relationship management.

> **Report** also accepts an optional `user_action_site_rule` (e.g. `harassment`, `spam`). **Unblock** auto-resolves your own t2\_ ID from your bearer; only fill `user_action_my_account_id` if auto-resolve fails.

**Example**

**Input**

```json
{
  "endpoint": "user_action",
  "user_action": "follow",
  "user_action_target": "spez",
  "credentialSource": "vault",
  "accountName": "motor_tip8865"
}
```

**Output** *(one dataset record)*

```json
{
  "endpoint": "user_action",
  "action": "follow",
  "target": "spez",
  "success": true,
  "data": {}
}
```

##### 11. Add / Remove Friend — manage your friends list

Adds or removes a user from your Reddit friends list.

**Returns:** `{endpoint, action, username, success, data}` — `data` echoes Reddit's response (the friend record on `add`, an empty body on `remove`).

**Use it when:** building a curated follow list of users you want to monitor (Reddit pushes their new posts/comments into your friends feed).

**Example**

**Input**

```json
{
  "endpoint": "friend_action",
  "friend_action": "add",
  "friend_username": "spez",
  "credentialSource": "vault",
  "accountName": "motor_tip8865"
}
```

**Output** *(one dataset record)*

```json
{
  "endpoint": "friend_action",
  "action": "add",
  "username": "spez",
  "success": true,
  "data": {
    "date": 1779421200.0,
    "name": "spez",
    "id": "t2_1w72",
    "rel_id": "r9_2lkj8"
  }
}
```

##### 12. Friends List — list your friends

Lists every account you've friended. No filter fields needed.

**Returns:** array of `{endpoint, name, id, date, rel_id}` per friend (front-loaded order). Empty list → one row: `{endpoint, friends: [], count: 0}`.

**Use it when:** auditing who's on your friends list, exporting your friend roster, syncing with an external CRM.

**Optional fields:** `friends_list_max` — cap how many friends to return (0 = all).

**Example**

**Input**

```json
{
  "endpoint": "friends_list",
  "friends_list_max": 0,
  "credentialSource": "vault",
  "accountName": "motor_tip8865"
}
```

**Output** *(one record per friend — example shows non-empty case)*

```json
{
  "endpoint": "friends_list",
  "name": "spez",
  "id": "t2_1w72",
  "date": 1779421200.0,
  "rel_id": "r9_2lkj8"
}
```

##### 13. Show My Flair — toggle your flair visibility on a subreddit

Toggles whether your flair on a given subreddit is visible to other users.

**Returns:** `{endpoint, subreddit, flair_enabled, success, data}` — `data` is the backend acknowledgement.

**Use it when:** revealing / hiding your flair in a community as part of profile cleanup, branding swaps, or compliance with subreddit norms.

**Example**

**Input**

```json
{
  "endpoint": "show_my_flair",
  "show_my_flair_subreddit": "AskReddit",
  "show_my_flair_enabled": true,
  "credentialSource": "vault",
  "accountName": "motor_tip8865"
}
```

**Output** *(one dataset record)*

```json
{
  "endpoint": "show_my_flair",
  "subreddit": "AskReddit",
  "flair_enabled": true,
  "success": true,
  "data": {}
}
```

***

### Credentials

The 8 anonymous endpoints (About, Trophies, Overview, Posts, Comments, Browse Users, Users by IDs, Username Available) need no credentials at all — leave the Reddit credentials section blank.

The 5 auth-required endpoints (My Content, User Action, Add / Remove Friend, Friends List, Show My Flair) need a signed-in Reddit account. Save it once in **Reddit Vault** and reuse the name forever, or paste a Token V2 + matching proxy inline for one-off runs.

#### Credential lifetimes

| Credential | Lifetime | When to refresh |
|---|---|---|
| **Token V2** (`token_v2` cookie) | ~24 hours | Daily — or save a Reddit Session in the vault and let it auto-refresh |
| **Reddit Session** (`reddit_session` cookie) | ~180 days | Roughly twice a year, or when a run reports `unauthorized` |

> **How to extract these from your browser:** open Reddit in Chrome / Brave / Edge / Firefox, then **DevTools → Application → Cookies → `https://www.reddit.com`**. Filter by `token_v2` or `reddit_session` and copy the **Value** column.
>
> ![Token V2 cookie in DevTools](https://docs.redcrawler.com/img/credentials/token-v2-cookie.jpg)
>
> ![Reddit Session cookie in DevTools](https://docs.redcrawler.com/img/credentials/reddit-session-cookie.jpg)

#### Option A — Use saved account (vault) *(recommended)*

1. Run the [Reddit Vault](https://apify.com/red_crawler/reddit-vault) actor once with mode `STORE`, an account name (e.g. `motor_tip8865`), your Token V2 (or Reddit Session for auto-refresh), and the matching proxy.
2. In this actor, set **Credential source** = `Use saved account (vault)` and **Saved account name** = `motor_tip8865`.
3. Token V2 + proxy are pulled from the vault on every run. If you saved a Reddit Session, the Token V2 auto-refreshes whenever it expires.

#### Option B — Paste Token V2 + proxy inline

1. Set **Credential source** = `Paste Token V2 + proxy`.
2. Paste the `eyJ…` **Token V2** cookie value (encrypted by Apify at rest).
3. Paste the **Proxy** as `ip:port:user:pass` — must be the same IP that minted the Token V2 (Reddit IP-binds these cookies).

***

### How to run

1. **What to fetch** → pick one of the 13 endpoints from the dropdown.
2. Scroll to the section that matches your endpoint and fill in its fields. **Only that section's fields are used** — other sections are ignored.
3. If your endpoint is auth-required (My Content, User Action, Add / Remove Friend, Friends List, Show My Flair), scroll to **Reddit credentials** and pick a source — vault (name only) or manual (Token V2 + proxy).
4. Hit **Start**. Each run produces one or more dataset rows — exactly one per item returned (e.g. 25 posts → 25 rows; 1 follow → 1 row).

***

### Output

Records are pushed to the run's default dataset. The shape depends on the endpoint:

| Endpoint | Pushed shape | Front-loaded columns |
|---|---|---|
| `about` | one user record | `endpoint, id, name, total_karma, link_karma, comment_karma, …` |
| `trophies` | array of `{kind:"t6", data:{…}}` | `endpoint, kind, data` |
| `overview` / `posts` / `comments` / `my_content` | array of post (`t3`) + comment (`t1`) items | post-shaped or comment-shaped based on `kind` |
| `browse_users` | array of user-subreddits | `endpoint, id, name, total_karma, …` |
| `lookup` | array of compact user records | `endpoint, id, name, total_karma, …` |
| `username_available` | `{endpoint, username, available}` | as listed |
| `friends_list` | array of friend records | `endpoint, name, id, date, rel_id` |
| `user_action` / `friend_action` / `show_my_flair` | one acknowledgement record | `endpoint, action, target / username / subreddit, success, data` |

> Empty results push **one summary row** instead of zero rows (e.g. an empty friends list = `{endpoint: "friends_list", friends: [], count: 0}`), so a successful run with no items still produces a visible record.

***

### Common edge cases

| Edge case | Cause | How it surfaces |
|---|---|---|
| Suspended user | Account banned by Reddit admins | `about` returns sparse profile, `posts` / `comments` empty. Some fields may be missing. |
| Shadowbanned user | Account silently suppressed | All anonymous lookups return "User not found" (Reddit hides shadowbanned accounts from outsiders). |
| Private profile | User toggled "Show my profile to logged-out users = off" | Anonymous lookups fail with `forbidden`. Use an auth-required endpoint on YOUR account with their consent, or skip. |
| Mixed valid + invalid IDs in `lookup` | One or more `t2_` IDs are wrong / deleted | Resolved users come back; missing IDs are absent. No error — just fewer rows than IDs supplied. |
| Bearer expired | Saved Token V2 past ~24 h, no vault session for auto-refresh | Run still completes but auth-required endpoints fail. Re-save the account in Reddit Vault with a Reddit Session for auto-refresh. |
| Bearer minted on a different IP | Token V2 minted on a different proxy than the one paired with it | Auth-required endpoints fail with `unauthorized`. Re-mint the Token V2 on the proxy you'll use, save them as a pair. |
| Username with `?` / trailing slash / URL | User pasted a full URL or messy handle | Actor strips it cleanly — `https://reddit.com/user/spez/`, `u/spez`, `spez` all work. |
| `unblock` auto-resolve failed | Bearer doesn't expose your own t2\_ID | Fill `user_action_my_account_id` manually (you can fetch your own ID via `about` on your own username). |
| Empty friends list | You haven't friended anyone | One row pushed: `{endpoint: "friends_list", friends: [], count: 0}`. |
| Friend already added | Re-running `friend_action: add` on someone already friended | Reddit returns the existing relationship — `success: true`, no duplicate created. |

***

### Why this actor is fast

- **Speed — under 1 second per anonymous lookup, 2–4 seconds per auth-required call.** Pure HTTP to Reddit's mobile API. No browser to boot, no Playwright / Selenium / Puppeteer overhead. Competing browser-based actors typically take 15–60 seconds per call.
- **Reliability — zero browser flakiness.** No headless-Chromium crashes. No JS-render timeouts. No captcha pages.
- **Footprint — under 100 MB RAM per run.** Most browser-based actors need 1–4 GB.
- **Proxy management handled for you on anonymous endpoints.** No proxy to configure for the 8 read-only endpoints — the backend rotates infrastructure behind the scenes.

***

### Status & error reference

**Run status** *(Apify-side, shown on the run page)*

| Status | Apify message | Meaning | What to do |
|---|---|---|---|
| <img src="https://redcrawler.com/s/apify_pill_succeeded_v11.png" alt="Succeeded" height="40" style="max-width:none" /> | "Actor succeeded with N results in the dataset" | Run finished, records pushed. | Open the dataset to view the result. |
| <img src="https://redcrawler.com/s/apify_pill_failed_v11.png" alt="Failed" height="40" style="max-width:none" /> | "The Actor process failed…" | Validation error or missing required input. | Check the run log. You are NOT charged for failed runs. |
| <img src="https://redcrawler.com/s/apify_pill_timed_out_v11.png" alt="Timed out" height="40" style="max-width:none" /> | "The Actor timed out. You can resurrect it with a longer timeout to continue where you left off." | Run exceeded timeout (rare — lookups are fast). | Re-run; check Reddit / proxy is reachable. |
| <img src="https://redcrawler.com/s/apify_pill_aborted_v11.png" alt="Aborted" height="40" style="max-width:none" /> | "The Actor process was aborted. You can resurrect it to continue where you left off." | You stopped the run manually. | No charge for unpushed results. |

**Common in-run conditions** *(visible in run log and output record)*

| Condition | Cause | Result |
|---|---|---|
| User not found | Username doesn't exist, is suspended, or is shadowbanned | Run `SUCCEEDED`, single row with `error: "User not found"`. |
| Private profile | User has logged-out viewing disabled | Run `SUCCEEDED`, row with `error_kind: FORBIDDEN`. |
| Bearer expired / invalid | Token V2 past ~24 h, no vault session for auto-refresh | Run `SUCCEEDED`, row with `error_kind: UNAUTHORIZED`. |
| Validation error: missing endpoint / username / IDs | Required input not provided | Run `FAILED` immediately, no charge. |
| Reddit rate-limit | Per-IP throttle hit (very rare on shared infra) | Run `SUCCEEDED`, row with `error_kind: RATELIMIT`. |

***

### Pricing

Pay-per-result. **You're only charged for records actually pushed to the dataset — failed runs, validation errors, and credential errors that never reach Reddit cost nothing.**

| Event | Trigger | Price (per 1,000) |
|-------|---------|--------------------|
| `result` | Each row pushed to the dataset (success or failure) | **$0.99** |

A 25-post overview is 25 rows. A single follow / unfollow / block is 1 row. A `lookup` of 100 IDs is up to 100 rows.

***

### Need a different shape of data?

- **[Reddit Vault](https://apify.com/red_crawler/reddit-vault)** — save Reddit accounts once, call them by name from this actor (free)
- **[Reddit Users V2](https://apify.com/red_crawler/reddit-users-v2)** — focused profile + your-account + followers + follow/unfollow flow
- **[Reddit Subreddits](https://apify.com/red_crawler/reddit-subreddits)** — info, browse, join / leave, create
- **[Reddit Posts & Feeds V2](https://apify.com/red_crawler/reddit-posts-feeds-v2)** — home feed + post state controls
- **[Reddit Commenting V2](https://apify.com/red_crawler/reddit-commenting-v2)** — post a top-level comment or reply
- **[Reddit Voting V2](https://apify.com/red_crawler/reddit-voting-v2)** — upvote / downvote / clear your vote
- **[Reddit Posting V2](https://apify.com/red_crawler/reddit-posting-v2)** — create text / link / image / gallery / video / GIF / crosspost / poll posts
- **[Reddit Bulk Scrape V2](https://apify.com/red_crawler/reddit-bulk-scrape-v2)** — bulk lookups by ID (up to 1500 per run)

All of them accept the same `accountName` field, so saving credentials in Reddit Vault unlocks them all.

***

### Support and feedback

Found a bug, want a feature, or hit a Reddit error code we don't translate clearly? Open an issue via the actor's Apify Console feedback link, or reach out at the RedCrawler support channel.

***

*Reddit Users V1 is part of the RedCrawler family of Reddit actors. RedCrawler is independent — not affiliated with, endorsed by, or sponsored by Reddit, Inc. Use it within Reddit's API terms.*

# Actor input Schema

## `endpoint` (type: `string`):

Choose which user operation to run. Anonymous endpoints don't need any auth. Auth-required endpoints (marked) need a Token V2 + proxy (or a saved Reddit Vault account).

## `about_username` (type: `string`):

Reddit username, u/name, or profile URL. Used by: About.

## `trophies_username` (type: `string`):

Reddit username, u/name, or profile URL. Used by: Trophies.

## `overview_username` (type: `string`):

Reddit username, u/name, or profile URL. Used by: Overview.

## `overview_sort` (type: `string`):

Sort order. Used by: Overview.

## `overview_time_filter` (type: `string`):

Time window — IGNORED unless sort is 'top' or 'controversial'. Leave as '—' for other sort orders.

## `overview_limit` (type: `integer`):

Max items (1–100). Used by: Overview.

## `posts_username` (type: `string`):

Reddit username, u/name, or profile URL. Used by: Posts.

## `posts_sort` (type: `string`):

Sort order. Used by: Posts.

## `posts_time_filter` (type: `string`):

Time window — IGNORED unless sort is 'top' or 'controversial'. Leave as '—' for other sort orders.

## `posts_limit` (type: `integer`):

Max posts (1–100). Used by: Posts.

## `comments_username` (type: `string`):

Reddit username, u/name, or profile URL. Used by: Comments.

## `comments_sort` (type: `string`):

Sort order. Used by: Comments.

## `comments_time_filter` (type: `string`):

Time window — IGNORED unless sort is 'top' or 'controversial'. Leave as '—' for other sort orders.

## `comments_limit` (type: `integer`):

Max comments (1–100). Used by: Comments.

## `browse_directory` (type: `string`):

Which directory to browse. Used by: Browse Users.

## `browse_limit` (type: `integer`):

Max users to return (1–100). Used by: Browse Users.

## `lookup_ids` (type: `array`):

List of Reddit account IDs. Accepts both raw IDs (`abcd12`) and t2\_-prefixed (`t2_abcd12`). One per row, or paste a comma-separated list — the actor will split it. Used by: Users by IDs.

## `available_username` (type: `string`):

Username to check for availability. Letters, digits, underscore, hyphen — 1 to 50 characters. Used by: Username Available.

## `my_content_type` (type: `string`):

Which of your own listings to pull. Requires bearer + proxy (or a saved vault account). Used by: My Content.

## `my_content_sort` (type: `string`):

Sort order. Used by: My Content.

## `my_content_time_filter` (type: `string`):

Time window — IGNORED unless sort is 'top' or 'controversial'. Leave as '—' for other sort orders.

## `my_content_limit` (type: `integer`):

Max items (1–100). Used by: My Content.

## `user_action` (type: `string`):

Which action to perform on the target user. Used by: User Action.

## `user_action_target` (type: `string`):

Who to act on. Accepts username, u/name, profile URL, raw ID, or t2\_ prefixed ID. Used by: User Action.

## `user_action_site_rule` (type: `string`):

Reddit site rule key the user violated (e.g. `harassment`, `spam`). Optional. Ignored for follow / unfollow / block / unblock.

## `user_action_my_account_id` (type: `string`):

Your own t2\_ ID (e.g. `t2_1w72`). Optional — the actor auto-resolves this from your bearer for unblock. Fill in only if auto-resolve fails. Ignored for follow / unfollow / block / report.

## `friend_action` (type: `string`):

Whether to add or remove the target user as a friend. Used by: Add / Remove Friend.

## `friend_username` (type: `string`):

Reddit username to add or remove from your friends list. Used by: Add / Remove Friend.

## `friends_list_max` (type: `integer`):

Cap the number of friends returned (client-side trim). 0 or empty = return all. Used by: Friends List.

## `show_my_flair_subreddit` (type: `string`):

Subreddit name where you want to show or hide your flair (with or without `r/`). Used by: Show My Flair.

## `show_my_flair_enabled` (type: `boolean`):

True = show your flair to other users in this subreddit. False = hide it. Used by: Show My Flair.

## `credentialSource` (type: `string`):

Used by all auth-required endpoints (My Content, User Action, Add/Remove Friend, Friends List, Show My Flair). Anonymous endpoints ignore this section. **Use saved account (vault)** loads your stored Token V2 + proxy from the **reddit-vault** actor (auto-refreshed if you saved a Reddit Session) — only the 'Saved account name' field below is used. **Paste Token V2 + proxy** uses the values you paste below — the 'Saved account name' field is ignored.

## `accountName` (type: `string`):

The name you used in the **reddit-vault** actor when you stored this account. Your Token V2 + proxy load automatically from the vault. Ignored when 'Credential source' = manual.

## `bearer` (type: `string`):

Your Reddit `token_v2` cookie value (`eyJ...`). Lifetime ~24 h. Encrypted at rest by Apify. Ignored when 'Credential source' = vault.

## `proxy` (type: `string`):

Proxy in `ip:port:user:pass` format. MUST be the same IP that originally minted the Token V2. Ignored when 'Credential source' = vault.

## Actor input object example

```json
{
  "endpoint": "about",
  "about_username": "spez",
  "trophies_username": "spez",
  "overview_username": "spez",
  "overview_sort": "new",
  "overview_time_filter": "",
  "overview_limit": 25,
  "posts_username": "spez",
  "posts_sort": "new",
  "posts_time_filter": "",
  "posts_limit": 25,
  "comments_username": "spez",
  "comments_sort": "new",
  "comments_time_filter": "",
  "comments_limit": 25,
  "browse_directory": "popular",
  "browse_limit": 25,
  "lookup_ids": [
    "t2_1w72"
  ],
  "available_username": "my_new_reddit_handle",
  "my_content_type": "overview",
  "my_content_sort": "new",
  "my_content_time_filter": "",
  "my_content_limit": 25,
  "user_action": "follow",
  "user_action_target": "spez",
  "friend_action": "add",
  "friend_username": "spez",
  "friends_list_max": 0,
  "show_my_flair_subreddit": "AskReddit",
  "show_my_flair_enabled": true,
  "credentialSource": "vault"
}
```

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "endpoint": "about",
    "about_username": "spez",
    "trophies_username": "spez",
    "overview_username": "spez",
    "posts_username": "spez",
    "comments_username": "spez",
    "lookup_ids": [
        "t2_1w72"
    ],
    "available_username": "my_new_reddit_handle",
    "user_action_target": "spez",
    "friend_username": "spez",
    "show_my_flair_subreddit": "AskReddit"
};

// Run the Actor and wait for it to finish
const run = await client.actor("red_crawler/reddit-users").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "endpoint": "about",
    "about_username": "spez",
    "trophies_username": "spez",
    "overview_username": "spez",
    "posts_username": "spez",
    "comments_username": "spez",
    "lookup_ids": ["t2_1w72"],
    "available_username": "my_new_reddit_handle",
    "user_action_target": "spez",
    "friend_username": "spez",
    "show_my_flair_subreddit": "AskReddit",
}

# Run the Actor and wait for it to finish
run = client.actor("red_crawler/reddit-users").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "endpoint": "about",
  "about_username": "spez",
  "trophies_username": "spez",
  "overview_username": "spez",
  "posts_username": "spez",
  "comments_username": "spez",
  "lookup_ids": [
    "t2_1w72"
  ],
  "available_username": "my_new_reddit_handle",
  "user_action_target": "spez",
  "friend_username": "spez",
  "show_my_flair_subreddit": "AskReddit"
}' |
apify call red_crawler/reddit-users --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=red_crawler/reddit-users",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Reddit Users V1 — Profile, Lookup, Follow, Block, Friend (13)",
        "description": "Full Reddit user toolkit — 8 anonymous lookups (profile, trophies, posts, comments, overview, browse, bulk-by-IDs, username) + 5 auth ops (my content, user actions, add/remove friend, friends list, show-my-flair). Use Reddit Vault or paste Token V2 + proxy.",
        "version": "0.13",
        "x-build-id": "Stn6xQkBNmRCnIaub"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/red_crawler~reddit-users/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-red_crawler-reddit-users",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/red_crawler~reddit-users/runs": {
            "post": {
                "operationId": "runs-sync-red_crawler-reddit-users",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/red_crawler~reddit-users/run-sync": {
            "post": {
                "operationId": "run-sync-red_crawler-reddit-users",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "required": [
                    "endpoint"
                ],
                "properties": {
                    "endpoint": {
                        "title": "What to fetch",
                        "enum": [
                            "about",
                            "trophies",
                            "overview",
                            "posts",
                            "comments",
                            "browse_users",
                            "lookup",
                            "username_available",
                            "my_content",
                            "user_action",
                            "friend_action",
                            "friends_list",
                            "show_my_flair"
                        ],
                        "type": "string",
                        "description": "Choose which user operation to run. Anonymous endpoints don't need any auth. Auth-required endpoints (marked) need a Token V2 + proxy (or a saved Reddit Vault account).",
                        "default": "about"
                    },
                    "about_username": {
                        "title": "Username",
                        "type": "string",
                        "description": "Reddit username, u/name, or profile URL. Used by: About."
                    },
                    "trophies_username": {
                        "title": "Username",
                        "type": "string",
                        "description": "Reddit username, u/name, or profile URL. Used by: Trophies."
                    },
                    "overview_username": {
                        "title": "Username",
                        "type": "string",
                        "description": "Reddit username, u/name, or profile URL. Used by: Overview."
                    },
                    "overview_sort": {
                        "title": "Sort",
                        "enum": [
                            "new",
                            "hot",
                            "top",
                            "controversial"
                        ],
                        "type": "string",
                        "description": "Sort order. Used by: Overview.",
                        "default": "new"
                    },
                    "overview_time_filter": {
                        "title": "Time filter (only for sort = top or controversial)",
                        "enum": [
                            "",
                            "hour",
                            "day",
                            "week",
                            "month",
                            "year",
                            "all"
                        ],
                        "type": "string",
                        "description": "Time window — IGNORED unless sort is 'top' or 'controversial'. Leave as '—' for other sort orders.",
                        "default": ""
                    },
                    "overview_limit": {
                        "title": "Limit",
                        "minimum": 1,
                        "maximum": 100,
                        "type": "integer",
                        "description": "Max items (1–100). Used by: Overview.",
                        "default": 25
                    },
                    "posts_username": {
                        "title": "Username",
                        "type": "string",
                        "description": "Reddit username, u/name, or profile URL. Used by: Posts."
                    },
                    "posts_sort": {
                        "title": "Sort",
                        "enum": [
                            "new",
                            "hot",
                            "top",
                            "controversial"
                        ],
                        "type": "string",
                        "description": "Sort order. Used by: Posts.",
                        "default": "new"
                    },
                    "posts_time_filter": {
                        "title": "Time filter (only for sort = top or controversial)",
                        "enum": [
                            "",
                            "hour",
                            "day",
                            "week",
                            "month",
                            "year",
                            "all"
                        ],
                        "type": "string",
                        "description": "Time window — IGNORED unless sort is 'top' or 'controversial'. Leave as '—' for other sort orders.",
                        "default": ""
                    },
                    "posts_limit": {
                        "title": "Limit",
                        "minimum": 1,
                        "maximum": 100,
                        "type": "integer",
                        "description": "Max posts (1–100). Used by: Posts.",
                        "default": 25
                    },
                    "comments_username": {
                        "title": "Username",
                        "type": "string",
                        "description": "Reddit username, u/name, or profile URL. Used by: Comments."
                    },
                    "comments_sort": {
                        "title": "Sort",
                        "enum": [
                            "new",
                            "hot",
                            "top",
                            "controversial"
                        ],
                        "type": "string",
                        "description": "Sort order. Used by: Comments.",
                        "default": "new"
                    },
                    "comments_time_filter": {
                        "title": "Time filter (only for sort = top or controversial)",
                        "enum": [
                            "",
                            "hour",
                            "day",
                            "week",
                            "month",
                            "year",
                            "all"
                        ],
                        "type": "string",
                        "description": "Time window — IGNORED unless sort is 'top' or 'controversial'. Leave as '—' for other sort orders.",
                        "default": ""
                    },
                    "comments_limit": {
                        "title": "Limit",
                        "minimum": 1,
                        "maximum": 100,
                        "type": "integer",
                        "description": "Max comments (1–100). Used by: Comments.",
                        "default": 25
                    },
                    "browse_directory": {
                        "title": "Directory",
                        "enum": [
                            "popular",
                            "new"
                        ],
                        "type": "string",
                        "description": "Which directory to browse. Used by: Browse Users.",
                        "default": "popular"
                    },
                    "browse_limit": {
                        "title": "Limit",
                        "minimum": 1,
                        "maximum": 100,
                        "type": "integer",
                        "description": "Max users to return (1–100). Used by: Browse Users.",
                        "default": 25
                    },
                    "lookup_ids": {
                        "title": "Account IDs",
                        "type": "array",
                        "description": "List of Reddit account IDs. Accepts both raw IDs (`abcd12`) and t2_-prefixed (`t2_abcd12`). One per row, or paste a comma-separated list — the actor will split it. Used by: Users by IDs.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "available_username": {
                        "title": "Username to check",
                        "pattern": "^[A-Za-z0-9_\\-]{1,50}$",
                        "type": "string",
                        "description": "Username to check for availability. Letters, digits, underscore, hyphen — 1 to 50 characters. Used by: Username Available."
                    },
                    "my_content_type": {
                        "title": "Content type",
                        "enum": [
                            "overview",
                            "submitted",
                            "comments",
                            "upvoted",
                            "downvoted",
                            "hidden",
                            "saved",
                            "gilded"
                        ],
                        "type": "string",
                        "description": "Which of your own listings to pull. Requires bearer + proxy (or a saved vault account). Used by: My Content.",
                        "default": "overview"
                    },
                    "my_content_sort": {
                        "title": "Sort",
                        "enum": [
                            "new",
                            "hot",
                            "top",
                            "controversial"
                        ],
                        "type": "string",
                        "description": "Sort order. Used by: My Content.",
                        "default": "new"
                    },
                    "my_content_time_filter": {
                        "title": "Time filter (only for sort = top or controversial)",
                        "enum": [
                            "",
                            "hour",
                            "day",
                            "week",
                            "month",
                            "year",
                            "all"
                        ],
                        "type": "string",
                        "description": "Time window — IGNORED unless sort is 'top' or 'controversial'. Leave as '—' for other sort orders.",
                        "default": ""
                    },
                    "my_content_limit": {
                        "title": "Limit",
                        "minimum": 1,
                        "maximum": 100,
                        "type": "integer",
                        "description": "Max items (1–100). Used by: My Content.",
                        "default": 25
                    },
                    "user_action": {
                        "title": "Action",
                        "enum": [
                            "follow",
                            "unfollow",
                            "block",
                            "unblock",
                            "report"
                        ],
                        "type": "string",
                        "description": "Which action to perform on the target user. Used by: User Action.",
                        "default": "follow"
                    },
                    "user_action_target": {
                        "title": "Target user",
                        "type": "string",
                        "description": "Who to act on. Accepts username, u/name, profile URL, raw ID, or t2_ prefixed ID. Used by: User Action."
                    },
                    "user_action_site_rule": {
                        "title": "Site rule (only used when Action = report)",
                        "type": "string",
                        "description": "Reddit site rule key the user violated (e.g. `harassment`, `spam`). Optional. Ignored for follow / unfollow / block / unblock."
                    },
                    "user_action_my_account_id": {
                        "title": "Your account ID (only used when Action = unblock and auto-resolve fails)",
                        "type": "string",
                        "description": "Your own t2_ ID (e.g. `t2_1w72`). Optional — the actor auto-resolves this from your bearer for unblock. Fill in only if auto-resolve fails. Ignored for follow / unfollow / block / report."
                    },
                    "friend_action": {
                        "title": "Action",
                        "enum": [
                            "add",
                            "remove"
                        ],
                        "type": "string",
                        "description": "Whether to add or remove the target user as a friend. Used by: Add / Remove Friend.",
                        "default": "add"
                    },
                    "friend_username": {
                        "title": "Username",
                        "type": "string",
                        "description": "Reddit username to add or remove from your friends list. Used by: Add / Remove Friend."
                    },
                    "friends_list_max": {
                        "title": "Max friends to return (0 = all)",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Cap the number of friends returned (client-side trim). 0 or empty = return all. Used by: Friends List.",
                        "default": 0
                    },
                    "show_my_flair_subreddit": {
                        "title": "Subreddit",
                        "type": "string",
                        "description": "Subreddit name where you want to show or hide your flair (with or without `r/`). Used by: Show My Flair."
                    },
                    "show_my_flair_enabled": {
                        "title": "Show flair?",
                        "type": "boolean",
                        "description": "True = show your flair to other users in this subreddit. False = hide it. Used by: Show My Flair.",
                        "default": true
                    },
                    "credentialSource": {
                        "title": "Credential source",
                        "enum": [
                            "vault",
                            "manual"
                        ],
                        "type": "string",
                        "description": "Used by all auth-required endpoints (My Content, User Action, Add/Remove Friend, Friends List, Show My Flair). Anonymous endpoints ignore this section. **Use saved account (vault)** loads your stored Token V2 + proxy from the **reddit-vault** actor (auto-refreshed if you saved a Reddit Session) — only the 'Saved account name' field below is used. **Paste Token V2 + proxy** uses the values you paste below — the 'Saved account name' field is ignored.",
                        "default": "vault"
                    },
                    "accountName": {
                        "title": "Saved account name (used when source = vault)",
                        "pattern": "^[A-Za-z0-9_-]{1,32}$",
                        "maxLength": 32,
                        "type": "string",
                        "description": "The name you used in the **reddit-vault** actor when you stored this account. Your Token V2 + proxy load automatically from the vault. Ignored when 'Credential source' = manual."
                    },
                    "bearer": {
                        "title": "Token V2 (used when source = manual)",
                        "type": "string",
                        "description": "Your Reddit `token_v2` cookie value (`eyJ...`). Lifetime ~24 h. Encrypted at rest by Apify. Ignored when 'Credential source' = vault."
                    },
                    "proxy": {
                        "title": "Proxy (used when source = manual)",
                        "type": "string",
                        "description": "Proxy in `ip:port:user:pass` format. MUST be the same IP that originally minted the Token V2. Ignored when 'Credential source' = vault."
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
