Skip to main content

Release: Slack CLI v3.0.0

Version 3.0.0 of the developer tools for the Slack automations platform is here, with lots of goodies for you!

  • We renamed the slack.json file to .slack/hooks.json, and continue to support slack.json for existing projects. There is now a warning shown in --verbose output to encourage projects to migrate their slack.json to .slack/hooks.json.
  • We've removed the invalid_app_directory error from any commands run in nested project directories, and now search for the required slack.json file in the project's configuration. We also now also check for this file at .slack/hooks.json.
  • We now cache the last known manifest export; the cache is used to avoid overwriting changes on app settings. If the manifest is changed on app settings since the last update, a confirmation prompt will appear before making another update via the Slack CLI.
  • We've moved the top-level commands you know and love, slack create and slack samples, to be sub-commands of the slack project command (they remain aliased as top-level commands though, so there is no change to the user experience).
  • We've updated the slack doctor command to display the manifest.source value, which will be either local or remote.
  • We now officially support Bolt for JavaScript and Bolt for Python in the Slack CLI! 🎉
  • As such, we've updated the slack create command with a new create journey that allows you to choose between different types of apps for Bolt for JavaScript, Bolt for Python, and Deno.
  • We've also added the slack init command, which will initialize an existing Bolt for JavaScript, Bolt for Python, or Deno project with Slack CLI support.
  • We fixed a bug to avoid confusion with regular outputs, and now prefix all separate debug logs with a timestamp.
  • We fixed a bug to avoid spinning the spinner when outputting with debug logs, or if styles are removed with the --no-color flag.
  • We fixed a bug to now display uninstalled apps in selections when using the slack collaborators and slack manifest commands.
  • We fixed a bug with confirming trusted templates that are from a Slack GitHub organization.
  • We fixed a bug regarding writing console outputs to activity logs during local runs.
  • We fixed a bug where the Slack CLI would get stuck if one of the goroutines of the slack run command encountered an error; we now exit the slack run command if this happens.

Removing the Slack CLI deno command

We previously mentioned that we had deprecated the deno command and removed its listing from the help command. We have now removed the deno command completely. Developers who were depending on this command should now use the deno executable directly.

We've also removed support for the deprecated, pre-release Deno Slack SDK versions that used slack.yaml and project.ts files. The Run-on-Slack platform no longer supports the slack.yaml file format, and no production projects should be affected. The project.ts file was deprecated by the Deno Slack SDK in favor of manifest.ts and manifest.json files.

Release: Slack CLI v2.33

Version 2.33.0 of the developer tools for the Slack automations platform will be your valentine!

  • We now support running CLI commands in project sub-directories.
  • We've enhanced the script and outputs of hooks to improve debugging.
  • We've fixed a bug to properly output error messages that may occur when the slack manifest command is run.
  • We've fixed a bug to distinguish between Slack CLI names if your Slack CLI is named something other than slack.

The Data Access API is here!

This API is now available in a limited release for interested partners. Use the Data Access API within AI apps to access all the relevant Slack data you need to ensure a pleasant user experience for AI apps

Release: Slack CLI v2.32.1

Version 2.32.1 of the developer tools for the Slack automations platform has arrived!

  • In the Deno Slack Hooks 1.3.2 release, we've improved the bundling used for the slack deploy command to address some issued encountered with npm imports.

  • We fixed a bug to skip the hosted app pre-run check when the --force flag is used.

Release: Slack CLI v2.32.0

Version 2.32.0 of the developer tools for the Slack automations platform is here!

  • We improved detection of Deno projects and added test coverage to the Deno runtime for a smoother experience.
  • We improved the formatting of output when running slack env commands. We also added error messaging to these commands when the app being referenced is not a workflow app.
  • The slack env remove command now exits without erroring when there are no environment variables to remove.
  • We enhanced text styling for easier reading.
  • We improved some internal processes that allow us to keep our documentation fresh and up-to-date.
  • We improved the error messaging of our slack datastore commands.
  • We updated our documentation and errors displayed when using slack external-auth subcommands with non-workflow apps.
  • We now raise errors that may impact the validation of selected authentications.
  • We now hide blank source errors that may have caused confusion; they have been replaced with more helpful messaging.

Slack App Developer Policy updates

On December 10, 2024, we updated the Slack App Developer Policy to add clarity to guidance from our documentation that apps intended for commercial distribution at scale should go through Slack Marketplace review.

While gathering feedback from early customers helps improve your apps, the Slack Marketplace is the right place for apps as they begin to grow. The Slack Marketplace guidelines and our review process help keep the Slack app ecosystem working and customer data secure.

We also clarified existing guidelines about the usage of data collected by your app. Specifically, we are making explicit that the use of data to train an LLM is prohibited.

Slack platform API and tools docs are moving

As you may have read in our November newsletter, Slack platform API documentation is moving! The Slack Documentation team is currently overhauling the API documentation—both front-end and back-end—to enhance your developer documentation experience.

While you won’t see any changes until March 2025, we promise to keep you in the loop. Change is a journey, and we’re here with you every step of the way!

Release: Slack CLI v2.31.0

Version 2.31.0 of the developer tools for the Slack automations platform has landed!

We fixed a bug that would display errors when the slack run command was interrupted during app selection. The fix also includes an org_grant_exists error, which is raised if an attempt is made to grant installation permission to another workspace when your app has already been granted one.

Legacy bots and classic apps deprecation timeline adjustment

We want to update you about our previous announcement regarding support for legacy custom bots and classic apps. After much consideration and feedback, we have decided to push back the deprecation date for classic apps by 6 months: we will now discontinue support for them on March 31, 2026. Nothing will change for legacy custom bots, of which the original deprecation date was March 31, 2025.

Release: Slack CLI v2.30.1

Boo! Version 2.30.1 of the developer tools for the Slack automations platform has sneaked up behind you.

We fixed a bug such that expired tokens will now be removed from your local credentials, and the token_expired error will be logged when debugging if returned when using the slack logout command. No tricks, only treats!

Release: Slack CLI v2.30.0

Version 2.30.0 of the developer tools for the Slack automations platform has spookily appeared!

  • We added some behind the scenes CLI support for AI apps & assistants.
  • We fixed a bug such that app manifest validation when running slack deploy now respects use of the --force flag. We also fixed a few other bugs related to app manifest validation to make things run more smoothly.
  • We fixed a bug such that running the slack create command will use either the absolute or relative path provided when creating your app.

Discontinuing support for legacy custom bots and classic apps

We want to let you know about some upcoming changes to support for legacy custom bots and classic apps on the Slack platform.

  • Beginning March 31, 2025, we will discontinue support for legacy custom bots. For your integrations to continue working, you must create brand new Slack apps.
  • In September 2025 March 2026, we will discontinue support for classic apps. For your apps to continue working, you will need to migrate them to Slack apps.Any custom bots or classic apps you have built will no longer work after these dates.

It has been over 10 years since we originally launched the Slack Platform. As we mentioned back in April 2024, there are just too many ways to create an app, so we're doing our best to streamline this process. Beginning March 31, 2025, we will discontinue support for legacy custom bots. In March 2026, we will discontinue support for classic apps. Read on for more details about how this will affect your integrations and apps.

AI apps and assistants are here!

We're excited to announce that the following new features have launched!

  • Introducing AI apps & assistants, the new way you can build AI-powered, conversational apps integrated with your favorite Large Language Model (LLM).
  • The App Directory is now the Slack Marketplace! Get ready to explore a whole new world of apps, assistants, templates, connectors, and more.

Release: Slack CLI v2.29.2

Version 2.29.2 of the developer tools for the Slack automations platform is hot off the press!

  • When logging into a project directory using the slack login command, the Slack CLI will now suggest also running the slack app list command. When logging in outside of a project directory, the Slack CLI will continue to suggest running the slack create command to create a new project.
  • We've fixed some bugs behind the curtain and added some CI/CD improvements.

Release: Slack CLI v2.29.1

Version 2.29.1 of the developer tools for the Slack automations platform has arrived!

  • We updated the shell called in Windows commands from pwsh to powershell for better backwards compatibility.
  • We added the ability to retrieve manifest information using the --source flag with the manifest info command. The flag can be set to either project or remote.
  • We fixed an issue to raise any errors in the Slack CLI that may occur when running the npm install command.
  • We fixed a bug to replace the --workspace flag recommendation with a --team flag recommendation.

Release: Slack CLI v2.28.0

Version 2.28.0 of the developer tools for the Slack automations platform has landed!

We made a few updates behind the scenes to keep things running smoothly.

Release: Slack CLI v2.27.1

Version 2.27.1 of the developer tools for the Slack automations platform has made a splash!

  • We've fixed a bug to allow development hosts to start up faster.
  • We now print a warning if either the SLACK_APP_TOKEN or the SLACK_BOT_TOKEN does not match its installed value.

Release: Slack CLI v2.26.0

Version 2.26.0 of the developer tools for the Slack automations platform is here!

  • We now format warnings into text sections, and group similar warnings by source—this should help to reduce the number of warnings related to external teams that could appear when running your app.
  • We've fixed an issue with the datastore count Slack CLI command by adding a default for an empty query expression if one isn't provided.

Release: version 2.25.0 of the Slack CLI

Version 2.25.0 of the developer tools for the Slack automations platform is kicking off the summer fun!

  • You can now update your local project's apps.json file with app IDs for your existing apps using the slack app link command. Refer to app commands for more details.
  • We've updated the formatting for section text and trace prints for the slack collaborator add, slack collaborator list, and slack collaborator remove commands.
  • We've updated the debug log output when installing dependencies using the slack create command. We also now suggest installing project dependencies if an error occurs when running this command.
  • We fixed a bug to avoid formatting printed strings if the string to be printed has no arguments.
  • We now set authentication configurations such as custom API hosts for selected tokens with the slack manifest validate command.
  • Starting June 11, 2024, we are enforcing admin restrictions on built-in steps and webhook triggers in coded workflows. This update aims to align the security settings of coded workflows with those of connector steps and triggers. Read on to learn more.

Release: Slack CLI v2.24.0

Version 2.24.0 of the developer tools for the Slack automations platform has landed!

  • We've renamed the function distribute command to function access (however, the distribute subcommand has been added as an alias so you can still use function distribute). Refer to custom function access for more details.

  • We've fixed several bugs that address some messaging, formatting, and emoji in the CLI for easier reading.

Release: Slack CLI v2.23.0

Version 2.23.0 of the developer tools for the Slack automations platform is here!

  • We now prompt you to log in again if your auth is expired or invalid. This applies to all commands where you need to select an app.
  • We now automatically set the SLACK_API_URL environment variable to the preferred API host used in the auth process.
  • We fixed some bugs to reduce the chances of returning errors when checking the operating system, project configs, project tooling, and project dependencies when running the slack doctor command.
  • We now display a more informative message when you attempt to delete or uninstall an app from a project that has no apps.

Release: Slack CLI v2.22.0

Version 2.22.0 of the developer tools for the Slack automations platform is here!

  • We fixed a bug to prevent project paths including spaces from being separated into multiple arguments when deploying an app.
  • We now cease defaulting to the deno runtime, and log unsupported runtimes.
  • We fixed a bug that was causing a team_access_not_granted error when redeploying an app.
  • We fixed a bug to handle an empty outgoing_domains attribute within an app's manifest.
  • We fixed a bug to remove extra spaces from error messages when creating a new project using slack create.

The files.upload method retires in March 2025, replaced by sequenced Web API methods

The original web API method for uploading files to Slack, files.upload, is being sunset on March 11, 2025.

As of May 16, 2024, newly-created apps are no longer able to use this API method.

Existing apps & integrations should migrate away from files.upload and instead leverage a combination of two APIs: files.getUploadURLExternal and files.completeUploadExternal. The use of these two methods is more reliable, especially when uploading large files.

A detailed breakdown of how to use these two API methods is described in our Uploading files documentation.

Release: Slack CLI v2.21.0

Version 2.21.0 of the developer tools for the Slack automations platform has sprung!

  • You can now display runtime versions for your application's execution environment using the doctor hook. To enjoy the improved slack doctor command experience, existing Deno Slack SDK-based apps must have their deno-slack-hooks dependency upgraded to the latest version (v1.3.0).
  • By relying only on the get-manifest hook when attempting to get a manifest rather than checking for a slack.yaml file, we now surface any errors that are returned when getting the manifest.
  • We removed the possibility of an error when generating the message boundary hook protocol, and now preserve spacing in logged outputs.
  • We corrected a few typos behind the scenes.

Release: Slack CLI v2.20.1 & v2.20.1

Versions 2.20.0 and 2.20.1 of the developer tools for the Slack automations platform have landed!

  • We've added a new feature for counting datastore items. Refer to Counting items in a datastore for more details.
  • We added a new feature to query named datastores from a flag instead of an expression. For example, instead of:

$ slack datastore get '{"datastore": "todos", "id": "42"}'

use:

$ slack datastore get --datastore tasks '{"id": "42"}'

  • We now include a remediation message for the not_authed error that explains how to log in and authorize the Slack CLI.
  • Users can now request app approval at the workspace level on Enterprise Grid.
  • We now include the error code in event payloads to logstash.
  • We fixed a bug to output a link if opening the URL in a browser fails.
  • We fixed a bug to catch missing hooks from a command; the initialization error is now included in the debug outputs. This allows any command to be run from a project directory without immediately posting an error.
  • We fixed a bug to remove ANSI escape sequences from the debug log outputs for an improved grepping experience.
  • We fixed a bug to verify that deprecated flags are properly substituted.
  • We fixed an issue to make our releases run more smoothly. Nothing to see here!

Release: Slack CLI v2.18.0

Version 2.18.0 of the developer tools for the Slack automations platform has joined the party!

  • The minimum supported PowerShell version as of this release is v6.0. If you attempt to use an older version of PowerShell, you may encounter errors reading the Slack Configuration file (slack.json) or running the get hooks hook.
  • We've added the ability to put, get, and delete items in bulk in a datastore. Refer to Create or replace items with put and bulkPut, Retrieve items with get and bulkGet, and Delete items with delete and bulkDelete, respectively.
  • We've added the ability to import to and export from datastores. Refer to Datastore commands for more details.
  • We've added a warning when creating an app from a sample app when the sample app may not have come from a trusted source.
  • You can disable this warning temporarily by running the slack create command with the --force flag.
  • You can disable this warning permanently by either selecting don't ask again when prompted, or by setting the trust_unknown_sources property in your config.json file.
  • We've fixed an issue so can now use CTRL-C to unhide your cursor when a spinner displays after running slack deploy.
  • We've enhanced some error messages and we've improved highlighting matching for help commands.

Release: Slack CLI v2.17.1

Version 2.17.1 of the developer tools for the Slack automations platform is hot off the press!

  • We added an enhancement to provide the SLACK_APP_TOKEN and SLACK_BOT_TOKEN environment variables when you run your app.
  • We now install development dependencies for apps on the Node.js runtime when creating a new app to ensure @slack/cli-hooks is installed.
  • We've fixed an issue by formatting paths with OS-specific dividers in the slack create command.

Release: Slack CLI v2.16.0

New year, new version (2.16.0) of the developer tools for the Slack automations platform!

We now display the workflow name for errors returned in the CLI, and return an error if credentials aren't found for a selected app when using the slack app command.

Release: Slack CLI v2.15.0

Version 2.15.0 of the developer tools for the Slack automations platform is home for the holidays!

  • We've updated the choose a workspace to grant access prompt to sort by team name rather than team ID.
  • We've deprecated the deno command and removed its listing from the help command. The deno command is slated to be removed completely in an upcoming release.
  • Endpoints at api.slack.com are no longer blocked by a permission error for local apps.
  • We now have better error handling when appending a (local) tag to the display name of local apps.
  • We've removed some extra blank lines and debug information from command outputs for a cleaner look and faster feel.
  • We've provided prompts for possible trigger IDs for trigger commands that need them.

Release: Slack CLI v2.14.0

Version 2.14.0 of the developer tools for the Slack automations platform is here!

  • We've updated the CLI to prompt you to request admin approval for an Admin-Approved App using a connector function that is not currently approved for use in your workspace. For more information, refer to Platform permissions control for admins.
  • We've formatted the system and project configs with indents to make editing easier.
  • We've added a SLACK_CONFIG_DIR environment variable to the --config-dir global flag.
  • The uninstall command is now available from the list displayed when using the --help flag.

Release: Slack CLI v2.13.0

Version 2.13.0 of the developer tools for the Slack automations platform has landed!

  • We've added an --all-org-workspace-grants flag to the app list command so you can display all grants instead of only the first three.
  • We've combined workspace and org language into team; as such, we have added a --team flag and deprecated the --workspace flag. Note that this will not affect the usage of workspace or org when it is necessary to distinguish between them; for example, with the hermes auth list and trigger access commands.
  • We removed the redirect to the delete command when running the uninstall command, so you may now only uninstall an app rather than deleting the app entirely along with all of its data.
  • We've updated the CLI installer to align the Deno runtime version with the current version supported by the Slack platform.
  • We've updated all deno-reverse-string sample app references to use deno-started-template instead.
  • We fixed a bug to create a usr/local/bin directory if it is missing when installing the CLI.
  • We updated some confusing language related to breaking changes.
  • We fixed a bug that caused an error when any property setting flags were provided along with the --trigger-def flag.
  • We fixed a bug where descriptions and selected template URLs might be mismatched from the displayed list of samples.

Release: Slack CLI v2.12.0

Hot on the heels of last week's release, version 2.12.0 of the developer tools for the Slack automations platform is here!

  • We now support npm dependencies in a beta capacity, so you can use the npm: specifier when importing modules for both locally run and deployed apps. For more details about using npm: and node: specifiers, refer to Node.js APIs and npm packages.
  • We updated the slack app list command to display Enterprise grants for multiple workspaces.
  • We fixed a bug that displayed app manifest warnings when there were none.

Release: Slack CLI v2.11.0

Version 2.11.0 of the developer tools for the Slack automations platform has spookily appeared!

  • We've updated commands requiring validation (e.g. manifest, deploy, install, triggers create, and triggers run) to catch errors if a connector is not installed, attempt to install any certified apps related to connectors mentioned in the manifest, and then re-validate the manifest.
  • We added new error codes for connectors to aid you in troubleshooting.
  • We added a --file flag to the function distribute command (renamed to function access) so that you can manage access and distributions with a configuration file instead of multiple commands.

Release: Slack CLI v2.10.0

Version 2.10.0 of the developer tools for the Slack automations platform has entered the chat! We've updated the deploy command to prompt you to select an organization workspace, similar to the run command. We also added a little more polish to the Admin-Approved Apps flow, added support for the apps.certified.install method (coming soon to an API near you!), and implemented a few bug fixes behind the scenes to keep things running smoothly.

Release: Slack CLI v2.9.1

Version 2.9.1 of the developer tools for the Slack automations platform is here! We now order functions by callback ID for easier sorting when you call the function distribute command (renamed to function access). We've also formatted and streamlined the install script and some of our error descriptions for a smoother, more pleasant experience.

Slack CLI v2.8.0 and below is now deprecated

Starting September 19, 2023 the Slack API's minimum required CLI version is changing from v1.18.0 to v2.9.0 for Enterprise Grid (for non-Enterprise Grid, the minimum required version is v1.18.0). If you attempt to log in with an older version, you'll receive a cli_update_required error from the Slack API. Run slack upgrade to get the latest version. Refer to the quickstart guide for more details.

Release: Slack CLI v2.9.0

Version 2.9.0 of the developer tools for the Slack automations platform has landed!

  • We now support Slack's new look & feel.
  • You can now specify which workspace within an Enterprise Grid organization to grant your app access to when you deploy and install your app by using the --org-workspace-grant flag.
  • Sometimes additional admin approval is needed before your app can be installed. We now notify you that pending app approval/denial notifications will come from Slackbot.
  • We added more workflow events to the CLI for improved troubleshooting.
  • We updated the output of our --info flag for a more streamlined experience.
  • You can now skip the workspace selection dialog when you supply an app ID via --app and an active token via --token flags.

Release: Slack CLI v2.8.0

Version 2.8.0 of the developer tools for the Slack automations platform has arrived!

  • We've improved Deno dependency caching.
  • The app list command no longer requires authentication, and will instead display an unknown app status in cases where no authentication is found.
  • The run, deploy, and delete commands will now resolve organization-level authentication in cases where workspace-level authentication is missing.

Release: Slack CLI v2.7.0

Version 2.7.0 of the developer tools for the Slack automations platform has arrived!

  • We've added a slack trigger list --type=<string> flag to only list triggers of a specific type: For example, slack trigger list --type=shortcut. We've also supported flag values for --type=<string> are all, shortcut, event, webhook, scheduled, and external.
  • We've added flags to provide values for many interactive prompts. Learn more about the flags available by adding --help to any command. For example, slack external-auth add-secret --provider github --secret my-secret-value.
  • We've updated the slack app list command to improve displaying apps you are not authenticated to access. For example, local apps now display a (local) label and install status is now shown as Status: Unknown.
  • We removed an incorrect timestamp found in the Slack debug log file.
  • The Deno SDK v2.2.0 now displays an error in your editor when you accidentally register duplicate primary keys for workflow, function, datastore, customType, event or provider. This helps prevent unexpected behavior at runtime.

It's later already for stars and reminders

Starting in March 2023, Slack began rolling out a new collection of features collectively called Save it for Later. It gives you a new Later section on Slack where things you save for later (with or without a reminder attached to it) are kept.

This new collection of features replaces our previous Saved Items (also known as starred items, or just stars) and Reminders features.

As part of this new feature roll out, the existing APIs to interface with saved items and reminders have become degraded or useless. There are no direct APIs for Save it for Later to integrate with. With the current suite of built-in functions, web API methods, events, and triggers offered by Slack it is possible to recreate some (but certainly not all) use cases the impacted APIs supported.

We aim to give ample notice for every platform feature developers would consider a “breaking change.” We apologize we were unable to provide this information to developers ahead of the Save it for Later release.

Release: Slack CLI v2.6.0

Version 2.6.0 of the developer tools for the Slack automations platform has arrived!

  • The .github directory will no longer be included in new projects created from one of our sample apps.
  • We've updated our support email to feedback@slack.com—email us for assistance if your app returns an internal error code.
  • The slack app list command now returns Status: Installed instead of Status: Unknown for an installed app.
  • When using the CLI in a non-interactive environment, such as in a CI pipeline, selection prompts will error and suggest a flag alternative to use instead of hanging indefinitely.
  • Trigger generation prompts will be automatically skipped when using slack run or slack deploy in a non-interactive environment, regardless of how many triggers might exist.
  • We've clarified admin approval requirements when installing to a workspace that has Admin-Approved Apps enabled.
  • Socket connections are now gracefully closed when ending a slack run session.
  • Improved typeahead suggestions for the type field of functions and datastores were made in the Deno SDK.

Release: Slack CLI v2.5.0

Version 2.5.0 of the developer tools for the Slack automations platform is hot off the press!

  • We've added a confirmation message if you decide not to delete an app when using the slack app delete command.
  • We added a --hide-triggers flag to the slack run and slack deploy commands to prevent retrieving and displaying application triggers.
  • We added a warning to listed trigger info that Slack Connect channels do not support event triggers.
  • We added app collaborators to listed trigger info.
  • We added support to limit paginated results with the trigger list --limit <n> command.
  • We added a prompt for whether you would like to include/exclude app collaborators into the named entities list if you set your trigger's ACL to named_entities. The include-app-collaborators flag will allow you to skip this prompt.
  • We updated the slack activity command to support datastore event and error logs. For more information, refer to logging.
  • When the --token flag is set, background checks for updates will now be automatically disabled.
  • We added support to fall back to a curl install of deno if deno upgrade should fail.
  • The slack logout command now accepts the --workspace flag.
  • We removed the --show-triggers flag from the slack run command, as the command now displays all of your app's triggers and their types.

Release: Slack CLI v2.4.0

Version 2.4.0 of the developer tools for the Slack automations platform is now available!

  • We updated the Linux/macOS installation script to support a CLI version param, -v.
  • We added a -d flag to bypass Deno installation in the Linux/macOS installation script.
  • We updated the Windows installation script to include Alias, Version, SkipDeno, and SkipGit flags.
  • We now suggest Windows users open a new terminal after installation to add the Slack CLI to the user's environment PATH.
  • We bumped minimum required Deno version to 1.31.1.
  • We replaced the workspace command with a new app command.
  • We made the config-dir global flag visible.
  • We deprecated auth login's auth flag in favor of token.
  • We updated app list command to display installation status.

Release: Slack CLI v2.3.0

Version 2.3.0 of the developer tools for the Slack automations platform has arrived!

  • The external-auth remove command now allows you to select a token for deletion.
  • The new external-auth select-auth command allows you to select a unique auth for each of the workflows in an app. This command is mandatory when using new coded workflows that have a step containing credentialSource DEVELOPER; that is, every time a coded workflow is created, this command must be called after the external-auth add command.
  • The slack auth token and slack auth revoke commands allow you to manage service tokens.
  • The slack auth token command allows you to get the slackauthticket and copy and paste it into your workspace to exchange for the service token. The service token will not be saved to your credentials.json file; instead, it is presented in the prompt for you to copy and paste to your CI/CD pipelines. Once you obtained a service token, you can use the slack login --auth <your-service-token> command to authorize your Slack CLI. The service token will not conflict with your regular authentication token; you can continue using your regular authentication token within the Slack CLI while using the service token for your CI/CD pipelines.
  • The new global --token <token> flag allows you to pass the service token used by requests requiring authentication. For example, to install an app, use: slack install --token <your-service-token>. To create a trigger, use: slack trigger create --token <your-service-token> --app deployed --trigger-def triggers/trigger_def_file.ts. To deploy an app, use: slack deploy --token <your-service-token>
  • We added support for a global --experiment [name,name,...] flag.

Release: Slack CLI v2.2.0

Version 2.2.0 of the developer tools for our beta Slack platform has landed!

  • The trigger info command now also shows who has permissions to run the trigger.
  • We added the --no-color flag, which removes all ANSI sequences for color as well as emojis, giving you plain text output from the CLI that's perfect for piping to a text file.
  • The datastore query command now supports a cursor argument to help you paginate your results the way you want.
  • Trigger operations will now let you know when an invalid trigger file is being ignored.
  • We improved error reporting and some help text.

Introducing the Slack automations platform

Today we're announcing that the Slack automations platform—which provides a faster, more flexible way to build automations on top of Slack–is generally available to developers. The platform's overhauled architecture gives developers more ways to build, code, and ship custom apps and workflows more quickly and easily in an environment that's both secure and compliant. Read the announcement or follow the Quickstart to get started today.

Beta release: Slack CLI v2.1.0

We released version v2.1.0 of the developer tools for our Slack platform beta. Changes include better error messages, including the local Git version with the slack doctor command, paring down which commands are visible with slack help to only what is applicable for developers, and more.

Beta release: Slack CLI v1.21.0

We released version v1.21.0 of the developer tools for our Slack platform beta. Changes include improved ergonomics around trigger access management and added a new command to export form responses to CSV, both within the CLI, updates to the default manifest, and more.

Beta release: Slack CLI v1.20.0

We released v1.20.0 of the developer tools for our Slack platform beta. Changes include a number of user-requested improvements to the CLI and details about an upcoming maintenance window next month, and breaking changes landing the month after that, which may require you to update your apps.

2022 changelog entries

November

  • We released version v1.16.4 of the developer tools for our Slack platform beta. We fixed some pipes behind the scenes to prevent future leaks; check out how we are improving the beta platform experience for our community.
  • Three new endpoints for admins to manage role assignments are now available: admin.roles.listAssignments, admin.roles.addAssignments, and admin.roles.removeAssignments. Explore other useful methods for managing your users and workspaces here.
  • We released version v1.15.0 of the developer tools for our Slack platform beta. It also introduces a breaking change (arriving January 26th, 2023) for those making API calls to outgoing domains in their functions.

October

  • A bevy of new Block Kit input elements await developers soliciting input from users including the often requested combined date and time picker. Collect links with the URL input element or email addresses, numbers, too.
  • We released version v1.14.0 of the developer tools for our Slack platform beta.
  • We updated the fine print and added default placeholder text for the following Block Kit elements: channels_select, conversations_select, multi_channels_select, multi_users_select, and users_select.
  • At last, member_joined_channel now works as you'd expect for multi-party direct messages (MPIM). Be sure to add the mpim:read scope to receive these events!
  • We're cleaning up some lingering behavior in our legacy Real Time Messaging API. In message events streamed over the RTM API, channel and usergroup mentions will no longer include entity names. Still need entity names? Access them using Web API methods such as conversation.info and usergroups.list. Alternatively, consider using the Events API, which also supports WebSockets, to receive message events.

September

  • Today we permanently alter the behavior of the retired Web API method rtm.start: those still using this method will receive the more reliable but brief response of the rtm.connect method. We expect some apps to break but we are here to help!
  • To better accommodate customers at Dreamforce next week, we've moved rtm.start's final retirement date to September 27th, 2022. Learn more about the future of rtm.start and how it may impact your app.
  • Several new tools for app developers are now available as part of our Slack platform open beta. Developers can ship higher-quality apps and workflows quickly with a streamlined development lifecycle, including secure hosting and data storage in Slack.

August

  • Keep track of who gets added to DM conversations. You can now monitor the dm_user_added audit event with the Audit Logs API.
  • On September 13th, 2022, we will provide a preview of the rtm.start future behavior. If you still use rtm.start to connect to Slack, learn more about when this preview will be happening in your time zone and how it may impact your app.

July

  • Slack is used by public sector teams and their partners for being faster, better organized, and more secure than email. If you're a government agency, contractor, or just intrigued by how Slack supports government communication, our GovSlack documentation is the place to be!
  • Bring users information and delight in your Slack apps with the video block now available in Block Kit. Read on to learn more on how to embed videos in your app.

May

  • Be informed about specific changes to users' data. One of three events will now be dispatched alongside the user_change event: user_huddle_changed, user_profile_changed, or user_status_changed.
  • The file may be deleted, but the record of the event won't be. You can now monitor file_deleted audit events with the Audit Logs API.

April

  • Messages are how people communicate in Slack, message metadata is how apps communicate with apps! Read on to learn about how to spark more automation with your app throughout Slack.
  • The team.info parameter domain is now public. Query for your team's information by domain only when team is null.

March

  • Mentioning a private channel in a slash command when your app manifest flag should_escape is false now correctly formats the channel identifier. Previously, the API would return HTML entities (&lt; and &gt;) that had to be manually converted into their character counterparts.

February

  • Help users find links, messages, and files germane to a channel's distinctive purpose with the Bookmarks API.
  • The admin.users.unsupportedVersions.export API allows you to export users using unsupported software within your workspace. Read on to learn more.

January

  • Block Kit button elements can now utilize the optional accessibility_label field, which allows you to write longer descriptive text for a button. Learn more.
  • The admin.apps.requests.cancel method allows admins to cancel app approval requests within a workspace or Enterprise Grid. Learn more.

2021 shortform changelog entries

November

  • If you still use rtm.connect or rtm.start to connect to Slack, you'll notice that all WebSocket URLs now begin with wss://wss-primary.slack.com.
  • As previously announced, apps & integrations created after today, November 30, 2021, must use rtm.connect instead of the deprecated rtm.start when connecting to the RTM API.
  • Block elements can now utilize the focus_on_load field within Block kit messages, which allows you to pick one specific Block element to auto focus on.
  • The default Slack Connect invitation type when using conversations.inviteShared has changed. Invites are now sent to limit the recipient's actions to only sending messages. The new external_limited argument can be used to control which invitation type is sent.

October

  • We're starting to roll out a new, opt-in beta UI that lets you configure and reconfigure apps using manifests. We're also launching new App Manifest APIs to let you create and manage all your apps programmatically.
  • One of our earliest API methods is taking a well-deserved retirement on September 27, 2022. For existing apps, rtm.start will instead return an equivalent response to rtm.connect. Beginning November 30, 2021, newly created apps and integrations will only be able to use rtm.connect.
  • Introducing two API methods that return information about workspaces previously only available in rtm.start: team.billing.info and team.preferences.list.

September

  • Slack Developer Tools now offers the Platform Guide, an interactive and introductory education experience for developers interested in learning the basics of building a Slack app within a Slack app.
  • Pick a time, any time. The timepicker block element is released out of beta and available to use in your spiffy apps.
  • The link_shared event is changing, bringing unfurls—allowing users to see what's in a link—into the message composer.
  • In the app approval APIs, you may now distinguish the apps built within your organization from those developed externally—or by Slack—with the developer_type field.

August

  • Legacy workspace apps are now completely retired. They won't function anymore and eventually will be completely removed from our databases. If you run into trouble, please reach out.
  • The link_shared event is changing to bring a little more magic to app unfurls. Read up on the changes, which roll out to free teams on September 1, 2021.

July

  • Modern Sign in with Slack uses the OpenID Connect protocol to make signing in with Slack faster and more flexible. Try it today.
  • Refresh your access tokens regularly with token rotation, available for opt-in now.
  • You can now manage Slack Connect directly for your organization using an app. Read up on the Slack Connect APIs.

June

  • We gave this dusty place a new coat of paint. Enjoy our updates to api.slack.com to help you navigate, discover, and absorb content more easily. Almost everything should be where you’d expect it.

May

  • Use manifests to create and manage apps from saveable, shareable, and relatable YAML and JSON. Try out some sample manifests in our new guided tutorials.

April

  • Apps using classic message attachments have an updated look. Attachment images now have a hover menu and will mostly appear to the right of text. Consider using Block Kit to have more control over how images render.
  • We're teaching old blocks new tricks. Starting April 20, 2021 input blocks are now able to exist within messages, allowing you to gather information more swiftly within conversation.

March

  • Apps may now broadcast messages to users via direct message without handling unnecessary or unsupported conversation and slash commands. Starting March 29, 2021, this feature will be default for all newly-created Slack apps. Get started by visiting the App Home tab of your existing Slack apps.
  • Newly created private channel IDs now always begin with the letter C, just like public channel IDs already do. The Conversations API will tell you whether a conversation is private or not with the is_private boolean field.
  • Legacy workspace apps, deprecated since October 2018, will officially retire on August 24, 2021.

February

  • The admin.analytics.getFile method now returns daily data about conversations in public channels. Members analytics remain available. Explore what's happening on your Enterprise Grid workspaces.
  • Three deprecations take effect today, February 24,2021. First, new apps may no longer pass tokens as query parameters. Second, Conversations API methods are now required over their typed counterparts: channel.*, group.*, im.*, and mpim.*. Third, event payloads no longer contain full lists of authed_users or authed_teams—instead, use a new method to learn the full list of authorizations an event is visible to. We know keeping up with best practices for Slack apps is a lot to handle—thank you for allowing us to make the platform better. Keep reading.
  • If your app makes use of user emails, be on the lookout for relay email addresses. When users sign into Slack via Apple, their emails may appear as anonymized relay addresses. Relatedly, Sign in with Slack won't work with these users.
  • Now you can decorate your ephemeral messages requesting authorization with Block Kit using chat.unfurl.
  • When a user initiates a private channel share via Slack Connect, the channel's ID changes. Subscribe to channel_id_changed to learn the new IDs for the private channels visible to your app.

January

  • Updated: Beginning mid-March, links appearing in Block Kit messages shared by apps will unfurl just like other links found in that message.
  • Your app can now count its workflow steps with the help of four new events: workflow_published, workflow_unpublished, workflow_deleted, and workflow_step_deleted. Use these events to stay informed on workflows—from unpublished to published and back again—that make use of steps powered by your app.
  • Socket Mode supplies your app with events and interactive feature payloads over a dynamic WebSocket URL.

rtm.start to stop

The original way to connect to one of our oldest APIs is finally retiring. For existing apps, rtm.start will start behaving exactly like rtm.connect on September 27, 2022. Beginning November 30, 2021, newly created apps and integrations will only be able to use rtm.connect.

The RTM API remains available to developers using rtm.connect.

Changes to unfurls

On September 1, 2021, the link_shared event is changing. The change will happen for free teams on September 1, and will roll out to paid teams over the following weeks.

The chat.unfurl method will also accept new arguments.

Changes to link_shared will help enable a smoother unfurl experience for apps that haven't yet been installed.

Goodbye, workspace apps

On August 24, 2021, legacy workspace apps were retired. Workspace apps were part of a brief developer preview we elected to not fully release. Since October 2018, existing workspace apps have remained functional but on August 24, 2021 workspace apps will be retired and no longer function.

Please read on if you were the developer, maintainer, administrator, or user of a vintage workspace app.

Don't know if you have a workspace app? Make sure you're signed in to all your workspaces and visit our deprecation center. Each workspace app you own or collaborate on will be listed.

2020 shortform changelog entries

December

  • Submissions to the Slack Marketplace now require Security & Compliance information.
  • Reach a whole new world of workspaces: build an app that can be deployed across an entire Enterprise org.

November

  • Apps created after February 24, 2021 will no longer be able to send token as a query parameter. All existing apps require no changes.
  • Apps will now be able to unfurl links anywhere in Slack.

October

  • The admin.analytics.getFile method returns compressed JSON files with workspace member analytics for the day of your choice—now available for Enterprise.
  • App modals can now be 'popped out' by users, giving them their own resizable, movable window. No app changes are needed, we just wanted to pop in with an update.
  • To simplify time input for users, we added a new time picker element to Block Kit.
  • Block Kit checkboxes and radio buttons are now available to use in messages. Quickly and conversationally collect information from users by including them inline.
  • Gather data from users directly from your App Home—input blocks can now be added to Home tabs. Additionally, input blocks can now dispatch block_actions payloads when someone interacts with them. Read about the new dispatch_actions flag.
  • We refreshed the look of your app's listing in the Slack Marketplace. Among the changes: a Features tab shows your app's entry points—like shortcuts and slash commands.

September

  • We updated our developer policy and API terms of service to clarify language around export controls and international data transfers.
  • Alongside upcoming changes to the Events API, you'll find numerous new features: a new authorizations field delivered with events, a new method for listing installations, a new scope—even a new token type for working across an entire organization.
  • Starting February 24, 2021, event payloads will no longer contain full lists of authed_users or authed_teams. Instead, you can call a separate method if you need a full list of parties an event is visible to.
  • On September 29, 2020, view_submission and block_actions payloads will begin including full state for messages, modal, and App Home views.
  • On September 15, 2020, you'll no longer need to worry about different global and local IDs for Enterprise users. Users will have a single, global ID across an Enterprise org, which may begin with either U or W.
  • In responses from the search.messages method, four fields—next, next_2, previous, and previous_2—that sometimes appeared are now deprecated and will no longer appear in responses, beginning December 3, 2020. Let us know of your questions or concerns.
  • Get a handle on creating channels, setting preferences, and connecting new workspaces—all with a single app. Use the APIs for channel management, available to Enterprise Grid organizations.
  • We slightly changed your App Home's appearance by refreshing the default text style and how hint text is displayed. We hope you'll enjoy it.

August

  • Users may now mute and unmute their conversations with apps like they can with other channel types. When a user mutes a conversation with your app, the messages you send are still delivered and a colorful badge will continue to surface in their channel list. However, users will not receive a direct operating system or browser notification on delivery.
  • Slash command invocations will now include an api_app_id parameter with your Slack app's ID. This parameter will better assist you in handling commands from multiple applications or environments.

July

  • New header blocks let you provide stronger delineation between groups of content in your app surfaces. Stay ahead of the game by learning how they work.
  • Expand Workflow Builder's capabilities by creating reusable, custom steps that any builder can add to their workflows. Workflow Steps from Apps is now in open beta. What’s your app’s next step?
  • Previously, when a user mentioned an app that wasn't party to the conversation, the user could Invite the app to the conversation, Let Them Know, or Do Nothing. The Let Them Know button didn't work. We've fixed that mistake by removing the button, and updated our documentation on the app_mention event as well.
  • Mark messages unread for users with conversations.mark. Bespoke clients and personal utilities should use this method sparingly.
  • The URL where users manage existing installations of Slack apps is changing to https://app.slack.com/apps-manage/. You might not even notice the difference, but we’re letting you know just in case.

June

  • You can now present your app's pricing information in your listing in the Slack Marketplace.
  • With Slack Connect, channels connect multiple workspaces and organizations with ease.
  • A change to user_change events: we've fixed a bug where these events dispatched to subscriptions from all workspaces in externally-shared channels. Now, user_change events are dispatched only to the home workspace of an externally-shared channel.
  • If you create a new Slack app and use deprecated methods like channels.*, im.*, mpim.*, or groups.*, you'll now receive a method_deprecated error. Existing apps will receive warnings but still have until February 24th, 2021 to migrate to the Conversations API.
  • Maintain a membership allowlist for private channels using admin.conversations.restrictAccess.addGroup, admin.conversations.restrictAccess.removeGroup, & admin.conversations.restrictAccess.listGroups methods, now available for Enterprise organizations. Update: These methods were renamed but the old names will continue to work.
  • We recently updated Block Kit Builder with additional preview options and more convenient ways to copy, paste, and dispatch payloads. There's more beauty to it too.

May

  • The deadline for all Slack apps to use the Conversations API—instead of its antecedents—has moved from this November to February 24th, 2021. Newly created Slack apps won't be able to use channels.*, im.*, mpim.*, or groups.* methods beginning June 10th, 2020. Warnings will soon be included as part of deprecated responses.
  • Use the Calls API to hook your calls natively into Slack. Catch up on Calls.
  • Legacy tester tokens may no longer be created. Existing tokens may continue to be used, regenerated, or revoked. Tokens left unused for three months or more will be regularly revoked.from our previous announcement.
  • Complete your IDP groups with custom default channels, courtesy of the admin.usergroups.* API methods.
  • Starting July 1st, 2020, rate limits will apply to all SCIM methods. Please make sure any apps using the SCIM APIs remain within these limits and humbly handle HTTP 429 responses.

April

  • A more direct route to messaging in response to modals: the new default_to_current_conversation field allows your conversation_select and multi_conversation_select menus to be pre-populate the currently open conversation.
  • The shortcuts button is now available for all Slack workspaces, so we're taking global shortcuts out of beta.
  • Previously, OAuth Redirect URLs could contain anchors (#). We've fixed that mistake, and anchors are no longer allowed.
  • Beginning June 10th, 2020, all newly created Slack apps will be unable to use the deprecated methods in channels.*, im.*, mpim.*, and groups.*. Existing apps have until February 24th, 2021 to migrate to the Conversations API.
  • Visually highlight destructive actions by using the new style parameter in confirmation objects.
  • Give app installers good reason to trust your app: submit security and compliance information to the Slack Marketplace today.
  • SCIM API endpoints now have clear, explicit rate limits.

March

  • Tune out the noise—you can now use filters with conversation lists in select and multi-select menus.and start filtering.
  • Give users clear entry points to your Slack app with Shortcuts. App Actions are now called message shortcuts. They're joined by new global shortcuts that allow users to initiate interactivity from anywhere in Slack.
  • The IDs returned by our APIs have grown longer. They are now up to 11 characters long, and could grow longer in future. Please audit your Slack apps, and verify any assumptions about the length of IDs for users, channels, and other objects.
  • We didn't turn off the replies array field found in threaded parent messages on October 18th, 2019 like we said we would. The new date is March 31st, 2020. Please use the reply_users, reply_users_count, and latest_reply fields instead.
  • Fair is fair: radio buttons now support mrkdwn formatting, just like checkboxes.

February

  • New guidelines for Slack Marketplace submissions have arrived to help ready your app for the world.
  • Using two new scopes, your Slack app can adjust its message authorship and post in any public channel.
  • The creation of legacy test tokens is now deprecated and will permanently retire on May 5th, 2020.about using Slack apps to build firmly scoped integrations.
  • Starting February 18, 2020, unexpected results using the SCIM API when rapidly updating data on the same user or group will become a thing of the past.
  • It's a win for webhooks: you can skip the small stuff and trigger a workflow with a web request.
  • Check another item off your Block Kit wishlist - we've added a checkbox group element to modals and Home tabs for your multiple choice input needs.
  • You can submit information to the Slack Marketplace on your app's privacy policy, data retention, security tests, and compliance with major laws. Read our blog post on the new Security & Compliance feature, now in open beta.

January

  • Our new emoji APIs allow Enterprise Grid Admins and Owners to add, remove, list, rename, and alias custom emoji across the entire Grid organization. 🎉!
  • Slack apps, with subtler permissions and more intuitive behavior, are now the default when you create an app. Get started by building or migrating.
  • Your app's new Home tab is out of beta. Design a comfortable place for users to get work done using Block Kit Builder and publish them for users using views.publish. Get started by diving into the Home tab docs.
  • Give users a key to directly open your Home tab. Read our updated deep-linking guide to see how you can create links to specific tabs in your App Home.
  • We are deprecating all channels.*, groups.*, im.*, and mpim.* Web API methods in favor of their Conversations API replacements. Migrate to conversations.* as soon as possible, as these deprecated methods will retire on February 24, 2021.

App unfurls everywhere

Until now, it's often been confusing to understand when and where an app may provide customized unfurl behavior for links appearing in conversations. We're gradually rolling out changes that will make this behavior consistent and easily understood. Read on to learn more.

No more tokens in querystrings for newly created apps

Tokens may no longer be passed in the query string for apps created after Feb 24, 2021

On February 24, 2021, we will stop allowing newly created Slack apps to send requests to Web API methods with access tokens presented in a URL query string. Instead, apps must send tokens in the Authorization HTTP header or alternatively as a URL-encoded POST body parameter.

Existing apps will be allowed to continue sending their tokens in the token query string parameter, though we recommend all apps to use authorization headers whenever possible.

Events API truncate authed users

Your app's events—received from the Events API—are changing.

Event payloads will no longer contain a full list of authed_users or authed_teams. These two fields will be deprecated. There'll be a new, compact field called authorizations to replace them—but authorizations will only contain at most one person or workspace that the event is visible to.

If you need a full list of all the parties an event is visible to, you'll call the apps.event.authorizations.list method.

The new, streamlined shape of events allows Slack to deliver them faster.

These changes to the Events API will take place on February 24, 2021. You'll be able to opt in to them earlier, on September 29, 2020, by going to your app settings and selecting the checkbox under Event Subscription.

In order to get ready for the changes to authorizations, you can use the apps.event.authorizations.list method even without opting in to the new shape of events, starting September 29, 2020.

Read on for more details on what's changing and how to prepare.

Legacy test token creation to retire

Legacy tester tokens may no longer be created.

We're deprecating legacy test tokens and will disallow the creation of new test tokens beginning May 5th, 2020.

We launched Slack apps over four years ago as a replacement to the number of ways one could obtain overly-permissive tokens to integrate with Slack.

If you or a software product you author relies on test token creation, you will need to migrate to using Slack apps with specifically named scopes instead.

Existing tester tokens will continue functioning but tokens left unused are subject to periodic revocation.

Deprecating antecedents to the conversations API

We released the Conversations API in September 2017 as a one-size-fits-all replacement for a variety of APIs used to read and write information about channels, private channels, direct messages, and multi-party direct messages.

Today we are announcing the deprecation of the methods that preceded the Conversations API (channels.*, groups.*, im.*, & mpim.*). On November 25th, 2020 February 24th, 2021 these methods will retire and cease functioning.

If users expect your app to work in channels of any kind, you'll want to verify you're using the Conversations API for all channel types.

The final date for existing apps and custom integrations is now February 24th, 2021

We'll stop allowing newly created Slack apps to use these deprecated APIs beginning June 10th, 2020.

All channels.*, groups.*, im.*, & mpim.* methods will return deprecation warnings beginning June 10th, 2020.

We resolutely recommend migrating to the Conversations API immediately.

2019 shortform changelog entries

December

  • We didn't set out to produce almost 700 pages of documentation but you can search it all now on api.slack.com/search.
  • Slack apps may now be submitted to the Slack Marketplace.
  • Place useful limits on multi-select menus using the new max_selected_items parameter.

November

  • Your App home is going mobile — you can now interact with an app's Home tab from iOS and Android clients. We recently published a new App home tutorial to help you build, or you can read the Home tab docs.
  • Help users make informed decisions when considering your app by listing the languages it's fluent in and any pricing model that applies to it. You can provide this info as part of the Slack Marketplace submission process.
  • You can now use Block Kit radio buttons in modals, in addition to Home tabs.
  • We're removing the misleading and undocumented guest_channels field from user profile objects belonging to guest users. The users.conversations method is an accurate way to query the channels a guest user belongs to.
  • Slack has but one REST API, the SCIM API, and it's now fully standards-compliant with SCIM 1.1 when using the HTTP PATCH method to update user records.

October

  • Your apps have always needed a better home, right in Slack. Now apps with bot users can use Block Kit with a new surface called the Home tab. Learn how to use this new space to provide users with a persistent place for dynamic experiences.
  • Radio is alive and well in Block Kit. Obtain a singular choice from users using our new radio button elements.
  • Craft a workspace faster than a cup of coffee and fill it with users, admins, and owners. Check out the APIs for creating workspaces and managing users, now available for Enterprise Grid organizations.
  • Slack apps can act independently of a user token. Build a bot user powered by only the specific permissions it needs. Check out our open beta for newly created Slack apps.

September

  • Announcing new pastures for Block Kit beyond messaging: trigger dynamic modal interfaces to provide linked user experiences invoked from messages, actions, or slash commands.
  • Embrace procrastination — allow users choose from multiple options in interactive workflows. Use new multi-select menus in all your Block Kit surfaces.
  • This autumn or soon thereafter, users will begin editing messages using a WYSIWYG (what you see is what you get) interface. When they do, their posted messages will appear slightly different throughout our APIs.

August

  • Two new events, channel_shared and channel_unshared, now notify your app when a channel is shared or unshared.
  • A single admin app can now approve or restrict other app installs across an entire Enterprise Grid org. Get a little meta, and a lot more time-efficient, with the APIs for app management.
  • As previously announced, pins.add will stop accepting file and file comment IDs beginning August 22, 2019. Similarly, reactions.add will no longer allow file and file comment parameters. Nowadays, apps and users pin & react to messages about files instead.
  • On March 4, 2020, we'll require all apps, custom integrations, bots, and users communicating with Slack to use TLS version 1.2 or higher. There will be a 24 hour test deprecation on February 19th, 2020. Read more details on why and how to upgrade.
  • Channel names have grown up: instead of a maximum length of 21 characters, channel names may now feature a full 80 character label.

July

  • Host files wherever you please, while you add, update, remove, share, and unfurl them in Slack. Read up on the new Remote Files API.
  • Enterprise Grid admins may now use the admin.users.session.reset method to wipe a user session, logging out a user whose device may have been stolen or compromised.about the new method, as well as the new scope required to use it.

June

  • Your app may now encounter channels shared between workspaces on Enterprise Grid. As a result, it's even more important to use the Conversations API methods to safely handle channels both shared and unshared.
  • Using the SCIM API's GET /Users or /Groups methods? Their count parameters will no longer accept values above 1000 beginning August 30, 2019.
  • As announced previously, the dnd.teamInfo method now requires the users parameter. An explicit list of users helps you, and us, avoid slow API calls.

May

  • As previously announced, the files.comments.add and files.comments.edit methods are retiring today. Also, files may no longer be pinned to channels. The pins.add method will no longer accept files or file comments beginning August 22, 2019.
  • Better built-ins. Nifty type hints. Easier RTM event handling. Build for the future with the new Python SDK V2.0.0, lovingly crafted with Python 3.
  • Want to build a Slack app with JavaScript? Use the Bolt framework. Effortlessly bolt listeners onto events. Minimize boilerplate to post messages, forming a beautiful bolt of conversational cloth. Leverage TypeScript to autocomplete code faster than a lighting bolt. Go ahead, bolt toward Bolt.

April

  • Parent messages in a thread will no longer explicitly list their replies. Instead of a large replies array containing threaded message replies, we'll provide a lighter-weight list of reply_users, plus a reply_users_count and the latest_reply message. These new fields are already available. We'll remove the replies array on March 31st, 2020.
  • Make your app a better listener with the app_home_opened event. When a user enters a conversation with your app, you can trigger a friendly onboarding flow, a whimsical welcome message, or a deep-dive into dialog.
  • Retrieve all active incidents, rather than just the most recent one, using version 2.0.0 of the Slack Status API.
  • Buttons in message blocks have gained some color. Use the new style field to visually compel and alert users.
  • We're returning a more descriptive limit_required error when you call users.list or channels.list for teams containing tens of thousands of responses. To avoid the peril of errors entirely, use pagination.

March

  • Taking a novel approach to pagination, the v5 release of our Slack SDK for Node.js supports Node v8 LTS and above. It also splits the client into three separately installable packages optimized for speed and bundle size. Work with other languages or frameworks? Browse other tools built for you.
  • When querying dnd.teamInfo, the users argument is required beginning June 3, 2019. Future-proof your app by explicitly listing which users you wish to see Do Not Disturb settings for.
  • Harness a hint of time travel for your app. Schedule messages for delivery at the time of your choosing.
  • We're starting to enforce (more firmly) the 5GB file upload limit for workspaces on a Free plan. Some API endpoints will yield tombstoned files with the content redacted.

February

  • We're retiring the files.comments.add and files.comments.edit methods on May 22nd, 2019.
  • We're loosening up limits on dialogs. You can use five extra elements (ten total) and lovingly label them with longer lengths of letters.
  • When your exacting maths require the precise number of members party to a particular conversation, use the new include_num_members parameter with conversations.info.
  • Build better messages with Block Kit, a set of building blocks for messages and vast, interactive workflows. And, build messages better with Block Kit Builder.
  • We're limiting legacy tester tokens by revoking them when they're left unused for several months. As a pleasant counterpoint, our method testers let you bring your own token now.

January

  • Apps endure, even when their installing user leaves the team—as long as the app doesn't perform actions on behalf of the installing user. This new behavior rolls out to free, paid, and Enterprise Grid teams over the next week.
  • Conversation objects associated with shared channels now feature a conversation_host_id field, indicating the workspace or Enterprise Grid organization that "hosts" the shared channel.
  • We're erasing the shares attribute from "shared channel" conversation objects. In methods like conversations.history and the Events and RTM APIs, enjoy a lighter-weight list of the shared_team_ids representing the teams across which the conversation is shared.

What you see is what you get and more and less

This autumn, Slack will make what-you-see-is-what-you-get (WYSIWYG) editing available to users.

Once we release WYSIWYG editing, the text field found in message objects your app encounters will become an approximation of a user's more richly formatted message.

To capture a message's full nuance and vibrancy, your app may look to the new blocks attribute included with such messages.

Deprecate early TLS versions

When your app, custom integration, or bot communicates with Slack via HTTP, it uses TLS (Transport Layer Security) to ensure data privacy and integrity.

There are multiple major versions of TLS, including v1.0, 1.1, 1.2, and 1.3. Versions 1.0 and 1.1 are deprecated and should no longer be used.

On March 4, 2020, we'll require all communications with Slack to use TLS version 1.2 or greater.

All TLS connections must use the SNI extension. Lastly, TLS connections must support at least one of the following supported cipher suites:

  • ECDHE-RSA-AES128-GCM-SHA256
  • ECDHE-RSA-AES256-GCM-SHA384
  • ECDHE-RSA-AES128-SHA
  • ECDHE-RSA-AES256-SHA
  • AES128-GCM-SHA256
  • AES256-GCM-SHA384

Using TLS version 1.2 or greater makes Slack safer for everyone.

Wild West no more (for file limits, at least)

Free teams feature a 5 GB limit on file uploads. However, as in the Wild Wild West of yore, the limit wasn't enforced. As of March 5, 2019, we're starting to enforce the file upload limit more firmly: only the last 5 GB of files will be visible to Free teams. In APIs that return file uploads, older files beyond the limit will be shown as 'tombstoned,' with redacted information and a "hidden_by_limit" field.

Cemented fate for file comments

File threads superseded file comments in July 2018. On May 22nd, 2019, we will permanently retire the files.comments.add and files.comments.edit API methods.

Vintage file comments remain accessible and deletable with files.comments.get and file.comments.delete.

2018 shortform changelog entries

December

  • Post replies in a thread with incoming webhooks: the thread_ts parameter now puts your webhook reply in its proper place.
  • The data structure of messages received from our APIs will change with the launch of Block Kit early next year. In return you'll be able to add newer, clearer visual components to make your app's messages magnificent. Even if you aren't using it, your apps may be affected by the additions.

November

  • Apps may now restrict Web API requests to as many as 10 IP address ranges.
  • The developer preview for workspace apps has ended. We're taking the components of workspace apps and breaking them apart: applying them in phases to existing as well as new apps. Read more about the motivation behind ending the preview.

September

  • As public channels become private, they now retain their original channel ID. Legacy methods like groups.* and channels.* don't support these transitional channel types and Conversations API methods must be used instead.
  • Whatever flavor of workspace token you're using, you can now expect the same invalid_auth error code when the token is invalid. You'll receive this error whether the token is expired, revoked, or just plain wrong. Use our OAuth 2.0-based token refresh system to refresh expired tokens safely.

August

  • Workspace apps may now continuously rotate shorter-lived tokens without downtime. Our OAuth 2.0-based token refresh system is strongly recommended for all workspace apps. Expiring and rotating tokens is required for all distributed workspace apps.
  • Clear clever custom statuses like clockwork. Apps can add expiration dates when setting custom statuses for people.
  • We're postponing planned changes around scope requirements for app and bot access to email addresses. The new date is in autumn, on October 16th, 2018.
  • Dialogs now follow a separation of callback and state. Read more about the new state parameter and how it differs from callback_id.
  • Verifying requests from Slack just got easier: our Node Interactive Messages SDK, Node Events API SDK, and Python Events API SDK now verify request signatures automatically.
  • "40k ought to be enough characters for any message." - Slack Platform Gatekeepers. Messages are now limited to 40,000 characters.
  • Your workspace app can use the new apps.uninstall method to uninstall itself from a single workspace, revoking all tokens associated with it. To revoke a workspace token without uninstalling the app, use auth.revoke.
  • It's official: workspace apps can reach out to and converse with anyone using the new conversations.app_home:create scope. No more fumbling with conversation IDs or different methods: just plug the user's ID into chat.postMessage and go.
  • If your workspace app posts ghostly messages with chat.postEphemeral, you may have noticed a no_permission error thrown instead of channel_not_found when your app isn't a member of the target conversation. Turns out we actually could find the channel after all.
  • We updated our Slack App Developer Policy and API Terms of Service to provide more detailed guidance, but we have not made material changes. The new policy is effective August 31, 2018. Together, we keep Slack a safe, private and secure platform for work.

July

  • Pagination rules the nation and the Slack API. These methods newly support cursors: files.info, groups.list, im.list, mpim.list, reactions.list, and stars.list. For apps created after August 7, 2018, results will be returned in perfect, piecemeal pages by default.
  • With Slack developer tools you can now quickly look up documentation, investigate the structure of messages, and more, all inside of Slack.
  • Commenting on files is now just like replying to a message.
  • HTTP requests originating from Slack now support Mutual TLS. Use Mutual TLS to attain the highest level of confidence that requests from Slack are, in fact, authentic. Read more.
  • Get ready to lend users a hand and start working on their behalf. Now workspace apps can ask for permission to read & write personalized settings like reminders, custom status, and profile data.
  • Our recently launched message actions are now available for use in all Enterprise Grid workspaces and any Shared Channels within them.

June

  • Confidently verify a request originates from Slack by validating our new request signatures. The signing process replaces the use of verification tokens, now deprecated.
  • We expect file threads to arrive after July 19, 2018. Do you manage a Slack app relying heavily on files or file comments? Join our pilot program and prepare your app for file threads ahead of the transition.
  • Learn when private channels are deleted with the new group_deleted event, now available for the Events and RTM APIs.
  • The Conversations API now supports workspace apps, using three simplified scopes: conversations:history, conversations:read, and conversations:write. We recommend upgrading your apps in developer preview to the Conversations API as soon as possible.

May

  • Beginning October 16, 2018 the users:read.email scope is required to retrieve the email field from user profiles while using user or workspace tokens. Consult our previous announcements on this topic from 2016 and 2017 for migration tips and some historical perspective.
  • Adding contextual actions lets users send specific messages to your app at will. Here are some amazing things our partners do with actions. This blueprint demonstrates the ineffable synergy of using actions and dialogs together.
  • We're compiling a humble library of JSON schema about the Events API into a kind of open specification called AsyncAPI.
  • Newly-issued bot user token strings are a little longer than before. Building for the ages? Plan for token strings containing up to 255 characters.
  • Apps participating in our developer preview using the Events API will need to subscribe to message.app_home events for a focused feed of messages between your app and the people who interface with them through the app home. These messages aren't delivered to message.im subscriptions now.
  • File threads, a replacement for file comments, is on the way!

April

  • Measure drop off and send helpful follow ups when users cancel dialogs with these opt-in cancellation notifications.
  • Have a bot user token you don't need or want to use anymore? Now you can use xoxb- tokens with auth.revoke.
  • Your workspace token-based apps in developer preview must now request the files:write scope to upload & manage files instead of files:write:user. Existing access grants are backfilled. Know your read & write rights.
  • Working with workspace token-based apps as part of our preview? Please start using oauth.access instead of oauth.token during installation.
  • Some bots are users too. Now you can find a bot user's user_id with bots.info.
  • Enhance your dialogs with dynamic form elements "borrowed" from message menus.
  • Rediscover the conversations you're party to with users.conversations.

March

  • We corrected and clarified the behavior of users.profile.set to only allow admins of paid teams to update email address profile fields.
  • We added a type field to the requests dispatched to your Options Load URL, used in message menus and— well, it doesn't work anywhere else yet but we'll have a dialog about that one day...
  • This significant upgrade to the Slack SDK for Node.js modernizes one of the most widely-used Javascript libraries on our platform with strong typing, more intuitive method signatures, and comfortingly predictable release cycles. It also sheds its aging DataStore, which has not evolved in tandem with the realities of building apps for today's workspaces. Learn more about upgrading in our announcement.
  • We are continuing to decrease the maximum number of results returned by members arrays returned in channels.* and rtm.start, with the limit currently set to 500 results. conversations.members provides paginated access instead. Read this announcement for detail.
  • Web API methods will be enhanced with tiered rate limiting beginning March 7, 2018, with most methods gaining greater limits than ever before.
  • Now you can follow up after users submit your dialogs. Use the new response_url attached to any dialog_submission to send messages after submission.

February

  • Now users can respond to dialog textarea elements with up to 3,000 riveting, carefully-chosen characters.
  • Events API rate limiting has matured, now allowing apps up to 30,000 event deliveries per workspace per hour. Having trouble keeping up? Event deliveries will only be disabled when apps drop below a 5% successful response rate.
  • The users.setActive method was recently rendered irrelevant by our efforts to modernize our message servers. Use users.setPresence and/or connect via RTM to proclaim a user's presence instead. We'll remove this no-op method entirely on May 8, 2018.

January

  • Catch up on recent changes to presence in the RTM and Web APIs and changes to come, including the deprecation of users.list's presence parameter.
  • Having trouble connecting to the RTM API lately? WebSocket URIs may contain querystring parameters & some libraries don't like that. Find out more.
  • Workspace token apps in developer preview now must request the chat:write scope to post messages. Existing access grants are backfilled.
  • Active listening made easier: Subscribe to app_mention events to exclusively receive messages mentioning your app or bot.
  • Now shared channels can be made private and the implications are well worth considering, especially if assuming channel IDs beginning with C are public.

A bric a brac of broadcasts built with blocks

The data structure that represents a message now contains additional new fields on top of all the existing fields your app may be currently expecting. The new structure took effect on February 13, 2019.

These changes come with Block Kit—a new set of components for Slack apps that can be combined to create visually rich and compellingly interactive messages. You can read more about Block Kit below.

Even if you aren't using Block Kit to compose messages, its launch still affects the data structure of messages received via our APIs, so read on to learn how to prepare your apps.

Workspace token rotation

Workspace apps are deprecated

Workspace apps use an access token to represent all the permissions granted to your app by a workspace.

Workspace tokens are so potent and powerful that apps should take great care to keep them safe and secret. We're releasing a OAuth 2.0-based token expiration and rotation system that will make workspace tokens short-lived while providing your app a secure means to refresh tokens as needed.

For more detail on the ins and outs of token rotation, check out our full documentation.

Conversations APIs and scopes for workspace apps

Workspace apps can now use a simplified interface for working with the Conversations API methods. A workspace app can request three new scopes: conversations:history, conversations:read, and conversations:write. These three scopes cast an umbrella of permission over each different conversation type: channels, DMs, or anything in between.

Workspace apps are deprecated

These new scopes make it even easier to use Conversations API methods, allowing apps to negotiate permissions for, and then interact with, all types of conversations at once.

The latest and greatest conversations scopes

App home events for workspace apps

Workspace apps are deprecated

We've added the message.app_home event for workspace apps building on our developer preview.

If you subscribe to message.im events to receive messages between users and your app in the special kinds of 1:1 conversations had in your app homes, you must add a subscription to message.app_home to continue receiving and acting on those messages.

Workspace apps grant apps a dedicated space within Slack where members can interact directly— we call it your App Home. Apps can use this space for personal notifications, onboarding information, and other helpful features.

File threads soon tread

We're fixing file comments and in the process we're phasing out some related API methods and events.

File comments look like messages in a channel but they aren't. They travel with files, wherever shared, disrupting conversation at inopportune moments.

We started to gradually roll out file threads on July 23, 2018. Sharing a file with a channel will now create an actual message instead of something that looked convincingly like a message. People and bots may reply to that message as they would any other message. You can even upload files into threads.

OAuth flow changes for workspace token preview apps

Workspace apps are deprecated

We're simplifying the installation process for workspace apps.

Now workspace apps can and should use the oauth.access method instead of oauth.token during the verification code exchange phase of app installation via OAuth 2.0.

When used with workspace apps, the response for oauth.access morphs into a response similar to that of oauth.token, but with a few improvements detailed below.

Now oauth.access may be used by workspace apps instead of oauth.token, simplifying a common hurdle when getting started with workspace apps.

Finally, we're replacing apps.permissions.info with apps.permissions.scopes.list and apps.permissions.resources.list.

Scoping file rights for writes in workspace token apps

Workspace apps are deprecated

We're simplifying some permission scopes as part of the workspace apps developer preview.

Beginning today, workspace apps must request files:write instead of files:write:user during installation or when seeking elevated permissions.

Now files:write represents your app's ability to upload and manage files.

Experiencing déjà vu? This is just like that time we did this for chat:write.

Truncating really long messages

We're tidying up the character limits on the text field of posted messages.

Beginning April 25th, 2018, we truncated messages sent to Slack that are longer than 500,000 characters. As of July 12, 2018, we truncate at 100,000 characters.

Over the next several weeks, we slowly lowered the allowed character count.

On August 12, 2018 we started truncating messages containing more than 40,000 characters.

Great rate limits

Until now, the rate limits governing the Slack Web API have been vague, even sometimes undefined.

This week we are rolling out an evolved rate limiting system granting a greater number of requests to most methods and sets responsible defaults in the few cases where limits were more mysterious or unenforced.

We've granted a brief grace period to a small number of apps & integrations to adjust.

Presence present and future

The RTM API's presence_change event is now only available via presence subscriptions and rtm.start no longer includes user presence status in its response.

We incrementally announced these changes in June and October 2017.

Today, we're also announcing the deprecation of the optional presence parameter in users.list. Beginning September 26th, 2018, the presence parameter and corresponding fields will no longer be available from users.list.

Developers utilizing user presence state in their applications and integrations should review this guide to the many recent and coming changes to presence.

Update: users.setActive is also deprecated due to underlying functionality not being available in our most modern message servers.

Don't let websocket URIs with query strings get you down

We now serve query string parameters on the wss:// WebSocket URIs produced by rtm.connect and rtm.start.

While the specification for WebSockets explicitly allows query string parameters, some third party libraries not fully implementing the spec may handle these parameters incorrectly, stripping them off and invalidating your attempts to open a connection.

Known issues

Though we didn't anticipate issues sending query strings in websocket URIs, some libraries and frameworks may need tinkering with.

  • Use Slack API in Go AKA github.com/nlopes/slack? Update to the latest version of this Golang project to resolve connection issues. A recent commit merged with master fixes websocket URI handling.

The right chat:write for workspace token apps

Workspace apps are deprecated

Legacy workspace apps are deprecated and will retire in August 2021. Learn more.

We're simplifying some permission scopes as part of the workspace apps developer preview.

Beginning today, workspace apps must request chat:write instead of chat:write:user during installation or when seeking elevated permissions.

Now chat:write represents your app's ability to post messages in the channels and contexts granted to it.

2017 shortform changelog entries

December

  • For those moments when your app knows a user's email address but hasn't met them on Slack yet: now apps with users:read.email can use users.lookupByEmail and skip wading through users.list.
  • Turn your links into buttons by adding link buttons to your messages.
  • Storyboard, mock, and play make believe with these useful design templates starring your favorite platform features.

November

  • Use chat.getPermalink to easily exchange a message ts for a permalink URL.
  • Why couldn't bot users use bots.info? We don't know but now they can too.
  • Help people get back to work by deep linking to your Slack app or directly to a channel.
  • When a workspace migrates to Enterprise Grid, existing users are given a second global user ID. Now you can bulk convert those with migration.exchange and turn off your app's translation layer, living the dream of one user ID per user.
  • Do what you like with this OpenAPI 2.0 specification of our Web API. Most methods now contain more helpful response examples. More specs and coverage on the way. Read on about our API spec.

October

  • Send JSON when posting to Web API write methods. Gone are the days of perfunctory errors when sending lovingly crafted JSON to chat.postMessage and other methods.
  • We broadened support for presenting your tokens as a "bearer token" in Authorization HTTP headers with the Web API.
  • We removed the latest, unread_count, and unread_count_display fields from limited contexts of the new Conversations API. They weren't really supposed to be there. You won't find them spuriously lurking in the shadows again. We don't anticipate any issues but let us know if you find any.
  • The members array found in many API methods is now truncated. We continue to lower the maximum results returned. Please use conversations.members to manage memberships instead.
  • Scheduled changes and feature retirements to the Slack platform are now easier to find in our forward-looking calendar of upcoming changes.
  • The RTM API's presence_change event requires presence_sub subscriptions beginning November 15, 2017.

September

  • Ask users for more structured form-based information with Dialogs.
  • Now you can customize your app's experience by the locale and language preferred by users, channels, and other conversational constructs. Start practicing your Klingon. 🖖
  • Shared Channels let Slack apps collaborate with users across different organizations.
  • The Conversations API is a collection of more than 15 Web API methods normalizing the way apps deal with channels, direct messages, and more. Never rely on the first character of a channel ID again.
  • The role of @username is changing on the platform but we're making the transition as backwards-compatible as possible.
  • We are clarifying two terms encountered throughout Slack, "team" (the people you talk to in Slack) and "workspace" (the place you do work). You'll find many team references updated to workspace across Slack and API documentation. With artifacts like the team object, field, and parameters scattered through the platform, you'll often still encounter team while reading and programming.
  • No more sad panda 🐼 because we fixed it — Now the outgoing webhook response payload includes a thread_ts attribute so you know if the message is triggered in a thread!

August

  • Batten down the hatches! Further secure your internal integrations by restricting token use of Web API methods to specific IP addresses you trust: IP allowlisting is here.
  • Improve your custom unfurling flows with enhancements to authenticated unfurls and chat.unfurl.
  • No longer the sole domain of slash commands and interactive messages, now apps can emit their own ghostly ephemeral messages with chat.postEphemeral.
  • Temporary rollback: We've reinstated access to the email attribute for bot and user tokens. On August 1, 2017 we proceeded with limiting email access to user tokens with users:read.email.
  • Our developer preview for a new kind of Slack app based on workspace tokens is open. Learn how to work with workspace tokens and about our new Permissions API. Our announcement covers the story behind the token.
  • With so many token types decorating our platform, this guide to token types has become a necessity.
  • Now we allow you to learn more about OAuth permission scopes and methods, events, and token types each supports with this helpful OAuth scope library.

July

  • Shuttle Slack app installers to the installation flow more swiftly from the Slack Marketplace with a Direct Install URL.
  • Our little changelog has its own RSS feed now.
  • Buried somewhere in this RTM announcement, we told you about the latest field departing from channel objects returned in the long rtm.start preamble. Those fields are gone. Turns out we also removed unread_count_display and unread_count too. If you're suffering from a sense of loss over these unread count fields, please drop us a line. You can still find them in conversations.info.
  • Your app has a home in Slack. Read all about it!
  • Teams now have the option to limit Slack app installation only to apps listed in the Slack Marketplace.
  • We're introducing a unified cursor-based pagination model to many of our Web API methods beginning with but one: now you can drink from users.list one delicious sip at a time.

June

  • Get an event when more members join your User Group or when — uh-oh, it loses members with subteam_members_changed.
  • Do you work with presence_change events in the RTM API? Learn about new ways to subscribe and consolidate presence events here.
  • We've compiled a collection of Best Practices around building fantastic Slack app user experiences. Your users will be stoked!
  • We've turned a light on for you and your development team: App Blueprints are like recipes for building the internal integrations your team needs to succeed.
  • We've corrected a long-standing bug where user or @channel-type mentions in back-tick fenced code blocks would trigger notifications. They won't now.
  • We've made very minor improvements to our OAuth-based installation process. You may notice a shifted pixel here and there but no app-facing functionality has changed.
  • Just like subscribing to your app's own newsletter: App Events tell the story of your app's lifecycle. Learn when your app is uninstalled with app_uninstalled, or when user and bot tokens are revoked with tokens_revoked. Pause and resume activity when teams migrate to Enterprise Grid with grid_migration_started and grid_migration_finished.

May

  • We undocumented the mysterious user_id_mapping_old_to_new field described in the Enterprise Grid documentation. It doesn't actually exist and never has, oops!
  • Slackbot wants to help spread the word about your cool Slack app. Add a little HTML to your site and we'll suggest your app when your links are mentioned.
  • You'll soon see fewer message.channel_join and message.channel_leave message subtype events in the Events API and RTM API. Instead, you'll find these new refreshingly direct and informative events: member_joined_channel and member_left_channel.

April

  • The old channels.list API method has a new parameter: exclude_members. Some teams are so big and some channels have so many members that listing them all in a single API response along with every other channel is just outright impractical. Cull unneeded data easily accessed with conversations.info by excluding members fields.
  • We'd like you to stop using rtm.start and start using rtm.connect instead. rtm.connect boots quickly and works well with the most gigantic teams and enterprises of the galaxy.
  • It's spring cleaning time for email. We're winding down the grandfathering introduced for apps using users:read created before January 4th, 2017. After August 1st, 2017 your apps must request users:read.email to gain that access. See this post for more detail. This retirement has been delayed with no date yet rescheduled.
  • Observe the custom status of team members with users.profile.get. Update a user's custom status with users.profile.set.
  • More ways to make messages interactive than before: introducing message menus. Define your options statically, dynamically, even personally — or use our handy conversation, channel, and user pickers. Don't forget your field guide.

March

  • As with the humans operating them, user objects change over time. With the new updated field, decisively learn last time a user object transformed. Look for it in methods including (but not limited to) users.list and users.info. It's an integer value depicting seconds since the epoch.
  • We're introducing new, multimedia ways for bots and apps to express themselves in the Slack Marketplace. Follow our new guidelines to make a great impression with potential installers.
  • Provide users posting links with all the context and interactivity they need, right in Slack. Introducing Slack app unfurling. Here's the announcement!
  • Beginning March 9, 2017, events transmitted via the Events API will include event_id and event_time fields. event_id is globally unique across all teams while the event_time is when the event dispatched, in integer-based epoch time. Use these fields as you like, but there's nothing you need to do to prepare for this eventuality.
  • We made it easier to create and manage your Slack apps. And if you're building internal integrations for your own team, there's a better way to install your app without worrying about the OAuths. Check it out.
  • Looking for custom integrations? They're documented as legacy now. They still work like you're used to but we'd prefer you built your internal integrations as part of a Slack app instead.

February

  • Minor field changes coming to channels.history file messages and skype user profile fields.

January

  • You have the tools and the talent — now you have the opportunity: develop for Slack Enterprise Grid. Here's the announcement for the suits.
  • Now your app can read, write, and party with message threads. Rolling out to teams over the next few days, message threads are a perfect place to tuck your wonderful workflows. Here's our announcement.
  • This new year's resolution is a minor slash command revolution: a backwards-compatible, familiar, and decisive means to resolve user IDs, channel IDs, and links from references in slash command invocations.

Making RTM presence subscription only

RTM API Presence is now only available via subscription.

As of January 2018, presence_change events are not dispatched without presence subscriptions established with presence_sub. Relatedly, current user presence status is no longer communicated in rtm.start. Learn more.

Beginning November 15, 2017, the RTM API's presence_sub event will be available via presence subscription only.

Back in June, we introduced new ways to track user presence and the presence_change event in the RTM API.

Dispatching presence events for all users in a workspace is an expensive operation for Slack. A flood of presence events from large workspaces can also disrupt your app's ability to process more useful, timely messages.

By subscribing only to the presence events your app needs to provide presence-dependent functionality, you can reduce unnecessary websocket traffic.

The members array is being truncated

Arrays of members found in API methods will become truncated beginning December 1, 2017.

The maximum number of results found in members continues to decrease regularly

As of March 2018, the limit is set to 500 results. Use conversations.members for channels with large memberships.

Initially, Slack will limit members to the first 1,500 users and then gradually lower the number of users returned. You should expect API methods will cease returning members entirely at some point in the future. If you rely on the members array, you should instead begin using conversations.members for a full list of members.

As Slack teams continue to grow in size, returning the full members array in these methods is no longer practical or performant, for the Slack APIs or developers. The conversations.members method will allow you to request a list of members at a time that makes sense for your app and should keep these method calls nice and zippy.

Locale locale locale

Slack now supports multiple languages, and your app or integration can too.

Add a locale in user and conversation by using the include_locale=true parameter when requesting a bundle of Web API methods supporting it.

The locale field is a string containing a IETF language code, such as en-US. fr-FR, es-ES, or de-DE, and other future values.

We now support include_locale on these methods. Opt-in to receive a locale field in user profiles or the locale of a conversation.

If you don't include the parameter, no locale will be provided. It's opt-in.

You'll also see locale information changes in related user profile change events in the RTM and Events APIs.

The one about usernames

Slack is phasing out the @username artifact in favor of the more expressive and flexible concept of display names.

Handles, aliases, call-signs, and usernames — in chat, they all repersent the same concept: a way for an individual or entity to indicate a preferred identification noun, in whichever way is appropriate to the apparatus at work.

Users will be even better equipped to present their preferred nomenclature while giving organizations the option to work primarily with so-called real names as suits "the suits."

The transition should be technically "backwards compatible" to you, the developer. But the social ramifications, changes in user behavior, and treatments given in Slack clients will inevitably alter the way your apps approach interpreting, storing, and utilizing the now deprecated name field.

As fellow developers, we know you'll have some feelings about the sunset of @username considering its historical significance in computing, networking, and digital identity. From mainframes to UNIX to BBSes to IRC, maybe you've used the same name for what seems like centuries.

Fly your freak, geek, or mild-mannered flag proudly by just setting your display name to your preferred @username.

Batch presence and presence subscriptions

RTM API Presence is now only available via subscription.

As of January 2018, presence_change events are not dispatched without presence subscriptions established with presence_sub. Relatedly, current user presence status is no longer communicated in rtm.start. Learn more.

If you've been developing on Slack for awhile you may have noticed a continued theme with updates we make to the platform and APIs: larger teams and evolving use cases mean previous ways of enumerating collections of data become unwieldy and even problematic.

In this exciting edition of the changelog, I'd like to introduce you to new ways to work with presence_change events in the RTM API.

If you don't work with the RTM API or don't utilize presence_change events, there's very little of value for you in this changelog.

Rethinking channel entrance and exit events and messages

We've long delivered a message subtype event to everyone in a channel as members come and go.

As a message, its main purpose is to communicate facts to users but it was never a very good vehicle for communicating these facts to bots and applications.

We're introducing new, more frugal logic behind when Slack dispatches message.channel_join and message.channel_leave message subtype events in the RTM API and Events API.

If you've relied on these events for programmatic notice when members leave or join a channel, we've got new, strongly structured signals for you to subscribe to and consume instead, member_joined_channel and member_left_channel.

Narrowing email access

Accessing email addresses

The [users:read.email](/reference/scopes/users.read.email OAuth scope is now required to access the email field in user objects returned by the users.list and users.info web API methods. users:read is no longer a sufficient scope for this data field. Learn more.

Back in November 2016, we introduced the users:read.email OAuth permission scope, allowing more explicit access to email addresses.

To help developers with the transition, we automatically grandfathered apps asking for users:read created before January 4th, 2017.

We'd like to complete this transition and remove this grandfathering entirely on August 21, 2018 October 16, 2018 a future date we'll one day announce.

Apps created before January 4th, 2017 with user tokens granted only the users:read scope will no longer receive the email field in user objects.

If you want access to email addresses, you'll need the new OAuth permission scope, users:read.email. It provides an explicit, additive way to request access to team email addresses.

Additionally, the bot scope will no longer grant bot user tokens access to email addresses. Bot users must utilize a user token and the users:read.email scope instead.

Don't need access to email address but do need access to user data? users:read should be all you need.

Start using RTM connect and stop using RTM start

Update 2017-07-12: As promised, the latest fields within rtm.start's channel objects are no longer returned. Additionally, the unread_count and unread_count_display channel fields are also missing, though they can still be found in conversations.info.


rtm.start began life as a broker and bootstrap to Websocket connections established by Slack's desktop and mobile clients. Whenever our clients needed more information to establish state, those fields would get stuffed into the cacophony that is rtm.start's opening salvos.

As team sizes and feature complexity has grown, delivering this immense quantity of information about nearly every user, channel, and conversation on a team has become more difficult to compute, consume, or continue.

It is in this spirit we offer a friendlier alternative in rtm.connect, a method born with the sole purpose of reserving a websocket connection and providing your application its URL.

rtm.start must evolve to continue functioning well for all teams and apps. We strongly recommend using rtm.connect to establish your connections alongside Web API methods to build your app's understanding of the users, channels, and conversations within a team.

One such change coming to rtm.start is the elimination of the latest attribute assigned to each channel in its response.

On July 11, 2017 we'll no longer return these latest fields. If your app needs a channel's latest timestamp value, use conversations.info to retrieve it instead.

You can test this future behavior in rtm.start today by providing the no_latest=1 parameter.

Minor field changes

It's almost spring and we're doing a little cleaning early this year.

Ever notice how the username field of a file object in channels.history or [file_shared](/reference/events/file_shared event isn't like typical username fields and contains a bunch of markup usually reserved only for message text?

And why is there a top-level skype field in user profile objects when really, shouldn't that be a custom field?

Well, we've noticed. And so...

2016 shortform changelog entries

December

  • Now everyone's bot is present and accounted for. Events API-only bots can toggle online presence by visiting their app management command center. Details worth catching up on: bot user presence.
  • We made it so Slack apps have a profile within Slack like humans do — Here's an announcement tweet.

November

  • Let's extend a warm welcome to new app_id fields now appearing in our APIs. app_id is now found in rtm.start & bots.info. You'll also find app_id in the bot_added & bot_changed events. What's an app_id? It's the alphanumeric string found in the URL bar while managing your Slack apps.
  • We've added a new OAuth permission scope called users:read.email. Apps created after January 4th, 2017 will need to request this additional scope to gain access to team member email fields when using users.list and users.info. Existing Slack apps with users:read are automatically grandfathered to include these fields.
  • Now you'll find links to practical tutorials and thoughtful articles displayed beside relevant documentation found here on api.slack.com. Discover new articles or browse them by topic in our new Tutorials hub. Written something great? Tell us about it!
  • Our developer relations team has renewed Slack's adoption of key open source tooling: Slack Developer Kits. Discover our Python & node.js SDKs in their new home on our community index.

October

  • Your elaborate Slack apps are no longer shackled to but just one team member. Now you can invite other team members to be App Collaborators to share in the fun and responsibility. Here's what our web log has to say about it: Build together with App Collaborators

September

  • We will soon add an additional response_metadata node to our JSON responses; we'll put warnings there first and other useful stuff later. More details are available.
  • Newly issued OAuth token strings are longer than they were before, as we informed you about last month. Let us know if this vexes you.
  • Now you can use the users.profile:write OAuth permission scope to reset and upload profile images using users.deletePhoto and users.setPhoto.
  • We've dramatically improved the process of submitting a Slack App for inclusion in our Slack Marketplace. You'll find a helpful, interactive checklist when first submitting your app. When you're ready to iterate further, you can create a secondary beta application. If a core piece of your app's functionality changes (like requesting new OAuth permission scopes), we'll happily review your app again. Read all about it on the platform blog.

August

  • Ever needed to send a user to Slack directly from your app? Deep link and make native Slack clients part of your app's workflow: Open key teams, channels, and conversations. Or, defer to search results using the slack:// URI scheme.
  • The character length of token strings is getting longer. Find out how long they'll get and how to future-proof yourself for changes in the future.
  • You may encounter an occasional user ID beginning with the letter W. We've released a new version of node-slack-sdk to correct a related bug.
  • Introducing the Events API, a new way for Slack apps to receive event types previously available only to the real time messaging API. Subscribe to the events your app needs and have them delivered right to your server as they happen. Build a bot or event-driven app without worrying about websockets, and scale it like a web app. Read more about the Events API in our blog post, Subscribe to the Events API.

July

  • Until now, it's been easy to accidentally send messages flush with hundreds of message attachments. We've begun limiting the number of message attachments per message to 100. For approaches like chat.postMessage, incoming webhooks, and chat.update, and response_urls you will receive a too_many_attachments error. Unfortunately, we are unable to serve you an error when sending messages as part of a slash command or message buttons invocation response.
  • If you're interested in listing your Slack app in the Slack Marketplace, you'll want to review our new Slack Marketplace Agreement and consider our Security Review Process. Find these and other policies in our new Slack App developer policy hub.
  • We've corrected a bug where incoming webhooks could post messages in "#general" even 1. if that channel restricts posts and 2. the user owning the webhook was not allowed to post there. This new behavior will only prevent recently created webhooks from posting to restricted "#general" channels, so if your old webhooks are relying on this quirk, they'll be fine for now.

June

  • Now your applications can read and write defined team profile fields for individual team members. The users.profile:write scope allows you to edit fields with users.profile.set. The users.profile:read scope empowers you to discover available fields with team.profile.get and retrieve user profiles with users.profile.get.
  • Slack apps can now add action-invoking interactive buttons to messages, allowing you to simplify workflows and encourage users to take decisive action from within Slack.
  • For better readability, syntax highlighting has been added to code blocks throughout our documentation.
  • We've corrected the behavior of stars.list so that it only returns stars belonging to the owner of the presented token. The user parameter may still be used if the provided user ID belongs to the user utilizing the token.
  • Team administrators may now use tokens with the admin scope to request information about the billable status of team members using the team.billableInfo API method.
  • Now that bot_id appears in the real-time messaging API and Web API, you need a better way to look up bot users. Use the new bots.info method to query bot/application information by ID. It requires the users:read scope.

May

  • Additional real time messaging API events will begin including the event_ts timestamp field later this summer. Find out what to expect.
  • Now you can put down a footer on your message attachments. Use the footer, footer_icon, and ts fields to tie content across time and space.
  • For the few of you out there using outdated tokens, we've made some changes to authorship behavior when using chat.postMessage.
  • Error conditions in incoming webhooks are due for an improvement. Read all about how blanket HTTP 500s will become more fine-grained, purposeful error conditions. Shipped on June 16, 2016.
  • Recently introduced bugs in our iOS & Android apps cause message attachment fields marked as "short" to wrongly render long anyway. Our fixes may take a couple weeks to reach each platform.
  • Sign team members into your website, service, or application with Sign in with Slack, based on the same OAuth 2.0 flow used by the Add to Slack button. Read more about it in this announcement.
  • We've added two new API methods: users.identity works with Sign in with Slack and auth.revoke revokes hallway privileges for access tokens. Actually, it revokes the whole token.
  • For those who don't know why they should build on Slack: https://slack.com/developers

April

  • Bot user tokens may now use files.info to look up information about files they have access to by virtue of their channel memberships. Also, very helpful for adapting to upcoming file events changes.
  • Manage your Slack apps joyously with our updated app edit pages.
  • File events are changing in the real time messaging API beginning May 16th, 2016. The files.info method is soon to be used by bot users.
  • As previously announced, we've added a bot_id field to relevant API responses. Let us know if you run into any issues.
  • We released a family of API methods to create and manage reminders. Meet reminders.list, reminders.info, reminders.add, reminders.delete, and reminders.complete.
  • We fixed an unfortunate bug where a team member could inadvertently uninstall a whole Slack App from their team by removing a single incoming webhook associated with that instance of the app.
  • Find out what we're building! Announcing our Platform Roadmap.
  • Another way to keep up with the Slack Platform: Install the API News App to receive occasional, important notifications about the platform.
  • Your bot users author their own messages, now they can edit them too. Bot user tokens may now use chat.update, like humans do.

March

  • Now chat.postMessage will better intuit your intent when you don't explicitly specify the as_user parameter. Let us know if we're guessing wrong!
  • One day soon our Web API will warn you when something is only slightly wrong with your requests. Read all about API warnings.
  • Be welcoming. Be kind. Look out for each other. This is the Code of Conduct for the Slack Developer community.
  • Now bot users can use methods requiring the dnd:read scope, like dnd.info and dnd.teamInfo. Your bots'll be more polite than a protocol droid!
  • Craft your fancy messages in real time with the new Message Builder!
  • Users can now rename Bot Users they've installed as Slack Apps. More naming, more claiming. No more terrible twos.
  • We finally updated the slackhq/slack-api-docs repository, reflecting recently introduced and quite ancient documentation updates and new features.

February

  • reaction_added & reaction_removed events now include an item_user field indicating the user that created the original content everyone's raving about.
  • Published this changelog you're reading right now. So that you can know about all this stuff. Tell your friends.
  • New Web API methods: share files publicly with files.sharedPublicURL or make them private again with files.revokePublicURL.
  • files.comments.add, files.comments.edit, and files.comments.delete are now available to bot users.
  • Quickly find the right tools for your project with our new listing of often-used open source libraries.
  • The handy test token generator previously found in the Web API documentation now stands proud with its very own page.
  • Need help? We have some tips for you.
  • api.slack.com's sidebar is now better organized by topic.

January

  • As of January 4th, 2016, authorization headers are now required for most Web API requests involving file URLs. See this doc and blog post for more information.
  • url and url_download are no longer part of file objects
  • Enjoy our evolving collection of Frequently Asked Questions (and answers!)
  • Responses to Incoming Webhook requests now include channel_id
  • Make sure you're ready before submitting your Slack App for review by following this Slack app checklist.
  • Incoming Webhooks documentation updated to better bait best practices and discourage fishy formatting behavior.
  • The file object documentation now includes a list of possible file types.

Addressing email addresses

Accessing email addresses

The [users:read.email](/reference/scopes/users.read.email OAuth scope is now required to access the email field in user objects returned by the users.list and users.info web API methods. users:read is no longer a sufficient scope for this data field. Learn more.

This original plan has been updated

Grandfathering is no longer in effect. Please see this post from April 2017 for more information.

We've added a new OAuth permission scope called users:read.email and it provides a new explicit, additive way to request access to team email addresses. If you don't need email addresses but do need other user info, users:read is still all you need.

Apps created before January 4th, 2017 are grandfathered and will continue behaving in a backwards-compatible way. Apps created after that date must request the new users:read.email scope. Regardless of creation date, we encourage all apps to migrate to this new scope.

Response metadata is on the way

We want to tell you even more about your API requests. On November 1st we'll begin including a response_metadata field in HTTP API responses.

At first it will include a warnings array, just as the top-level JSON response does today. API warnings are great example of the kind of information we want to communicate in this response metadata, so please forgive our duplication.

Later we'll include a messages array. It will include human-readable descriptions of errors or warnings generated by your request.

Token lengthening

Beginning next month, newly issued tokens will be longer than previously issued tokens.

Until now, we haven't documented the string length of tokens, so we hope you've used caution when preparing your token storage apparatuses.

User ID format changes

As Slack works to serve the needs of larger businesses by building an enterprise product offering, some aspects of our infrastructure and platform are evolving.

More event timestamps in the RTM API

Within the next few weeks, we'll add event_ts timestamp fields to additional streamed events you receive in the real-time messaging API.

What are these fields for?

The event_ts field differs from the ts timestamp fields you already receive with most events. The ts field is associated with the object or transition the event is describing while the event_ts attribute refers to the streamed event.

The ts field is like a date scrawled on a letter contained within an envelope — it's part of the message itself.

The event_ts is like a postmark stamped on the envelope as part of the postal process, an artifact of the workflow used to deliver the message to the intended recipient.

As with ts, event_ts is expressed in a kind of "epoch time", contained within a string and including fractions of seconds.

An example event_ts timestamp value of "1361482916.000004", could be converted to UTC as 2013-02-21 21:41:56 UTC.

event_ts is especially useful when noting your real time progress through a channel's history.

Authorship changing for older tokens

Long ago, a small number of enterprising users and developers scoured through client-side code to discover embedded user tokens and began posting messages and performing other skunkworks operations with them. We applaud this adventurous spirit!

Today we take the first step in retiring usage of these antiquated tokens, by changing their behavior when used to post messages through chat.postMessage.

Changes to errors for incoming webhooks

Today, incoming webhooks either work or they don't. Usually they do, but when they don't, you get a somewhat nasty umbrella HTTP 500 error, even when error conditions were due to something well-understood, like malformed requests or non-existent destination channels.

We will diversify our responses to include commonly-interpreted HTTP status codes. For most developers using incoming webhooks, this change will not require additional effort. Most HTTP clients readily consume and predictably react with these status codes.

RTM API file events payload change

If you parse events referencing files in the real-time messaging API, you may have noticed we send a sometimes comically large packet of information when streaming nearly anything related to a file.

To improve performance and provide a better user experience, we're reducing the payload of most file-related events in the RTM API to include only the file's ID. You'll need to use the files.info API method to retrieve additional information about files.

These changes will roll out gradually beginning May 16th, 2016 — read below to understand how this change may effect you, especially if you work with bot users.

Bot users will gain comparable capabilities, allowing bot user tokens to work with files.info based on the channel memberships and related capabilities granted to them.

Reminders API methods

In effect on April 14, 2016

  • New reminders API methods for managing reminders in Slack
  • New reminders OAuth scopes for calling the new methods

New API methods

The following API methods have been released, allowing you to programmatically add, remove, and manage reminders.

New OAuth scopes

The following OAuth scopes will grant you access to the new methods listed above:

2015 shortform changelog entries

November

  • More granular OAuth scopes are here! Now your apps can ask for the exact level of access you need.

  • Added authorization support for thumbnail URLs appearing in File objects.

  • Added team.integrationLogs to the Web API

  • Announced important changes to the Files methods of the Web API.

December

  • Now you can upgrade your Slack App's OAuth Scopes by managing your apps. This article explains it all.

  • Don't press snooze until you've dreamed about our new Do Not Disturb Web API methods.

  • You can now package Bot Users within Slack Apps, making your creations easier to distribute to teams.

  • We launched the Slack Marketplace, where teams can discover apps like yours.

  • We announced the Slack Fund to "give developers the backing they need to build everything possible in Slack."

  • The api.slack.com home page is fancier.

  • Enjoy major updates to the Slash Commands documentation, expanding on topics like...

  • ...delayed responses.