Sign in

Connect

Connect social accounts

Every channel belongs to one workspace. Add a channel in App → Accounts, then make a small test post before relying on a scheduled campaign.

Choose the connection type

OAuth: LinkedIn, X, Meta, Instagram, Threads, YouTube, Reddit, and Slack open the provider approval screen. Your instance operator must add that provider’s client ID and secret first.

Token or app password: some networks ask for credentials in Accounts. Use a dedicated app password or token when the provider offers one; never enter a personal password.

OAuth setup example

For an instance at https://social.example.com with an API at https://api.example.com, register this callback in the provider’s developer portal:

https://api.example.com/v1/accounts/oauth/linkedin/callback

Replace linkedin with the network slug: x, linkedin-page, facebook, instagram, threads, youtube, or slack. Add the matching client ID and secret to the API Worker as secrets, then deploy again.

pnpm --filter @duskly/api exec wrangler secret put LINKEDIN_CLIENT_ID --config wrangler.deploy.json
pnpm --filter @duskly/api exec wrangler secret put LINKEDIN_CLIENT_SECRET --config wrangler.deploy.json
pnpm deploy:api

Use the variable names in apps/api/.dev.vars.example for each provider. Leave unused provider credentials unset.

Confirm it works

  1. In Accounts, choose the network and complete its approval screen.
  2. Check that the new channel shows its handle and a connected state.
  3. Create a text-only draft, select only that channel, and publish it.
  4. Open Delivery updates and check the destination itself. A queued entry is not confirmation that the provider accepted the post.

Reconnect instead of duplicating. When a provider token expires, reconnect the existing channel first. Before retrying a failed delivery, check the destination so a late provider response does not create a duplicate.