Notifications
Slipway can notify you about deployments, backups, container health, and resource usage across five channels: Discord, Slack, Telegram, Email, and Webhook.
Accessing Notifications Settings
- Click your avatar (bottom left)
- Select Settings
- Click Notifications
Or navigate directly to:
https://slipway.yourdomain.com/settings/notificationsNotification Events
Choose which events trigger notifications. Each event can be toggled independently.
Deployments
| Event | Description | Default |
|---|---|---|
| Successful deployments | Notify when a deployment succeeds | On |
| Failed deployments | Notify when a deployment fails | On |
Backups
| Event | Description | Default |
|---|---|---|
| Successful backups | Notify when a backup completes | Off |
| Failed backups | Notify when a backup fails | On |
Lookout
| Event | Description | Default |
|---|---|---|
| Container restarts | Notify when a container stops unexpectedly | On |
| High resource usage | Notify when CPU or memory exceeds thresholds | On |
Quest
| Event | Description | Default |
|---|---|---|
| Failed jobs | Notify when a Quest background job fails | On |
Notification Channels
Discord
Send notifications to a Discord channel using a webhook.
Setup:
- In your Discord server, go to Server Settings → Integrations → Webhooks
- Click New Webhook, choose a channel, and copy the webhook URL
- In Slipway, enable Discord and paste the webhook URL
- Click Send test message to verify
Discord notifications use rich embeds with color-coded status (green for success, red for failure, amber for warnings).
Slack
Send notifications to a Slack channel using an incoming webhook.
Setup:
- In your Slack workspace, go to Apps → Incoming Webhooks
- Create a new webhook and select a channel
- Copy the webhook URL (starts with
https://hooks.slack.com/services/...) - In Slipway, enable Slack and paste the webhook URL
- Click Send test message to verify
Slack messages use mrkdwn formatting with bold headers and inline code blocks.
Telegram
Receive instant notifications via a Telegram bot.
Setup:
- Message @BotFather on Telegram and create a new bot
- Copy the bot token (e.g.,
123456789:ABCDefGhIJKlmNoPQRsTUVwxyZ) - Get your chat ID — add the bot to a group or message it directly, then use the getUpdates API to find the chat ID
- (Optional) If your group has Topics enabled, enter the Topic Thread ID to send notifications to a specific topic
- In Slipway, enable Telegram and enter the values
- Click Send test message to verify
Telegram messages use HTML formatting and include direct links to deployments when available.
Email
Send notification emails to one or more recipients via SMTP.
Setup:
- Enable Email in the notification settings
- Configure your SMTP server (host, port, username, password)
- Set the From address (e.g.,
[email protected]) - Enter Notification recipients — comma-separated email addresses
- Click Send test email to verify
SMTP from Environment Variables
If you've set MAIL_HOST, MAIL_USER, etc. in your global environment variables, Slipway will use those automatically. Settings configured in the dashboard override environment variables.
Webhook
Send structured JSON payloads to any HTTP endpoint. Useful for integrating with automation platforms like n8n, Zapier, Make, or your own services.
Setup:
- Enable Webhook in the notification settings
- Enter your endpoint URL
- Click Send test webhook to verify
Slipway sends a POST request with Content-Type: application/json. Your endpoint should return a 2xx status code.
Webhook Payloads
Every webhook payload follows the same envelope structure:
{
"event": "event.type",
"timestamp": "2025-01-15T14:30:00.000Z",
"data": { ... }
}| Field | Type | Description |
|---|---|---|
event | string | The event type (see below) |
timestamp | string | ISO 8601 timestamp of when it fired |
data | object | Event-specific payload |
deployment.success
Sent when a deployment completes successfully.
{
"event": "deployment.success",
"timestamp": "2025-01-15T14:30:00.000Z",
"data": {
"project": {
"name": "my-sails-app",
"slug": "my-sails-app"
},
"environment": {
"name": "production"
},
"deployment": {
"id": 42,
"status": "running",
"gitBranch": "main",
"gitCommitShort": "a1b2c3d4"
},
"deploymentUrl": "https://slipway.example.com/projects/my-sails-app/deployments/42",
"instanceName": "Slipway"
}
}deployment.failed
Sent when a deployment fails. Same data shape as deployment.success but with status: "failed".
{
"event": "deployment.failed",
"timestamp": "2025-01-15T14:30:00.000Z",
"data": {
"project": {
"name": "my-sails-app",
"slug": "my-sails-app"
},
"environment": {
"name": "production"
},
"deployment": {
"id": 43,
"status": "failed",
"gitBranch": "main",
"gitCommitShort": "e5f6g7h8"
},
"deploymentUrl": "https://slipway.example.com/projects/my-sails-app/deployments/43",
"instanceName": "Slipway"
}
}backup.success
Sent when a database backup completes successfully.
{
"event": "backup.success",
"timestamp": "2025-01-15T02:00:00.000Z",
"data": {
"service": {
"name": "postgres-main",
"type": "postgres"
},
"backup": {
"id": 10,
"status": "completed",
"durationMs": 3200,
"sizeBytes": 15728640,
"errorMessage": null
},
"instanceName": "Slipway"
}
}backup.failed
Sent when a database backup fails.
{
"event": "backup.failed",
"timestamp": "2025-01-15T02:00:00.000Z",
"data": {
"service": {
"name": "postgres-main",
"type": "postgres"
},
"backup": {
"id": 11,
"status": "failed",
"durationMs": 1500,
"sizeBytes": null,
"errorMessage": "Connection refused"
},
"instanceName": "Slipway"
}
}container.down
Sent when a container is detected as stopped unexpectedly.
{
"event": "container.down",
"timestamp": "2025-01-15T14:30:00.000Z",
"data": {
"containerName": "slipway-my-sails-app-production",
"resourceType": "app",
"instanceName": "Slipway"
}
}| Field | Type | Values | Description |
|---|---|---|---|
containerName | string | Docker container name | |
resourceType | string | app, service | Whether it's an app or service container |
instanceName | string | Your Slipway instance name |
resource.high_usage
Sent when a container exceeds CPU or memory thresholds.
{
"event": "resource.high_usage",
"timestamp": "2025-01-15T14:30:00.000Z",
"data": {
"containerName": "slipway-my-sails-app-production",
"cpuPercent": 92.5,
"memoryPercent": 87.3,
"cpuHigh": true,
"memHigh": true,
"instanceName": "Slipway"
}
}| Field | Type | Description |
|---|---|---|
containerName | string | Docker container name |
cpuPercent | number | Current CPU usage percentage |
memoryPercent | number | Current memory usage percentage |
cpuHigh | boolean | Whether CPU is above the threshold |
memHigh | boolean | Whether memory is above the threshold |
instanceName | string | Your Slipway instance name |
quest.job_failed
Sent when a Quest background job fails.
{
"event": "quest.job_failed",
"timestamp": "2025-01-15T14:30:00.000Z",
"data": {
"jobName": "send-weekly-report",
"errorMessage": "Connection refused",
"duration": 1500,
"instanceName": "Slipway"
}
}| Field | Type | Description |
|---|---|---|
jobName | string | Name of the failed job |
errorMessage | string | Error message from the job |
duration | number | Job duration in milliseconds (if available) |
instanceName | string | Your Slipway instance name |
Testing Notifications
Each channel has a Send test button that sends a sample notification without saving your settings first. This lets you verify the connection before committing.
The test uses your current form values, so you can paste a new webhook URL and test it immediately.
What's Next?
- Configure Settings for your Slipway instance
- Set up Auto-Deploy with GitHub webhooks
- Learn about Lookout for real-time monitoring