Go to Slack

Recent changes to the Slack platform

We improve the Slack platform every day by releasing new features, squashing bugs, and delivering fresh documentation. Here's an account of what's recently happened. This is our #changelog.

We tweet about most of these updates from @slackapi, but we also offer this wonderfully antiquated RSS feed. Slack, the service and product, has its own changelog too.

Use the slash command: /feed subscribe https://api.slack.com/changelog.rss to receive these updates in a Slack channel of your choosing.

Recent important updates:

  • APIs "40k ought to be enough characters for any message." - Slack Platform Gatekeepers. Messages are now limited to 40,000 characters. Learn more about these planned changes.
  • Apps 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. Learn more.
  • APIs 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. Learn more about pagination.
  • APIs Commenting on files is now just like replying to a message. All developers working with file objects, events, or comments should read on to learn more, much more, about file threads.
  • APIs Confidently verify a request originates from Slack by validating our new request signatures. The signing process replaces the use of verification tokens, now deprecated. Learn more.
  • Preview 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. Learn more.
  • APIs Beginning August 21, 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.
  • APIs We're still tidying up the character limits on the text field of posted messages and gradually lowering its maximum. On April 25th, we began truncating messages greater than 500,000 characters. As of July 12, the maximum is 100,000. We'll begin truncating messages greater than 40,000 characters in August 2018. Learn more.

Consult scheduled changes for additional future-looking changes.


Here are the 180 changelog entries logged since November 2015.

August 2018

  • Tools 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. Learn more.
  • APIs "40k ought to be enough characters for any message." - Slack Platform Gatekeepers. Messages are now limited to 40,000 characters. Learn more about these planned changes.
  • APIs 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.
  • Preview 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.
  • Preview 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.
  • Apps 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. Learn more.

July 2018

  • APIs 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. Learn more about pagination.
  • Tools With Slack Developer Tools you can now quickly look up documentation, investigate the structure of messages, and more, all inside of Slack.
  • APIs Commenting on files is now just like replying to a message. All developers working with file objects, events, or comments should read on to learn more, much more, about file threads.
  • APIs 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.
  • Preview 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. Learn more about working for users.
  • Apps Our recently launched message actions are now available for use in all Enterprise Grid workspaces and any Shared Channels within them.

June 2018

May 2018

  • APIs Beginning August 21, 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.
  • Apps 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.
  • APIs We're compiling a humble library of JSON schema about the Events API into a kind of open specification called AsyncAPI.
  • APIs 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.
  • Preview 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. Learn more.
  • APIs File threads, a replacement for file comments, is on the way! Learn about the changes ahead, some of them may break apps relying on file comments behavior and some apps may need to request additional scopes when working with files.

April 2018

  • APIs Measure drop off and send helpful follow ups when users cancel dialogs with these opt-in cancellation notifications.
  • APIs Have a bot user token you don't need or want to use anymore? Now you can use xoxb- tokens with auth.revoke.
  • APIs We're still tidying up the character limits on the text field of posted messages and gradually lowering its maximum. On April 25th, we began truncating messages greater than 500,000 characters. As of July 12, the maximum is 100,000. We'll begin truncating messages greater than 40,000 characters in August 2018. Learn more.
  • Preview 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.
  • Preview Working with workspace token-based apps as part of our preview? Please start using oauth.access instead of oauth.token during installation. Read on to learn why and about new features.
  • APIs Some bots are users too. Now you can find a bot user's user_id with bots.info.
  • APIs Enhance your dialogs with dynamic form elements "borrowed" from message menus. Learn more.
  • APIs Rediscover the conversations you're party to with users.conversations.

March 2018

  • APIs We corrected and clarified the behavior of users.profile.set to only allow admins of paid teams to update email address profile fields.
  • APIs 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...
  • Tools 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.
  • APIs 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 October 2017 announcement for detail.
  • APIs Web API methods will be enhanced with tiered rate limiting beginning March 7, 2018, with most methods gaining greater limits than ever before. Learn more about this week's incremental rollout of rate limit tiers.
  • APIs 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 2018

  • APIs Now users can respond to dialog textarea elements with up to 3,000 riveting, carefully-chosen characters.
  • APIs 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. Learn more.
  • APIs 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 2018

  • APIs 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. Read on.
  • APIs Having trouble connecting to the RTM API lately? WebSocket URIs may contain querystring parameters & some libraries don't like that. Find out more.
  • Preview Workspace token apps in developer preview now must request the chat:write scope to post messages. Existing access grants are backfilled. Read on, developer previewers!
  • APIs Active listening made easier: Subscribe to app_mention events to exclusively receive messages mentioning your app or bot.
  • APIs Now shared channels can be made private and the implications are well worth considering, especially if assuming channel IDs beginning with C are public. Read on.

December 2017

November 2017

  • APIs Use chat.getPermalink to easily exchange a message ts for a permalink URL.
  • APIs Why couldn't bot users use bots.info? We don't know but now they can too.
  • APIs Help people get back to work by deep linking to your Slack app or directly to a channel.
  • APIs 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.
  • APIs Do what you like with this OpenAPI 2.0 specification of our Web API. Relatedly, most methods now contain more helpful response examples. More specs and coverage on the way. Read on about our API spec.

October 2017

  • APIs 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. Read on.
  • APIs We broadened support for presenting your tokens as a "bearer token" in Authorization HTTP headers with the Web API. Learn more.
  • APIs 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.
  • APIs The members array found in many Web API methods like channels.list and rtm.start is now truncated. We continue to lower the maximum results returned. Please Use conversations.members to manage memberships instead. Read on to learn more.
  • Docs Scheduled changes and feature retirements to the Slack platform are now easier to find in our forward-looking calendar of upcoming changes.
  • APIs The RTM API's presence_change event requires presence_sub subscriptions beginning November 15, 2017. Read on.

September 2017

  • Apps Ask users for more structured form-based information with Dialogs.
  • APIs 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. 🖖 Learn how.
  • Apps Shared Channels let Slack apps collaborate with users across different organizations.
  • Apps 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.
  • APIs The role of @username is changing on the platform but we're making the transition as backwards-compatible as possible. Read on for important updates.
  • Docs 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.
  • APIs 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 2017

July 2017

June 2017

  • APIs Get an event when more members join your User Group or when — uh-oh, it loses members with subteam_members_changed.
  • APIs Do you work with presence_change events in the RTM API? Learn about new ways to subscribe and consolidate presence events here.
  • Tools We've compiled a collection of Best Practices around building fantastic Slack app user experiences. Your users will be stoked!
  • Tools 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.
  • APIs We've corrected a long-standing bug where user or @channel-type mentions in code blocks (```) would trigger notifications. They won't now.
  • Apps 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.
  • APIs 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 2017

April 2017

  • APIs That 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 channels.info by excluding members fields.
  • APIs 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.
  • APIs 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.
  • APIs Observe the custom status of team members with users.profile.get. Update a user's custom status with users.profile.set. Learn how to sync status with calendars, cubicles, conference calls, and bathroom stalls.
  • Apps 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 2017

  • APIs 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.
  • Apps We're introducing new, multimedia ways for bots and apps to express themselves in the app directory. Follow our new guidelines to make a great impression with potential installers.
  • Apps Provide users posting links with all the context and interactivity they need, right in Slack. Introducing Slack app unfurling. Here's the announcement!
  • APIs 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.
  • Apps 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.
  • APIs 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 2017

  • APIs Minor field changes coming to channels.history file messages and skype user profile fields. Read all about it.

January 2017

  • APIs You have the tools and the talent — now you have the opportunity: Learn how to develop for Slack Enterprise Grid. Here's the announcement for the suits.
  • APIs 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.
  • APIs 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. Learn how to turn on this helpful, long-requested feature.

December 2016

November 2016

  • Apps 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.
  • APIs 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. Here's even more detail on that.
  • Docs 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!
  • Tools 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 2016

September 2016

  • APIs 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.
  • APIs 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.
  • APIs Now you can use the users.profile:write OAuth permission scope to reset and upload profile images using users.deletePhoto and users.setPhoto.
  • Apps We've dramatically improved the process of submitting a Slack App for inclusion in our Slack App Directory. You'll find a helpful, interactive checklist when first submitting your app. When you're ready to iterate further, you can simply 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 2016

  • Apps Ever needed to send a user to Slack directly from your app? Here's how to 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.
  • APIs 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.
  • APIs 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. Read more about these changes.
  • APIs 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 2016

  • APIs 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.
  • Apps If you're interested in listing your Slack App in our directory, you'll want to review our new Slack App Directory Agreement and consider our Security Review Process. Find these and other policies in our new Slack App developer policy hub.
  • APIs 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 2016

  • APIs 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.
  • Apps 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.
  • Tools For better readability, syntax highlighting has been added to code blocks throughout our documentation.
  • APIs 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.
  • APIs 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.
  • APIs 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 2016

April 2016

March 2016

  • APIs 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!
  • APIs One day soon our Web API will warn you when something is only slightly wrong with your requests. Read all about API warnings.
  • Docs Be welcoming. Be kind. Look out for each other. This is the Code of Conduct for the Slack Developer community.
  • APIs 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!
  • Docs Home in on hosting for your app or integration with this collection of hosting providers.
  • Tools Craft your fancy messages in real time with the new Message Builder!
  • Apps Users can now rename Bot Users they've installed as Slack Apps. More naming, more claiming. No more terrible twos.
  • Docs We finally updated the slackhq/slack-api-docs repository, reflecting recently introduced and quite ancient documentation updates and new features.

February 2016

January 2016

  • APIs 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.
  • APIs url and url_download are no longer part of file objects
  • Docs Enjoy our evolving collection of Frequently Asked Questions (and answers!)
  • APIs Responses to Incoming Webhook requests now include channel_id
  • Apps Make sure you're ready before submitting your Slack App for review by following this Slack App Checklist.
  • Docs Incoming Webhooks documentation updated to better bait best practices and discourage fishy formatting behavior.
  • Docs The file object documentation now includes a list of possible file types.

December 2015

November 2015