> ## Documentation Index
> Fetch the complete documentation index at: https://inkbox.ai/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Conversations

> Discover accessible Slack conversations, open direct messages, and read conversation details

All paths on this page are relative to `https://inkbox.ai/api/v1/slack`. Every request requires a visible `connection_id` UUID, an active identity, and a connected workspace.

## List conversations

```text theme={null}
GET /connections/{connection_id}/conversations
```

List conversations the bot is a member of through the selected workspace connection. This is a live membership list, not a directory of every public channel or a workspace archive. Accessible Slack Connect conversations are included. To join another supported public channel, supply its known conversation ID to [Join conversation](/docs/api/slack/operations#join-or-leave-a-conversation). Private channels require an invitation.

Archived channels are not listed. Use [Get conversation](#get-conversation) with a known ID to inspect one, subject to the connection's current access.

| Query parameter | Type | Default | Meaning |
| :- | :- | :- | :- |
| `limit` | integer | `100` | Page size, `1`–`200` |
| `cursor` | string | Omitted | Cursor from the previous response, up to 2048 characters |

### Response (200)

```json theme={null}
{
  "conversations": [
    {
      "id": "C0123456789",
      "name": "project-updates",
      "is_channel": true,
      "is_private": false,
      "is_member": true
    }
  ],
  "next_cursor": null
}
```

`conversations` contains Slack conversation objects with supported fields when available. `next_cursor` is `null` when there is no next cursor. A short or empty page does not replace cursor handling; filtering and Slack limits can reduce the number returned.

## Open a direct message

```text theme={null}
POST /connections/{connection_id}/conversations
```

Opens or resumes a DM or group DM in the selected workspace. It does not join a channel.

| Field | Type | Required | Meaning |
| :- | :- | :- | :- |
| `user_ids` | string array | Yes | One to eight unique Slack user IDs; each starts with `U` or `W`, followed by uppercase letters or digits, up to 64 characters total |

```json theme={null}
{
  "user_ids": ["U0123456789"]
}
```

Returns `200` with a conversation object, not a wrapper. Save its `id` for reads and sends. Slack decides whether the bot can open the requested conversation. Invalid user lists return `422`.

## Get conversation

```text theme={null}
GET /connections/{connection_id}/conversations/{conversation_id}
```

`conversation_id` starts with `C`, `D`, or `G`, followed by uppercase letters or digits, up to 64 characters total. Returns `200` with a conversation object.

Supported fields include `id`, `name`, conversation-type flags (`is_channel`, `is_group`, `is_im`, `is_mpim`), visibility and membership flags, `user`, `created`, `num_members`, `topic`, and `purpose`. Fields can be absent when Slack does not return them. Topic and purpose objects can include `value`, `creator`, and `last_set`.

You must add the bot to channels before using their history or sending messages there. Private-channel membership requires an authorized invitation. A listed conversation does not guarantee that every operation is permitted.

An inaccessible conversation can return `403` or `404`. Slack Connect does not bypass membership or workspace restrictions. See [common errors](/docs/api/slack#common-errors-and-limits).

## Next steps

* [Read history and thread replies](/docs/api/slack/messages#list-messages)
* [Send a message](/docs/api/slack/messages#send-message)
* [List conversation members](/docs/api/slack/users#list-conversation-members)
* [Join or leave a conversation](/docs/api/slack/operations#join-or-leave-a-conversation)
* [Subscribe to channel, member, and pin events](/docs/api/slack/webhooks)
