Using legacy custom integrations is an outdated way for teams to integrate with Slack. Legacy custom integrations lack newer features and will be deprecated and possibly removed in the future. We do not recommend their use.

We recommend using their replacement: Slack apps. Slack apps can be built just for your own workspace or distributed through the App Directory, and they can use the latest and greatest APIs and UI features.

Legacy custom integrations migration

If you're still reading, we suspect that you either have an existing legacy custom integration, or that you stumbled across this page looking for a general overview of what you can do with apps on Slack.

For developers with those existing legacy integrations, the old docs for each feature are still available, and we'll keep them around in case you need them.

If you're just starting out, we recommend that you learn instead about the replacement for legacy integrations - Slack apps. You'll find a section below filled with tips about the right learning path to take!

If you want to learn how to move your legacy integration to a modern Slack app, we have some tips for you below.

What can I do with a Slack app?

If you dream it, you can do it. The Slack platform offers a range of ways for users and apps to interact, all the APIs you need to read and write data from and to conversations and users, and various methods of distribution.

Enabling interactions with users

Slack apps can interact with users in lots of different ways, and we leave it up to developers like you to pick the interactions most suited to their audiences.

Empower users to invoke workflows at will using slash commands.

Let users do things with messages by creating custom message actions.

Keep things friendly and conversational by turning your app into a bot.

Create interactive messages to act as starting points for complex workflows.

Reading and writing data

Once users start interacting with your Slack app, our APIs will let you retrieve the data you need from the various resources in Slack, and send data back to make updates or publish something new.

The Web API is the best way to access historical data in Slack workspaces, and make changes to them - like sending messages.

Use the Events API to get pushes about all sorts of activities in workspaces the minute they happen.

Manage and monitor your workspaces programmatically using the SCIM and Audit Logs.

Choose how to share your apps

If you want to build an app that's just for your workspace, you can do that. If you want to build an app to share with the wide world, you can do that too.

Build an internal integration and install for your workspace with just one click.

Use OAuth installation to allow your app to be distributed beyond your workspace.

Prepare your app for the App Directory to boost distribution and discovery.

Moving to Slack apps from Custom Integrations

If you've built a legacy custom integration in the past, you'll find all of the same functionality available to use in Slack apps. The implementation of these functions has changed though, so below is a handy list of how to replace your legacy features.

Creating a Slack app

Make a new Slack app and add in any of the features you want.

Slack apps generate a new token for every user, and each user has their own set of permissions granted.

Incoming Webhooks

Incoming Webhooks are a way to post messages from apps into Slack. Creating an Incoming Webhook gives you a unique URL to which you send a JSON payload with the message text and some options.

Using incoming webhooks with Slack apps is very similar to the legacy process you're familiar with. Follow our Getting Started guide to set up new webhooks for use with Slack apps.

Slash Commands

Slash Commands let users trigger an interaction with your app directly from the message box in Slack. You can create custom commands for Slack apps quickly and easily by following our Getting Started guide.

The process of handling and responding to those commands is almost identical compared to the legacy process you might have already built.

Interactive bots

Let users converse with your app in Slack by building bots. Our Handling user interaction in your Slack apps guide will help you recreate any existing legacy bot functionality you might already have in a Slack app.

Outgoing Webhooks

The Events API provides a fully functional alternative for the features of Outgoing Webhooks.

More specifically, Outgoing Webhooks are used to send a notification to an app about the following activities:

  1. A message was posted in a particular public channel
  2. A message was posted containing specific trigger words

The Events API can be used to replace this by subscribing to the message.channels event type. This will push a data payload to an app every time a message is posted to a public channel.

When an app receives that data payload, it'll be able to see both the source channel and the text of the posted message. Using channel will help replicate the first Outgoing Webhook feature, and looking for the trigger words in the text string will replicate the second.

Even better, while Outgoing Webhooks only worked for public channels, the Events API can be used with private channels, direct message conversations, or multi-party direct message conversations. There are also dozens of other event types available for subscription, and for your app to react to. Read the Events API overview for a better idea of all the things you can use it for.


The Slack Web API is an interface for querying information from and enacting change in a Slack workspace. If you were using a legacy token to make calls with the Web API, you'll need to generate a new one for your modern Slack app. Follow our guide to the OAuth flow.

Because we strongly recommend you do not use legacy custom integrations anymore, you should instead use Slack apps and their access tokens. Our guide to the Web API will walk you through the process of calling Web API methods in a Slack app.

To simplify testing and development, you can create a new app and install it in two clicks - just follow our Quickstart guide. Once it's installed, use the app's settings to add the permission scopes you need for your testing.