Channels

List, quota, connect, and disconnect social accounts.

Base: https://socioi.com/api/public/v1

MethodPathDescription
GET/channelsList connected channels
GET/channels/quota{ plan, used, limit, remaining }
GET/channels/connect/:provider{ url } — start OAuth in a browser
POST/channels/connect/blueskyConnect Bluesky with { handle, appPassword } (optional pdsUrl)
POST/channels/connect/lemmyConnect Lemmy with { username, password } (optional instance, totp)
POST/channels/connect/nostrConnect Nostr with { privateKey } (64-char hex or nsec…)
POST/channels/connect/devtoConnect Dev.to with { apiKey }
POST/channels/connect/hashnodeConnect Hashnode with { apiKey } (Personal Access Token)
POST/channels/connect/listmonkConnect ListMonk with { url, username, password }
POST/channels/connect/wordpressConnect WordPress with { url, username, password } (Application Password)
POST/channels/connect/moltbookConnect Moltbook with { apiKey } (agent API key)
POST/channels/connect/farcaster/startStart Farcaster Neynar signer → { signerUuid, approvalUrl, state }
POST/channels/connect/farcaster/statusPoll { signerUuid, state } until approved (connects channel)
POST/channels/connect/telegram/startStart Telegram bot connect → { ticket, word, botLink, command }
GET/channels/connect/telegram/pollPoll until chat sends /connect WORD (?ticket=&offset=)
GET/channels/connect/mastodonMastodon default instance (mastodon.social) → { url }
POST/channels/connect/mastodon/startMastodon custom instance: { instance }{ url }
POST/channels/connect/discord/webhookDiscord: { webhookUrl, label? }
GET/channels/connect/discord/botDiscord bot OAuth { url } (requires server Discord app)
GET/channels/connect/slackSlack OAuth { url } (requires Slack configured on the server)
POST/channels/connect/slack/webhookSlack Incoming Webhook: { webhookUrl, label? }
DELETE/channels/:idDisconnect
GET/is-connectedValidate credential

Connect providers

facebook, instagram-business, instagram-standalone, threads, tiktok, linkedin, linkedin-page, pinterest, dribbble, kick, twitch, whop, mewe, tumblr, x, youtube, google-business

Bluesky is not OAuth — use POST /channels/connect/bluesky with an app password. Optional pdsUrl for a non-default PDS.

Lemmy is not OAuth — use POST /channels/connect/lemmy with username/password (default instance lemmy.world).

Nostr is not OAuth — use POST /channels/connect/nostr with { "privateKey": "…" } (64-char hex or nsec… bech32). Key is stored encrypted and used to sign kind-1 events to public relays.

Dev.to is not OAuth — use POST /channels/connect/devto with { "apiKey": "…" } from Settings → Extensions.

Hashnode is not OAuth — use POST /channels/connect/hashnode with { "apiKey": "…" } from Settings → Developer. Publishing via GraphQL requires a Pro publication.

ListMonk is not OAuth — use POST /channels/connect/listmonk with { "url": "https://…", "username": "…", "password": "…" } (API user from Admin → Users). Publishing creates a campaign and sets status to running.

WordPress is not OAuth — use POST /channels/connect/wordpress with { "url": "https://…", "username": "…", "password": "…" } (Application Password, not the account password). Publishing uses POST /wp-json/wp/v2/posts (or pages). Optional settings: title, type/postType (post|page), status (publish|draft|pending). First image uploads as featured media.

Moltbook is not OAuth — use POST /channels/connect/moltbook with { "apiKey": "…" } (agent key from moltbook.com). Publishing posts to a submolt (default general).

Farcaster uses Neynar managed signers: POST /channels/connect/farcaster/start, open approvalUrl in Warpcast, then poll POST /channels/connect/farcaster/status with { signerUuid, state } until connected: true.

Telegram uses a shared BotFather bot: POST /channels/connect/telegram/start → add the bot to a channel/group → send command (/connect WORD) → poll GET /channels/connect/telegram/poll?ticket=. Requires server TELEGRAM_TOKEN + TELEGRAM_BOT_NAME.

Mastodon: GET /channels/connect/mastodon → authorize on mastodon.social. Custom instance: POST /channels/connect/mastodon/start with { "instance": "…" }.

Discord bot: GET /channels/connect/discord/bot. Optional webhook: POST /channels/connect/discord/webhook.

Slack OAuth: GET /channels/connect/slack → complete provider consent (may finish with a channel picker in the app). Optional webhook: POST /channels/connect/slack/webhook.

Example

curl -H "Authorization: si_live_YOUR_KEY" \
  https://socioi.com/api/public/v1/channels