Overview
Add Slack to any ModuleX agent or workflow. Channels, messages, threads, reactions, and user management against the Slack Web API (slack.com/api).
Categories: Communication · Communication & Collaboration · Collaboration · Messaging · Auth: OAuth2, Bot Token · Actions: 8
Authentication
- OAuth2
- Bot Token
OAuth2 Authentication
Connect using Slack OAuth (recommended for most use cases)1
Step 1
Create a Slack App at https://api.slack.com/apps
2
Step 2
Go to ‘OAuth & Permissions’
3
Step 3
Add required scopes (see below)
4
Step 4
Install app to workspace
5
Step 5
Copy the Bot User OAuth Token
Required Credentials
| Field | Description | Required | Format |
|---|---|---|---|
| Client ID | Slack App Client ID | Yes | 1234567890.1234567890 |
| Client Secret | Slack App Client Secret | Yes | xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx |
OAuth Configuration
- Authorization URL:
https://slack.com/oauth/v2/authorize - Token URL:
https://slack.com/api/oauth.v2.access - Scopes:
channels:read,channels:history,chat:write,reactions:write,users:read,users.profile:read
Bot Token
Use your Slack Bot User OAuth Token (xoxb-…)1
Step 1
Go to https://api.slack.com/apps and create or select your app
2
Step 2
Navigate to ‘OAuth & Permissions’ in the sidebar
3
Step 3
Add the required Bot Token Scopes
4
Step 4
Install the app to your workspace
5
Step 5
Copy the ‘Bot User OAuth Token’ (starts with xoxb-)
Required Credentials
| Field | Description | Required | Format |
|---|---|---|---|
| Bot User OAuth Token | Your Slack Bot User OAuth Token (starts with xoxb-) | Yes | xoxb-xxxxxxxxxxxx-xxxxxxxxxxxx-xxxxxxxxxxxxxxxxxxxxxxxx |
Available Actions
list_channels — List public channels in the Slack workspace with pagination
list_channels — List public channels in the Slack workspace with pagination
Parameters
string
Team/workspace ID to filter channels
integer
Maximum number of channels to return (max 200) (Default:
100)string
Pagination cursor for next page of results
Response
{
"$defs": {
"Channel": {
"additionalProperties": false,
"description": "One row in ``list_channels``.",
"properties": {
"id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Id"
},
"name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Name"
},
"is_channel": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"default": null,
"title": "Is Channel"
},
"is_private": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"default": null,
"title": "Is Private"
},
"is_archived": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"default": null,
"title": "Is Archived"
},
"is_member": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"default": null,
"title": "Is Member"
},
"num_members": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"title": "Num Members"
},
"topic": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Topic"
},
"purpose": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Purpose"
},
"created": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"title": "Created"
}
},
"title": "Channel",
"type": "object"
}
},
"additionalProperties": false,
"properties": {
"success": {
"title": "Success",
"type": "boolean"
},
"error": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Error"
},
"channels": {
"items": {
"$ref": "#/$defs/Channel"
},
"title": "Channels",
"type": "array"
},
"total": {
"default": 0,
"title": "Total",
"type": "integer"
},
"next_cursor": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Next Cursor"
}
},
"required": [
"success"
],
"title": "ListChannelsOutput",
"type": "object"
}
post_message — Post a new message to a Slack channel
post_message — Post a new message to a Slack channel
Parameters
string
required
The ID of the channel to post to
string
required
The message text to post
Response
{
"$defs": {
"Message": {
"additionalProperties": false,
"description": "Compact message representation returned by post/reply actions.",
"properties": {
"text": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Text"
},
"user": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "User"
},
"type": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Type"
},
"ts": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Ts"
}
},
"title": "Message",
"type": "object"
}
},
"additionalProperties": false,
"properties": {
"success": {
"title": "Success",
"type": "boolean"
},
"error": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Error"
},
"channel": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Channel"
},
"ts": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Ts"
},
"message": {
"anyOf": [
{
"$ref": "#/$defs/Message"
},
{
"type": "null"
}
],
"default": null
}
},
"required": [
"success"
],
"title": "PostMessageOutput",
"type": "object"
}
reply_to_thread — Reply to a specific message thread in Slack
reply_to_thread — Reply to a specific message thread in Slack
Parameters
string
required
The ID of the channel containing the thread
string
required
The timestamp of the parent message (format: ‘1234567890.123456’)
string
required
The reply text
Response
{
"$defs": {
"Message": {
"additionalProperties": false,
"description": "Compact message representation returned by post/reply actions.",
"properties": {
"text": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Text"
},
"user": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "User"
},
"type": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Type"
},
"ts": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Ts"
}
},
"title": "Message",
"type": "object"
}
},
"additionalProperties": false,
"properties": {
"success": {
"title": "Success",
"type": "boolean"
},
"error": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Error"
},
"channel": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Channel"
},
"ts": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Ts"
},
"thread_ts": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Thread Ts"
},
"message": {
"anyOf": [
{
"$ref": "#/$defs/Message"
},
{
"type": "null"
}
],
"default": null
}
},
"required": [
"success"
],
"title": "ReplyToThreadOutput",
"type": "object"
}
add_reaction — Add a reaction emoji to a message
add_reaction — Add a reaction emoji to a message
Parameters
string
required
The ID of the channel containing the message
string
required
The timestamp of the message to react to
string
required
The name of the emoji reaction (without colons)
Response
{
"additionalProperties": false,
"properties": {
"success": {
"title": "Success",
"type": "boolean"
},
"error": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Error"
},
"channel": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Channel"
},
"timestamp": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Timestamp"
},
"reaction": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Reaction"
}
},
"required": [
"success"
],
"title": "AddReactionOutput",
"type": "object"
}
get_channel_history — Get recent messages from a Slack channel
get_channel_history — Get recent messages from a Slack channel
Parameters
string
required
The ID of the channel
integer
Number of messages to retrieve (Default:
10)Response
{
"$defs": {
"ChannelMessage": {
"additionalProperties": false,
"description": "A row in ``get_channel_history``.",
"properties": {
"type": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Type"
},
"user": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "User"
},
"text": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Text"
},
"ts": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Ts"
},
"thread_ts": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Thread Ts"
},
"reply_count": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"title": "Reply Count"
},
"reactions": {
"items": {
"additionalProperties": true,
"type": "object"
},
"title": "Reactions",
"type": "array"
}
},
"title": "ChannelMessage",
"type": "object"
}
},
"additionalProperties": false,
"properties": {
"success": {
"title": "Success",
"type": "boolean"
},
"error": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Error"
},
"channel": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Channel"
},
"messages": {
"items": {
"$ref": "#/$defs/ChannelMessage"
},
"title": "Messages",
"type": "array"
},
"total": {
"default": 0,
"title": "Total",
"type": "integer"
},
"has_more": {
"default": false,
"title": "Has More",
"type": "boolean"
}
},
"required": [
"success"
],
"title": "GetChannelHistoryOutput",
"type": "object"
}
get_thread_replies — Get all replies in a message thread
get_thread_replies — Get all replies in a message thread
Parameters
string
required
The ID of the channel containing the thread
string
required
The timestamp of the parent message (format: ‘1234567890.123456’)
Response
{
"$defs": {
"ThreadMessage": {
"additionalProperties": false,
"description": "A row in ``get_thread_replies``.",
"properties": {
"type": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Type"
},
"user": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "User"
},
"text": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Text"
},
"ts": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Ts"
},
"thread_ts": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Thread Ts"
},
"parent_user_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Parent User Id"
},
"reactions": {
"items": {
"additionalProperties": true,
"type": "object"
},
"title": "Reactions",
"type": "array"
}
},
"title": "ThreadMessage",
"type": "object"
}
},
"additionalProperties": false,
"properties": {
"success": {
"title": "Success",
"type": "boolean"
},
"error": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Error"
},
"channel": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Channel"
},
"thread_ts": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Thread Ts"
},
"messages": {
"items": {
"$ref": "#/$defs/ThreadMessage"
},
"title": "Messages",
"type": "array"
},
"total": {
"default": 0,
"title": "Total",
"type": "integer"
},
"has_more": {
"default": false,
"title": "Has More",
"type": "boolean"
}
},
"required": [
"success"
],
"title": "GetThreadRepliesOutput",
"type": "object"
}
get_users — Get a list of all users in the Slack workspace with their basic profile information
get_users — Get a list of all users in the Slack workspace with their basic profile information
Parameters
string
Team/workspace ID
integer
Maximum number of users to return (max 200) (Default:
100)string
Pagination cursor for next page of results
Response
{
"$defs": {
"User": {
"additionalProperties": false,
"description": "A row in ``get_users``.",
"properties": {
"id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Id"
},
"name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Name"
},
"real_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Real Name"
},
"display_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Display Name"
},
"email": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Email"
},
"is_admin": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"default": null,
"title": "Is Admin"
},
"is_owner": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"default": null,
"title": "Is Owner"
},
"is_bot": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"default": null,
"title": "Is Bot"
},
"deleted": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"default": null,
"title": "Deleted"
},
"tz": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Tz"
},
"updated": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"title": "Updated"
}
},
"title": "User",
"type": "object"
}
},
"additionalProperties": false,
"properties": {
"success": {
"title": "Success",
"type": "boolean"
},
"error": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Error"
},
"users": {
"items": {
"$ref": "#/$defs/User"
},
"title": "Users",
"type": "array"
},
"total": {
"default": 0,
"title": "Total",
"type": "integer"
},
"next_cursor": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Next Cursor"
}
},
"required": [
"success"
],
"title": "GetUsersOutput",
"type": "object"
}
get_user_profile — Get detailed profile information for a specific user
get_user_profile — Get detailed profile information for a specific user
Parameters
string
required
The ID of the user
Response
{
"$defs": {
"UserProfile": {
"additionalProperties": false,
"description": "The ``profile`` block of ``get_user_profile``.",
"properties": {
"real_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Real Name"
},
"display_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Display Name"
},
"email": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Email"
},
"phone": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Phone"
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Title"
},
"status_text": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Status Text"
},
"status_emoji": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Status Emoji"
},
"image_24": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Image 24"
},
"image_48": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Image 48"
},
"image_72": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Image 72"
},
"image_192": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Image 192"
},
"image_512": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Image 512"
}
},
"title": "UserProfile",
"type": "object"
}
},
"additionalProperties": false,
"properties": {
"success": {
"title": "Success",
"type": "boolean"
},
"error": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Error"
},
"user_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "User Id"
},
"profile": {
"anyOf": [
{
"$ref": "#/$defs/UserProfile"
},
{
"type": "null"
}
],
"default": null
}
},
"required": [
"success"
],
"title": "GetUserProfileOutput",
"type": "object"
}
Limits & Quotas
- Tier 1 (most read endpoints): ~60 req/min.
- Tier 2 (
chat.postMessage,reactions.add): ~20 req/min. - Tier 3 (
conversations.history,users.list): ~100 req/min. - Slack reports errors as HTTP 200 with
ok: falseand anerrorfield — the tools surface this in the output assuccess: False+error, not an exception. Plan for retry/back-off based on the string error code (e.g.ratelimited,channel_not_found).