User Manual · 03 · Connecting Platforms
WholeReach — Automated Marketing System

Connecting Social Platforms

Every network the hub can post to, what each one costs, what it needs to connect, and the exact steps to wire it up.

Connecting a social account sounds like the hard part. It isn't. Posting is a solved problem — the system publishes to 30+ networks from one place. What actually takes effort is a one-time setup per platform, and only a couple of platforms make you wait. This page maps that landscape so you know what each connection costs, what it needs, and in what order to tackle them.

For the exact steps, see Playbook 1. This page is the landscape — what each connection is, why it works the way it does, what it costs, and how long it takes. For the literal click-by-click and copy-paste commands to connect an account, go to Playbook 1 — Connect a social account. Read this page to decide what and in what order; use the playbook to actually do it.

Status & cost matrix

Here is every supported platform at a glance: whether it's connected today, what a connection requires, and what it costs to actually post. Two facts to anchor on before you read the details — the whole system runs on a flat $24/month hub, and only X charges per post. Everything else on this list is free to publish to.

PlatformStatusWhat connecting needsCost to post
Bluesky
walhus.bsky.social
connected An app-password. No developer app. Free, uncapped
X / Twitter
@springnet
connected A developer app at console.x.com (OAuth 1.0a, Read+Write). Paid — ~1.5¢/post, ~20¢ with a link
Mastodon connect pending App already registered; just connect the account in the hub UI. Free
LinkedIn needs review A developer app plus app review (Community Management API). Free
Facebook + Instagram
(Meta)
needs review One Meta app for both, plus business verification + app review (multi-day). Free
Also supported
Threads, Pinterest, TikTok, YouTube, Reddit
available Each needs its own developer app before it can connect. Free to post
How to read the status pills. connected means it's live and publishing right now. needs review / pending means the plumbing is built but a one-time gate stands between you and the first post — a platform review, or a single click in the UI. available means the network is supported but nobody has set up its developer app yet.

The real gate is never posting

It's worth saying plainly, because it reframes the whole page: posting is not the hard part. Once an account is connected, publishing to it is instant, reliable, and — for everything except X — free. The engine already drafts finished posts every night; handing one to a connected account is the easy last step.

So what is the cost? For every platform, it's a one-time setup. For the two simplest (Bluesky, Mastodon) that setup is a minute of clicking. For the OAuth platforms (X, LinkedIn, Meta) it's registering a small developer app — and for LinkedIn and Meta, submitting that app for review before it's allowed to post on your behalf.

App review is where the calendar, not your effort, becomes the bottleneck. You fill out a form describing what your app does, and then you wait for a human on the platform's side to approve it — potentially several days for Meta. That's the entire reason the recommended order below tells you to start Meta and LinkedIn review early: the free, live platforms carry you while the gated ones sit in someone else's queue.

The one-line summary. The lasting cost of a connection is the developer app you register once. For Meta and LinkedIn, add a review wait you don't control. After that, posting is free and instant forever — X being the single pay-per-post exception.

The two kinds of connection

Every platform on the list connects one of two ways. Knowing which is which tells you immediately how much work a connection will be.

Type 1 — App-password (the easy kind)

Some networks let you mint a scoped password specifically for third-party apps, right inside your normal account settings. You paste that password into the hub and you're done — no developer account, no review, no OAuth handshake. Bluesky and Mastodon work this way. This is why Bluesky was the first platform live and why Mastodon is only one click from connected.

An app-password is safer than your real password: it's scoped to posting, you can see it in your account's list of active app-passwords, and you can revoke it at any time without changing your main login.

Type 2 — Developer app / OAuth (the involved kind)

X, LinkedIn, and Meta (Facebook + Instagram) require you to register a developer application on the platform's developer console. That app gets a set of keys (a client ID and secret), which get installed on the hub. The account then authorizes that app through an OAuth redirect — you click "connect," the platform asks "do you allow this app to post for you?", you say yes, and the platform hands the hub a token.

The universal callback pattern

Every OAuth platform needs one shared piece of configuration: a callback (redirect) URL — the address the platform sends you back to after you approve. In this system it always follows the same shape:

https://postiz.wholetech.com/integrations/social/# <provider>

So X uses …/integrations/social/x, and every other provider swaps in its own name. Memorize the shape and you'll never get a callback-mismatch error: whatever the provider, the callback is https://postiz.wholetech.com/integrations/social/<provider>. (Note the https — the login cookie won't stick over plain http, so the callback must be secure too.)

Bluesky — the free workhorse

connected as walhus.bsky.social. Bluesky is the model of how easy a connection should be, and it's the free channel that keeps the network posting no matter what.

What it needs: an app-password minted in Bluesky's settings. No developer app, no review, no OAuth. Bluesky runs on the open atproto protocol, which is exactly why third-party publishing is so frictionless here.

Why it matters: Bluesky is free and uncapped. When X hits its daily paid cap or its credit runs dry, Bluesky just keeps going — so the network never goes dark. It's the safety floor under the whole publishing schedule.

Quirk / good news: there's essentially no gotcha. This is the "if only they were all like this" platform.

Cost: free. Review timeline: none. Steps: Playbook 1.

X / Twitter — the only paid channel

connected as @springnet. X is fully live, and it's the one platform where posting costs money — so it's worth understanding well.

What it needs: a developer app at console.x.com, using OAuth 1.0a with Read + Write permission, and the callback https://postiz.wholetech.com/integrations/social/x. The app's keys are installed on the hub by an installer script (see the secrets section below).

The big quirk: X closed its free posting tier in February 2026. Posting through the API now costs per-post (details in the X-billing section). This is the reason the system treats X specially with a daily cap and a kill switch.

Cost: ~1.5¢ per post, ~20¢ if the post contains a link. A $25 credit is loaded on the account. Review timeline: none in the app-review sense — the gate here is billing, not a human reviewer. Steps: Playbook 1; spend tracking in Playbook 13 (X spend).

Mastodon — one click from live

connect pending. The developer app is already registered on the hub; all that remains is connecting an account.

What it needs: just the final connect step in the hub UI. Because the app registration is already done, this is the app-password-style easy path, not a from-scratch OAuth build.

Why it's worth turning on: it's free, it's federated (your posts reach the wider fediverse), and the hard part is already finished. This is low-hanging fruit — a free channel sitting one click away from adding to the rotation.

Cost: free. Review timeline: none. Steps: Playbook 1 (the "connect in the hub UI" path).

LinkedIn — free, but gated by review

needs review. LinkedIn is free to post to, but it's one of the two platforms where a human review stands between setup and the first post.

What it needs: a LinkedIn developer app requesting the Community Management API, and then app review for that permission. Until the review is approved, the app can't post on your behalf. Keys are installed on the hub with the LinkedIn installer script.

The quirk: the Community Management API is a gated permission — you can't just switch it on. You describe your use case, submit, and wait for approval. That's why you start it early rather than the night you want to go live.

Cost: free. Review timeline: a review wait you don't control — begin it well ahead. Steps: Playbook 1.

Meta — Facebook + Instagram in one app

needs review. Meta is the most involved connection, but it's efficient: one Meta app covers both Facebook and Instagram, so you do the work once and light up two networks.

What it needs: a single Meta developer app, business verification, and app review — a multi-day process. Meta also requires a published privacy policy and a data-deletion path; those already exist at automarketingengine.com/privacy/ (with the #data-deletion section) to satisfy the requirement. Keys are installed on the hub with the Meta installer script.

The quirk: business verification plus app review is the longest wait of any platform here, and it's entirely on Meta's clock. The upside is the two-for-one payoff — Facebook and Instagram both come online from the same approved app.

Cost: free to post. Review timeline: multi-day; start it first. Steps: Playbook 1. See also the privacy commitments on Security & Compliance.

X billing, in depth — and how to run 100% free

X is the only place this system spends money on posting, so it gets its own guardrails. Here's the full picture.

~1.5¢
per plain post
~20¢
per post with a link
$25
credit loaded
3
paid X posts/day cap

Why it costs anything. X closed its free posting tier in February 2026. Publishing through the API is now metered — roughly a penny and a half for a plain post, and about twenty cents once the post carries a link (links are priced higher). A $25 credit is loaded on the account to cover the early running.

The daily cap. The publisher enforces a hard limit — X_DAILY_CAP = 3 in publish_due.py. No matter how many posts are due, at most three paid X posts go out in a day. This is a deliberate spend ceiling, not a limitation: it makes auto-fire safe to leave running. If X simply stops posting on a given day, that's expected — the cap was reached or the credit ran out — and Bluesky keeps publishing regardless.

How to run 100% free. X is the only paid channel. Set a tenant's channels to the free networks — e.g. ["bluesky"], and add Mastodon/LinkedIn/Meta as they come online — and the entire operation costs nothing to publish, forever. You lose no capability except reach on X specifically. For the owner network, the current mix is ["x","bluesky"]; drop "x" to go free.

To watch what X is actually spending and manage the cap, see Playbook 13 — Track X spend. To freeze all publishing instantly (the network-wide kill switch), see Playbook 11 — Stop everything.

The secrets model — keys never pass through chat

Every OAuth platform's keys are sensitive: whoever holds them can post as you. So the system is built so that keys are only ever entered by the owner, in the owner's own terminal — never typed into a chat window, never handed to an assistant, never pasted where they'd be logged.

How installation works

Each OAuth platform has a dedicated installer script on the hub, and you run it over SSH so the prompt appears in your terminal:

ssh -t root@64.227.29.192 /opt/postiz/set-x-keys.sh
ssh -t root@64.227.29.192 /opt/postiz/set-linkedin-keys.sh
ssh -t root@64.227.29.192 /opt/postiz/set-meta-keys.sh

The script prompts you for the platform's keys and writes them into a single secrets file:

/opt/postiz/social.env   # chmod 600, root-only — readable only by root
Never paste platform keys into chat. The installers exist precisely so keys go straight from your terminal into a 600-permission file and nowhere else. If a key is ever exposed, rotate it at the platform and re-run that platform's installer — the fix is a one-liner, not a rebuild.

Where the live tokens live. After a successful OAuth connect, the resulting access token is stored in the hub's database (the Integration table), not in code. That keeps credentials out of the repositories and centralizes them behind the hub's SSH-key-only access. More on this in Security & Compliance.

Recommended connection order

The trick is to overlap the waiting with the working. The gated platforms sit in someone else's review queue for days; the free ones can be live in minutes. So kick off the slow ones first, then bank quick wins while they process.

day one, first thing
Start Meta & LinkedIn review. These have the longest waits (Meta's business verification + app review runs multi-day). Submit them before anything else so the clock starts while you do the rest.
same session, minutes
Confirm the free live channels. Bluesky is already connected and uncapped. Finish Mastodon — its app is registered, so it's a single connect click. Now you have a free, working rotation immediately.
when you want reach on X
Turn on X deliberately. It's the only paid channel, so enable it once you're comfortable with the cap and the $25 credit. It's already connected; adding "x" to a tenant's channels is all it takes.
days later, as they clear
Light up Meta & LinkedIn on approval. When the reviews come back approved, run each platform's installer and connect. Facebook and Instagram both come online from the one Meta app.
The principle in one line. Free channels go live now; gated channels start their review clock first. You're never idle waiting on a platform — the network is already publishing on the free channels while Meta and LinkedIn work through their queues.

Ready to connect one? Every step, command, and screenshot lives in Playbook 1 — Connect a social account. To see where a connected account fits into the nightly flow, read How It Works; to manage which channels a tenant posts to, see Playbook 4 — Set a tenant's channels.