staqlydocs

Reddit

Publish text, link, picture and video posts to a subreddit with a title, flair, NSFW and spoiler marks, and comments. What to register with Reddit.

Edit on GitHub

Staqly publishes to Reddit as the account that connects: it signs in with OAuth 2.0 (a permanent sign-in), uploads a picture or video to Reddit's media storage when the post has one, and posts with POST /api/submit to the subreddit the post names. A published target links to the post on reddit.com.

What you need

A Reddit app of type web app, registered once per server. Its keys go into the server's environment (.env), the same way locally and in the cloud; a workspace can also use its own app (see Developer apps).

Create the app

Since November 2025 Reddit reviews every new use of its API (the Responsible Builder Policy): request access first at reddit.com/prefs/apps and wait for Reddit's approval before people connect. Then create another app:

FieldValue
Typeweb app
redirect uriyour dashboard's /channels/callback/reddit, for example http://localhost:8080/channels/callback/reddit locally or https://staqly.example.com/channels/callback/reddit

The app's id is the string under its name; the secret is next to it.

Give staqly the keys

Put them in the server's environment and restart it:

.env
PROVIDER_REDDIT_CLIENT_ID=your-app-id
PROVIDER_REDDIT_CLIENT_SECRET=your-app-secret
  • Docker: docker run ... --env-file .env ghcr.io/staqly/staqly:latest, or -e PROVIDER_REDDIT_CLIENT_ID=....
  • Binary: export both in your shell, then run staqly serve or staqly service install (the service keeps PROVIDER_* settings).

Until both are set, Reddit shows as soon in Channels → Add channel. PROVIDER_REDDIT_ENABLED=false hides it altogether.

Connect the account

Connect with Reddit opens reddit.com, where the person signs in and allows the app for good (duration=permanent). Staqly asks for these scopes:

ScopeWhy
identityRead the account's name and picture
submitPublish posts and comments
readFind a picture or video post once Reddit has made it
flairLook up a subreddit's flairs by name

The channel shows u/name. Reddit's sign-in does not run out: staqly renews the hour-long access on its own until the person removes the app on reddit.com.

Limits

Titlerequired, up to 300 characters
Textup to 40,000 characters, for text posts
Mediaone picture or one video

A Reddit post is one kind: text, link (the title links to an address) or picture/video. Link, picture and video posts have a title only, so leave the text empty for a Reddit channel (or put it in a comment). A video goes out with a plain dark cover picture, which Reddit shows before it plays.

Whether a subreddit takes a kind of post is the subreddit's rule: one that only takes text refuses a picture, and the target fails with Reddit's reason.

Settings per post

SettingWhat it does
Title (title)The post's title, required
Subreddit (subreddit)Where it goes: r/running, running or the subreddit's link
Link (link)Makes it a link post to this address
Flair (flair)The subreddit's flair, by the name the subreddit shows; required where the subreddit asks for one
Mark as NSFW (nsfw), Mark as spoiler (spoiler)Reddit's marks

Over the API: {"title": "Long run", "subreddit": "r/running", "flair": "Race report"} in the target's settings. A flair name the subreddit doesn't have fails the target with the names it has.

Comments

A post's thread goes out as comments, each under the one before, after their delays. Comments take text only.

For a picture or video post Reddit answers before the post exists; staqly waits for it to show up among the account's posts (about a minute at most). If it doesn't in time, the target is still published, linking to the account's posts, but its comments can't be sent.

When publishing fails

Reddit saysStaqly does
The sign-in was revoked (401)Marks the channel Needs reconnect and fails the target; reconnect it from the row's menu
Rate limit (429, or "you are doing that too much"), Reddit unavailable (5xx)Retries through the job queue (after 1, 5, then 15 minutes)
No such subreddit, a missing flair, a kind of post the subreddit doesn't take, a banned account (403)Fails the target with Reddit's reason; retrying would not help, so it does not

Reddit has no way to send a post only once. When staqly sent a post but its answer never came, it looks among the account's latest posts for one with the same title in that subreddit: if it is there, that is the post; if not, the target fails with "may have published" instead of trying again. Check the subreddit before you post it again.

On this page