Webhooks and alerts
Send what happens in your panel to another service, and get told when something breaks.
License required
Webhooks, integrations, and alert subscriptions need the Webhooks license feature. Without it, only the Modifications tab opens.
A webhook sends an HTTP request to an external service when a panel event happens. Use a webhook with Discord, Slack, or your own application.
Navigate to Admin > Settings > General, then click the Webhooks tab. The page title reads Webhooks & Integrations.
The page has four tabs: Webhooks, Integrations, Alerts, and Modifications.
TIP
The old address /admin/alerts still works. It redirects to this page and opens the Alerts tab.
Webhooks tab
Webhook types
| Type | Description |
|---|---|
| Discord | Sends a formatted message to a Discord channel through a Discord webhook URL. |
| Slack | Sends a structured message to a Slack channel through a Slack incoming webhook URL. |
| Custom | Sends a JSON payload to any HTTP endpoint. |
Creating a webhook
- Click Add Webhook.
- Enter a Name.
- Choose the Type: Discord, Slack, or Custom.
- Enter the URL:
- For Discord, use the webhook URL from the integration settings of the channel.
- For Slack, use the incoming webhook URL of your Slack app.
- For Custom, use any endpoint that accepts a POST request.
- For a custom webhook, enter a Secret. This field is optional. With a secret, the panel signs each request.
- Set the Enabled switch.
- Select the Events. Click a category header to select the whole category, or click each event chip.
- Click Create Webhook.
Event types
| Category | Events |
|---|---|
| Server | server.started, server.stopped, server.crashed, server.created, server.deleted, server.installed |
| Billing | billing.payment_success, billing.payment_failed, billing.invoice_due |
| Security | security.login, security.2fa_enabled, security.2fa_disabled |
| User | user.created, user.deleted |
| Node | node.connected, node.disconnected |
| Wildcard | server.*, billing.*, security.*, user.*, node.*, * |
A wildcard subscribes to every event in that category. A single * subscribes to everything.
Select only the events that the endpoint needs. Extra events add traffic.
Managing a webhook
Each row shows the name, the type, the state, the URL, and the first five events. A toggle turns the webhook on and off. Three icons hold the actions:
- Send test - sends a test message to the URL. The webhook must be enabled.
- Edit - opens the form again.
- Delete - removes the webhook after you confirm.
Delivery
The panel sends one HTTP POST request for each event. The request times out after 10 seconds. Your endpoint must answer with a 2xx status code.
The panel records every delivery attempt. A record holds the event name, the time, the status code, and the error text of a failure.
A delivery fails in three cases: a timeout, a refused connection, or an error status. The panel then retries the delivery. Each retry waits longer than the one before it. After the last retry, the panel marks the delivery as failed and keeps the record.
Use Send test to check that the endpoint is reachable before you rely on an event.
Integrations tab
This tab holds two service connections.
WHMCS
Read WHMCS Integration for the full detail.
| Field | Description |
|---|---|
| WHMCS URL | The base address of your WHMCS installation. |
| API Identifier | Your WHMCS API credential identifier. |
| API Secret | The secret for that identifier. Leave it blank to keep the stored value. |
| Sync Interval (minutes) | How often the panel syncs. The range is 5 to 1440. |
The Ticket Sync section holds a switch. When it is on, two more controls appear:
- Sync Direction - Bidirectional, Panel to WHMCS only, or WHMCS to panel only.
- Import Existing - pulls the open WHMCS tickets that the panel has not seen. The switch clears itself after the first successful import.
Buttons: Test Connection, and Sync Tickets Now when ticket sync is on.
Stripe
| Field | Description |
|---|---|
| Publishable Key | The Stripe publishable key. |
| Secret Key | The Stripe secret key. Leave it blank to keep the stored value. |
| Webhook Secret | The signing secret of your Stripe webhook endpoint. Point Stripe at /api/webhooks/stripe on your panel. |
Click Test Connection to check the credentials. Click Save Changes to store the tab.
Alerts tab
An alert subscription connects one panel event to one destination. Create one row per destination.
Click Browse events to read the catalogue. Click a row in the catalogue to start a subscription for that event.
Alert events
| Event | Meaning |
|---|---|
server.down | A server stopped answering health checks. |
server.up | A server came back after it was down. |
server.install.failed | A server install or reinstall failed. |
server.backup.completed | A backup finished. This event covers success and failure. |
server.crash | The daemon detected an unclean exit. |
incident.opened | A new incident was logged. |
incident.resolved | An incident moved to resolved. |
node.offline | A node stopped its heartbeat. |
node.online | A node reconnected. |
node.alert | A monitoring rule fired on a node. |
trigger.fired | A server console trigger matched. |
ipmi.alert | A hardware alert arrived from a node. |
* | Every event. Use this option with care. |
WARNING
These events are not the same as the webhook events in the first tab. The two lists do not overlap.
Creating a subscription
- Click New subscription.
- Choose the Event type. Choose Custom event... to type your own event name.
- Choose the Channel:
in_panel- a notification inside the panel.smtp- an email.discord- a Discord webhook URL.webhook- any HTTP endpoint.
- Set the Target:
- For
in_panel, choose Broadcast to all admins, or choose Specific user and search for the account. - For
smtp, enter an email address. - For
discordorwebhook, enter the URL.
- For
- Set the Throttle (seconds). The panel then waits this long before it sends the same alert again. A value of 0 turns throttling off.
- Tick Enabled.
- Click Save.
The subscription table
| Column | Description |
|---|---|
| Event | The event name. A disabled row shows "(disabled)". |
| Channel | The destination type. |
| Target | The user, the address, or the URL. |
| Throttle | The throttle in seconds, or a dash. |
| Last fired | The time of the last alert, or "never". |
Each row holds Test, Edit, and Delete. Test sends a real alert to the destination.
TIP
An alert subscription has no threshold and no severity filter. The throttle is the only tuning control.
Modifications tab
This tab holds the API keys for the mod sources that the Mod Manager reads. It works without the Webhooks license feature.
The tab holds one entry:
| Service | Description |
|---|---|
| CurseForge | An API key turns on mod and modpack search from CurseForge. Get the key from the CurseForge Console. |
Without a CurseForge key, the Minecraft Mod Manager searches Modrinth, Spigot, and Hangar only.
The same card also appears on its own page at Admin > Settings > Integrations. That page has no navigation entry. Reach it from the admin search box.
Next steps
- WHMCS Integration - the full WHMCS setup.
- Notifications - in-panel and email notifications.
