Webhook payloads
Notification channels of kind webhook POST JSON to your HTTPS endpoint. Discord and Slack channels use their own simple formats.
Generic webhook
json
{
"text": "Fledge: Survival crashed (Survival) — exit code 137, out of memory",
"content": "Fledge: Survival crashed (Survival) — exit code 137, out of memory",
"event": {
"kind": "server.crashed",
"severity": "bad",
"title": "Survival crashed",
"body": "exit code 137, out of memory",
"server": { "id": "<uuid>", "name": "Survival" },
"nodeId": null,
"data": { "exit": { "code": 137, "oomKilled": true } },
"at": "2026-10-03T12:00:00.000Z"
}
}allowed_mentionsis always empty, so names such as@everyonenever ping anyone on Discord.textandcontenthold the same line, so the payload works with Slack-compatible (text), Discord-compatible (content) and Mattermost endpoints unchanged.event.kindis one of the notification events;severityisok,info,warnorbad.serverandnodeIdarenullwhen the event is not about a server or node.datais event specific.
Step-by-step set-up, event suggestions and troubleshooting are in Discord and webhook notifications.
Discord and Slack
With the Better Discord Notifications plugin a Discord channel can send embeds instead (embeds, plus the same allowed_mentions).
| Channel | Body |
|---|---|
| Discord | { "content": "<text>", "allowed_mentions": { "parse": [] } } |
| Slack | { "text": "<text>" } |
Text is limited to about 1900 characters.
Delivery
POST,Content-Type: application/json, a response body limit of 64 KB, and a short timeout. Any2xxis success.- Failures are recorded on the channel (
last_status,last_error) and counted infledge_notification_channels_failing. - Customer webhooks must be public HTTPS; administrator webhooks may target private addresses and HTTP.
- The URL (which often contains a secret) is stored encrypted and never shown again.
Failover webhook
The separate webhook under Settings → Automatic failover receives node offline/online and recovery events in the same Slack/Discord/Mattermost-compatible shape.
