<!-- BusyBot node reference — https://busybot.net/tools/slack/ -->

> Node: Slack (`slack`) · Action (binary) · v1
> Category: Communication · Credentials: Slack API (`slackApi`)
> Updated: 2026-08-16

# Slack

> Manage Slack channels, messages, files, reactions, stars, users, and user groups

## Overview

The Slack tool provides comprehensive Slack workspace management: send, update, delete and search messages; manage channels (create, archive, rename, invite, kick, get history, get thread replies); upload files and read file metadata; add and remove reactions; manage stars; get user info and presence; update user profiles; and manage user groups. File upload consumes binary data from the incoming item. Every operation authenticates with a Slack bearer token.

**Category:** Communication  
**Tool Name:** `slack`  
**Version:** 1

**Appearance:** Icon: `lucide-MessageSquare` | Color: `#4A154B`

## Node Type

**Action (Binary)** — handles file/binary data operations

## Input / Output

| Direction | Port(s) |
|-----------|--------|
| Input | `Input` |
| Output | `Output`, `Error` |

## Credentials

This tool requires **Slack API** credentials.
See the [Credentials Guide](https://busybot.net/credentials/slack-api/) for setup instructions.

### Resources

| Resource | Value |
|----------|-------|
| Channel | `channel` |
| File | `file` |
| Message | `message` |
| Reaction | `reaction` |
| Star | `star` |
| User | `user` |
| User Group | `userGroup` |

### Operations

Each resource has its own operation list. Select the resource first; the Operation dropdown then offers only that resource's operations.

| Operation | Value | Description |
|-----------|-------|-------------|
| Channel: Archive | `archive` | Archive a channel |
| Channel: Close | `close` | Close a conversation |
| Channel: Create | `create` | Create a new channel |
| Channel: Get | `get` | Get one channel's details |
| Channel: Get Many | `getAll` | List the workspace's channels |
| Channel: History | `history` | Read a channel's message history |
| Channel: Invite | `invite` | Invite users to a channel |
| Channel: Join | `join` | Join a channel |
| Channel: Kick | `kick` | Remove a user from a channel |
| Channel: Leave | `leave` | Leave a channel |
| Channel: Member | `member` | List a channel's members |
| Channel: Open | `open` | Open or resume a direct message conversation |
| Channel: Rename | `rename` | Rename a channel |
| Channel: Replies | `replies` | Read the replies in a message thread |
| Channel: Set Purpose | `setPurpose` | Set a channel's purpose |
| Channel: Set Topic | `setTopic` | Set a channel's topic |
| Channel: Unarchive | `unarchive` | Restore an archived channel |
| File: Get | `get` | Get one file's metadata |
| File: Get Many | `getAll` | List files |
| File: Upload | `upload` | Upload binary data from the item as a file |
| Message: Delete | `delete` | Delete a message |
| Message: Get Permalink | `getPermalink` | Get a permanent link to a message |
| Message: Search | `search` | Search messages across the workspace |
| Message: Send | `post` | Send a message to a channel or a user |
| Message: Update | `update` | Edit an existing message |
| Reaction: Add | `add` | Add an emoji reaction to a message |
| Reaction: Get | `get` | Read the reactions on a message |
| Reaction: Remove | `remove` | Remove an emoji reaction from a message |
| Star: Add | `add` | Star a message or a file |
| Star: Delete | `delete` | Remove a star |
| Star: Get Many | `getAll` | List starred items |
| User: Get | `info` | Get one user's details |
| User: Get Many | `getAll` | List the workspace's users |
| User: Get User's Profile | `getProfile` | Read a user's profile fields |
| User: Get User's Status | `getPresence` | Read a user's presence |
| User: Update User's Profile | `updateProfile` | Update a user's profile fields |
| User Group: Add Users | `updateUsers` | Add users to a user group |
| User Group: Create | `create` | Create a user group |
| User Group: Disable | `disable` | Disable a user group |
| User Group: Enable | `enable` | Re-enable a disabled user group |
| User Group: Get Many | `getAll` | List user groups |
| User Group: Get Users | `getUsers` | List a user group's members |
| User Group: Update | `update` | Update a user group's details |

### Parameters

Several parameters share a display name but use different internal names — the internal name is shown in backticks so you can copy the right key into a JSON config or an expression.

#### Channel: Archive

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Channel ID | `string` | Yes | — | The ID of the Slack channel (e.g., C0123ABCDEF). You can also paste a Slack URL — the channel ID will be extracted. Supports expressions. |

#### Channel: Close

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Channel ID | `string` | Yes | — | The ID of the Slack channel (e.g., C0123ABCDEF). You can also paste a Slack URL — the channel ID will be extracted. Supports expressions. |

#### Channel: Create

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Channel Name (`channelId`) | `string` | Yes | — | Name of the channel to create. Leading # is stripped automatically. |
| Channel Visibility | `options` | No | `public` | Whether the new channel is open to the workspace or invite-only. |
| | | | | Options: `public`, `private` |

#### Channel: Get

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Channel ID | `string` | Yes | — | The ID of the Slack channel (e.g., C0123ABCDEF). You can also paste a Slack URL — the channel ID will be extracted. Supports expressions. |

#### Channel: Get Many

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Return All | `boolean` | No | `false` | Whether to return all results or only up to a given limit. |
| Limit | `number` | No | `50` | Maximum number of channels to return (1–1000). _(shown when Return All is `false`)_ |
| Filters | `collection` | No | `{}` | Narrow the channel listing. |
| — Types | `multiOptions` | No | `[]` | Which conversation types to include. |
| | | | | Options: `public_channel`, `private_channel`, `im` (one-to-one direct messages), `mpim` (group direct messages) |
| — Exclude Archived | `boolean` | No | `false` | Leave archived channels out of the results. |

#### Channel: History

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Channel ID | `string` | Yes | — | The ID of the Slack channel (e.g., C0123ABCDEF). You can also paste a Slack URL — the channel ID will be extracted. Supports expressions. |
| Return All | `boolean` | No | `false` | Whether to return all results or only up to a given limit. |
| Limit | `number` | No | `50` | Maximum number of messages to return (1–1000). _(shown when Return All is `false`)_ |
| Filters | `collection` | No | `{}` | Restrict the history to a time window. |
| — Inclusive | `boolean` | No | `false` | Include messages that sit exactly on the Latest or Oldest boundary. |
| — Latest | `string` | No | — | ISO datetime or Unix timestamp (latest boundary). |
| — Oldest | `string` | No | — | ISO datetime or Unix timestamp (oldest boundary). |

#### Channel: Invite

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Channel ID | `string` | Yes | — | The ID of the Slack channel (e.g., C0123ABCDEF). You can also paste a Slack URL — the channel ID will be extracted. Supports expressions. |
| User IDs (`userIds`) | `string` | Yes | — | Comma-separated user IDs to invite to the channel. |

#### Channel: Join

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Channel ID | `string` | Yes | — | The ID of the Slack channel (e.g., C0123ABCDEF). You can also paste a Slack URL — the channel ID will be extracted. Supports expressions. |

#### Channel: Kick

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Channel ID | `string` | Yes | — | The ID of the Slack channel (e.g., C0123ABCDEF). You can also paste a Slack URL — the channel ID will be extracted. Supports expressions. |
| User ID (`userId`) | `string` | Yes | — | The user ID to kick from the channel. |

#### Channel: Leave

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Channel ID | `string` | Yes | — | The ID of the Slack channel (e.g., C0123ABCDEF). You can also paste a Slack URL — the channel ID will be extracted. Supports expressions. |

#### Channel: Member

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Channel ID | `string` | Yes | — | The ID of the Slack channel (e.g., C0123ABCDEF). You can also paste a Slack URL — the channel ID will be extracted. Supports expressions. |
| Return All | `boolean` | No | `false` | Whether to return all results or only up to a given limit. |
| Limit | `number` | No | `50` | Maximum number of members to return (1–1000). _(shown when Return All is `false`)_ |
| Resolve Data | `boolean` | No | `false` | Whether to resolve member IDs to full user objects. |

#### Channel: Open

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Options (`options`) | `collection` | No | `{}` | How to open the conversation. |
| — Channel ID | `string` | No | — | Resume a conversation by channel ID. |
| — Return IM | `boolean` | No | `false` | Return the full direct-message object rather than just its ID. |
| — Users | `string` | No | — | Comma-separated user IDs to open a DM with. |

#### Channel: Rename

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Channel ID | `string` | Yes | — | The ID of the Slack channel (e.g., C0123ABCDEF). You can also paste a Slack URL — the channel ID will be extracted. Supports expressions. |
| New Name (`name`) | `string` | Yes | — | New name for the channel. |

#### Channel: Replies

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Channel ID | `string` | Yes | — | The ID of the Slack channel (e.g., C0123ABCDEF). You can also paste a Slack URL — the channel ID will be extracted. Supports expressions. |
| Thread Timestamp (`ts`) | `string` | Yes | — | Timestamp of the parent message to get replies for. |
| Return All | `boolean` | No | `false` | Whether to return all results or only up to a given limit. |
| Limit | `number` | No | `50` | Maximum number of replies to return (1–1000). _(shown when Return All is `false`)_ |
| Filters | `collection` | No | `{}` | Restrict the replies to a time window. |
| — Inclusive | `boolean` | No | `false` | Include replies that sit exactly on the Latest or Oldest boundary. |
| — Latest | `string` | No | — | Latest boundary of the reply window. |
| — Oldest | `string` | No | — | Oldest boundary of the reply window. |

#### Channel: Set Purpose

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Channel ID | `string` | Yes | — | The ID of the Slack channel (e.g., C0123ABCDEF). You can also paste a Slack URL — the channel ID will be extracted. Supports expressions. |
| Purpose | `string` | Yes | — | The channel purpose to set. Supports expressions. |

#### Channel: Set Topic

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Channel ID | `string` | Yes | — | The ID of the Slack channel (e.g., C0123ABCDEF). You can also paste a Slack URL — the channel ID will be extracted. Supports expressions. |
| Topic | `string` | Yes | — | The channel topic to set. Supports expressions. |

#### Channel: Unarchive

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Channel ID | `string` | Yes | — | The ID of the Slack channel (e.g., C0123ABCDEF). You can also paste a Slack URL — the channel ID will be extracted. Supports expressions. |

#### File: Get

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| File ID | `string` | Yes | — | The ID of the file to look up. Supports expressions. |

#### File: Get Many

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Return All | `boolean` | No | `false` | Whether to return all results or only up to a given limit. |
| Limit | `number` | No | `50` | Maximum number of files to return (1–100). _(shown when Return All is `false`)_ |
| Filters | `collection` | No | `{}` | Narrow the file listing. |
| — Channel ID | `string` | No | — | Only list files shared in this channel. |
| — Show Files Hidden By Limit | `boolean` | No | `false` | Include files hidden by the workspace's file limit. |
| — Timestamp From | `string` | No | — | Only list files created at or after this time. |
| — Timestamp To | `string` | No | — | Only list files created at or before this time. |
| — Types | `multiOptions` | No | `["all"]` | Which file types to include. |
| | | | | Options: `all`, `gdocs` (Google Docs), `images`, `pdfs`, `snippets`, `spaces`, `zips` |
| — User ID | `string` | No | — | Only list files uploaded by this user. |

#### File: Upload

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Binary Property | `string` | Yes | `data` | Name of the binary property which contains the data for the file to be uploaded. Names are case-sensitive — see the upstream node's Binary Data panel for the exact names to use. |
| Options (`options`) | `collection` | No | `{}` | Where and how the file is shared. |
| — Channel ID | `string` | No | — | Channel to share the file in. |
| — File Name | `string` | No | — | Name to store the file under. Falls back to the binary property's own file name. |
| — Initial Comment | `string` | No | — | Message text introducing the file. |
| — Thread Timestamp | `string` | No | — | Reply to a thread by providing the parent message timestamp. |
| — Title | `string` | No | — | Title shown above the file in Slack. |

#### Message: Delete

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Send Message To (`select`) | `options` | Yes | `channel` | Whether the message lives in a channel or a direct message. |
| | | | | Options: `channel`, `user` |
| Channel ID | `string` | Yes | — | The channel or conversation ID the message is in. _(shown when Send Message To is `channel`)_ |
| User ID (`user`) | `string` | Yes | — | The user ID whose DM the message is in. Use format @username or a user ID like U0123ABC. _(shown when Send Message To is `user`)_ |
| Message Timestamp (`timestamp`) | `string` | Yes | — | Timestamp (ts) of the message to update or delete. |

#### Message: Get Permalink

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Channel ID | `string` | Yes | — | The channel the message is in. Supports expressions. |
| Message Timestamp (`timestamp`) | `string` | Yes | — | Timestamp (ts) of the message to link to. |

#### Message: Search

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Query | `string` | Yes | — | Search query. Supports Slack search modifiers like in:#channel. |
| Sort | `options` | No | `desc` | The order results come back in. |
| | | | | Options: `relevance`, `desc` (newest first), `asc` (oldest first) |
| Return All | `boolean` | No | `false` | Whether to return all matches or only up to a given limit. |
| Limit | `number` | No | `50` | Maximum number of matches to return (1–100). _(shown when Return All is `false`)_ |
| Options (`options`) | `collection` | No | `{}` | Extra search scoping. |
| — Search in Channel Names | `string` | No | — | Comma-separated channel names to restrict the search to (appended as in:channel modifiers). |

#### Message: Send

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Send Message To (`select`) | `options` | Yes | `channel` | Whether to post into a channel or send a direct message. |
| | | | | Options: `channel`, `user` |
| Channel ID | `string` | Yes | — | The channel or conversation ID to send the message to. _(shown when Send Message To is `channel`)_ |
| User ID (`user`) | `string` | Yes | — | The user ID to send a DM to. Use format @username or a user ID like U0123ABC. _(shown when Send Message To is `user`)_ |
| Message Type | `options` | No | `text` | Which body format the message uses. |
| | | | | Options: `text`, `block` (Block Kit), `attachment` (legacy attachments) |
| Text | `string` | No | — | The text content of the message. For Block Kit messages, this is the fallback text. |
| Blocks (JSON) | `json` | No | `[]` | Block Kit blocks as JSON array. See https://api.slack.com/block-kit _(shown when Message Type is `block`)_ |
| Attachments (JSON) | `json` | No | `[]` | Legacy attachments as JSON array. _(shown when Message Type is `attachment`)_ |
| Other Options | `collection` | No | `{}` | Threading, formatting and identity options. |
| — Send as User | `string` | No | — | Username to post as (requires accessToken auth, not OAuth2). |
| — Thread Timestamp | `string` | No | — | Timestamp of parent message to reply to. |
| — Reply Broadcast | `boolean` | No | `false` | Whether to also post the reply to the channel. |
| — Unfurl Links | `boolean` | No | `false` | Expand link previews in the message. |
| — Unfurl Media | `boolean` | No | `true` | Expand media previews in the message. |
| — Markdown | `boolean` | No | `true` | Render Slack markdown in the message text. |
| — Link Names | `boolean` | No | `false` | Turn @mentions and #channels into real links. |
| — Icon URL | `string` | No | — | Image URL to use as the sender's avatar. |
| — Icon Emoji | `string` | No | — | Emoji code to use as the sender's avatar. |
| — Ephemeral | `boolean` | No | `false` | Whether to send an ephemeral message (only visible to the specified user). When sending to a channel, you must also set Ephemeral User. |
| — Ephemeral User | `string` | No | — | User ID to show the ephemeral message to (required when sending ephemeral to a channel). |

#### Message: Update

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Channel ID | `string` | Yes | — | The channel the message is in. Supports expressions. |
| Message Type | `options` | No | `text` | Which body format the replacement message uses. |
| | | | | Options: `text`, `block` (Block Kit), `attachment` (legacy attachments) |
| Text | `string` | No | — | The text content of the message. For Block Kit messages, this is the fallback text. |
| Blocks (JSON) | `json` | No | `[]` | Block Kit blocks as JSON array. See https://api.slack.com/block-kit _(shown when Message Type is `block`)_ |
| Attachments (JSON) | `json` | No | `[]` | Legacy attachments as JSON array. _(shown when Message Type is `attachment`)_ |
| Message Timestamp (`timestamp`) | `string` | Yes | — | Timestamp (ts) of the message to update or delete. |
| Update Fields | `collection` | No | `{}` | Extra formatting applied to the edit. |
| — Link Names | `boolean` | No | `false` | Turn @mentions and #channels into real links. |
| — Parse | `options` | No | `none` | How Slack parses the message text. |
| | | | | Options: `client`, `full`, `none` |

#### Reaction: Add

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Channel ID | `string` | Yes | — | The channel the message is in. Supports expressions. |
| Message Timestamp (`timestamp`) | `string` | Yes | — | Timestamp (ts) of the message to react to, e.g. 1663233118.856619. |
| Emoji Code (`name`) | `string` | Yes | — | Emoji code (e.g., "+1", "thumbsup"). Do not use actual emoji characters. |

#### Reaction: Get

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Channel ID | `string` | Yes | — | The channel the message is in. Supports expressions. |
| Message Timestamp (`timestamp`) | `string` | Yes | — | Timestamp (ts) of the message to read reactions from, e.g. 1663233118.856619. |

#### Reaction: Remove

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Channel ID | `string` | Yes | — | The channel the message is in. Supports expressions. |
| Message Timestamp (`timestamp`) | `string` | Yes | — | Timestamp (ts) of the message to remove the reaction from, e.g. 1663233118.856619. |
| Emoji Code (`name`) | `string` | Yes | — | Emoji code (e.g., "+1", "thumbsup"). Do not use actual emoji characters. |

#### Star: Add

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Item to Star (`target`) | `options` | Yes | `message` | Whether the star goes on a message or on a file. |
| | | | | Options: `message`, `file` |
| Channel ID | `string` | Yes | — | The channel holding the item to star. Supports expressions. |
| File ID | `string` | No | — | The file to star. _(shown when Item to Star is `file`)_ |
| Message Timestamp (`timestamp`) | `string` | No | — | Timestamp (ts) of the message to star, e.g. 1663233118.856619. _(shown when Item to Star is `message`)_ |
| Options (`options`) | `collection` | No | `{}` | Additional star targets. |
| — File Comment | `string` | No | — | Star a comment on a file instead of the file itself. |

#### Star: Delete

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Options (`options`) | `collection` | No | `{}` | Which star to remove — supply the same target you starred. |
| — Channel ID | `string` | No | — | The channel holding the starred item. |
| — File ID | `string` | No | — | The starred file. |
| — File Comment | `string` | No | — | The starred file comment. |
| — Message Timestamp | `string` | No | — | Timestamp (ts) of the starred message. |

#### Star: Get Many

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Return All | `boolean` | No | `false` | Whether to return all starred items or only up to a given limit. |
| Limit | `number` | No | `50` | Maximum number of starred items to return (1–100). _(shown when Return All is `false`)_ |

#### User: Get

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| User ID (`user`) | `string` | Yes | — | The user ID (e.g., U0123ABCDEF). |

#### User: Get Many

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Return All | `boolean` | No | `false` | Whether to return all users or only up to a given limit. |
| Limit | `number` | No | `50` | Maximum number of users to return (1–200). _(shown when Return All is `false`)_ |

#### User: Get User's Profile

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| User ID (`user`) | `string` | Yes | — | The user ID (e.g., U0123ABCDEF). |

#### User: Get User's Status

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| User ID (`user`) | `string` | Yes | — | The user ID (e.g., U0123ABCDEF). |

#### User: Update User's Profile

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Options (`options`) | `collection` | No | `{}` | The profile fields to write. Fields you leave out are not changed. |
| — Email | `string` | No | — | The profile email address. |
| — First Name | `string` | No | — | The profile first name. |
| — Last Name | `string` | No | — | The profile last name. |
| — Status Text | `string` | No | — | The custom status message. |
| — Status Emoji | `string` | No | — | Emoji code for status (e.g., :house_with_garden:). |
| — Status Expiration | `string` | No | — | ISO datetime for status expiration. Leave empty for no expiration. |
| — Custom Fields (JSON) | `json` | No | `{}` | Custom profile fields as JSON object: { "fieldId": { "value": "...", "alt": "..." } } |
| — User ID (Admin Only) | `string` | No | — | Set another user profile (admin only). |

#### User Group: Add Users

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| User Group ID | `string` | Yes | — | The ID of the user group to change. Supports expressions. |
| User IDs (`users`) | `string` | Yes | — | Comma-separated user IDs to add to the group. Existing members are preserved. |
| Options (`options`) | `collection` | No | `{}` | Extra response options. |
| — Include Count | `boolean` | No | `false` | Include the group's user count in the result. |

#### User Group: Create

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Group Name (`name`) | `string` | Yes | — | Name of the new user group. Supports expressions. |
| Options (`Options`) | `collection` | No | `{}` | Optional details for the new group. Note the capital O — the internal key is `Options`, not `options`. |
| — Channel IDs | `string` | No | — | Comma-separated channel IDs. |
| — Description | `string` | No | — | What the group is for. |
| — Handle | `string` | No | — | The @handle used to mention the group. |
| — Include Count | `boolean` | No | `false` | Include the group's user count in the result. |

#### User Group: Disable

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| User Group ID | `string` | Yes | — | The ID of the user group to disable. Supports expressions. |
| Options (`options`) | `collection` | No | `{}` | Extra response options. |
| — Include Count | `boolean` | No | `false` | Include the group's user count in the result. |

#### User Group: Enable

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| User Group ID | `string` | Yes | — | The ID of the user group to enable. Supports expressions. |
| Options (`option`) | `collection` | No | `{}` | Extra response options. Note the singular — the internal key is `option`, not `options`. |
| — Include Count | `boolean` | No | `false` | Include the group's user count in the result. |

#### User Group: Get Many

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Return All | `boolean` | No | `false` | Whether to return all user groups or only up to a given limit. |
| Limit | `number` | No | `50` | Maximum number of user groups to return (1–200). _(shown when Return All is `false`)_ |
| Options (`options`) | `collection` | No | `{}` | What each returned group includes. |
| — Include Count | `boolean` | No | `false` | Include each group's user count. |
| — Include Disabled | `boolean` | No | `false` | Include disabled groups in the listing. |
| — Include Users | `boolean` | No | `false` | Include each group's member list. |

#### User Group: Get Users

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| User Group ID | `string` | Yes | — | The ID of the user group to read. Supports expressions. |
| Options (`options`) | `collection` | No | `{}` | How much detail to return per member. |
| — Resolve Data | `boolean` | No | `true` | Whether to fetch full user objects instead of just user IDs. |

#### User Group: Update

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| User Group ID | `string` | Yes | — | The ID of the user group to update. Supports expressions. |
| Update Fields | `collection` | No | `{}` | The group fields to write. Fields you leave out are not changed. |
| — Channels | `string` | No | — | Comma-separated channel IDs. |
| — Description | `string` | No | — | What the group is for. |
| — Handle | `string` | No | — | The @handle used to mention the group. |
| — Include Count | `boolean` | No | `false` | Include the group's user count in the result. |
| — Name | `string` | No | — | New name for the group. |

#### All Operations

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Max Concurrency | `number` | No | `5` | Maximum number of items to process concurrently. Keep low due to Slack rate limits. |

## Output Data

The Slack object returned by the API **becomes** the output item's JSON — the incoming item's JSON does not pass through, so read any upstream field you still need *before* this node. Binary data on the input item is forwarded unchanged; the node never produces new binary data, so File: Get returns the file's metadata rather than its contents.

Most operations unwrap the API envelope for you, so the item is the object itself: Channel operations put the channel object on the item, User: Get puts the user object, User: Get User's Profile and User: Update User's Profile put the profile object, and the User Group operations put the user-group object. Reference the fields directly, e.g. `{{ $json.id }}` or `{{ $json.name }}`.

**A returned message timestamp arrives as `message_timestamp`, not `ts`.** Where the API answers with a top-level `ts` — Message: Send is the common case — the node renames it, so chain a follow-up node with `{{ $json.message_timestamp }}` to react to, update, thread under or delete the message you just sent. Records inside a fanned-out list keep their own `ts` field; the rename only touches the top level of a single response.

**Operations that fan out.** These return a list and emit **one output item per record** rather than one per input item:

| Operation | One item per |
|-----------|--------------|
| Channel: Get Many | channel |
| Channel: History | message |
| Channel: Member | member — `{ "member": "U0123ABC" }` per member, or a full user object when Resolve Data is on |
| Channel: Replies | reply message |
| File: Get Many | file |
| File: Upload | uploaded file object |
| Message: Search | matching message |
| Star: Get Many | starred item |
| User: Get Many | user |
| User Group: Get Many | user group |
| User Group: Get Users | member — a full user object by default, or `{ "id": "U0123ABC" }` when Resolve Data is off |

When one of these returns nothing, that input item produces **no** output items at all — the branch downstream simply receives fewer items. Guard against an empty branch rather than expecting an empty-array item.

With Return All off, the Limit applies to the number of records fetched; with it on, the node pages through the whole result set, which is where Slack's rate limits bite hardest.

Failures follow the node's error mode: in **errorPort** mode the failed item is routed to the `Error` output carrying an `_error` object, with the input item's binary still attached.

## Usage Examples

- Send a message to a Slack channel
- Upload a file to Slack
- Get file info from Slack
- Search Slack messages
- Add a reaction to a message
- Create a Slack channel
- Get channel history
- List channel members
- Get user info
- Update user profile status
- Create a user group
- Add users to a user group

## Example Configuration

Send a plain text message to a channel:

```json
{
  "type": "slack",
  "parameters": {
    "resource": "message",
    "operation": "post",
    "select": "channel",
    "channelId": "C1234567890",
    "messageType": "text",
    "text": "Deployment {{ $json.version }} finished at {{ $datetime.iso }}"
  }
}
```

Reply inside an existing thread — a preceding Slack node's `message_timestamp` is the parent:

```json
{
  "type": "slack",
  "parameters": {
    "resource": "message",
    "operation": "post",
    "select": "channel",
    "channelId": "C1234567890",
    "messageType": "text",
    "text": "{{ $json.summary }}",
    "otherOptions": {
      "threadTs": "{{ $json.message_timestamp }}",
      "replyBroadcast": false,
      "link_names": true
    }
  }
}
```

Send a Block Kit message, keeping Text as the notification fallback:

```json
{
  "type": "slack",
  "parameters": {
    "resource": "message",
    "operation": "post",
    "select": "channel",
    "channelId": "C1234567890",
    "messageType": "block",
    "text": "Build failed",
    "blocksJson": "[{\"type\":\"section\",\"text\":{\"type\":\"mrkdwn\",\"text\":\"*Build failed* on branch {{ $json.branch }}\"}}]"
  }
}
```

Create a private channel:

```json
{
  "type": "slack",
  "parameters": {
    "resource": "channel",
    "operation": "create",
    "channelId": "{{ $json.projectSlug }}",
    "channelVisibility": "private"
  }
}
```

Read the last 100 messages of a channel within a time window — this emits one item per message:

```json
{
  "type": "slack",
  "parameters": {
    "resource": "channel",
    "operation": "history",
    "channelId": "C1234567890",
    "returnAll": false,
    "limit": 100,
    "filters": {
      "oldest": "{{ $json.since }}",
      "inclusive": true
    }
  }
}
```

Upload a file produced by an upstream node and announce it in a channel:

```json
{
  "type": "slack",
  "parameters": {
    "resource": "file",
    "operation": "upload",
    "binaryPropertyName": "data",
    "options": {
      "channelId": "C1234567890",
      "fileName": "{{ $json.reportName }}.pdf",
      "initialComment": "Weekly report",
      "title": "Weekly report"
    }
  }
}
```

React to a message with an emoji code — never a literal emoji character:

```json
{
  "type": "slack",
  "parameters": {
    "resource": "reaction",
    "operation": "add",
    "channelId": "{{ $json.channel }}",
    "timestamp": "{{ $json.ts }}",
    "name": "white_check_mark"
  }
}
```

Search messages and cap the result set:

```json
{
  "type": "slack",
  "parameters": {
    "resource": "message",
    "operation": "search",
    "query": "project deadline in:#general",
    "sort": "desc",
    "returnAll": false,
    "limit": 20
  }
}
```

Create a user group — note the capital `Options` key this operation uses:

```json
{
  "type": "slack",
  "parameters": {
    "resource": "userGroup",
    "operation": "create",
    "name": "Engineering Team",
    "Options": {
      "handle": "engineering",
      "description": "All engineering team members",
      "channelIds": "C1234567890,C0987654321",
      "include_count": true
    }
  }
}
```

Add users to that group:

```json
{
  "type": "slack",
  "parameters": {
    "resource": "userGroup",
    "operation": "updateUsers",
    "userGroupId": "S1234567890",
    "users": "{{ $json.memberIds }}"
  }
}
```

Set a user's status:

```json
{
  "type": "slack",
  "parameters": {
    "resource": "user",
    "operation": "updateProfile",
    "options": {
      "status_text": "In a meeting",
      "status_emoji": ":calendar:",
      "status_expiration": "{{ $json.endsAt }}"
    }
  }
}
```

### Error Handling

| Mode | Behavior |
|------|----------|
| **stop** | Halts workflow on first error |
| **continue** | Skips failed items, passes successful ones through |
| **errorPort** | Routes failed items to Error output port |

## Tips

Manage Slack channels, messages, files, reactions, stars, users, and user groups via the Slack Web API. File upload reads binary data; file download produces file metadata.

### Notes

- **Keep Max Concurrency low.** Slack rate-limits aggressively per method, and the node fires one request per item. The default of 5 is a deliberate ceiling, not a starting point to raise.
- **Three parameters share the display name "Options" but not the same key.** User Group: Create uses `Options` (capital O) and User Group: Enable uses `option` (singular); everywhere else it is `options`. Copy the key shown in the Parameter column.
- **Emoji reactions take a code, not a character.** Use `thumbsup` or `+1`, not the emoji itself.
- **Channel ID accepts a pasted Slack URL** — the ID is extracted for you. On Channel: Create the same `channelId` key holds the new channel's *name*, not an ID.
- **Message Type decides which body field is read.** `text` uses Text alone, `block` reads Blocks (JSON), and `attachment` reads Attachments (JSON); with Block Kit, Text is still worth filling in as the notification fallback.
- **Send as User needs token-based auth**, so it does nothing on an OAuth2 credential.
- **The item JSON is replaced, not merged.** Unlike most nodes, Slack puts the API object on the item by itself. If a downstream node needs an upstream field, capture it before the Slack node or re-attach it afterwards.