# Slack tools (https://www.shipfox.io/docs/integrations/slack/tools)

Description: Look up the Slack tools, selectors, permissions, inputs, and outputs available to tool steps and agent steps.

This reference lists the shipped Slack tool catalog. See the [Slack
overview](https://www.shipfox.io/docs/integrations/slack) for authentication and setup.

## Selectors [#selectors]

A tool step names one standalone tool id, such as `send_message`, in its `tool`
field. An agent step lists standalone selectors in its `integrations:` block.
For the field contracts, see [Tool step
fields](https://www.shipfox.io/docs/reference/workflow-schema#tool-step-fields) and [Agent integration
fields](https://www.shipfox.io/docs/reference/workflow-schema#agent-integration-fields).

## Tool catalog [#tool-catalog]

The catalog uses the Slack bot scopes required by each tool. Read tools inspect
workspace data. Write tools change messages, reactions, or canvases.

### tools

#### `read_channel`

Read messages from a Slack channel in reverse chronological order (newest first). Reading direct message history needs the ID of that conversation, not the ID of the user on the other side.

**Sensitivity:** read.

**Sensitive:** No.

**Required permissions:** `read`

**Selector tokens:** [`read_channel`](https://www.shipfox.io/docs/integrations/slack/tools#read_channel)

##### Input

| Field | Type | Required | Description |
|---|---|---|---|
| `channel_id` | string | Required | Channel, private group, or direct message conversation ID, such as C0ABC12345 or D0ABC12345. A user ID is not accepted here |
| `oldest` | string | Optional | Start of the time range, as a Slack timestamp |
| `latest` | string | Optional | End of the time range, as a Slack timestamp |
| `limit` | integer | Optional | Messages to return, 1 to 100 (default 100) |
| `cursor` | string | Optional | Pagination cursor from a previous request |

#### `read_thread`

Read a Slack thread: the parent message and all of its replies. Requires the channel ID and the timestamp of the parent message.

**Sensitivity:** read.

**Sensitive:** No.

**Required permissions:** `read`

**Selector tokens:** [`read_thread`](https://www.shipfox.io/docs/integrations/slack/tools#read_thread)

##### Input

| Field | Type | Required | Description |
|---|---|---|---|
| `channel_id` | string | Required | Channel, private group, or direct message conversation ID, such as C0ABC12345 or D0ABC12345. A user ID is not accepted here |
| `message_ts` | string | Required | Timestamp of the parent message, such as 1234567890.123456 |
| `oldest` | string | Optional | Start of the time range, as a Slack timestamp |
| `latest` | string | Optional | End of the time range, as a Slack timestamp |
| `limit` | integer | Optional | Messages to return, 1 to 1000 (default 100) |
| `cursor` | string | Optional | Pagination cursor from a previous request |

#### `read_channel_info`

Retrieve metadata for a single Slack channel by ID: name, topic, purpose, privacy, and archive status. Use this to learn what a channel is for before reading or posting. To read its messages, use read_channel instead.

**Sensitivity:** read.

**Sensitive:** No.

**Required permissions:** `read`

**Selector tokens:** [`read_channel_info`](https://www.shipfox.io/docs/integrations/slack/tools#read_channel_info)

##### Input

| Field | Type | Required | Description |
|---|---|---|---|
| `channel_id` | string | Required | Channel, private group, or direct message conversation ID, such as C0ABC12345 or D0ABC12345. A user ID is not accepted here |
| `include_num_members` | boolean | Optional | Include the channel member count (default false) |

#### `read_channel_members`

List the user IDs of the members of a Slack channel. Pair it with read_user_profile to resolve a member to a name.

**Sensitivity:** read.

**Sensitive:** No.

**Required permissions:** `read`

**Selector tokens:** [`read_channel_members`](https://www.shipfox.io/docs/integrations/slack/tools#read_channel_members)

##### Input

| Field | Type | Required | Description |
|---|---|---|---|
| `channel_id` | string | Required | Channel, private group, or direct message conversation ID, such as C0ABC12345 or D0ABC12345. A user ID is not accepted here |
| `limit` | integer | Optional | Members to return per page (default 100) |
| `cursor` | string | Optional | Pagination cursor from a previous request |

#### `read_user_profile`

Retrieve profile information for a Slack user, including contact details, status, timezone, and role.

**Sensitivity:** read.

**Sensitive:** No.

**Required permissions:** `read`

**Selector tokens:** [`read_user_profile`](https://www.shipfox.io/docs/integrations/slack/tools#read_user_profile)

##### Input

| Field | Type | Required | Description |
|---|---|---|---|
| `user_id` | string | Required | Slack user ID, such as U0ABC12345 |
| `include_locale` | boolean | Optional | Include the user's locale information (default false) |

#### `search_channels`

Search the channels this integration can see, by name, topic, or purpose. Returns channel names, IDs, topics, purposes, and archive status. Names are typically lowercase with hyphens. Space-separated terms all have to match. Only the requested page is searched, so page through with the returned cursor when a channel is missing.

**Sensitivity:** read.

**Sensitive:** No.

**Required permissions:** `read`

**Selector tokens:** [`search_channels`](https://www.shipfox.io/docs/integrations/slack/tools#search_channels)

##### Input

| Field | Type | Required | Description |
|---|---|---|---|
| `query` | string | Required | Search query for finding channels |
| `channel_types` | string | Optional | Comma-separated channel types: public_channel, private_channel. Defaults to public_channel |
| `include_archived` | boolean | Optional | Include archived channels in the results |
| `limit` | integer | Optional | Channels to scan per page (default 100) |
| `cursor` | string | Optional | Pagination cursor from a previous request |

#### `send_message`

Send a message to a Slack channel or user. To send a direct message, pass the user ID as the channel ID. Supports standard Markdown: bold, italic, strikethrough, links, lists, blockquotes, inline code, and code blocks. Returns the posted message timestamp.

**Sensitivity:** write.

**Sensitive:** No.

**Required permissions:** `write`

**Selector tokens:** [`send_message`](https://www.shipfox.io/docs/integrations/slack/tools#send_message)

##### Input

| Field | Type | Required | Description |
|---|---|---|---|
| `channel_id` | string | Required | Channel, private group, or direct message conversation ID. Pass a user ID to open a direct message with that user |
| `message` | string | Required | Message content, written as standard Markdown |
| `thread_ts` | string | Optional | Timestamp of the parent message to reply in its thread |
| `reply_broadcast` | boolean | Optional | Also send the thread reply to the channel |

#### `schedule_message`

Schedule a message for future delivery to a Slack channel. Does not send immediately. post_at has to be at least 2 minutes in the future and at most 120 days out. Once scheduled, the message cannot be edited.

**Sensitivity:** write.

**Sensitive:** No.

**Required permissions:** `write`

**Selector tokens:** [`schedule_message`](https://www.shipfox.io/docs/integrations/slack/tools#schedule_message)

##### Input

| Field | Type | Required | Description |
|---|---|---|---|
| `channel_id` | string | Required | Channel, private group, or direct message conversation ID. Pass a user ID to open a direct message with that user |
| `message` | string | Required | Message content, written as standard Markdown |
| `post_at` | integer | Required | Unix timestamp at which to send the message |
| `thread_ts` | string | Optional | Timestamp of the parent message to reply in its thread |
| `reply_broadcast` | boolean | Optional | Also send the thread reply to the channel |

#### `update_message`

Update an already posted Slack message, replacing its content. Supports the same standard Markdown as send_message.

**Sensitivity:** write.

**Sensitive:** No.

**Required permissions:** `write`

**Selector tokens:** [`update_message`](https://www.shipfox.io/docs/integrations/slack/tools#update_message)

##### Input

| Field | Type | Required | Description |
|---|---|---|---|
| `channel_id` | string | Required | Channel, private group, or direct message conversation ID, such as C0ABC12345 or D0ABC12345. A user ID is not accepted here |
| `message_ts` | string | Required | Timestamp of the message to update |
| `message` | string | Required | Message content, written as standard Markdown |

#### `add_reaction`

Add an emoji reaction to a Slack message.

**Sensitivity:** write.

**Sensitive:** No.

**Required permissions:** `write`

**Selector tokens:** [`add_reaction`](https://www.shipfox.io/docs/integrations/slack/tools#add_reaction)

##### Input

| Field | Type | Required | Description |
|---|---|---|---|
| `channel_id` | string | Required | Channel, private group, or direct message conversation ID, such as C0ABC12345 or D0ABC12345. A user ID is not accepted here |
| `message_ts` | string | Required | Timestamp of the message to react to |
| `emoji` | string | Required | Emoji name without the surrounding colons, such as white_check_mark |

#### `create_canvas`

Create a standalone Slack canvas from Markdown and return its ID. Not available on free teams.

**Sensitivity:** write.

**Sensitive:** No.

**Required permissions:** `write`

**Selector tokens:** [`create_canvas`](https://www.shipfox.io/docs/integrations/slack/tools#create_canvas)

##### Input

| Field | Type | Required | Description |
|---|---|---|---|
| `title` | string | Required | Concise, descriptive canvas name. Do not repeat it in the content |
| `content` | string | Required | Canvas body, written as standard Markdown |