# Reddit Posts & Feeds V2 — Types, Home Feed, State Controls (`red_crawler/reddit-posts-feeds-v2`) Actor

Three V2 reads on posts and your home feed: 1) allowed post types per subreddit (anonymous), 2) personalized home feed sorted Best/Hot/New/Top/Controversial/Rising, 3) state controls on your own posts (save / hide / nsfw / spoiler / pin / delete and 14 more). 1 anonymous + 2 saved-account.

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

## Pricing

$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 Posts & Feeds V2

![Endpoints](https://img.shields.io/badge/endpoints-3-blue) ![Auth](https://img.shields.io/badge/Reddit_account-1_no_/_2_yes-yellow) ![Proxy](https://img.shields.io/badge/proxy-only_for_bearer_endpoints-yellow) ![Pricing](https://img.shields.io/badge/pricing-pay_per_result-orange)

Three V2 reads on Reddit posts and your home feed:

1. **Allowed Post Types** — which post types a subreddit accepts (anonymous, no account needed)
2. **Home Feed** — your personalized home-feed posts, sorted any way you want (bearer required)
3. **Post State Controls** — apply 20 different state actions to one of your own posts: `save / hide / nsfw / spoiler / pin / delete / update / send_replies / follow / brand / reminder` plus their inverses (bearer required)

The first endpoint is **anonymous — no Reddit account, no proxy required.** The other two reuse a Reddit account you've already saved in the **Reddit Vault** actor (or you can paste a Token V2 + matching proxy directly).

Pick an endpoint, fill the matching section, hit Start.

---

### What you can fetch / change

The **subreddit** field accepts a name in any of these formats — paste whichever you have:

- raw name — `pics`
- prefixed — `r/pics`
- subreddit URL — `https://www.reddit.com/r/pics`
- old-Reddit URL — `https://old.reddit.com/r/pics`

#### Public endpoints (no Reddit account needed)

##### 1. Allowed Post Types — what kinds of posts a subreddit accepts

Returns the post-type policy for a subreddit. Every sub can independently enable / disable each post type via its **Allowed posts** settings — this endpoint surfaces the result.

**Inputs:**
- **Subreddit** (required)

**Returns:** booleans for `isTextPostAllowed`, `isImagePostAllowed`, `isLinkPostAllowed`, `isVideoPostAllowed`, `isGalleryPostAllowed`, `isPollPostAllowed`, `isAmaPostAllowed`, `isCrosspostAllowed`, plus a `allowedPostTypes` summary list.

**Use it when:** building a posting UI that auto-disables the wrong types per sub, pre-flighting before bulk posting (skip subs that won't accept your content), auditing which subs allow polls / videos / etc.

**Example**

**Input**

```json
{
  "endpoint": "post_types",
  "post_types_subreddit": "AskReddit"
}
````

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

```json
{
  "endpoint": "post_types",
  "subreddit": "AskReddit",
  "__typename": "Subreddit",
  "allAllowedPostTypes": ["TEXT", "SPOILER"],
  "isCrosspostingAllowed": false,
  "isPredictionAllowed": false,
  "amaSettings": { "postPermissions": "OFF" },
  "rate_limit_used": 1,
  "rate_limit_remaining": 1799,
  "rate_limit_reset_at": "2026-05-13T18:00:00Z"
}
```

> Reddit returns the post-type policy as the `allAllowedPostTypes` enum list (`TEXT`, `LINK`, `IMAGE`, `VIDEO`, `GALLERY`, `POLL`, `SPOILER`, etc.). Subs that opt out of crossposts or AMAs have `isCrosspostingAllowed: false` / `amaSettings.postPermissions: "OFF"`.

#### Bearer-required endpoints (need a Reddit account)

These two endpoints require authentication. Fill the **Reddit credentials** section at the bottom of the input form (see [Credentials](#credentials) below).

##### 2. Home Feed — your personalized home-page posts

Returns the posts Reddit shows on **your** home feed (the one you see when logged in at `reddit.com/`). Reddit personalizes this based on your subscriptions, follows, and interaction history.

**Inputs:**

- **Sort** — `best`, `hot`, `new`, `top`, `controversial`, `rising` (default `best`)
- **Time filter** — `hour`, `day`, `week`, `month`, `year`, `all` (only applies when sort is `top` or `controversial`)
- **Limit** — 1 to 1250 (default 100). Auto-paginates server-side.

**Returns:** post records with title, body, score, comment count, created timestamp, subreddit, post URL, thumbnail, vote state, NSFW / spoiler / locked / stickied / archived flags, flair, media, author info — one dataset row per post.

**Use it when:** mirroring your personal home feed into a dashboard, exporting the posts Reddit recommends to you, training models on what your account actually sees, building "what's new in my subs" digests.

**Example**

**Input**

```json
{
  "endpoint": "home_feed",
  "home_feed_sort": "best",
  "home_feed_limit": 3,
  "credentialSource": "vault",
  "accountName": "main"
}
```

**Output** *(one dataset record per post — first record shown, truncated)*

```json
{
  "endpoint": "home_feed",
  "__typename": "RichtextRecommendationContextCell",
  "id": "1t9rspp",
  "name": "t3_1t9rspp",
  "title": "Finally joined Reddit after years of hearing about it 😅",
  "authorName": "u/[deleted]",
  "score": 8,
  "commentCount": 5,
  "createdAt": "2026-05-11T03:41:08.501000+0000",
  "voteState": "NONE",
  "detailsString": "r/redditdev",
  "detailsLink": "redditdev",
  "iconPath": "https://b.thumbs.redditmedia.com/...png",
  "iconShape": "ROUND",
  "isJoinButtonShown": true,
  "joinSubredditId": "t5_2qizd",
  "isVisited": false,
  "text": "Hey everyone 👋 I recently started exploring the Reddit API and wanted to learn more...",
  "isRead": false,
  "isScoreHidden": false,
  "shareCount": 5,
  "groupRecommendationContext": {
    "typeIdentifier": "user_to_post",
    "richText": "{\"document\":[{\"c\":[{\"e\":\"text\",\"t\":\"Suggested for you\"}],\"e\":\"par\"}]}"
  }
}
```

> The home feed flattens Reddit's per-post cell stack — each row carries the title / preview / score / comment count, the resolved subreddit at `detailsString` (e.g. `r/redditdev`), the personalization hint at `groupRecommendationContext`, and the cell-level vote state at `voteState`. Set `home_feed_limit` higher to auto-paginate.

##### 3. Post State Controls — apply an action to one of your own posts

**Action endpoint** (writes state to your own post). Apply any of 20 state-control actions: save, hide, mark NSFW, mark spoiler, follow comments, pin to profile, set reminder, toggle inbox replies, mark as brand-affiliate, delete, update body — plus the inverse (`unsave`, `unhide`, `unnsfw`, `unspoiler`, `unfollow`, `unpin`, `no_reminder`, `no_replies`, `unbrand`).

**Inputs:**

- **Post ID** (required) — accepts `t3_abc123`, raw `abc123`, or a full Reddit post URL
- **Action** (required) — one of:
  - `save`, `unsave` — Reddit's "save for later"
  - `hide`, `unhide` — hide from your feed
  - `nsfw`, `unnsfw` — toggle NSFW flag
  - `spoiler`, `unspoiler` — toggle spoiler flag
  - `follow`, `unfollow` — follow comments / replies on this post
  - `brand`, `unbrand` — brand-affiliate disclosure flag
  - `pin`, `unpin` — pin to your profile (max 4 pinned posts)
  - `reminder`, `no_reminder` — Reddit's "remind me later"
  - `send_replies`, `no_replies` — toggle inbox notifications for replies
  - `delete` — permanently delete the post
  - `update` — edit the post body (requires **Content** field)
- **Content** (only used when action = `update`) — the new markdown body

**Returns:** `success: true`, `action`, `post_id`, plus any structured response Reddit returned.

**Use it when:** building post-management automation (auto-save threads matching a query, auto-pin a sticky to a fresh-account profile, bulk-NSFW your back-catalog, scheduled-edit a stale post, cleanup-delete old posts).

> **Action endpoint, not a scraper.** Each run modifies one post — no dataset bulk action. For bulk-saving / bulk-deleting, schedule multiple runs with the Apify Scheduler.

**Example** *(save action shown — the output shape is the same for every action; `update` echoes the new body in the response payload, `pin` returns the updated pin slot, etc.)*

**Input**

```json
{
  "endpoint": "post_state",
  "post_state_action": "save",
  "post_state_post_id": "1syw2sd",
  "credentialSource": "vault",
  "accountName": "main"
}
```

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

```json
{
  "endpoint": "post_state",
  "success": true,
  "action": "save",
  "post_id": "1syw2sd",
  "result": {
    "updatePostSaveState": { "ok": true, "errors": null }
  },
  "rate_limit_used": 3,
  "rate_limit_remaining": 1797,
  "rate_limit_reset_at": "2026-05-13T18:00:00Z"
}
```

***

### Credentials

The two bearer-required endpoints (Home Feed, Post State Controls) need a Reddit Token V2 cookie + the proxy that minted it. The Allowed Post Types endpoint ignores credentials entirely — leave the section blank for that one.

#### 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)

You have two options:

#### Option A — Use a saved account (recommended)

1. Run the **Reddit Vault** actor once to store a Reddit account under a name you choose (e.g. `main`, `alt-account`, `burner1`). The vault encrypts the Token V2 + matching proxy and stores them keyed by name. If you save a long-lived `reddit_session` cookie alongside it, the vault auto-refreshes the Token V2 for you (~180 days).
2. In this actor, set **Credential source = Use saved account (vault)** and put the same name in **Saved account name**.
3. Done — Token V2 + proxy load automatically on every run.

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

For one-off runs without setting up the vault:

1. Set **Credential source = Paste Token V2 + proxy**.
2. Paste your Reddit `token_v2` cookie value (`eyJ...`) into **Token V2**.
3. Paste the matching proxy in `ip:port:user:pass` format into **Proxy**.

**Critical:** Reddit IP-binds Token V2 cookies. The proxy MUST be the exact same IP that originally minted the Token V2 — otherwise Reddit returns 401 on every bearer call. Both fields are stored encrypted by Apify (`isSecret: true`).

***

### How to run

1. **Pick an endpoint** in the "What to do" dropdown at the top. The anonymous endpoint (Allowed Post Types) is at the top of the list; bearer-required endpoints (Home Feed, Post State Controls) follow.
2. **Open the matching section** below it and fill its fields.
3. **If your endpoint is bearer-required**, fill the Reddit credentials section at the bottom.
4. **Click Start.**

Each endpoint section is independent — fields outside your chosen section are ignored, so you can leave them as-is between runs.

***

### Output

Results are pushed to the actor's default dataset. View them as a table or download as JSON / CSV / Excel / XML.

- **Allowed Post Types** pushes **one record** per run.
- **Home Feed** pushes **one record per post** (up to your `limit`).
- **Post State Controls** pushes **one record** per run (success or failure).

The most useful columns are placed first (`endpoint`, `id`, `name`, `subreddit`, `title`, etc.) so the dataset Table view is readable without horizontal scrolling.

***

### Common edge cases

- **Empty home feed** — brand-new accounts with no subscriptions get a thin or empty home feed. Subscribe to a few subs first.
- **Time filter ignored** — only `top` and `controversial` sort respect time filter; on `best` / `hot` / `new` / `rising` it's silently dropped.
- **Pin limit** — Reddit caps pinned posts at 4 per profile. Trying to pin a 5th returns an error.
- **Update on a deleted post** — returns success but the post body remains "\[deleted]". You can't un-delete.
- **NSFW / spoiler on a non-self post** — works on link/image/video too. The flag attaches to the post, not the body.
- **Action on someone else's post** — Post State Controls only works on **your own** posts. Trying to delete or update another user's post returns 403.
- **Bearer expired** — Reddit Token V2 cookies live ~24 h. If you get a `bearer_expired` response, refresh the Token V2 in your vault entry (or paste a fresh one in manual mode) and re-run.

***

### Why this actor is fast

- **Speed — 1–3 seconds per call.** Pure HTTP to Reddit's API. No browser to boot, no Playwright / Selenium / Puppeteer overhead. Competing browser-based scrapers 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 scrapers need 1–4 GB. Built for reliability behind the scenes — just paste your inputs and run.

***

### 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. Some or zero records pushed. | Open the dataset to view results. |
| <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 upstream Reddit fault. | 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 its timeout. | Re-run with a smaller `limit` or fewer inputs. |
| <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)*

| Condition | Cause | Result |
|---|---|---|
| Empty result set | Feed has no posts matching the inputs. | Run `SUCCEEDED`, 0 records, no charge. |
| Private / quarantined subreddit | Reddit hides these from anonymous reads. | Run `SUCCEEDED`, those rows skipped. |
| Banned subreddit | Subreddit has been banned by Reddit. | Run `SUCCEEDED`, 0 records for that input. |
| Validation error: required input missing | Required parameter not provided. | Run `FAILED` immediately, no charge. |

***

### Pricing

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

| Event | Trigger | Price (per 1,000) |
|-------|---------|--------------------|
| `result` | Each post / state row pushed to the dataset | **$1.99** |

A 100-post Home Feed run = 100 rows. A single Post State action = 1 row. An Allowed Post Types lookup = 1 row.

***

### Need a different shape of data?

- **[Reddit Vault](https://apify.com/red_crawler/reddit-vault)** — save Reddit accounts once, reuse them by name across every Reddit actor (free)
- **[Reddit Posting V2](https://apify.com/red_crawler/reddit-posting-v2)** — create posts (text, link, image, gallery, video, poll, crosspost)
- **[Reddit Manage Posts V1](https://apify.com/red_crawler/reddit-manage-posts-v1)** — additional post management actions (lock, sticky, distinguish, etc.)
- **[Reddit Feeds V2](https://apify.com/red_crawler/reddit-feeds-v2)** — subreddit / popular / news / r/all / discovery feeds
- **[Reddit Users V2](https://apify.com/red_crawler/reddit-users-v2)** — user profiles + Profile Feeds (saved / hidden / upvoted / downvoted)
- **[Reddit Subreddits V2](https://apify.com/red_crawler/reddit-subreddits-v2)** — subreddit info, rules, leaderboards, settings
- **[Reddit Search V2](https://apify.com/red_crawler/reddit-search-v2)** — search posts / comments / users / subreddits by keyword
- **[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, 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 Posts & Feeds V2 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 and within each subreddit's posting rules.*

# Actor input Schema

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

Choose which endpoint to run. The first 1 is anonymous (no Reddit account needed). The last 2 require a Reddit account — fill the Reddit credentials section at the bottom of the form.

## `post_types_subreddit` (type: `string`):

Subreddit name, r/name, or full URL.

## `home_feed_sort` (type: `string`):

Feed sort order. Time filter only applies to top / controversial.

## `home_feed_time_filter` (type: `string`):

Time window — IGNORED unless sort is 'top' or 'controversial'.

## `home_feed_limit` (type: `integer`):

Max posts to return (1–500). Auto-paginates.

## `post_state_action` (type: `string`):

Which state action to apply to the post.

## `post_state_post_id` (type: `string`):

Post URL, t3\_ID, or raw ID (e.g. https://www.reddit.com/r/test/comments/abc123/, t3\_abc123, or abc123).

## `post_state_content` (type: `string`):

Replacement post body — plain text or Reddit markdown both work. Only used when Action = update.

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

Only used when the chosen endpoint is one of the bearer-required ones (Home Feed, Post State Controls). For 'Post Types' leave the default — credentials are ignored. **Use saved account (vault)** loads your stored Token V2 + proxy from the **reddit-vault** actor — only the 'Saved account name' field is used. **Paste Token V2 + proxy** uses the values you paste below.

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

The name you used in the **reddit-vault** actor when you stored this account. 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 minted the Token V2. Ignored when 'Credential source' = vault.

## Actor input object example

```json
{
  "endpoint": "post_types",
  "post_types_subreddit": "AskReddit",
  "home_feed_sort": "best",
  "home_feed_time_filter": "all",
  "home_feed_limit": 100,
  "post_state_action": "save",
  "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": "post_types",
    "post_types_subreddit": "AskReddit"
};

// Run the Actor and wait for it to finish
const run = await client.actor("red_crawler/reddit-posts-feeds-v2").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": "post_types",
    "post_types_subreddit": "AskReddit",
}

# Run the Actor and wait for it to finish
run = client.actor("red_crawler/reddit-posts-feeds-v2").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": "post_types",
  "post_types_subreddit": "AskReddit"
}' |
apify call red_crawler/reddit-posts-feeds-v2 --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Reddit Posts & Feeds V2 — Types, Home Feed, State Controls",
        "description": "Three V2 reads on posts and your home feed: 1) allowed post types per subreddit (anonymous), 2) personalized home feed sorted Best/Hot/New/Top/Controversial/Rising, 3) state controls on your own posts (save / hide / nsfw / spoiler / pin / delete and 14 more). 1 anonymous + 2 saved-account.",
        "version": "0.7",
        "x-build-id": "waDMQozH51cXwJA7s"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/red_crawler~reddit-posts-feeds-v2/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-red_crawler-reddit-posts-feeds-v2",
                "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-posts-feeds-v2/runs": {
            "post": {
                "operationId": "runs-sync-red_crawler-reddit-posts-feeds-v2",
                "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-posts-feeds-v2/run-sync": {
            "post": {
                "operationId": "run-sync-red_crawler-reddit-posts-feeds-v2",
                "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": [
                            "post_types",
                            "home_feed",
                            "post_state"
                        ],
                        "type": "string",
                        "description": "Choose which endpoint to run. The first 1 is anonymous (no Reddit account needed). The last 2 require a Reddit account — fill the Reddit credentials section at the bottom of the form.",
                        "default": "post_types"
                    },
                    "post_types_subreddit": {
                        "title": "Subreddit",
                        "type": "string",
                        "description": "Subreddit name, r/name, or full URL."
                    },
                    "home_feed_sort": {
                        "title": "Sort",
                        "enum": [
                            "best",
                            "hot",
                            "new",
                            "top",
                            "controversial",
                            "rising"
                        ],
                        "type": "string",
                        "description": "Feed sort order. Time filter only applies to top / controversial.",
                        "default": "best"
                    },
                    "home_feed_time_filter": {
                        "title": "Time filter (top / controversial only)",
                        "enum": [
                            "hour",
                            "day",
                            "week",
                            "month",
                            "year",
                            "all"
                        ],
                        "type": "string",
                        "description": "Time window — IGNORED unless sort is 'top' or 'controversial'.",
                        "default": "all"
                    },
                    "home_feed_limit": {
                        "title": "Limit",
                        "minimum": 1,
                        "maximum": 500,
                        "type": "integer",
                        "description": "Max posts to return (1–500). Auto-paginates.",
                        "default": 100
                    },
                    "post_state_action": {
                        "title": "Action",
                        "enum": [
                            "save",
                            "unsave",
                            "hide",
                            "unhide",
                            "nsfw",
                            "unnsfw",
                            "spoiler",
                            "unspoiler",
                            "follow",
                            "unfollow",
                            "brand",
                            "unbrand",
                            "pin",
                            "unpin",
                            "reminder",
                            "no_reminder",
                            "send_replies",
                            "no_replies",
                            "delete",
                            "update"
                        ],
                        "type": "string",
                        "description": "Which state action to apply to the post.",
                        "default": "save"
                    },
                    "post_state_post_id": {
                        "title": "Post",
                        "type": "string",
                        "description": "Post URL, t3_ID, or raw ID (e.g. https://www.reddit.com/r/test/comments/abc123/, t3_abc123, or abc123)."
                    },
                    "post_state_content": {
                        "title": "New content (only for action = update)",
                        "type": "string",
                        "description": "Replacement post body — plain text or Reddit markdown both work. Only used when Action = update."
                    },
                    "credentialSource": {
                        "title": "Credential source",
                        "enum": [
                            "vault",
                            "manual"
                        ],
                        "type": "string",
                        "description": "Only used when the chosen endpoint is one of the bearer-required ones (Home Feed, Post State Controls). For 'Post Types' leave the default — credentials are ignored. **Use saved account (vault)** loads your stored Token V2 + proxy from the **reddit-vault** actor — only the 'Saved account name' field is used. **Paste Token V2 + proxy** uses the values you paste below.",
                        "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. 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 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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
