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.success

An application or Compose stack deployed successfully

deploy.failed

An application or Compose stack deployment failed

backup.completed

A database or game server backup finished

backup.failed

A database or game server backup failed

task.failed

A 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:

json
// 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.