Incoming Webhook (Slack)

A Slack incoming webhook is a unique URL that lets an external app post messages into a specific Slack channel by sending a JSON payload.

A Slack incoming webhook is a unique URL that lets an outside application post messages into a specific Slack channel. You send an HTTP POST with a JSON payload to the URL, and the text shows up in the channel — a one-way path from your app into Slack.

How it works

When you add an incoming webhook to a Slack app, you pick a channel and Slack generates a URL of the form https://hooks.slack.com/services/T00000000/B00000000/XXXXXXXX. Your code sends a JSON body — at minimum a text field — to that URL, and the message appears. This makes incoming webhooks the simplest way to push notifications from an external system into a workspace, which is why they underpin many alerting integrations.

Key limits

  • Each webhook URL is permanently bound to the channel chosen when it was created. To post to several channels you need several webhook URLs.
  • You cannot override the destination channel, username, or icon in the payload.
  • Incoming webhooks can only post — they cannot update or delete a message afterward. For richer flows you use Slack's chat.postMessage API instead.

Incoming webhook vs other options

An incoming webhook is a raw building block. Slack Workflow Builder can also start from a webhook and add interactive steps, while a full Slack app can post, update, and react. A general-purpose webhook from a service like Stripe still needs code in between to turn its raw JSON into a readable Slack message.

That translation step is where a product like ChargeBell fits: it connects to Stripe read-only and posts plain-English payment alerts to the Slack channels you choose — with net-after-fees and MRR impact already computed — so you never write or maintain webhook glue code yourself.

Related terms

Updated July 6, 2026