- A Discord webhook link. Events arrive as tidy embeds. You don’t need to write any code.
- Your own HTTPS endpoint. Events arrive as signed JSON.
Events
The owner picks which events to send. Each webhook gets the ones it’s subscribed to.
Payload
Events are batched. One request can carry up to 50, oldest first.id goes up by one for each event on a server. Use it to drop duplicates. It’s the same id you see in the events feed.
Event data
A player is
{ "id": <user ID>, "name": "<username>" }.
Verify the signature
When the owner saves a non-Discord webhook, the console shows a signing secret (whsec_...) once. Each request is signed with it:
Delivery
- Reply with any
2xxwithin 5 seconds. Do the slow work after replying. - A failed delivery is retried after about 5 seconds, 30 seconds, 2 minutes, then 10 minutes, then dropped. A
4xxreply other than408or429isn’t retried. - Redirects aren’t followed.
- After 25 failures in a row the webhook is paused, so a dead endpoint isn’t hammered. The console shows it as paused. Saving the webhook again turns it back on.
- Events usually reach you within 3 to 10 seconds. They come in batches with each sync, not one request per event.
- If more than 200 batches are waiting, the oldest are dropped. The events feed still has everything from the last 7 days.
Rules for the URL
- Must be
https://on port 443, with no username or password in it. - No IP addresses,
localhostor internal hostnames, and noeraus.ggaddresses. - One webhook per server. Saving a new one replaces it. The URL is never shown back in the console, only its host name.

