> ## Documentation Index
> Fetch the complete documentation index at: https://docs.appeeky.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Reddit

> Scan subreddits for high-intent posts, score buying intent with AI, draft replies, and post or schedule via Composio Reddit OAuth.

Reddit is the first **Growth Channels** integration. The scanner watches your configured subreddits, scores posts with an LLM, drafts replies for your inbox, and publishes through the Reddit API via Composio OAuth.

<Info>
  Requires a signed-in Appeeky account. Connect Reddit before posting or scheduling.
</Info>

<Warning>
  New or low-karma accounts that post through the API are often removed by Reddit's sitewide spam filters. Read **[Reddit account warmup](/docs/reddit-account-warmup)** before your first scheduled post.
</Warning>

***

## How it works

```
every 15 min (per project)  →  scan subreddits  →  score intent  →  draft reply  →  inbox (pending)
                                                                                        │
                                                                              you approve / dismiss
                                                                                        │
                                                                              post reply or schedule
```

* **No auto-posting of inbox drafts** — you review each opportunity first.
* **Scheduled posts** are dispatched by a Trigger.dev cron (`growth-reddit-scheduled-dispatch`, every 5 minutes) or manually via `POST …/scheduled-posts/:id/dispatch`.
* **Hard dedupe** — each Reddit post is processed once per project.

For shared concepts (projects, opportunities, linter), see [Growth Channels overview](/docs/growth-channels).

***

## Connect Reddit

| Method | Endpoint                                   | Description                                   |
| ------ | ------------------------------------------ | --------------------------------------------- |
| GET    | `/v1/growth/connect/reddit/start`          | Returns `authorizeUrl` for Composio OAuth     |
| GET    | `/v1/growth/connect/reddit/status`         | Connection status                             |
| GET    | `/v1/growth/connect/reddit/account-health` | Karma, age, warmup readiness, API usage today |
| GET    | `/v1/growth/connect/reddit/subscriptions`  | Subreddits the account is subscribed to       |
| DELETE | `/v1/growth/connect/reddit`                | Disconnect                                    |

***

## Projects

| Method | Endpoint                        | Description                                       | Credits |
| ------ | ------------------------------- | ------------------------------------------------- | ------- |
| POST   | `/v1/growth/projects/bootstrap` | Suggest subreddits + config from an App Store app | 3       |
| POST   | `/v1/growth/projects`           | Create project (`channel: "reddit"`)              | 0       |
| GET    | `/v1/growth/projects`           | List projects (`?channel=reddit`)                 | 0       |
| GET    | `/v1/growth/projects/:id`       | Get one                                           | 0       |
| PATCH  | `/v1/growth/projects/:id`       | Update subs, threshold, budget, enabled           | 0       |
| DELETE | `/v1/growth/projects/:id`       | Delete (cascades opportunities)                   | 0       |
| POST   | `/v1/growth/projects/:id/scan`  | Queue manual scan                                 | 0       |
| GET    | `/v1/growth/projects/:id/stats` | Funnel + budget (`?days=30`)                      | 0       |

### Reddit `channelConfig`

```json theme={"theme":{"light":"github-light","dark":"github-dark"}}
{
  "subreddits": ["iosdev", "AppStoreOptimization"],
  "competitorKeywords": ["competitor app name"],
  "intentPatterns": ["looking for", "alternative to", "recommend"]
}
```

***

## Opportunities (inbox)

| Method | Endpoint                                        | Description                                                           | Credits |
| ------ | ----------------------------------------------- | --------------------------------------------------------------------- | ------- |
| GET    | `/v1/growth/opportunities`                      | List (`?status=pending&urgency=must_reply&projectId=&limit=&offset=`) | 0       |
| GET    | `/v1/growth/opportunities/:id`                  | Get one (full draft + score breakdown)                                | 0       |
| PATCH  | `/v1/growth/opportunities/:id/review`           | `{ "decision": "approved" \| "dismissed", "editedDraft"? }`           | 0       |
| POST   | `/v1/growth/opportunities/:id/regenerate-draft` | Regenerate LLM draft                                                  | dynamic |
| POST   | `/v1/growth/opportunities/:id/post-reply`       | Post or schedule comment via Composio                                 | 0       |
| POST   | `/v1/growth/opportunities/:id/mark-replied`     | Mark manually posted `{ "replyUrl" }`                                 | 0       |

**Urgency** values: `must_reply`, `browse`. **Status**: `pending`, `approved`, `dismissed`, `replied`, `expired`.

List responses include `meta.total` for pagination.

### Inbox cleanup

When the inbox grows large, bulk-dismiss low-value rows or let the nightly cron expire untouched items.

| Method | Endpoint                           | Description                                        | Credits |
| ------ | ---------------------------------- | -------------------------------------------------- | ------- |
| GET    | `/v1/growth/inbox/cleanup-preview` | Counts by category (`?projectId=` optional)        | 0       |
| POST   | `/v1/growth/inbox/cleanup`         | Bulk dismiss selected categories (up to 5,000/run) | 0       |

**POST body** (at least one flag required):

```json theme={"theme":{"light":"github-light","dark":"github-dark"}}
{
  "projectId": "uuid",
  "dismissLowUrgency": true,
  "dismissBelowMinScore": true,
  "dismissStalePosts": true,
  "dismissUntouchedOld": false
}
```

Categories:

* **low urgency** — `urgency = low`
* **below min score** — `intent_score` under the project threshold (or global default)
* **stale posts** — Reddit post older than `maxPostAgeDays`
* **untouched old** — pending in inbox 60+ days (also auto-expired nightly by `growth-inbox-expire` cron)

**Account health** (`GET …/connect/reddit/account-health`) returns `readiness`: `cold` | `warming` | `ready`, a checklist (account age, comment karma, daily API cap), and today's API post/reply counts.

***

## Scheduled posts

| Method | Endpoint                                  | Description                                           | Credits |
| ------ | ----------------------------------------- | ----------------------------------------------------- | ------- |
| GET    | `/v1/growth/scheduled-posts`              | List (`?status=pending` or `?from=&to=` for calendar) | 0       |
| POST   | `/v1/growth/scheduled-posts`              | Create text/link/image/video post                     | 0       |
| DELETE | `/v1/growth/scheduled-posts/:id`          | Cancel pending                                        | 0       |
| POST   | `/v1/growth/scheduled-posts/:id/retry`    | Retry failed                                          | 0       |
| POST   | `/v1/growth/scheduled-posts/:id/dispatch` | Publish now (pending or failed)                       | 0       |

***

## Channel registry

```
GET /v1/growth/channels
```

Returns available channels, config JSON schemas, and whether Composio Reddit is configured for the deployment.

***

## MCP tools

Reddit Growth is exposed as `growth_*` MCP tools — see [MCP Server → Growth Channels](/docs/mcp#growth-channels-reddit-lead-generation).

***

## Related

* [Growth Channels overview](/docs/growth-channels) — shared model and future channels
* [Reddit account warmup](/docs/reddit-account-warmup) — avoid spam-filter removals on new accounts
