Notification Channels
Set up notification channels to deliver alert events to webhooks, Discord, Slack, PagerDuty, and other external services.
A notification channel defines where Planekeeper sends alert notifications. Each channel points to an external endpoint – a webhook URL, a Discord channel, a Slack workspace, or another service – and holds the configuration needed to deliver messages there.
Supported channel types
| Type | Description |
|---|---|
| Webhook | Send HTTP POST requests to any URL that accepts JSON payloads |
| Discord | Send messages to a Discord channel via its webhook URL |
| Slack | Send messages to a Slack channel via an incoming webhook |
| PagerDuty | Trigger and resolve incidents via the PagerDuty Events API |
| Telegram | Send messages via the Telegram Bot API |
| SMTP | Send email notifications |
Create a channel
Navigate to Notification Channels in the sidebar.
Click Create Channel.
Fill in the form:
Field Description Name A descriptive label, e.g., “Production Slack Alerts” Type Select the channel type URL The webhook endpoint URL HMAC Secret Optional. A shared secret for signing payloads (see signature verification) Require login to acknowledge When checked, users must be logged in to acknowledge alerts via the link in notifications. When unchecked, anyone with the link can acknowledge anonymously. See acknowledgment authentication. Default: checked Click Save.
Test a channel
Before relying on a channel for production alerts, verify it works.
- Navigate to Notification Channels.
- Click the channel you want to test.
- Click Test Channel.
The test sends a sample notification payload to the configured URL and reports the result:
- Success: The endpoint responded with a 2xx status code.
- Failure: The test shows the HTTP status code and response body to help you diagnose the issue.
Toggle a channel on or off
Each channel has an active/inactive toggle. Click the toggle badge on the channels list to switch the state.
- Active channels receive notifications when matched by notification rules.
- Inactive channels are skipped during delivery. No notifications are sent to them.
Deactivating a channel does not delete pending deliveries. Any in-flight retries for the channel will continue until they succeed or exhaust their retry budget.
Default channel
One channel per organization can be designated as the default. The default channel is used when a notification rule does not specify a particular channel override.
Set the default channel from the Notification Channels list or from the notification settings page.
HMAC signature verification
When you configure an HMAC secret on a channel, Planekeeper signs every outbound webhook payload. Use this to verify that incoming webhooks on your receiving service actually came from Planekeeper.
How it works:
- Planekeeper computes an HMAC-SHA256 signature over the payload using the shared secret.
- The signature is included in the
X-Planekeeper-Signatureheader assha256={hmac}. - The current Unix timestamp is included in the
X-Planekeeper-Timestampheader.
To verify on your receiving end:
- Read the
X-Planekeeper-Timestampand request body. - Compute
HMAC-SHA256(secret, timestamp + "." + body). - Compare your computed signature with the value in
X-Planekeeper-Signature.
Acknowledgment authentication
Each channel controls whether acknowledge links require a logged-in user session. This is the Require login to acknowledge alerts checkbox on the channel form.
Authenticated acknowledgments (default)
When enabled (the default), clicking an acknowledge link in a notification redirects the user to the Planekeeper login page if they do not have an active session. After login, they are sent back to the acknowledge URL to complete the action.
This mode records who acknowledged the alert — the user’s identity is attached to the acknowledgment record.
Anonymous acknowledgments
When disabled, anyone with the acknowledge link can acknowledge the alert without logging in. No user identity is recorded.
Use anonymous acknowledgments when:
- Notifications go to a shared channel (Discord, Slack) where multiple people may click the link
- You have programmatic consumers (bots, automation) that call the acknowledge URL
- Your team does not use Planekeeper login and only interacts through notifications
Standard webhook headers
Every webhook delivery includes these headers:
| Header | Description |
|---|---|
Content-Type | application/json |
X-Planekeeper-Event | The event type (e.g., alert.created) |
X-Planekeeper-Idempotency-Key | A unique ID for this delivery, stable across retries |
X-Planekeeper-Signature | HMAC signature (only if secret is configured) |
X-Planekeeper-Timestamp | Unix timestamp of the request |
User-Agent | Planekeeper-Notifier/1.0 |
You can also add custom headers in the channel configuration for services that require specific authentication headers.
URL restrictions
Webhook URLs must point to public endpoints by default. Planekeeper blocks private IP ranges, localhost, and link-local addresses to prevent misuse.
If you need to send webhooks to internal services (for testing or private deployments), an administrator can enable private URL delivery in the system configuration.
Bulk delete
Select multiple channels using the checkboxes on the list page, then click Delete Selected to remove them in a single operation. Use the checkbox in the table header to select all visible items. Notification rules that referenced deleted channels will fall back to the default channel.
Delete a channel
- Navigate to Notification Channels.
- Click the channel you want to remove.
- Click Delete.