List Slack channels for the channel picker
Serves the channel picker of the Slack connect flow. Slack's OAuth installs the bot into a
workspace, not a channel, so after the redirect the caller lists the workspace's channels
here and finalizes one with POST /v1/connect/slack. Served by a dedicated route that
shadows GET /v1/connect/{platform} for slack.
Send exactly one of pendingDataToken (first connect: the nonce from the OAuth redirect,
bound to the same profileId) or accountId (add another channel to a workspace already
connected: the existing Slack account's workspace token is reused, no re-OAuth). With
neither, the endpoint behaves like GET /v1/connect/{platform} and returns authUrl and
state to start the OAuth flow.
Channels are read live from Slack (conversations.list, public and private, archived
excluded, up to 2,000). isMember says whether the Zernio bot is already in the channel:
a public channel is joined automatically on finalize, a private one must be invited
(/invite @Zernio) first.
Authorization
bearerAuth API key authentication: send your Zernio API key in the Authorization header, prefixed with Bearer.
In: header
Query Parameters
Zernio profile the channel account will belong to. Must match the profile the OAuth flow was started on when pendingDataToken is used.
Nonce from the OAuth redirect (first connect).
16 <= lengthExisting active Slack account (yours or a team member's) whose workspace token is reused.
Start-OAuth mode only: where to send the user after the connect completes. redirectUrl is accepted as an alias.
uriStart-OAuth mode only. Comma-separated permission areas to request instead of the full Slack scope set, with the same semantics as scopes on GET /v1/connect/{platform}: posting installs the bot with the channel scopes it needs to post, messaging adds the history, DM and reaction scopes the inbox reads; analytics, comments and ads add nothing on Slack. Omit it to request everything.
Response Body
application/json
application/json
import Zernio from '@zernio/node';const zernio = new Zernio({ apiKey: process.env.ZERNIO_API_KEY });const { data } = await zernio.connect.listSlackChannels({ query: { profileId: 'profile_abc123', },});console.log(data);{ "team": { "id": "T0123ABCD", "name": "Acme", "icon": "https://avatars.slack-edge.com/acme_88.png" }, "channels": [ { "id": "C0123ABCD", "name": "general", "isPrivate": false, "isMember": true }, { "id": "G0456EFGH", "name": "leadership", "isPrivate": true, "isMember": false } ]}Connect a Discord channel
Finalize a Discord connect by binding channels to a profile. Served by a dedicated route, so it is not reachable through POST /v1/connect/{platform}. One connected account per channel: send channelIds to connect several channels of the server at once, or repeat the call with a different channelId.
Connect a Slack channel
Finalize a Slack connect by creating the per-channel account. Served by a dedicated route, so it is not reachable through POST /v1/connect/{platform}. Send pendingDataToken for a first connect (the nonce from the OAuth redirect) or accountId to add another channel to a workspace already connected.