docs Notifications
Notifications
Send deploy, backup and task events to Discord, Slack, Telegram, email or any webhook.
Supported Channels
Discord
Webhook URL. Messages are sent as colored embeds with the event details.
Slack
Incoming webhook URL. Messages use Slack blocks with the event details.
Telegram
Bot Token and Chat ID of the chat or channel the bot posts to.
Email (Resend)
Recipient(s) (comma-separated), your Resend API Key, and an optional From address.
Webhook
Any public http(s) URL, with an optional HMAC Secret to sign the payload.
Webhook, Discord and Slack URLs must point to a public address — private, loopback and link-local targets are rejected.
Adding a Channel
Open the Notifications section of a project and add a channel: give it a name, pick the type, fill in its fields and tick the events it should receive (a new channel defaults to deploy success and failure). Use Send Test to check the configuration before relying on it. Channels can be edited, disabled and re-enabled without deleting them.
Events
These events are currently delivered to channels:
deploy.successAn application or Compose stack deployed successfully
deploy.failedAn application or Compose stack deployment failed
backup.completedA database or game server backup finished
backup.failedA database or game server backup failed
task.failedA scheduled task or one-off command exited non-zero or timed out
The event list also shows app.stopped, app.error, health_check.failed and alert.fired, but nothing emits them to channels yet. Metric alerts are delivered through the destination configured on each alert rule — see Monitoring.
Webhook Payload
Webhook channels receive a JSON POST. When a secret is set, the raw body is signed with HMAC-SHA256 in the X-DeployKit-Signature header:
// X-DeployKit-Signature: sha256=<hex digest>
{
"source": "deploykit",
"event": "deploy.failed",
"timestamp": "2026-10-14T09:30:00.000Z",
"data": {
"title": "...",
"message": "...",
"projectId": "...",
"applicationName": "...",
"error": "..."
}
}The fields inside data beyond title, message and projectId depend on the event.
Project and Instance-wide Channels
A channel belongs to a project and only receives that project's events, so production and staging can alert different places. A channel created through the API without a project is instance-wide and receives events from every project. Managing project channels requires the global Operator or Admin role plus the Operator or Admin role on the project; instance-wide channels require the global Operator or Admin role. Channel settings can contain tokens and API keys, so Viewers cannot read them.
Note: A notification that fails to send is logged and skipped — it never fails the deployment, backup or task that triggered it. If a channel goes quiet, check it with Send Test.