List and connect
See connected accounts and start OAuth (no token secrets).
Social account routes need Bearer + X-Workspace-Id. List responses never include OAuth access tokens.
List accounts
GET /api/social-accounts
Also available as GET /api/workspaces/:id/social-accounts.
Each item includes id, provider, username / display name, avatar, expiry, and safe metadata.
Disconnect
DELETE /api/social-accounts/:id
Admins and owners only (canManageSocialAccounts). Members get 403.
Start OAuth
GET /api/social-accounts/oauth/:provider
Providers: x, linkedin, linkedin-business, threads, youtube, pinterest, instagram, reddit.
Returns { redirect } with the provider authorize URL. Pass ?redirect=1 to receive an HTTP 302 instead. Admins and owners only.
Pinterest alias: GET /api/social-accounts/oauth/pinterest/start.
Reddit eligibility helper (permissions only): GET /api/social-accounts/oauth/reddit/eligibility.
OAuth callbacks are browser redirects handled by DunSocial. You do not call them from your integration.
Bluesky (app password)
POST /api/social-accounts/connect/bluesky
{
"handle": "you.bsky.social",
"appPassword": "xxxx-xxxx-xxxx-xxxx"
}Returns { socialAccountId, profile }.
Helpers: GET /api/social-accounts/bluesky/profile, POST .../bluesky/profile/refresh with { "socialAccountId": "..." }.
Composer helpers
Useful read-only helpers while composing:
| Path | Purpose |
|---|---|
GET .../pinterest/boards |
Boards for a Pinterest account |
GET .../reddit/flair-options?subreddit= |
Flair options |
GET .../reddit/post-requirements |
Subreddit rules summary |
GET .../x/heatmap |
Best-time heatmap data |
Prefer /api/posts/* for publishing rather than any platform-specific publish shortcuts.