---
title: "How to Get a Slack Webhook URL (Incoming Webhooks)"
meta:
  "og:description": "Get a Slack incoming webhook URL step by step: create a Slack app, enable Incoming Webhooks, pick a channel, and post with curl. Includes the format."
  "og:title": "How to Get a Slack Webhook URL (Incoming Webhooks)"
  description: "Get a Slack incoming webhook URL step by step: create a Slack app, enable Incoming Webhooks, pick a channel, and post with curl. Includes the format."
---

![Stripes](https://webhookrelay.com/blog/how-to-get-slack-webhook-url/images/stripes.svg)

# **How to Get a Slack Webhook URL (Incoming Webhooks)**

Get a Slack incoming webhook URL step by step: create a Slack app, enable Incoming Webhooks, pick a channel, and post with curl. Includes the format.

A **Slack incoming webhook URL** lets any app or script post messages into a Slack channel with a simple HTTP request — no Slack SDK required. This guide gets you a URL in a couple of minutes, shows the exact format, and covers how to send messages and a no-app alternative. (New to webhooks in general? See [what is a webhook](https://webhookrelay.com/blog/how-to-get-slack-webhook-url/blog/what-is-webhook/).)

## [What a Slack webhook URL looks like](#what-a-slack-webhook-url-looks-like)

An incoming webhook URL has three parts — a workspace ID, an app/webhook ID, and a secret token:

```
https://hooks.slack.com/services/T00000000/B00000000/XXXXXXXXXXXXXXXXXXXXXXXX
```

Anyone who has the full URL can post to that channel, so **treat it like a password** — don't commit it to a public repo.

## [Get a Slack webhook URL (Incoming Webhooks)](#get-a-slack-webhook-url-incoming-webhooks)

Slack exposes incoming webhooks through a **Slack app**. It sounds heavier than it is:

1. **Create an app.** Go to [api.slack.com/apps](https://api.slack.com/apps) → **Create New App** → **From scratch**. Give it a name and pick the workspace, then **Create App**.
2. **Enable Incoming Webhooks.** In the app's left sidebar, open **Features → Incoming Webhooks** and toggle **Activate Incoming Webhooks** to **On**.
3. **Add a webhook to the workspace.** Scroll down and click **Add New Webhook to Workspace**. Choose the **channel** the webhook should post to and click **Allow**.
4. **Copy the URL.** Slack drops you back on the Incoming Webhooks page with your new URL listed under **Webhook URLs for Your Workspace**. Copy it.

That URL posts to exactly the channel you chose. Need another channel? Repeat step 3 to add a second webhook and you'll get a second URL.

![Activating Incoming Webhooks in a Slack app — the toggle switched On and the &quot;Add New Webhook to Workspace&quot; button under &quot;Webhook URLs for Your Workspace&quot;](https://webhookrelay.com/blog/how-to-get-slack-webhook-url/images/guides/slack-incoming-webhooks.png)

## [Send a test message](#send-a-test-message)

Post any JSON with a `text` field:

```
curl -X POST -H 'Content-type: application/json' \
  --data '{"text":"Hello from an incoming webhook :wave:"}' \
  https://hooks.slack.com/services/T00000000/B00000000/XXXXXXXXXXXX
```

For richer messages — buttons, sections, fields — send `blocks` built with Slack's [Block Kit](https://api.slack.com/block-kit) instead of plain `text`.

## [Alternative: Workflow Builder (no app)](#alternative-workflow-builder-no-app)

If you'd rather not create an app, Slack's **Workflow Builder** can generate a webhook trigger: create a workflow, choose **From a webhook** as the trigger, and Workflow Builder gives you a URL plus a step to post a message. It's handy for no-code posting, though it's less flexible than an app-based incoming webhook and depends on your Slack plan. Verify availability for your workspace.

## [Sending _any_ event to Slack](#sending-any-event-to-slack)

An incoming webhook is only half the story — you still need something to POST to it in the right shape. That's where Webhook Relay fits: point a provider (Stripe, GitHub, a monitoring alert) at Webhook Relay, [transform the payload](https://webhookrelay.com/blog/how-to-get-slack-webhook-url/features/transform-webhooks/) into a Slack message, and forward it to your Slack URL — optionally [fanning out](https://webhookrelay.com/blog/how-to-get-slack-webhook-url/features/webhook-multiple-destinations/) to other destinations too.

- [Send a webhook to Slack](https://webhookrelay.com/blog/how-to-get-slack-webhook-url/blog/webhook-to-slack/) — the full forward-and-transform walkthrough.
- [Slack webhook tester](https://webhookrelay.com/blog/how-to-get-slack-webhook-url/blog/slack-webhook-tester/) — inspect exactly what you're sending.
- [Receive Slack events locally](https://webhookrelay.com/blog/how-to-get-slack-webhook-url/blog/receive-slack-events-locally/) — for the other direction (Slack → your app).

## [Security notes](#security-notes)

- The URL is a **secret**. Anyone with it can post to your channel.
- To **revoke** a webhook, delete it from the app's Incoming Webhooks page (or remove the app) and create a new one.
- Incoming webhooks can only **post** to the chosen channel — they can't read messages or act as a user.

Ready to route real events into Slack? [Test a webhook now](https://webhookrelay.com/blog/how-to-get-slack-webhook-url/webhook-bin/) or [start forwarding for free](https://my.webhookrelay.com/register).