Slack
18 tools • OpenAPI spec ↗
POSTsend_message/channels/:channel/messagesSend a message to a Slack channel. Can also reply to a thread by providing thread_ts.
Request
Path Parameters
| Name | Type | Required | Description |
|---|---|---|---|
| channel | string | Yes | Channel ID to send the message to |
Query Parameters
| Name | Type | Required | Description |
|---|---|---|---|
| text | string | No | Message text to send |
| thread_ts | string | No | Thread timestamp to reply to (creates a threaded reply) |
| reply_broadcast | boolean | No | When replying in a thread, also post to the channel (default false) |
| unfurl_links | boolean | No | Enable or disable link unfurling (default true) |
Response
Examples
1. Describe method
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "describe_method",
"arguments": {
"service": "slack",
"method": "send_message"
}
}
}2. Call method
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "call_slack",
"arguments": {
"method": "send_message",
"params": {
"channel": "<channel>"
}
}
}
}Request
POST https://app.ferrule.io/api/v1/slack/channels/:channel/messages Authorization: Bearer <your-api-key> Content-Type: application/json
Response
{
"ok": false,
"channel": "...",
"ts": "...",
"message": {
"type": "...",
"subtype": "...",
"text": "...",
"ts": "...",
"user": "...",
"bot_id": "...",
"thread_ts": "...",
"reply_count": 0,
"reply_users_count": 0,
"latest_reply": "...",
"reactions": []
}
}GETread_messages/channels/:channel/messagesRead message history from a Slack channel. Use oldest/latest to filter by time range.
Request
Path Parameters
| Name | Type | Required | Description |
|---|---|---|---|
| channel | string | Yes | Channel ID to read messages from |
Query Parameters
| Name | Type | Required | Description |
|---|---|---|---|
| limit | string | No | Maximum number of messages to return per page (default 20, max 999) |
| oldest | string | No | Only messages after this Unix timestamp (inclusive). Example: 1234567890.123456 |
| latest | string | No | Only messages before this Unix timestamp (inclusive). Example: 1234567890.123456 |
Pagination
| Name | Type | Required | Description |
|---|---|---|---|
| cursor | string | No | Pagination cursor from previous response's response_metadata.next_cursor |
Response
Examples
1. Describe method
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "describe_method",
"arguments": {
"service": "slack",
"method": "read_messages"
}
}
}2. Call method
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "call_slack",
"arguments": {
"method": "read_messages",
"params": {
"channel": "<channel>"
}
}
}
}Request
GET https://app.ferrule.io/api/v1/slack/channels/:channel/messages Authorization: Bearer <your-api-key> Content-Type: application/json
Response
{
"ok": false,
"messages": [],
"has_more": false,
"response_metadata": {
"next_cursor": "...",
"scopes": [],
"warnings": []
}
}GETread_thread/channels/:channel/messages/:ts/repliesRead replies in a message thread. Provide the channel and the parent message timestamp.
Request
Path Parameters
| Name | Type | Required | Description |
|---|---|---|---|
| channel | string | Yes | Channel ID containing the thread |
| ts | string | Yes | Parent message timestamp (thread root) |
Query Parameters
| Name | Type | Required | Description |
|---|---|---|---|
| limit | string | No | Maximum number of replies to return per page (default 20, max 999) |
Pagination
| Name | Type | Required | Description |
|---|---|---|---|
| cursor | string | No | Pagination cursor from previous response's response_metadata.next_cursor |
Response
Examples
1. Describe method
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "describe_method",
"arguments": {
"service": "slack",
"method": "read_thread"
}
}
}2. Call method
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "call_slack",
"arguments": {
"method": "read_thread",
"params": {
"channel": "<channel>",
"ts": "<ts>"
}
}
}
}Request
GET https://app.ferrule.io/api/v1/slack/channels/:channel/messages/:ts/replies Authorization: Bearer <your-api-key> Content-Type: application/json
Response
{
"ok": false,
"messages": [],
"has_more": false,
"response_metadata": {
"next_cursor": "...",
"scopes": [],
"warnings": []
}
}GETlist_channels/channelsList Slack channels the bot has access to. Returns public channels by default.
Request
Query Parameters
| Name | Type | Required | Description |
|---|---|---|---|
| limit | string | No | Maximum number of items to return per page (default 20, max 999) |
| types | string | No | Comma-separated channel types: public_channel, private_channel, mpim, im (default: public_channel) |
| exclude_archived | string | No | Set to true to exclude archived channels (default false) |
Pagination
| Name | Type | Required | Description |
|---|---|---|---|
| cursor | string | No | Pagination cursor from previous response's response_metadata.next_cursor |
Response
Examples
1. Describe method
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "describe_method",
"arguments": {
"service": "slack",
"method": "list_channels"
}
}
}2. Call method
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "call_slack",
"arguments": {
"method": "list_channels",
"params": {}
}
}
}Request
GET https://app.ferrule.io/api/v1/slack/channels Authorization: Bearer <your-api-key> Content-Type: application/json
Response
{
"ok": false,
"channels": [],
"response_metadata": {
"next_cursor": "...",
"scopes": [],
"warnings": []
}
}GETget_channel_info/channels/:channelGet detailed information about a Slack channel including topic, purpose, and member count.
Request
Path Parameters
| Name | Type | Required | Description |
|---|---|---|---|
| channel | string | Yes | Channel ID |
Query Parameters
| Name | Type | Required | Description |
|---|---|---|---|
| include_num_members | boolean | No | Include the number of members in the channel |
Response
Examples
1. Describe method
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "describe_method",
"arguments": {
"service": "slack",
"method": "get_channel_info"
}
}
}2. Call method
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "call_slack",
"arguments": {
"method": "get_channel_info",
"params": {
"channel": "<channel>"
}
}
}
}Request
GET https://app.ferrule.io/api/v1/slack/channels/:channel Authorization: Bearer <your-api-key> Content-Type: application/json
Response
{
"ok": false,
"channel": {
"id": "...",
"name": "...",
"is_channel": false,
"is_group": false,
"is_im": false,
"is_mpim": false,
"is_private": false,
"is_archived": false,
"is_member": false,
"created": 0,
"creator": "...",
"name_normalized": "...",
"num_members": 0,
"topic": {
"value": "...",
"creator": "...",
"last_set": 0
},
"purpose": {
"value": "...",
"creator": "...",
"last_set": 0
}
}
}POSTcreate_channel/channelsCreate a new Slack channel. Provide a name (lowercase, no spaces).
Request
Query Parameters
| Name | Type | Required | Description |
|---|---|---|---|
| name | string | No | Channel name (lowercase, no spaces, max 80 chars) |
| is_private | boolean | No | Create as private channel (default false) |
Response
Examples
1. Describe method
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "describe_method",
"arguments": {
"service": "slack",
"method": "create_channel"
}
}
}2. Call method
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "call_slack",
"arguments": {
"method": "create_channel",
"params": {}
}
}
}Request
POST https://app.ferrule.io/api/v1/slack/channels Authorization: Bearer <your-api-key> Content-Type: application/json
Response
{
"ok": false,
"channel": {
"id": "...",
"name": "...",
"is_channel": false,
"is_group": false,
"is_im": false,
"is_mpim": false,
"is_private": false,
"is_archived": false,
"is_member": false,
"created": 0,
"creator": "...",
"name_normalized": "...",
"num_members": 0,
"topic": {
"value": "...",
"creator": "...",
"last_set": 0
},
"purpose": {
"value": "...",
"creator": "...",
"last_set": 0
}
}
}POSTarchive_channel/channels/:channel/archiveArchive a Slack channel. The channel can be unarchived later.
Request
Path Parameters
| Name | Type | Required | Description |
|---|---|---|---|
| channel | string | Yes | Channel ID to archive |
Response
Examples
1. Describe method
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "describe_method",
"arguments": {
"service": "slack",
"method": "archive_channel"
}
}
}2. Call method
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "call_slack",
"arguments": {
"method": "archive_channel",
"params": {
"channel": "<channel>"
}
}
}
}Request
POST https://app.ferrule.io/api/v1/slack/channels/:channel/archive Authorization: Bearer <your-api-key> Content-Type: application/json
Response
{
"ok": false
}POSTinvite_to_channel/channels/:channel/invitationsInvite one or more users to a Slack channel. Provide comma-separated user IDs.
Request
Path Parameters
| Name | Type | Required | Description |
|---|---|---|---|
| channel | string | Yes | Channel ID to invite users to |
Query Parameters
| Name | Type | Required | Description |
|---|---|---|---|
| users | string | No | Comma-separated list of user IDs to invite |
Response
Examples
1. Describe method
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "describe_method",
"arguments": {
"service": "slack",
"method": "invite_to_channel"
}
}
}2. Call method
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "call_slack",
"arguments": {
"method": "invite_to_channel",
"params": {
"channel": "<channel>"
}
}
}
}Request
POST https://app.ferrule.io/api/v1/slack/channels/:channel/invitations Authorization: Bearer <your-api-key> Content-Type: application/json
Response
{
"ok": false,
"channel": {
"id": "...",
"name": "...",
"is_channel": false,
"is_group": false,
"is_im": false,
"is_mpim": false,
"is_private": false,
"is_archived": false,
"is_member": false,
"created": 0,
"creator": "...",
"name_normalized": "...",
"num_members": 0,
"topic": {
"value": "...",
"creator": "...",
"last_set": 0
},
"purpose": {
"value": "...",
"creator": "...",
"last_set": 0
}
}
}POSTadd_reaction/channels/:channel/messages/:timestamp/reactionsAdd an emoji reaction to a message. Provide the emoji name without colons.
Request
Path Parameters
| Name | Type | Required | Description |
|---|---|---|---|
| channel | string | Yes | Channel ID containing the message |
| timestamp | string | Yes | Message timestamp to react to |
Query Parameters
| Name | Type | Required | Description |
|---|---|---|---|
| name | string | No | Emoji name without colons (e.g. thumbsup) |
Response
Examples
1. Describe method
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "describe_method",
"arguments": {
"service": "slack",
"method": "add_reaction"
}
}
}2. Call method
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "call_slack",
"arguments": {
"method": "add_reaction",
"params": {
"channel": "<channel>",
"timestamp": "<timestamp>"
}
}
}
}Request
POST https://app.ferrule.io/api/v1/slack/channels/:channel/messages/:timestamp/reactions Authorization: Bearer <your-api-key> Content-Type: application/json
Response
{
"ok": false
}GETget_reactions/channels/:channel/messages/:timestamp/reactionsGet all emoji reactions on a specific message in a channel.
Request
Path Parameters
| Name | Type | Required | Description |
|---|---|---|---|
| channel | string | Yes | Channel ID containing the message |
| timestamp | string | Yes | Message timestamp to get reactions for |
Query Parameters
| Name | Type | Required | Description |
|---|---|---|---|
| full | boolean | No | If true, return complete reaction list for each emoji (default false) |
Response
Examples
1. Describe method
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "describe_method",
"arguments": {
"service": "slack",
"method": "get_reactions"
}
}
}2. Call method
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "call_slack",
"arguments": {
"method": "get_reactions",
"params": {
"channel": "<channel>",
"timestamp": "<timestamp>"
}
}
}
}Request
GET https://app.ferrule.io/api/v1/slack/channels/:channel/messages/:timestamp/reactions Authorization: Bearer <your-api-key> Content-Type: application/json
Response
{
"ok": false,
"type": "...",
"channel": "...",
"message": {
"type": "...",
"text": "...",
"ts": "...",
"reactions": []
}
}DELETEremove_reaction/channels/:channel/messages/:timestamp/reactionsRemove an emoji reaction from a message.
Request
Path Parameters
| Name | Type | Required | Description |
|---|---|---|---|
| channel | string | Yes | Channel ID containing the message |
| timestamp | string | Yes | Message timestamp to remove the reaction from |
Query Parameters
| Name | Type | Required | Description |
|---|---|---|---|
| name | string | No | Emoji name without colons to remove |
Response
Examples
1. Describe method
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "describe_method",
"arguments": {
"service": "slack",
"method": "remove_reaction"
}
}
}2. Call method
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "call_slack",
"arguments": {
"method": "remove_reaction",
"params": {
"channel": "<channel>",
"timestamp": "<timestamp>"
}
}
}
}Request
DELETE https://app.ferrule.io/api/v1/slack/channels/:channel/messages/:timestamp/reactions Authorization: Bearer <your-api-key> Content-Type: application/json
Response
{
"ok": false
}POSTadd_pin/channels/:channel/messages/:timestamp/pinsPin a message in a Slack channel.
Request
Path Parameters
| Name | Type | Required | Description |
|---|---|---|---|
| channel | string | Yes | Channel ID containing the message |
| timestamp | string | Yes | Message timestamp to pin |
Response
Examples
1. Describe method
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "describe_method",
"arguments": {
"service": "slack",
"method": "add_pin"
}
}
}2. Call method
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "call_slack",
"arguments": {
"method": "add_pin",
"params": {
"channel": "<channel>",
"timestamp": "<timestamp>"
}
}
}
}Request
POST https://app.ferrule.io/api/v1/slack/channels/:channel/messages/:timestamp/pins Authorization: Bearer <your-api-key> Content-Type: application/json
Response
{
"ok": false
}DELETEremove_pin/channels/:channel/messages/:timestamp/pinsUnpin a message from a Slack channel.
Request
Path Parameters
| Name | Type | Required | Description |
|---|---|---|---|
| channel | string | Yes | Channel ID containing the message |
| timestamp | string | Yes | Message timestamp to unpin |
Response
Examples
1. Describe method
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "describe_method",
"arguments": {
"service": "slack",
"method": "remove_pin"
}
}
}2. Call method
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "call_slack",
"arguments": {
"method": "remove_pin",
"params": {
"channel": "<channel>",
"timestamp": "<timestamp>"
}
}
}
}Request
DELETE https://app.ferrule.io/api/v1/slack/channels/:channel/messages/:timestamp/pins Authorization: Bearer <your-api-key> Content-Type: application/json
Response
{
"ok": false
}GETlist_pins/channels/:channel/pinsList all pinned messages in a Slack channel.
Request
Path Parameters
| Name | Type | Required | Description |
|---|---|---|---|
| channel | string | Yes | Channel ID to list pins for |
Response
Examples
1. Describe method
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "describe_method",
"arguments": {
"service": "slack",
"method": "list_pins"
}
}
}2. Call method
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "call_slack",
"arguments": {
"method": "list_pins",
"params": {
"channel": "<channel>"
}
}
}
}Request
GET https://app.ferrule.io/api/v1/slack/channels/:channel/pins Authorization: Bearer <your-api-key> Content-Type: application/json
Response
{
"ok": false,
"items": []
}POSTupload_file/filesUpload a file to a Slack channel. Supports text content or base64-encoded binary files (xlsx, pdf, images, etc.). Uses the V2 upload API.
Request
Query Parameters
| Name | Type | Required | Description |
|---|---|---|---|
| channel_id | string | No | Channel ID to upload the file to |
| filename | string | No | Filename for the uploaded file |
| content | string | No | Text content of the file (mutually exclusive with content_base64) |
| content_base64 | string | No | Base64-encoded binary content (mutually exclusive with content). Use for xlsx, pdf, images, etc. |
| initial_comment | string | No | Message to include with the file upload |
| thread_ts | string | No | Thread timestamp to upload to (for threaded file shares) |
Response
Examples
1. Describe method
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "describe_method",
"arguments": {
"service": "slack",
"method": "upload_file"
}
}
}2. Call method
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "call_slack",
"arguments": {
"method": "upload_file",
"params": {}
}
}
}Request
POST https://app.ferrule.io/api/v1/slack/files Authorization: Bearer <your-api-key> Content-Type: application/json
Response
{
"ok": false,
"files": []
}GETlist_users/usersList all users in the Slack workspace. Returns members with their profiles.
Request
Query Parameters
| Name | Type | Required | Description |
|---|---|---|---|
| limit | string | No | Maximum number of items to return per page (default 20, max 999) |
Pagination
| Name | Type | Required | Description |
|---|---|---|---|
| cursor | string | No | Pagination cursor from previous response's response_metadata.next_cursor |
Response
Examples
1. Describe method
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "describe_method",
"arguments": {
"service": "slack",
"method": "list_users"
}
}
}2. Call method
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "call_slack",
"arguments": {
"method": "list_users",
"params": {}
}
}
}Request
GET https://app.ferrule.io/api/v1/slack/users Authorization: Bearer <your-api-key> Content-Type: application/json
Response
{
"ok": false,
"members": [],
"response_metadata": {
"next_cursor": "...",
"scopes": [],
"warnings": []
}
}GETget_user_info/users/:userGet detailed information about a Slack user by their user ID.
Request
Path Parameters
| Name | Type | Required | Description |
|---|---|---|---|
| user | string | Yes | Slack user ID (e.g. U1234567890) |
Response
Examples
1. Describe method
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "describe_method",
"arguments": {
"service": "slack",
"method": "get_user_info"
}
}
}2. Call method
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "call_slack",
"arguments": {
"method": "get_user_info",
"params": {
"user": "<user>"
}
}
}
}Request
GET https://app.ferrule.io/api/v1/slack/users/:user Authorization: Bearer <your-api-key> Content-Type: application/json
Response
{
"ok": false,
"user": {
"id": "...",
"name": "...",
"real_name": "...",
"is_bot": false,
"is_admin": false,
"is_owner": false,
"deleted": false,
"tz": "...",
"tz_label": "...",
"profile": {
"real_name": "...",
"display_name": "...",
"email": "...",
"image_72": "...",
"title": "...",
"status_text": "...",
"status_emoji": "..."
}
}
}GETlookup_user_by_email/users/lookup-by-emailLook up a Slack user by their email address. Returns the user's profile.
Request
Query Parameters
| Name | Type | Required | Description |
|---|---|---|---|
| string | No | Email address to look up |
Response
Examples
1. Describe method
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "describe_method",
"arguments": {
"service": "slack",
"method": "lookup_user_by_email"
}
}
}2. Call method
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "call_slack",
"arguments": {
"method": "lookup_user_by_email",
"params": {}
}
}
}Request
GET https://app.ferrule.io/api/v1/slack/users/lookup-by-email Authorization: Bearer <your-api-key> Content-Type: application/json
Response
{
"ok": false,
"user": {
"id": "...",
"name": "...",
"real_name": "...",
"is_bot": false,
"is_admin": false,
"is_owner": false,
"deleted": false,
"tz": "...",
"tz_label": "...",
"profile": {
"real_name": "...",
"display_name": "...",
"email": "...",
"image_72": "...",
"title": "...",
"status_text": "...",
"status_emoji": "..."
}
}
}