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)Step 1
Create a Slack App at https://api.slack.com/apps
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-…)Step 1
Go to https://api.slack.com/apps and create or select your app
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
Team/workspace ID to filter channels
Maximum number of channels to return (max 200) (Default:
100)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
The ID of the channel to post to
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
The ID of the channel containing the thread
The timestamp of the parent message (format: ‘1234567890.123456’)
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
The ID of the channel containing the message
The timestamp of the message to react to
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
The ID of the channel
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
The ID of the channel containing the thread
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
Team/workspace ID
Maximum number of users to return (max 200) (Default:
100)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
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).