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
- In Accounts, choose the network and complete its approval screen.
- Check that the new channel shows its handle and a connected state.
- Create a text-only draft, select only that channel, and publish it.
- 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.