Slack Connector
Auth type: oauth2 (Slack bot token, xoxb-*)
The Slack connector provides 6 actions covering messages, channels, users, and threads.
Setup
Slack uses OAuth2. You’ll need a Slack app with the right scopes:
- Create a Slack app at api.slack.com/apps
- Add bot token scopes:
chat:write,channels:read,users:read,search:read,channels:write.topic - Install the app to your workspace
- Complete the OAuth flow through Feelr:
# Via CLI
feelr auth slack
# Via API -- get the OAuth config
curl https://api.feelr.dev/admin/oauth/slack/config \
-H "Authorization: Bearer $ADMIN_TOKEN"Slack tokens are automatically refreshed by Feelr’s token coordinator when they expire.
Action Reference
Messages
| Action | Description | Required Params | Returns |
|---|---|---|---|
messages.send | Send a message to a channel | channel, text | {ts, text, channel, user, thread_ts, reply_count, type} |
messages.search | Search messages across workspace | query | [{ts, text, user, thread_ts, reply_count, type, channel}] |
messages.send optional params: thread_ts (reply in thread)
messages.search optional params: sort (score/timestamp, default: score), count (results per page, max 100, default: 20)
Channels
| Action | Description | Required Params | Returns |
|---|---|---|---|
channels.list | List workspace channels | — | [{id, name, topic, purpose, num_members, is_archived, is_private, created}] |
channels.setTopic | Set a channel topic | channel, topic | {id, name, topic, purpose, num_members, is_archived, is_private, created} |
channels.list optional params: types (public_channel/private_channel, default: public_channel), limit (max 1000, default: 200), exclude_archived (boolean, default: true)
Users
| Action | Description | Required Params | Returns |
|---|---|---|---|
users.list | List workspace users | — | [{id, name, real_name, display_name, is_bot, is_admin, status_text, status_emoji}] |
users.list optional params: limit (max 1000, default: 200)
Threads
| Action | Description | Required Params | Returns |
|---|---|---|---|
threads.reply | Reply to a thread | channel, thread_ts, text | {ts, text, channel, user, thread_ts, reply_count, type} |
The channel param accepts either a channel ID (e.g., C1234567890) or channel name (e.g., #general).
Examples
Send a message
curl -X POST https://api.feelr.dev/v1/slack/messages.send \
-H "X-Feelr-Key: fk_live_..." \
-H "Content-Type: application/json" \
-d '{"channel": "#general", "text": "Hello from Feelr!"}'feelr run slack messages.send channel=#general text="Hello from Feelr!"Search messages
curl "https://api.feelr.dev/v1/slack/messages.search?query=deploy%20production" \
-H "X-Feelr-Key: fk_live_..."feelr run slack messages.search query="deploy production"List channels
curl "https://api.feelr.dev/v1/slack/channels.list?types=public_channel,private_channel" \
-H "X-Feelr-Key: fk_live_..."feelr run slack channels.list types=public_channel,private_channel