canonical: https://jentic.com/apis/slack.com/slack-web-api

# Slack Web API

Send messages, manage channels, upload files, and administer workspaces through 169 HTTP RPC-style endpoints. Supports real-time messaging, threaded conversations, emoji reactions, file sharing, user group management, app installation administration, and granular OAuth 2.0 scope-based permissions across Slack workspaces.

## For AI agents

Post messages, manage channels, query conversations, and administer Slack workspaces. Supports 169 endpoints covering messaging, file uploads, user management, and workspace administration with OAuth 2.0 scopes.

## Scope

Does not handle video calls, project management, or email delivery - use for team messaging, channel management, and file sharing only.

## Capabilities

- Post messages to channels and threads with rich formatting, blocks, and attachments
- Search messages across channels by keyword, date range, and sender
- Upload and share files with preview generation and access control
- Manage channel lifecycle including creation, archiving, topic setting, and membership
- Administer workspace-level settings, emoji, user groups, and app permissions
- React to messages with emoji and pin important messages for team reference
- Configure Do Not Disturb schedules and query team availability status

## Use cases

### AI Agent Messaging Automation

AI agents use the Slack Web API through Jentic to post structured notifications, status updates, and alerts to team channels without manual setup. An agent searches for the message posting operation, loads the schema with blocks and attachments, and executes delivery in under a minute. This powers incident alerts, deployment notifications, daily standup summaries, and automated customer escalation routing.

Example prompt: Post a message to channel C0123456 with text 'Deployment v2.4.0 completed' and a blocks array containing a section with a green checkmark emoji and deployment details

### Channel and Conversation Management

Create, archive, and configure channels programmatically to support team workflows. The Slack Web API provides 169 endpoints for setting channel topics, managing membership, adjusting posting permissions, and bulk-archiving stale channels. Organizations use this to enforce naming conventions, auto-create project channels, and maintain workspace hygiene at scale.

Example prompt: Create a private channel named 'proj-alpha-2026' with topic 'Project Alpha coordination', then invite user IDs U111, U222, and U333

### Cross-Channel Message Search and Analytics

Search messages across all accessible channels by keyword, sender, date range, and channel. The Slack search endpoints return matched messages with context, highlighting, and pagination. Teams use this for compliance audits, knowledge retrieval, and building internal search tools that surface relevant conversations without manual browsing.

Example prompt: Search for messages containing 'outage' posted in the last 48 hours across all channels and return the top 10 matches with channel name, sender, and timestamp

### File Sharing and Document Distribution

Upload files to channels or direct messages with automatic preview generation and access controls. The Slack Web API handles file upload via external URLs or direct binary upload, generates previews for common formats, and manages file permissions. This enables automated report distribution, log file sharing from CI/CD, and document collaboration workflows.

Example prompt: Upload a CSV file to channel C0123456 using files.getUploadURLExternal followed by files.completeUploadExternal with initial_comment 'Weekly sales report attached'

## Key endpoints

| Method | Path | Description |
| --- | --- | --- |
| POST | /chat.postMessage | Post a message to a channel |
| GET | /conversations.history | Fetch message history for a channel |
| POST | /conversations.create | Create a new channel |
| GET | /search.messages | Search messages across channels |
| POST | /files.getUploadURLExternal | Get upload URL for a file |
| POST | /conversations.invite | Invite users to a channel |
| POST | /reactions.add | Add an emoji reaction to a message |
| GET | /users.list | List all workspace users |

## Key resources

- **Messages** — Post, update, delete, and search messages with rich blocks, attachments, and threading
- **Conversations** — Create, archive, and configure channels with membership, topic, and permission controls
- **Files** — Upload, share, list, and manage files with access controls and preview generation
- **Users** — Query user profiles, presence status, and manage user group memberships
- **Reactions** — Add, remove, and query emoji reactions on messages
- **Admin** — Workspace-level administration for apps, conversations, emoji, teams, and user management

## Why Jentic

- **Setup:** Wiring the Slack Web API by hand means running its OAuth 2.0 authorization code flow, requesting the right scopes, and refreshing tokens yourself before posting messages or managing channels at slack.com/api. Through Jentic you install once, import Slack from the API Directory, store the OAuth token once, and your agent calls it.
- **Permission scoping:** Slack passes the channel in the request body rather than a resource id in the path, so limit the agent to the operations it needs, such as posting a message or reading conversation history. Operations like creating channels or inviting users are not included unless you add them to the allowed set.
- **Credential handling:** Your Slack OAuth token is stored once, encrypted, by your own Jentic One instance and injected at execution time. It never enters the agent's prompt, logs, or context.
- **Discovery method:** Agents search Jentic by intent such as 'post a message to a channel' or 'search messages', and Jentic returns the matching Slack operation with its input schema so the agent calls the right endpoint without browsing the reference docs.

## Related APIs

- **Twilio Conversations API** — Twilio Conversations provides multi-channel messaging (SMS, WhatsApp, chat) with a unified API
- **Zoom Meetings API** — Zoom adds video conferencing capabilities that integrate with Slack's huddle and call features
- **Asana** — Asana provides structured task management that pairs with Slack for assignment notifications
- **HubSpot Conversations API** — HubSpot Conversations handles customer-facing messaging tied to CRM records

## FAQ

### What authentication does the Slack Web API use?

The Slack Web API uses OAuth 2.0 with granular scopes. Bot tokens (xoxb-) and user tokens (xoxp-) authorize different operation sets. Each endpoint requires specific OAuth scopes listed in the spec. Through Jentic, OAuth tokens are stored encrypted in your Jentic One instance - agents receive pre-scoped tokens without managing the OAuth flow themselves.

### Can I post messages with rich formatting using the Slack Web API?

Yes. The chat.postMessage endpoint accepts a blocks array using Slack's Block Kit format. You can include sections with markdown text, images, buttons, select menus, and dividers. Alternatively, use the text parameter with Slack's mrkdwn syntax for simpler formatting. The blocks array supports up to 50 blocks per message.

### What are the rate limits for the Slack Web API?

Slack uses tiered rate limiting. Most methods allow 1 request per second (Tier 2) or 50+ per minute (Tier 3). chat.postMessage allows about 1 message per second per channel. Responses include Retry-After headers when limits are exceeded. Web API methods are classified into tiers 1-4 with increasing generosity.

### How do I search for messages across channels through Jentic?

Search Jentic for 'search Slack messages'. Jentic returns the GET /search.messages endpoint schema with query, sort, and sort_dir parameters. The query parameter supports Slack search modifiers like 'from:@user', 'in:#channel', 'before:2026-05-01'. Load the schema, set your query, and execute to get paginated results.

### Can I create channels and manage membership via the API?

Yes. Use conversations.create with a name and is_private flag to create channels. Then conversations.invite adds users by their user IDs. conversations.setTopic and conversations.setPurpose configure the channel metadata. conversations.kick removes members, and conversations.archive retires unused channels.

### How do I upload files to Slack channels?

Use the two-step upload flow: first call files.getUploadURLExternal to get a presigned upload URL and file_id, then upload the binary data to that URL, and finally call files.completeUploadExternal with the file_id and channel_id to publish it. This replaced the older files.upload endpoint and supports files up to 1GB.

### Can I limit what my agent is allowed to do with the Slack Web API?

Yes. Because you run Jentic One yourself, you decide which Slack operations your agent may call, so you can allow only what it needs, such as chat.postMessage for posting or conversations.history for reading a channel. Slack passes the channel in the request body rather than a resource id in the path, so scoping is done at the operation level rather than per channel. Operations like conversations.create or conversations.invite stay out of the allowed set unless you explicitly add them, and the OAuth token your instance holds is injected at execution time without ever reaching the agent's prompt or logs.
