Slack create incoming webhook
An incoming webhook is a URL that lets an app, script or monitoring tool post messages to a Slack channel with a simple HTTP POST.
Existing Slack apps: Uptime Kuma, Grafana, road-web-alerts (ROAD web apps).
Use an existing app or create a new one?
- Add a webhook to an existing app if the alerts belong to the same group (e.g. another ROAD web app →
road-web-alerts). - Create a new app if the source should show its own name and icon in Slack. Every webhook in one app posts with that app's name and icon, and they cannot be changed per message.
One webhook per source / environment. The same URL can be used by several sources, but then:
- you can't tell from Slack which system sent a message (unless the message text says so),
- if the URL leaks, every source must be updated with a new one,
- you can't disable one noisy source without affecting the others.
Several webhooks in the same app can post to the same channel.
1. Create the Slack app (skip if using an existing app)
- Go to https://api.slack.com/apps → Create New App.
- Select Blank app (under Or start your own way). Note: AI agent is selected by default, so change it.
- Click Continue, give the app a name (e.g.
road-web-alerts) and select the workspace.
2. Enable incoming webhooks
- In the app settings, open Features → Incoming Webhooks.
- Switch Activate Incoming Webhooks to On.
3. Create the webhook
- Scroll to the bottom of the page → Add New Webhook to Workspace.
- Select the channel → Allow.
- If the button says Request to Install, the app needs approval from a Slack workspace admin first.
- The new URL appears in the table at the bottom of the page → Copy.
The URL looks like:
https://hooks.slack.com/services/T000/B000/XXXXXXXXXXXX
4. Test
curl -X POST -H 'Content-type: application/json' \
--data '{"text":"Test message from webhook"}' \
https://hooks.slack.com/services/T000/B000/XXXXXXXXXXXX
Slack answers ok and the message appears in the channel.
Security
- The webhook URL is a secret. Anyone who has it can post to the channel.
- Store it in Vault / GCP Secret Manager /
.env, never in git. - If it leaks: Incoming Webhooks page → delete the webhook (Remove) → create a new one and update the source.