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

# List Slack channels for the channel picker

`GET /v1/messaging/connect/slack`

## Request

- Base URL: `https://apihub.co.il`
- URL: `https://apihub.co.il/v1/messaging/connect/slack`
- Auth: HTTP bearer

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.


**Billing:** Read (free unless it says otherwise) · **Rate limit:** 120/min

## Query parameters

- `scopes` string: Start-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.
- `accountId` string: Existing active Slack account (yours or a team member's) whose workspace token is reused.
- `redirect_url` string, uri: Start-OAuth mode only: where to send the user after the connect completes. `redirectUrl` is accepted as an alias.
- `pendingDataToken` string: Nonce from the OAuth redirect (first connect).

## Headers

- `Idempotency-Key` string
- `X-Tag` string

## Response `200`

Completed

- object
  - `id` string: Execution id — stable across internal retries; use it with GET /v1/executions/{id}
  - `status` 'pending' | 'processing' | 'completed' | 'partial' | 'failed' | 'cancelled' | 'timeout'
  - `operation` string
  - `tag` string, nullable: Your X-Tag, if sent
  - `created_at` string, date-time
  - `completed_at` string, date-time, nullable
  - `output` union
    - object: Operation result (see each operation). While a Studio render is processing: `stage` (queued · transcribing · downloading · preparing · cleaning_voice · mixing_audio · rendering · finishing), `phase` (the engine's: download · prepare · voice · audio · encode · qa · upload, or null), `progress` (a percent, 0–100) and `progress_fraction` (0–1), `eta_seconds` (seconds left, never below 0) and `estimate_seconds`
      - `team` object, required
        - `id` string: Slack workspace (team) id
        - `icon` string, uri, nullable: Workspace icon URL
        - `name` string, nullable
      - `channels` object[], required
        - `id` string, required: Channel id (C... or G...), the value to send as channelId on POST
        - `name` string, required
        - `isMember` boolean, required: Whether the Zernio bot is already a member of the channel
        - `isPrivate` boolean, required
    - object: Operation result (see each operation). While a Studio render is processing: `stage` (queued · transcribing · downloading · preparing · cleaning_voice · mixing_audio · rendering · finishing), `phase` (the engine's: download · prepare · voice · audio · encode · qa · upload, or null), `progress` (a percent, 0–100) and `progress_fraction` (0–1), `eta_seconds` (seconds left, never below 0) and `estimate_seconds`
      - `state` string, required
      - `authUrl` string, uri, required
  - `error` string, nullable
  - `usage` object
    - `credits_charged` number, nullable
    - `credits_reserved` number
    - `estimated_credits` number
    - `cost_source` 'provider_reported' | 'calculated' | 'estimated' | 'null', nullable
    - `provider_usage` object, nullable: Normalised consumption, e.g. { VIDEO_SECOND: 22.4 }
  - `balance` object
    - `available` number
    - `reserved` number

## Other responses

- `400`: Invalid input
- `402`: Insufficient credits / project budget
- `404`: Resource not found (or not yours)
- `429`: Rate limited
- `503`: Service temporarily paused

---

[API](https://skmtc.dev/apihub/apis/apihub-one-api-for-chat-image-video-ai.md) · [All operations](https://skmtc.dev/apihub/apis/apihub-one-api-for-chat-image-video-ai/llms.txt) · [OpenAPI document](https://skmtc.dev/apihub/apis/apihub-one-api-for-chat-image-video-ai/revisions/a8caa42835ce?raw)
