Schedule Reddit Posts and Comments Through the API
Schedule a Reddit post or comment for a later time, list your scheduled actions and cancel one. Free to schedule; billed at the write price only when it runs.
Schedule a post or a comment to be made later. At the time you choose, the request runs through the same route a live call uses, POST /api/reddit/submit or POST /api/reddit/comment, as your stored Reddit session.
- Needs a stored session. Connect it once with
POST /api/reddit/session. Scheduling is refused while none is connected, and an action runs with the session connected when it runs: if Reddit logged it out in between, the run fails and is not charged. - No cookies, no proxy. A scheduled request never carries or stores
cookies or a proxy. Both are refused with
SESSION_FIELDS_NOT_STORED. - Billed when it runs. Scheduling, listing and cancelling are free. A run that succeeds is charged at the live route's price ($0.012), to the API key that scheduled it. A run that fails is not charged, and a cancelled action never runs.
- Timing.
run_atis 60 seconds to 30 days ahead. Due actions are picked up every 30 seconds and run one at a time, so an action normally runs within about a minute ofrun_at, later when many fall due together. Up to 100 actions can wait per account. - Never retried. A run that fails is recorded as
failedwith Reddit's reason. A run that got no answer within 10 minutes isfailedwithEXECUTION_UNCONFIRMED(orEXECUTION_INTERRUPTEDafter a restart), because it may still have posted, and been charged: itsbilledisnull(unknown). Check the subreddit and your usage history before scheduling it again.
Schedule
/api/reddit/scheduleFree| Field | Type | Required | Description |
|---|---|---|---|
type | string | Yes | post or comment |
run_at | string | number | Yes | ISO 8601 with a time zone (2026-10-21T15:00:00Z, 2026-10-21T17:00:00+02:00) or Unix seconds. A timestamp without a zone is refused |
request | object | Yes | The body you would send to the live route, without cookies or a proxy |
request for a post takes the submit fields:
subreddit, kind (self, link or poll), title, and optionally text,
url, options, duration, nsfw, spoiler, sendreplies, flair_id,
flair_text, locale, timezone, fingerprint. List a subreddit's flair ids
with GET /api/reddit/sub/:name/flairs.
request for a comment takes the comment fields:
post_url, text, and optionally locale, timezone, fingerprint.
Any other field is refused with a 400 naming it. The required fields, types
and lengths are checked now; everything else the live route checks (poll
options, Reddit's own subreddit rules) is checked when it runs.
curl -X POST -H "Authorization: Bearer $TOKEN" -H "Content-Type: application/json" \
"https://api.redditapis.com/api/reddit/schedule" \
-d '{
"type": "post",
"run_at": "2026-10-21T15:00:00Z",
"request": {
"subreddit": "SaaS",
"kind": "self",
"title": "What we learned shipping our first API",
"text": "Three things surprised us...",
"flair_id": "a1b2c3d4-0000-11ee-8000-000000000001"
}
}'The answer is 201 Created with the new action:
{
"action": {
"id": "5f0c2a8e-8f3e-4c0b-9d0a-2b7d1c6e9a11",
"type": "post",
"status": "scheduled",
"run_at": "2026-10-21T15:00:00.000Z",
"request": { "subreddit": "SaaS", "kind": "self", "title": "What we learned shipping our first API", "text": "Three things surprised us...", "flair_id": "a1b2c3d4-0000-11ee-8000-000000000001" },
"created_at": "2026-10-20T18:02:11.000Z",
"finished_at": null,
"result": null,
"error": null,
"billed": false
}
}List
/api/reddit/scheduleFree| Query | Type | Required | Description |
|---|---|---|---|
status | string | No | scheduled, running, succeeded, failed or cancelled |
limit | number | No | 1 to 100, default 50 |
Returns actions (newest first) and count.
curl -H "Authorization: Bearer $TOKEN" \
"https://api.redditapis.com/api/reddit/schedule?status=scheduled"Cancel
/api/reddit/schedule/cancelFree| Field | Type | Required | Description |
|---|---|---|---|
id | string | Yes | The action id from POST /api/reddit/schedule |
Returns cancelled: true and the action when it had not run yet. An action that
already ran, or is running, returns cancelled: false with its current
status, and nothing changes. An id that is not on your account is a 404.
curl -X POST -H "Authorization: Bearer $TOKEN" -H "Content-Type: application/json" \
"https://api.redditapis.com/api/reddit/schedule/cancel" \
-d '{"id": "5f0c2a8e-8f3e-4c0b-9d0a-2b7d1c6e9a11"}'Action Fields
| Field | Type | Notes |
|---|---|---|
id | string | The action id |
type | string | post or comment |
status | string | scheduled, running, succeeded, failed or cancelled |
run_at | string | When it runs (ISO 8601, UTC) |
request | object | What it will send, exactly as stored |
created_at | string | When it was scheduled |
finished_at | string | null | When it ran or was cancelled |
result | object | null | What the live route returned, when the run succeeded |
error | object | null | code, message and http_status, when the run failed |
billed | boolean | null | true for a run that succeeded, false for one that failed with an answer or was cancelled, null when the outcome was never confirmed |
Errors
| Status | Code | When |
|---|---|---|
400 | invalid_request | A missing or invalid field; field names it |
400 | SESSION_FIELDS_NOT_STORED | The body carried a cookie or a proxy |
400 | RUN_AT_TOO_SOON / RUN_AT_TOO_FAR | run_at is under 60 seconds or over 30 days ahead |
400 | SESSION_NOT_CONNECTED | No stored Reddit session is connected, or Reddit logged it out |
404 | NOT_FOUND | Cancel: no action with that id on your account |
409 | SCHEDULE_LIMIT_REACHED | 100 actions are already waiting on this account |
502 / 503 | SCHEDULE_STORE_UNAVAILABLE | Scheduling is temporarily unavailable on our side |
503 | SESSION_STORE_UNCONFIGURED | Stored sessions are not available on this server, so nothing can be scheduled |
Failed runs carry the live route's own code in error.code, for example
NOT_ALLOWED_IN_SUBREDDIT, REDDIT_RATELIMIT or CAPTCHA_REQUIRED from
submit, and HTTP_402 when the account was out of credits
when it ran. A run stopped by CAPTCHA_REQUIRED says so in plain words in
error.message: Reddit wanted a captcha first, so nothing was posted.
Independent third-party API for developers and researchers. Not affiliated with, endorsed by, or sponsored by Reddit, Inc.
Create Post
Create a Reddit text, link, poll, image or video post through a REST call. Handles session cookies, CSRF tokens, media upload and subreddit rule rejections, and refuses unsupported post kinds by name instead of silently downgrading them.
CommentHot
Post a comment on any Reddit thread programmatically. Handles reCAPTCHA, CSRF tokens, and rich-text encoding for you, just send post URL and text.
