Advertisement

Any server

Discord Webhook Builder

A webhook payload is plain JSON, yet it is easy to get slightly wrong, and Discord's error for a bad one tells you almost nothing. Build it against a live preview, then send it from your own computer.

Optional — blank keeps the name set on the webhook.

Appears above the embed, and is the only part that can @mention anyone.

Fields

Roughly how it lands

Server is back online

Scheduled restart complete. Everything is running normally.

Players

12 / 100

spawnbench.com

The payload

{
  "username": "Server Status",
  "embeds": [
    {
      "color": 5763719,
      "title": "Server is back online",
      "description": "Scheduled restart complete. Everything is running normally.",
      "footer": {
        "text": "spawnbench.com"
      },
      "fields": [
        {
          "name": "Players",
          "value": "12 / 100",
          "inline": true
        }
      ],
      "timestamp": "2026-01-01T00:00:00.000Z"
    }
  ]
}

Send it from your own machine

Treat the webhook URL like a password: anyone who has it can post in that channel. It lives in your environment and is never sent to this site.

curl -H "Content-Type: application/json" \
  -d '{
  "username": "Server Status",
  "embeds": [
    {
      "color": 5763719,
      "title": "Server is back online",
      "description": "Scheduled restart complete. Everything is running normally.",
      "footer": {
        "text": "spawnbench.com"
      },
      "fields": [
        {
          "name": "Players",
          "value": "12 / 100",
          "inline": true
        }
      ],
      "timestamp": "2026-01-01T00:00:00.000Z"
    }
  ]
}' \
  "$DISCORD_WEBHOOK_URL"

Advertisement

How it works

Discord needs at least one of two things in a webhook message: plain content or an embed (both is fine; neither is rejected). Embeds are where the structure is. Colours go in as decimal integers, not hex strings; title and description are optional; and there can be up to ten fields, each either inline alongside its neighbours or on a line of its own. You get the finished payload and a curl command that reads the webhook URL from an environment variable.

Advertisement

Common mistakes

This page deliberately never sends anything. A form that accepted a webhook URL and posted to it would be an anonymous relay into strangers' Discord servers — a spam tool dressed up as a utility. The curl command keeps the URL in an environment variable for a reason that matters on your end too: the webhook URL is effectively a password, and anyone holding it can post in that channel until you generate a new one.

Rather not run the server yourself?

These tools are free and funded by the two hosting services we run. If you want a server that is already set up, here they are.

Advertisement