Slack
Learn about how to use Slack provider for chat notifications
The Slack chat integration lets your application send notifications directly to your subscribers' Slack workspaces using their own Slack accounts and workspace permissions. With this integration, Novu can deliver messages to Slack channels, direct messages (DMs) to Slack users and incoming webhooks, using Slack’s native channel picker during OAuth.
Novu handles the full lifecycle of Slack connections and message delivery. You define where notifications should be delivered, and Novu automatically routes each message to the correct Slack workspace, channel, or user.
This guide walks you through setting up Slack chat, connect workspaces, and deliver notifications to the exact Slack destinations your users expect it.
Configure a Slack app
Before integrating Slack chat with Novu, you must create and configure a Slack app. The Slack app manages the OAuth permissions, bot token scopes, and redirect URLs needed for Novu to connect to your users’ workspaces securely.
Create a Slack app
First, you need to create a Slack app. This provides you with the credential you need to create a Slack integration in Novu.
- Go to the Slack API dashboard.
- Click Create an App.
- Select From scratch.
- Enter an app name of your choice in the App Name field.
- Pick a Slack workspace to develop your app in.

- Click Create App. You'll be directed to the Basic Application for the Slack app which contains the credentials you need for configuring Slack chat inside Novu:
- App ID
- Client ID
- Client Secret

Configure scopes (Permissions)
Your app needs permission to perform actions like sending messages or reading channel lists.
- In the sidebar, select OAuth & Permissions.
- Scroll down to the Scopes section.
- Under Bot Token Scopes, click Add an OAuth Scope.

- Add the following recommended scopes:
chat:writechat:write.publicchannels:readgroups:readusers:readusers:read.email- (optional)
incoming-webhookif you want Slack’s built-in channel picker.
These scopes are required for Novu to send messages, read channels and read users (for DMs and pickers). If you remove some of them, then certain features like channel or user selection might not work.
Set the redirect URL
This tells Slack where to send the user after they successfully authorize your app.
- In the sidebar, select OAuth & Permissions.
- Scroll down to the Redirect URLs section.
- Click Add New Redirect URL.

- Paste the Novu OAuth callback URL. Add the redirect URL that matches your Novu region:
- US region:
- EU region:
- US region:
- Click Add to save the URLs. If you use a self-hosted Novu instance, then add your instance’s callback URL instead.
Configure Slack integration in Novu
Once your Slack app is set up, the next step is to configure the Slack Chat integration inside Novu.
- Log in to the Novu dashboard.
- In the sidebar, click Integrations Store.
- Click Connect Provider
- Select Chat and click Slack.
- Fill in the required fields using the credentials from your Slack app:
- Application Id: Paste your Slack app App ID.
- Client ID: Paste your Slack App Client ID.
- Client Secret: Paste your Slack App Client Secret.
- Redirect URL (Optional): Enter the URL where you want users to be redirected to after they successfully connect their workspace. If there is no redirect URL, then Novu closes the tab immediately after the OAuth flow completes.

- Click Create Integration to create the Slack integration. Once saved, Novu is able to:
- Generate OAuth (Connect Slack) URLs for your users
- Receive Slack’s OAuth callback.
- Store workspace tokens as connections.
You are now ready to implement the frontend flow to let users connect their workspaces.
Let users connect their Slack workspace
To send messages to Slack, your users must first authorize Novu to access one of their Slack workspaces. This authorization happens through Slack’s OAuth flow, which Novu generates and manages for you.
Generate the OAuth URL
When a user clicks Connect Slack in your application, your backend should request a unique authorization URL from Novu.
This URL is specific to the Subscriber or the Context (Tenant) it will be generated for.
Your application can support multiple Slack workspace connections per user or per tenant by triggering separate OAuth flows.
Novu allows one connection per (integration + subscriber + context). To connect multiple workspaces, provide different combinations of subscriber or context.
Redirect the user
Once your backend returns the oauthUrl, open it in a new tab or window.
Slack then guides the user through:
- Reviewing your app’s requested permissions
- Approving the authorization
- Redirecting back to Novu’s callback URL
After the user approves access, Novu handles the rest of the OAuth flow automatically.
- Novu exchanges the code for a Slack token.
- Novu creates a Slack connection for that workspace, it is referenced by
connectionIdentifierwhen creating endpoints.You can also provider a customconnectionIdentifierto thegenerateChatOAuthUrl()and then connection with such identifier will be created instead of randomly generated one.
Choose delivery destinations
After a workspace is connected, you or users decide where in Slack to send the messages. This can either be a Slack channel, to a user or an incoming webhook URLs. After the delivery location has been selected, a Slack endpoint is then created for that location.
Send to a Slack channel
This is the typical flow for sending notifications to public or private channels.
-
Get the channel ID: First, the channel where the message will be sent to must be selected, one way to do this is by using your Slack app token to list channels in your own UI.
To learn more about using Slack conversations API to either get public or private channels, refer Slack documentation.
-
Create the endpoint: Once the user selects a channel, save it as an endpoint in Novu.
Send to a Slack user (Direct messages)
Use this to send personal messages and notifications directly to a specific user.
-
Get the Slack user ID: You can use Slack’s users API to get user IDs.
For example, you can look up a Slack user ID by their email address, if you requested the
users:read.emailscope.
To learn more about using Slack users.list method, refer Slack documentation.
-
Create the endpoint: Save the returned User ID as the endpoint.
Incoming webhook URLs
If incoming-webhook scope was included when configuring the OAuth and permissions scopes in Step 1.1. Slack would show its own channel picker during the OAuth flow:
- The user selects a channel directly in Slack.
- Slack returns an
incoming_webhook.url. - Novu automatically creates a webhook endpoint for that subscriber using that URL.
You don’t need to collect channelId yourself in this mode, Slack’s native channel picker handles it.
Send notifications
Once you have at least one Slack connection, and one or more Slack endpoints. You can trigger the workflow:
When the workflow is triggered, Novu will:
- Find Slack endpoints matching
subscriberIdandcontext. - Use the right Slack workspace connection.
- Deliver messages to the configured destinations.