Webhooks
Have a Discord channel, your bot or your website told the moment a lap ends, a photo is taken, a ride stops, a show is coming up or your server goes away.
Updated 20 October 2026
A webhook is the API the other way round: rather than a program asking your park how it's doing, your park tells it, the moment something happens. It's what you want for a Discord channel that shows every new on-ride photo, or one that warns your staff when a ride stops.
A webhook goes to one of two places:
- A Discord channel. Your park posts in it directly: no bot to set up, no code. See Post in a Discord channel.
- A program: your website, or a bot somebody wrote for you. See Send it to a program.
What it can be told#
| Event | When |
|---|---|
| A lap is over | The train has stopped back in the station, or at the ride's unload platform — with everybody aboard |
| An on-ride photo is taken | A few seconds after the shutter, with the pictures and the page their QR code opens |
| A ride is stopped by an emergency stop | With the operator who pressed it — or the ride itself, when a transfer manoeuvre failed |
| A stopped ride runs again | The emergency stop was released |
| A ride opens or closes | It was opened or closed, or the reason it is closed changed — in the administration, in the game or through the API — with how it stood before, and the player who changed it, if a player did |
| A show is thirty minutes away, on its schedule | Half an hour before a scheduled show starts — or as soon as your server is back, if it was away then |
| A show starts | Started on its schedule, with the Start button, or through the API — not by a command in the game |
| A show does not start on its schedule | Nobody was online, it was still running, or your server was away |
| The Minecraft server connects | It came back, or UTP Connect itself restarted |
| The Minecraft server goes away | It stopped, or nothing was heard from it for twenty seconds |
Post in a Discord channel#
Each event becomes a short message in the channel, under your park's name and logo: who rode a lap, the on-ride photo itself, who pressed an emergency stop, the show starting in half an hour — and where, when the show has a location. A show's time appears on each reader's own clock: a player in another time zone reads it right.
First, get the channel's webhook link from Discord. You need the Manage Webhooks permission on the Discord server.
- In Discord, hover over the channel and click the gear (Edit Channel).
- Open Integrations, then click Create Webhook — or View Webhooks, then New Webhook, if the channel already has one.
- Click the new webhook, then Copy Webhook URL. Its name and picture don't matter: your messages carry your park's.
Then add it to your park:
- In the administration, open Settings, and scroll down to API.
- Under Webhooks, paste the link as the Address. It starts with
https://discord.com/api/webhooks/. - Under Tell it when, tick the events the channel should hear about, and click Add the webhook.
- Click Send a test. A Webhook connected message appears in the channel, listing what it will hear about.
Send it to a program#
You need the address of the program that will receive the messages: whoever builds it gives it to you, something like https://bot.your-park.com/utp.
- In the administration, open Settings, and scroll down to API.
- Under Webhooks, paste the Address.
- Under Tell it when, tick the events it should hear about.
- Click Add the webhook, and copy the signing secret it shows: it is shown only once, and the program needs it to check that the messages really come from your park.
- Click Send a test. The line under the webhook says what the address answered.
When something goes wrong#
Under each webhook, a line tells how the last delivery went: when, and what the address answered. When a delivery fails, UTP Connect tries again four more times over the next hour.
- "That is a Discord address, but not a webhook's": you pasted the channel's link, or an invitation. Copy the webhook's link, as in Post in a Discord channel.
- "Discord no longer knows this webhook": it was deleted in Discord, or the link was not copied whole. Copy it again, then remove the webhook here and add it back.
- "Discord answered 400: Webhooks posted to forum channels…": the webhook belongs to a forum channel, where every message must open a post. Make the webhook in an ordinary text channel instead.
- "Discord asked to slow down": the channel is getting more messages than Discord allows. Untick A lap is over, or give laps a channel of their own.
- "points inside the instance's own machine": the address leads to the VPS UTP Connect runs on, through
localhostor127.0.0.1, which is refused. Use the machine's network address, or a domain. - "no answer within 10 seconds", "could not be reached": the program is down, or not reachable from the internet.
To change a webhook's events, or its secret, remove it and add it again.
For developers#
The format of each message, its signature and a few lines to check it are in the API reference. A Discord webhook link gets Discord's own message format instead, unsigned.