---
title: "List Slack channels for the channel picker"
method: GET
path: "/v1/connect/slack"
tags: ["Connect"]
---

# List Slack channels for the channel picker

`GET /v1/connect/slack`

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.

## Query parameters

- `profileId` string, required
- `pendingDataToken` string
- `accountId` string
- `redirect_url` string, uri

## Response `200`

Channel list (picker mode), or the OAuth URL when neither `pendingDataToken` nor `accountId` is sent

- union
  - object
    - `team` object, required
      - `id` string — Slack workspace (team) id
      - `name` string, nullable
      - `icon` string, uri, nullable — Workspace icon URL
    - `channels` object[], required
      - `id` string, required — Channel id (C... or G...), the value to send as channelId on POST
      - `name` string, required
      - `isPrivate` boolean, required
      - `isMember` boolean, required — Whether the Zernio bot is already a member of the channel
  - object
    - `authUrl` string, uri, required
    - `state` string, required

## Other responses

- `400` — Invalid profileId or accountId format, or pendingDataToken invalid, expired or issued for another profile (code: invalid_field_value)
- `401` — Unauthorized
- `403` — No access to the profile, or Slack connections are temporarily unavailable (code: feature_not_available)
- `404` — Profile not found (start-OAuth mode), or no active Slack account with that accountId for this user or their team (code: account_not_found)

## Changes

- **2026-09-08** `d7a8fa118ef0` — 1 info
  - endpoint added

[Change history](https://skmtc.dev/zernio/apis/zernio-api/changes/v1/connect/slack/get.md)

---

[API](https://skmtc.dev/zernio/apis/zernio-api.md) · [All operations](https://skmtc.dev/zernio/apis/zernio-api/llms.txt) · [OpenAPI document](https://skmtc.dev/zernio/apis/zernio-api/revisions/339f59df69dd?raw)
