# Slack on boxd

> Slack is a channel-based messaging platform. With Slack, people can work together more effectively, connect all their software tools and services, and find the information they need to do their best work - all within a secure, enterprise-grade environment.

- Page: https://boxd.sh/integrations/slack/
- CLI: `run slack` (166 commands, 40 marked common)
- SDK: `import { slack } from "@boxd/run"`; every parameter and response type is at `@boxd/run/slack`
- Triggers: 9
- Connect: `run auth slack` (Sign in with Slack), or https://app.boxd.sh/integrations/detail/slack
- All integrations: https://boxd.sh/integrations/ (Markdown: https://boxd.sh/integrations/index.md)

## From the shell

```sh
run auth slack      # once: prints a link to connect your account
run slack           # list its commands
run slack find-users
```

Parameters are flags (`--flag value`); object and array parameters take a JSON string. Output is YAML, or JSON with `--json`. Calls use your own connection; `--scope <name>` uses a connection shared with your team.

## From a script

```ts
import { slack } from "@boxd/run";

const result = await slack.findUsers({});
console.log(result);

slack.on("channel-created", async (event) => {
  // New Channel Created Trigger: runs on this machine, once per event
  console.log(event);
});
```

Run it with `run slack.run.ts`. A script that calls `.on()` keeps running as a job and handles each event.

## Commands

Required flags are listed; `run slack <command> --help` lists the optional ones. "common" marks what `run slack` shows without `--all`.

| Command | SDK method | Required flags | Optional | Description |
|---|---|---|---|---|
| `add-call-participants` | `slack.addCallParticipants()` | `--id` `--users` | 0 | Registers new participants added to a Slack call |
| `add-emoji` | `slack.addEmoji()` | `--name` `--url` | 0 | Adds a custom emoji to a Slack workspace given a unique name and an image URL; subject to workspace emoji limits |
| `add-emoji-alias` | `slack.addEmojiAlias()` | `--alias-for` `--name` | 0 | Adds an alias for an existing custom emoji in a Slack Enterprise Grid organization |
| `add-enterprise-user-to-workspace` | `slack.addEnterpriseUserToWorkspace()` | `--team-id` `--user-id` | 3 | Adds an Enterprise user to a workspace |
| `add-reaction-to-item` ·common | `slack.addReactionToItem()` | `--channel` `--name` `--timestamp` | 0 | Adds a specified emoji reaction to an existing message in a Slack channel, identified by its timestamp; does not remove or retrieve reactions |
| `add-remote-file` | `slack.addRemoteFile()` | `--external-id` `--external-url` `--title` | 3 | Adds a reference to an external file (e.g., Google Drive, Dropbox) to Slack for discovery and sharing, requiring a unique `external_id` and an `external_url` accessible by Slack |
| `add-star` | `slack.addStar()` | — | 4 | Stars a channel, file, file comment, or a specific message in Slack |
| `admin-conversations-search` ·common | `slack.adminConversationsSearch()` | — | 9 | Search for public or private channels in an Enterprise organization |
| `api-test` | `slack.apiTest()` | — | 2 | Check API calling code by testing connectivity and authentication to the Slack API |
| `archive-conversation` | `slack.archiveConversation()` | — | 1 | Archives a Slack conversation by its ID, rendering it read-only and hidden while retaining history, ideal for cleaning up inactive channels; be aware that some channels (like #general or certain DMs)… |
| `assistant-search-context` ·common | `slack.assistantSearchContext()` | `--query` | 19 | Search Slack messages, files, channels, and users via Real-time Search API |
| `assistant-search-info` | `slack.assistantSearchInfo()` | — | 0 | Check if semantic (AI-powered) search is available on the Slack workspace |
| `chat-post-message` ·common | `slack.chatPostMessage()` | `--channel` | 11 | (DEPRECATED: use `send-message`) Posts a message to a Slack channel, DM, or private group; requires at least one content field (`markdown_text`, `text`, `blocks`, or `attachments`), omitting all… |
| `close-dm` | `slack.closeDm()` | `--channel` | 0 | Closes a Slack direct message (DM) or multi-person direct message (MPDM) channel, removing it from the user's sidebar without deleting history; this action affects only the calling user's view |
| `convert-channel-to-private` | `slack.convertChannelToPrivate()` | `--channel-id` | 1 | Convert a public Slack channel to private using the Admin API |
| `create-canvas` ·common | `slack.createCanvas()` | — | 3 | Creates a new Slack Canvas with the specified title and optional content |
| `create-channel` | `slack.createChannel()` | `--name` | 2 | Initiates a public or private channel-based conversation in a Slack workspace |
| `create-channel-based-conversation` | `slack.createChannelBasedConversation()` | `--is-private` `--name` | 3 | Creates a new public or private Slack channel with a unique name; the channel can be org-wide, or team-specific if `team_id` is given (required if `org_wide` is false or not provided) |
| `create-enterprise-team` | `slack.createEnterpriseTeam()` | `--team-domain` `--team-name` | 2 | Create an Enterprise team in Slack |
| `create-list` ·common | `slack.createList()` | `--name` | 5 | Creates a new Slack List via `slackLists.create` |
| `create-list-item` ·common | `slack.createListItem()` | `--list-id` | 3 | Creates a new item (row) in a Slack List via `slackLists.items.create` |
| `create-reminder` ·common | `slack.createReminder()` | `--text` `--time` | 2 | Creates a Slack reminder with specified text and time; time accepts Unix timestamps, seconds from now, or natural language (e.g., 'in 15 minutes', 'every Thursday at 2pm') |
| `create-user-group` | `slack.createUserGroup()` | `--name` | 7 | Creates a new User Group (often referred to as a subteam) in a Slack workspace |
| `customize-url-unfurl` | `slack.customizeUrlUnfurl()` | — | 10 | Customizes URL previews (unfurling) in a specific Slack message using a URL-encoded JSON in `unfurls` to define custom content or remove existing previews |
| `delete-canvas` ·common | `slack.deleteCanvas()` | `--canvas-id` | 0 | Deletes a Slack Canvas permanently and irreversibly |
| `delete-channel` | `slack.deleteChannel()` | `--channel-id` | 0 | Permanently and irreversibly deletes a specified public or private channel, including all its messages and files, within a Slack Enterprise Grid organization |
| `delete-file` | `slack.deleteFile()` | `--file` | 0 | Permanently deletes an existing file from a Slack workspace using its unique file ID; this action is irreversible and also removes any associated comments or shares |
| `delete-file-comment` | `slack.deleteFileComment()` | `--file` `--id` | 0 | Deletes a specific comment from a file in Slack; this action is irreversible |
| `delete-list-access` ·common | `slack.deleteListAccess()` | `--list-id` | 2 | Revokes sharing access on a Slack List via `slackLists.access.delete` |
| `delete-list-item` ·common | `slack.deleteListItem()` | `--id` `--list-id` | 0 | Deletes an item (row) from a Slack List via `slackLists.items.delete` |
| `delete-multiple-list-items` ·common | `slack.deleteMultipleListItems()` | `--ids` `--list-id` | 0 | Deletes several items (rows) from a Slack List in one call via `slackLists.items.deleteMultiple` |
| `delete-reminder` | `slack.deleteReminder()` | `--reminder` | 1 | Deletes an existing Slack reminder, typically when it is no longer relevant or a task is completed; this operation is irreversible |
| `delete-scheduled-message` | `slack.deleteScheduledMessage()` | `--channel` `--scheduled-message-id` | 1 | Deletes a pending, unsent scheduled message from the specified Slack channel, identified by its `scheduled_message_id` |
| `delete-user-profile-photo` | `slack.deleteUserProfilePhoto()` | — | 0 | Deletes the Slack profile photo for the user identified by the token, reverting them to the default avatar; this action is irreversible and succeeds even if no custom photo was set |
| `deletes-message-from-chat` | `slack.deletesMessageFromChat()` | — | 3 | Deletes a message, identified by its channel ID and timestamp, from a Slack channel, private group, or direct message conversation; the authenticated user or bot must be the original poster |
| `disable-user-group` | `slack.disableUserGroup()` | `--usergroup` | 2 | Disables a specified, currently enabled Slack User Group by its unique ID, effectively archiving it by setting its 'date_delete' timestamp; the group is not permanently deleted and can be re-enabled |
| `download-file` ·common | `slack.downloadFile()` | `--file` | 4 | Download Slack file content and convert it to a publicly accessible URL |
| `edit-canvas` ·common | `slack.editCanvas()` | `--canvas-id` | 4 | Edits a Slack Canvas with granular control over content placement |
| `enable-public-sharing-of-file` | `slack.enablePublicSharingOfFile()` | `--file` | 0 | Enables public sharing for an existing Slack file by generating a publicly accessible URL; this action does not create new files |
| `enable-user-group` | `slack.enableUserGroup()` | `--usergroup` | 2 | Enables a disabled User Group in Slack using its ID, reactivating it for mentions and permissions; this action only changes the enabled status and cannot create new groups or modify other properties |
| `end-call` | `slack.endCall()` | `--id` | 1 | Ends an ongoing Slack call, identified by its ID (obtained from `calls.add`), optionally specifying the call's duration |
| `end-dnd` | `slack.endDnd()` | — | 0 | Ends the authenticated user's current Do Not Disturb (DND) session in Slack, affecting only DND status and making them available; if DND is not active, Slack acknowledges the request without changing… |
| `end-snooze` | `slack.endSnooze()` | — | 0 | Ends the current user's snooze mode immediately |
| `fetch-conversation-history` ·common | `slack.fetchConversationHistory()` | `--channel` | 6 | Fetches a chronological list of messages and events from a specified Slack conversation, accessible by the authenticated user/bot, with options for pagination and time range filtering |
| `fetch-item-reactions` | `slack.fetchItemReactions()` | — | 5 | Fetches reactions for a Slack message, file, or file comment |
| `fetch-message-thread-from-conversation` | `slack.fetchMessageThreadFromConversation()` | — | 8 | Retrieves replies to a specific parent message in a Slack conversation, using the channel ID and the parent message's timestamp (`ts`) |
| `fetch-team-info` | `slack.fetchTeamInfo()` | — | 2 | Fetches comprehensive metadata about the current Slack team, or a specified team if the provided ID is accessible |
| `find-channels` ·common | `slack.findChannels()` | `--query` | 6 | Find channels in a Slack workspace by any criteria - name, topic, purpose, or description |
| `find-user-by-email-address` | `slack.findUserByEmailAddress()` | `--email` | 0 | Retrieves the Slack user object for an active user by their registered email address; requires the users:read.email OAuth scope |
| `find-users` ·common | `slack.findUsers()` | — | 9 | Find users in a Slack workspace by any criteria - email, name, display name, or other text |
| `get-app-permission-scopes` ·deprecated | `slack.getAppPermissionScopes()` | — | 1 | Use test-auth instead |
| `get-audit-action-types` | `slack.getAuditActionTypes()` | — | 0 | Retrieve information about action types available in the Slack Audit Logs API |
| `get-audit-schemas` | `slack.getAuditSchemas()` | — | 0 | Retrieve object schema information from the Slack Audit Logs API |
| `get-bot-user` | `slack.getBotUser()` | — | 2 | Fetches information for a specified, existing Slack bot user; will not work for regular user accounts or other integration types |
| `get-call-info` | `slack.getCallInfo()` | `--id` | 0 | Retrieves a point-in-time snapshot of a specific Slack call's information |
| `get-canvas` ·common ·deprecated | `slack.getCanvas()` | `--canvas-id` | 4 | Use SLACK_RETRIEVE_DETAILED_INFORMATION_ABOUT_FILE instead |
| `get-channel-conversation-preferences` | `slack.getChannelConversationPreferences()` | `--channel-id` | 0 | Retrieves conversation preferences (e.g., who can post, who can thread) for a specified channel, primarily for use within Slack Enterprise Grid environments |
| `get-list-item` ·common | `slack.getListItem()` | `--id` `--list-id` | 1 | Fetches a single item (row) from a Slack List via `slackLists.items.info` |
| `get-reminder` | `slack.getReminder()` | `--reminder` | 1 | Retrieves detailed information for an existing Slack reminder specified by its ID; this is a read-only operation |
| `get-remote-file` | `slack.getRemoteFile()` | — | 2 | Retrieve information about a remote file added to Slack via the files.remote API |
| `get-team-profile` | `slack.getTeamProfile()` | — | 2 | Retrieves all profile field definitions for a Slack team, optionally filtered by visibility, to understand the team's profile structure |
| `get-unread-messages-from-user` ·common | `slack.getUnreadMessagesFromUser()` | `--user-id` | 1 | Retrieves unread direct messages from a specific user by opening their DM conversation, checking for unread messages, and fetching message history since the last read timestamp |
| `get-user-dnd-status` | `slack.getUserDndStatus()` | `--users` | 1 | Retrieves a user's current Do Not Disturb status |
| `get-user-presence` | `slack.getUserPresence()` | — | 1 | Retrieves a Slack user's current real-time presence (e.g., 'active', 'away') to determine their availability, noting this action does not provide historical data or status reasons |
| `get-workspace-connections-for-channel` | `slack.getWorkspaceConnectionsForChannel()` | `--channel-id` | 2 | Get all workspaces a channel is connected to within an Enterprise org |
| `get-workspace-settings` | `slack.getWorkspaceSettings()` | `--team-id` | 0 | Retrieves detailed settings for a specific Slack workspace, primarily for administrators in an Enterprise Grid organization to view or audit workspace configurations |
| `invite-user-to-channel` | `slack.inviteUserToChannel()` | `--channel-id` `--user-ids` | 0 | Invites users to a specified Slack channel; this action is restricted to Enterprise Grid workspaces and requires the authenticated user to be a member of the target channel |
| `invite-user-to-workspace` | `slack.inviteUserToWorkspace()` | `--channel-ids` `--email` `--team-id` | 7 | Invites a user to a Slack workspace and specified channels by email; use `resend=True` to re-process an existing invitation for a user not yet signed up |
| `invite-users-to-channel` | `slack.inviteUsersToChannel()` | — | 3 | Invites users to an existing Slack channel using their valid Slack User IDs |
| `join-existing-conversation` | `slack.joinExistingConversation()` | `--channel` | 0 | Joins an existing Slack conversation (public channel, private channel, or multi-person direct message) by its ID, if the authenticated user has permission |
| `leave-conversation` | `slack.leaveConversation()` | `--channel` | 0 | Leaves a Slack conversation given its channel ID; fails if leaving as the last member of a private channel or if used on a Slack Connect channel |
| `list-admin-apps-approved` | `slack.listAdminAppsApproved()` | — | 5 | List approved apps for an Enterprise Grid organization or workspace |
| `list-admin-apps-requests` | `slack.listAdminAppsRequests()` | — | 5 | List pending app installation requests for a team/workspace |
| `list-admin-emoji` | `slack.listAdminEmoji()` | — | 2 | List custom emoji across an Enterprise Grid organization |
| `list-all-channels` ·common | `slack.listAllChannels()` | — | 5 | Lists conversations available to the user with various filters and search options |
| `list-all-users` ·common | `slack.listAllUsers()` | — | 4 | Retrieves a paginated list of all users with profile details, status, and team memberships in a Slack workspace; data may not be real-time |
| `list-approved-workspace-invite-requests` | `slack.listApprovedWorkspaceInviteRequests()` | — | 3 | List all approved workspace invite requests with pagination support |
| `list-auth-teams` | `slack.listAuthTeams()` | — | 3 | Obtains a paginated list of workspaces your org-wide app has been approved for |
| `list-available-workspaces` ·common | `slack.listAvailableWorkspaces()` | `--user` | 0 | List Slack workspaces where both the connection and target user have access |
| `list-canvases` ·common ·deprecated | `slack.listCanvases()` | — | 8 | Use list-files-with-filters-in-slack instead (pass types="canvas" for equivalent behavior) |
| `list-conversations` | `slack.listConversations()` | — | 6 | List conversations (channels/DMs) accessible to a specified user (or the authenticated user if no user ID is provided), respecting shared membership for non-public channels |
| `list-custom-emojis` | `slack.listCustomEmojis()` | — | 1 | Retrieves all custom emojis for the Slack workspace (image URLs or aliases), not standard Unicode emojis; does not include usage statistics or creation dates |
| `list-denied-workspace-invite-requests` | `slack.listDeniedWorkspaceInviteRequests()` | — | 3 | List all denied workspace invite requests with details about who denied them and when |
| `list-enterprise-teams` ·common | `slack.listEnterpriseTeams()` | — | 2 | List all teams (workspaces) in a Slack Enterprise Grid organization with pagination support |
| `list-files-with-filters-in-slack` | `slack.listFilesWithFiltersInSlack()` | — | 9 | Lists files and their metadata within a Slack workspace, filterable by user, channel, timestamp, or type; returns metadata only, not file content |
| `list-idp-groups-linked-to-channel` | `slack.listIdpGroupsLinkedToChannel()` | `--channel-id` | 1 | Lists IDP groups that have restricted access to a private Slack channel |
| `list-list-items` ·common | `slack.listListItems()` | `--list-id` | 3 | Lists the rows (items) in a Slack List via `slackLists.items.list` |
| `list-pending-workspace-invite-requests` | `slack.listPendingWorkspaceInviteRequests()` | — | 3 | List all pending workspace invite requests |
| `list-pinned-items` | `slack.listPinnedItems()` | `--channel` | 0 | Retrieves all messages and files pinned to a specified channel; the caller must have access to this channel |
| `list-reminders` | `slack.listReminders()` | — | 1 | Lists all reminders with their details for the authenticated Slack user; returns an empty array if no reminders exist (valid state, not an error) |
| `list-remote-files` | `slack.listRemoteFiles()` | — | 5 | Retrieve information about a team's remote files |
| `list-restricted-apps` ·common | `slack.listRestrictedApps()` | — | 5 | List restricted apps for an org or workspace |
| `list-scheduled-messages` | `slack.listScheduledMessages()` | — | 6 | Retrieves a list of pending (not yet delivered) messages scheduled in a specific Slack channel, or across all accessible channels if no channel ID is provided, optionally filtered by time and… |
| `list-starred-items` | `slack.listStarredItems()` | — | 5 | Lists items starred by a user |
| `list-unread-channel-messages` ·common | `slack.listUnreadChannelMessages()` | `--channel` | 3 | Lists all unread messages in a specified Slack channel for the authenticated user |
| `list-user-group-members` | `slack.listUserGroupMembers()` | `--usergroup` | 2 | Retrieves a list of all user IDs within a specified Slack user group, with an option to include users from disabled groups |
| `list-user-groups` | `slack.listUserGroups()` | — | 4 | Lists user groups in a Slack workspace, including user-created and default groups; results for large workspaces may be paginated |
| `list-user-reactions` | `slack.listUserReactions()` | — | 7 | Lists all reactions added by a specific user to messages, files, or file comments in Slack, useful for engagement analysis when the item content itself is not required |
| `list-workspace-admins` | `slack.listWorkspaceAdmins()` | `--team-id` | 2 | List all admins on a given Slack workspace |
| `list-workspace-owners` | `slack.listWorkspaceOwners()` | `--team-id` | 2 | List all owners on a given Slack workspace |
| `list-workspace-users` | `slack.listWorkspaceUsers()` | — | 6 | Retrieves a paginated list of admin users for a specified Slack workspace |
| `lookup-canvas-sections` ·common | `slack.lookupCanvasSections()` | `--canvas-id` `--criteria` | 0 | Looks up section IDs in a Slack Canvas for use with targeted edit operations |
| `manually-set-user-presence` | `slack.manuallySetUserPresence()` | `--presence` | 0 | (DEPRECATED: use `set-user-presence`) Manually sets a user's Slack presence, overriding automatic detection; this setting persists across connections but can be overridden by user actions or Slack's… |
| `open-dm` | `slack.openDm()` | — | 4 | Opens or resumes a Slack direct message (DM) or multi-person direct message (MPIM) by providing either user IDs or an existing channel ID |
| `pin-item` | `slack.pinItem()` | `--channel` `--timestamp` | 0 | Pins a message to a specified Slack channel; the message must not already be pinned |
| `read-audit-logs` ·common | `slack.readAuditLogs()` | — | 7 | Read Slack Enterprise Grid Audit Logs (logins, admin changes, app installs, channel/privacy changes, etc.) with server-side filters and pagination |
| `remove-call-participants` | `slack.removeCallParticipants()` | `--id` `--users` | 0 | Registers participants removed from a Slack call |
| `remove-emoji` | `slack.removeEmoji()` | `--name` | 0 | Remove a custom emoji across an Enterprise Grid organization |
| `remove-reaction-from-item` ·common | `slack.removeReactionFromItem()` | `--name` | 4 | Removes an emoji reaction from a message, file, or file comment in Slack |
| `remove-remote-file` | `slack.removeRemoteFile()` | — | 3 | Removes the Slack reference to an external file (which must have been previously added via the remote files API), specified by either its `external_id` or `file` ID (one of which is required)… |
| `remove-star` | `slack.removeStar()` | — | 4 | Removes a star from a previously starred Slack item (message, file, file comment, channel, group, or DM), requiring identification via `file`, `file_comment`, `channel` (for channel/group/DM), or… |
| `remove-user-from-conversation` | `slack.removeUserFromConversation()` | — | 2 | Removes a specified user from a Slack conversation (channel); the caller must have permissions to remove users and cannot remove themselves using this action |
| `remove-user-from-workspace` | `slack.removeUserFromWorkspace()` | `--team-id` `--user-id` | 0 | Remove a user from a Slack workspace |
| `rename-conversation` | `slack.renameConversation()` | — | 2 | Renames a Slack channel, automatically adjusting the new name to meet naming conventions (e.g., converting to lowercase), which may affect integrations using the old name |
| `rename-emoji` | `slack.renameEmoji()` | `--name` `--new-name` | 0 | Renames an existing custom emoji in a Slack workspace, updating all its instances |
| `reset-user-sessions` | `slack.resetUserSessions()` | `--user-id` | 2 | Wipe all valid sessions on all devices for a given user |
| `restrict-app-installation` | `slack.restrictAppInstallation()` | — | 4 | Restrict an app for installation on a workspace |
| `retrieve-conversation-information` | `slack.retrieveConversationInformation()` | — | 3 | Retrieves metadata for a Slack conversation by ID (e.g., name, purpose, creation date, with options for member count/locale), excluding message content |
| `retrieve-conversation-members-list` | `slack.retrieveConversationMembersList()` | — | 3 | Retrieves a paginated list of active member IDs (not names, emails, or presence) for a specified Slack public channel, private channel, DM, or MPIM |
| `retrieve-current-user-dnd-status` | `slack.retrieveCurrentUserDndStatus()` | — | 2 | Retrieves a Slack user's current Do Not Disturb (DND) status to determine their availability before interaction; any specified user ID must be a valid Slack user ID |
| `retrieve-detailed-information-about-file` | `slack.retrieveDetailedInformationAboutFile()` | `--file` | 4 | Retrieves detailed metadata and paginated comments for a specific Slack file ID; does not download file content |
| `retrieve-detailed-user-information` | `slack.retrieveDetailedUserInformation()` | — | 2 | Retrieves comprehensive information for a valid Slack user ID, excluding message history and channel memberships |
| `retrieve-message-permalink-url` | `slack.retrieveMessagePermalinkUrl()` | `--channel` `--message-ts` | 0 | Retrieves a permalink URL for a specific message in a Slack channel or conversation; the permalink respects Slack's privacy settings |
| `retrieve-user-profile-information` | `slack.retrieveUserProfileInformation()` | — | 2 | Retrieves profile information for a specified Slack user (defaults to the authenticated user if `user` ID is omitted); a provided `user` ID must be valid |
| `retrieve-user-s-identity-details` | `slack.retrieveUserSIdentityDetails()` | — | 0 | Retrieves the authenticated user's and their team's identity, with details varying based on OAuth scopes (e.g., `identity.basic`, `identity.email`, `identity.avatar`) |
| `revoke-file-public-sharing` | `slack.revokeFilePublicSharing()` | `--file` | 0 | Revokes a Slack file's public URL, making it private; this is a no-op if not already public and is irreversible |
| `rtm-connect` | `slack.rtmConnect()` | — | 2 | Starts a Real Time Messaging session and returns a WebSocket URL |
| `rtm-start` | `slack.rtmStart()` | — | 7 | Starts a Real Time Messaging API session for Slack |
| `schedule-message` ·common | `slack.scheduleMessage()` | — | 12 | Schedules a message to a Slack channel, DM, or private group for a future time (`post_at`), requiring `text`, `blocks`, or `attachments` for content; scheduling is limited to 120 days in advance |
| `scim-get-config` | `slack.scimGetConfig()` | — | 0 | Retrieve SCIM service provider configuration from Slack |
| `search-all` ·common | `slack.searchAll()` | `--query` | 6 | Search all messages and files |
| `search-messages` ·common | `slack.searchMessages()` | `--query` | 8 | Workspace‑wide Slack message search with date ranges and filters |
| `send-ephemeral-message` | `slack.sendEphemeralMessage()` | `--channel` `--user` | 11 | Sends an ephemeral message visible only to the specified `user` in a channel; other channel members cannot see it |
| `send-me-message` | `slack.sendMeMessage()` | — | 2 | Sends a 'me message' (e.g., '/me is typing') to a Slack channel, where it's displayed as a third-person user action; messages are plain text and the channel must exist and be accessible |
| `send-message` ·common | `slack.sendMessage()` | `--channel` | 7 | Posts a message to a Slack channel, DM, or private group |
| `set-admin-user` | `slack.setAdminUser()` | `--team-id` `--user-id` | 0 | Promotes an existing workspace member (guest, regular user, or owner) to admin status |
| `set-conversation-prefs` | `slack.setConversationPrefs()` | `--channel-id` `--prefs` | 0 | Sets the posting permissions for a public or private channel in Slack |
| `set-conversation-purpose` | `slack.setConversationPurpose()` | — | 2 | Sets the purpose (a short description of its topic/goal, displayed in the header) for a Slack conversation; the calling user must be a member |
| `set-default-channels` | `slack.setDefaultChannels()` | `--channel-ids` `--team-id` | 0 | Set the default channels of a workspace |
| `set-dnd-duration` | `slack.setDndDuration()` | `--num-minutes` | 0 | Turns on Do Not Disturb mode for the current user, or changes its duration |
| `set-list-access` ·common | `slack.setListAccess()` | `--access-level` `--list-id` | 2 | Grants or sets sharing access on a Slack List via `slackLists.access.set` |
| `set-profile-photo` | `slack.setProfilePhoto()` | `--image` | 3 | This method allows the user to set their profile image |
| `set-read-cursor-in-conversation` | `slack.setReadCursorInConversation()` | — | 2 | Marks a message, specified by its timestamp (`ts`), as the most recently read for the authenticated user in the given `channel`, provided the user is a member of the channel and the message exists… |
| `set-status` | `slack.setStatus()` | — | 4 | (DEPRECATED: use `set-user-profile`) Updates a Slack user's profile, setting either individual fields or multiple fields via a JSON object |
| `set-topic-of-conversation` | `slack.setTopicOfConversation()` | — | 2 | Sets or updates the topic for a specified Slack conversation |
| `set-user-active` | `slack.setUserActive()` | — | 0 | Mark a user as active in Slack |
| `set-user-presence` | `slack.setUserPresence()` | `--presence` | 0 | Manually sets a user's Slack presence, overriding automatic detection; this setting persists across connections but can be overridden by user actions or Slack's auto-away (e.g., after 10 mins of… |
| `set-user-profile` | `slack.setUserProfile()` | — | 4 | Updates a Slack user's profile, setting either individual fields or multiple fields via a JSON object |
| `set-workspace-description` | `slack.setWorkspaceDescription()` | `--description` `--team-id` | 0 | Set the description of a given workspace |
| `set-workspace-icon` | `slack.setWorkspaceIcon()` | `--image-url` `--team-id` | 0 | Sets the icon of a workspace |
| `set-workspace-name` | `slack.setWorkspaceName()` | `--name` `--team-id` | 0 | Set the name of a given Slack workspace |
| `set-workspace-owner` | `slack.setWorkspaceOwner()` | `--team-id` `--user-id` | 0 | Set an existing guest, regular user, or admin user to be a workspace owner |
| `set-workspaces-for-channel` | `slack.setWorkspacesForChannel()` | `--channel-id` | 3 | Set the workspaces in an Enterprise grid org that connect to a channel |
| `share-remote-file` | `slack.shareRemoteFile()` | `--channels` | 2 | Shares a remote file, which must already be registered with Slack, into specified Slack channels or direct message conversations |
| `start-call` | `slack.startCall()` | `--external-unique-id` `--join-url` | 6 | Registers a new call in Slack using `calls.add` for third-party call integration; `created_by` is required if not using a user-specific token |
| `test-auth` ·common | `slack.testAuth()` | — | 0 | Checks authentication and tells you who you are |
| `unarchive-channel` | `slack.unarchiveChannel()` | `--channel` | 0 | Reverses conversation archival |
| `unpin-item` | `slack.unpinItem()` | `--channel` `--timestamp` | 0 | Unpins a message, identified by its timestamp, from a specified channel if the message is currently pinned there; this operation is destructive |
| `update-call-info` | `slack.updateCallInfo()` | `--id` | 3 | Updates the title, join URL, or desktop app join URL for an existing Slack call identified by its ID |
| `update-list` ·common | `slack.updateList()` | `--id` | 3 | Updates a Slack List's metadata via `slackLists.update` |
| `update-list-item` ·common | `slack.updateListItem()` | `--cells` `--list-id` | 0 | Updates one or more cells in an EXISTING Slack List row via `slackLists.items.update` |
| `update-remote-file` | `slack.updateRemoteFile()` | — | 8 | Updates metadata or content details for an existing remote file in Slack; this action cannot upload new files or change the fundamental file type |
| `update-user-group` | `slack.updateUserGroup()` | `--usergroup` | 8 | Updates an existing Slack User Group, which must be specified by an existing `usergroup` ID, with new optional details such as its name, description, handle, or default channels |
| `update-user-group-members` | `slack.updateUserGroupMembers()` | `--usergroup` `--users` | 2 | Replaces all members of an existing Slack User Group with a new list of valid user IDs |
| `updates-message` ·common | `slack.updatesMessage()` | `--channel` `--ts` | 7 | Updates a Slack message by timestamp |
| `upload-or-create-file-in-slack` | `slack.uploadOrCreateFileInSlack()` | — | 9 | Upload files, images, screenshots, documents, or any media to Slack channels or threads |

## Triggers

`slack.on("<event>", handler)` in a script; required config goes before the handler as an object.

| Event | Name | Required config | Description |
|---|---|---|---|
| `"channel-created"` | New Channel Created Trigger | — | Triggered when a new channel is created in Slack |
| `"channel-message-received"` | Channel Message Received | — | Triggered when a message is posted in a Slack channel (public, private, or multi-party IM) |
| `"direct-message-received"` | Direct Message Received | — | Triggered when a new direct message (DM) is sent to a user in Slack |
| `"message-reaction-added"` | Message Reaction Added | — | Triggered when a reaction is added to a message in Slack |
| `"message-reaction-removed"` | Message Reaction Removed | — | Triggered when a reaction is removed from a message in Slack |
| `"reaction-added"` | Reaction Added Trigger | — | use `SLACK_MESSAGE_REACTION_ADDED` instead |
| `"reaction-removed"` | Reaction Removed Trigger | — | use `SLACK_MESSAGE_REACTION_REMOVED` instead |
| `"receive-bot-message"` | New Bot Message Received Trigger | — | use `SLACK_CHANNEL_MESSAGE_RECEIVED` with `is_bot_message=true` instead |
| `"receive-message"` | New Message Received Trigger | — | use `SLACK_CHANNEL_MESSAGE_RECEIVED` instead |

## Docs

- [run CLI](https://docs.boxd.sh/cli/run): Call connected integrations from the shell, connect new ones, and run automations.
- [Quickstart](https://docs.boxd.sh/guides/integrations/quickstart): Connect an integration, call it from the shell, and turn a script into an automation.
- [Connections](https://docs.boxd.sh/guides/integrations/connections): Connect an account once, for yourself or for your whole organization.
- [Scripts](https://docs.boxd.sh/guides/automations/scripts): Typed integrations, triggers, schedules and state in a .run.ts file.
- [Jobs](https://docs.boxd.sh/guides/automations/jobs): How a script becomes a background job: states, retries, sleep and wake.
- [Beyond the catalog](https://docs.boxd.sh/guides/automations/beyond-the-catalog): Reach your own APIs, databases and cloud accounts from a script.
