Webhooks and Discord notifications
Open Webhooks for the selected server to send lifecycle notifications to Discord. Each destination has its own channel URL, event selection, message templates, and delivery switch. Customers can configure up to five destinations per server and manage destinations they created for servers they can access.
Use the built-in message presets for a quick setup. Use Advanced: Customize payload when you need different wording, branding, or embed fields for an event. In-game countdown messages are configured separately under Configuration → Advanced.

This is an unsaved example destination. The URL field is intentionally empty; no Discord channel was connected for the screenshot.
Connect a Discord channel
Section titled “Connect a Discord channel”- In Discord, copy the webhook URL from the intended channel’s Integrations → Webhooks settings. You need permission to manage that channel’s webhooks.
- Open Webhooks in the panel and select New under Discord destinations.
- Enter a Destination name of up to 80 characters so you can recognize the channel.
- Paste the Discord webhook URL. The panel accepts Discord webhook URLs on
https://discord.com; other services and custom hosts are not supported. - Select at least one Lifecycle event, or choose Select all.
- Keep Delivery enabled checked to receive events.
- Select Connect channel and wait for the destination to become
active. - Select Test to send a connection-test message to the saved channel.
Choose lifecycle events
Section titled “Choose lifecycle events”| Panel label | Event | Notification |
|---|---|---|
| Server started | server.started |
The server process came online. |
| Server stopped | server.stopped |
The process stopped, including its reported stop reason. |
| Title updated | server.updated_title |
A game update completed. |
| Mod updated | server.updated_mod |
A mod update completed, including the mod name and ID. |
These report lifecycle events; they do not schedule maintenance or announce a countdown before it. Use Schedules for planned restarts and Advanced settings for in-game countdowns.
Edit, disable, or remove a destination
Section titled “Edit, disable, or remove a destination”Select a destination from the list to edit it. Change its name, events, templates, or Delivery enabled setting, then select Save changes.
- Leave Replace webhook URL blank to keep the saved URL. Paste a replacement only when changing the destination.
- Clear Delivery enabled and save to stop event delivery while retaining the configuration. Re-enable it and save to resume.
- Select Remove and confirm to delete the panel destination and stop its event notifications. This does not delete the Discord channel or the webhook in Discord.
Changing destinations or selecting New loads another form, so save any edits you want to keep first.
Customize an event message
Section titled “Customize an event message”- Expand Advanced: Customize payload.
- Choose a selected lifecycle event under Message event.
- Select Customize JSON to copy that event’s preset into an editable draft.
- Edit the JSON and optionally select Format JSON for indentation.
- Wait for Valid payload · mentions disabled, then review Discord preview.
- For an already saved destination, optionally select Send draft test to Discord to inspect a sample in the channel.
- Select Save changes, or Connect channel for a new destination, to apply the templates.
Each event can use its own custom payload; events without a custom payload continue using presets. Closing the advanced editor keeps your draft. Reset to preset removes the current event’s custom draft; save the destination to apply that reset. Deselecting a lifecycle event also discards its custom draft, so copy any wording you want to keep before removing the event.

The preview renders a custom Server started draft with sample event data. A destination must be saved before the draft-test button becomes available; generating this preview does not send a message.
Preview versus test
Section titled “Preview versus test”| Control | Effect |
|---|---|
| Discord preview | Automatically validates and renders the current event draft with sample event data. It does not save or send a Discord message. Appearance is approximate; external images load in your browser. |
| Send draft test to Discord | Sends the selected event draft with sample data to the saved destination URL. It does not save the draft, use an unsaved replacement URL, or trigger a server lifecycle action. Save a destination before using this control. |
| Test | Sends a fixed connection-test message to the saved destination. It does not test your custom event draft. |
Both test buttons send real messages to the Discord channel. Use a suitable channel and avoid repeated tests. Successful preview or test delivery does not prove a later lifecycle event will arrive; check actual event delivery after saving.
Event placeholders
Section titled “Event placeholders”Place placeholders inside JSON string values. The editor lists the placeholders available for the selected event.
| Event | Available placeholders |
|---|---|
server.started |
{{server}}, {{date}} |
server.stopped |
{{server}}, {{date}}, {{reason}} |
server.updated_title |
{{server}}, {{date}}, {{title}} |
server.updated_mod |
{{server}}, {{date}}, {{mod}}, {{mod_id}} |
{{server}} is the server identifier, which may differ from its display name. {{date}} is a Unix timestamp in seconds; use Discord’s timestamp notation in message text, such as <t:{{date}}:F>.
For example, this payload works for Server started:
{ "content": "**{{server}}** is online. Started at <t:{{date}}:F>."}Unknown or event-incompatible placeholders are rejected. For example, {{mod}} is valid for Mod updated, but not Server started. Preview data is illustrative; real names and event values may be longer, so leave space within message limits.
Supported JSON and limits
Section titled “Supported JSON and limits”The editor supports the top-level properties content, username, avatar_url, embeds, and allowed_mentions. Embeds can contain title, description, url, color, fields, footer, author, image, thumbnail, and timestamp.
- Presentation URLs, including image and avatar URLs, must be static HTTPS URLs without embedded credentials. Do not use placeholders in these URLs.
- Files, components, polls, TTS, unknown properties, and duplicate JSON keys are rejected.
- Payloads are limited to 32,768 characters and 16 levels of JSON nesting.
- Message content is limited to 2,000 characters. A message can have up to 10 embeds, each with up to 25 fields, 256 title characters, and 4,096 description characters. Combined embed text is limited to 6,000 characters.
- Mentions are always disabled, including explicit user or role allowlists. Custom JSON cannot enable
@everyone,@here, or user/role notifications.
Validation identifies the affected property, or the line and byte-column for invalid JSON. Correct the error and wait for a new valid preview before testing or saving. Formatting JSON alone does not validate the message or save it.
Check status and delivery history
Section titled “Check status and delivery history”| Status | Meaning and next step |
|---|---|
provisioning |
The configuration is saved and notifications are being set up. Wait for completion. |
active |
All selected events are configured for delivery. Use a test to check channel access. |
disabling |
Event delivery is being removed. Wait for completion. |
disabled |
Settings are retained and lifecycle delivery is off. |
error |
A change did not fully synchronize. Read the displayed error and save again after the connection or configuration problem is resolved. |
revocation_error |
Access removal could not fully stop a notification registration. Contact support. |
For a saved destination, open Architect deliveries and select Load today. Expand an event group to inspect its sanitized delivery records. Records are retained for seven days, but this page’s button loads today’s records only. Connection and draft tests use a separate delivery path; do not expect them to appear as lifecycle event records.
Troubleshooting
Section titled “Troubleshooting”| Problem | Check |
|---|---|
| New is disabled | You may have reached five destinations for this server, or a save is in progress. Edit an existing destination or remove one you no longer need. |
| Connect channel is disabled | Enter a name and webhook URL, and select at least one event. |
| URL is rejected | Copy the Discord webhook URL again. Non-Discord hosts, custom ports, URL credentials, fragments, and unsupported query parameters are rejected. |
| Preview does not appear | Read the validation error; check JSON syntax, property limits, and event-specific placeholders. |
| Draft test goes to the old channel | Draft tests use the saved URL. Save the replacement URL first. |
| Test succeeds but lifecycle messages are missing | Save edits, confirm active status, enable delivery, check event selection, and use Load today after a matching event occurs. |
| Save reports a synchronization error | The configuration may be saved even though delivery setup failed. Resolve the reported problem and use Save changes again before creating another destination. |
| Discord rejects delivery | Verify that the webhook still exists and targets the intended channel. Replace its URL if needed and retry once after any temporary rate limit has passed. |
If the issue persists, ask VYKIX on Discord with the destination name, event, approximate time, and sanitized error. Keep the complete webhook URL private.