Skip to main content

Discord Server Rules Embed Template: 5 Ready JSON Payloads

5 ready Discord server rules embed templates in JSON: numbered rules, multi-embed sections, compact fields, Components V2, verification note, PATCH updates.

6 min read Also available in Русский
On this page

A rules message has to be read by everyone and edited by nobody except you. Posting it through a webhook gives you a proper embed instead of a wall of text from a moderator’s account, and lets you rewrite it later with one PATCH request without losing the pin or the link people bookmarked.

Below are five Discord server rules embed templates as complete webhook JSON: replace the channel and role IDs, POST to your webhook URL, done. After them: writing guidance, the commands for sending, pinning and updating, and first-attempt errors.

What a good rules embed looks like

The template only controls how the rules look. Three properties separate a rules post people follow from one they scroll past:

  • Short. One line per rule, around ten words. If a rule needs three paragraphs, it is a policy: link it from the embed and keep the summary line here.
  • Positive where possible. “Keep #general in English” reads better than “No non-English in general”. Save outright bans for things that genuinely are bans (harassment, NSFW, doxxing).
  • Enforceable. A moderator must be able to point at a rule and act. “Be nice” is not enforceable; “No slurs, harassment or targeted insults” is. Number the rules so mods can write “rule 3” in a warning.

Two additions carry a lot of weight: a consequences line (warn, mute, ban) and a footer with a timestamp so members see when the rules last changed. All five templates include both.

Template 1: Numbered rules in one embed

The default choice: one embed, numbered rules in the description, consequences at the end. The 4096-character description limit is plenty for eight to ten rules.

{
  "username": "Server Rules",
  "embeds": [
    {
      "title": "📜 Server Rules",
      "description": "Read them once, follow them always.\n\n**1. Be respectful.** No harassment, slurs, hate speech or targeted insults.\n**2. Keep it safe for work.** No NSFW or shock content anywhere, including avatars and nicknames.\n**3. No spam or self-promotion.** Ads, invites and referral codes go in <#PROMO_CHANNEL_ID> only.\n**4. Use the right channel.** Read the topic before posting.\n**5. No doxxing.** Private information stays private, yours or anyone else's.\n**6. Discord's [Terms](https://discord.com/terms) and [Guidelines](https://discord.com/guidelines) apply everywhere.**\n\nWarning → mute → ban. Questions? Ask in <#SUPPORT_CHANNEL_ID>.",
      "color": 5793266,
      "footer": { "text": "Last updated" },
      "timestamp": "2026-09-17T12:00:00.000Z"
    }
  ],
  "allowed_mentions": { "parse": [] }
}

Channel mentions like <#PROMO_CHANNEL_ID> render as clickable links inside embeds. Mentions inside an embed never notify anyone; allowed_mentions: { "parse": [] } guarantees the same for anything you later put in content or in a Components V2 text display. Want something other than blurple (5793266)? See the colour reference.

Template 2: Multi-embed sections

Larger servers split rules by area. One embed per section keeps each block scannable and lets you colour-code them. A single message can hold up to 10 embeds and 6000 characters in total across all of them.

{
  "embeds": [
    {
      "title": "📜 Server Rules",
      "description": "Six rules in three sections. They apply in every channel, voice room and DM between members.",
      "color": 5793266
    },
    {
      "title": "💬 Text channels",
      "description": "**1. Be respectful.** No harassment, slurs or targeted insults.\n**2. Stay on topic.** Off-topic goes to <#OFFTOPIC_CHANNEL_ID>.\n**3. No spam or ads.** Promotion only in <#PROMO_CHANNEL_ID>.",
      "color": 5763719
    },
    {
      "title": "🎙️ Voice and media",
      "description": "**4. No earrape, soundboards or music bots** outside <#MUSIC_CHANNEL_ID>.\n**5. Keep streams and images safe for work.** Avatars and banners included.",
      "color": 16705372
    },
    {
      "title": "🛡️ Moderation",
      "description": "**6. Moderator decisions are final in chat.** Disagree? Open a ticket in <#SUPPORT_CHANNEL_ID>.\n\nWarning → 24h mute → ban. Severe cases skip straight to a ban.",
      "color": 15548997,
      "footer": { "text": "Last updated" },
      "timestamp": "2026-09-17T12:00:00.000Z"
    }
  ],
  "allowed_mentions": { "parse": [] }
}

Numbering continues across sections on purpose: “rule 4” should mean one thing in the whole server.

Template 3: Compact rules with fields

Fields give each rule a bold heading with the explanation underneath, which reads well on mobile. One field per rule, inline: false so they stack. Limits: 25 fields, name 256 characters, value 1024.

{
  "embeds": [
    {
      "title": "Rules",
      "description": "Short version. Full policies live in <#POLICIES_CHANNEL_ID>.",
      "color": 5793266,
      "fields": [
        {
          "name": "1. Respect everyone",
          "value": "No harassment, slurs, hate speech or targeted insults.",
          "inline": false
        },
        {
          "name": "2. Safe for work",
          "value": "No NSFW or shock content in messages, avatars or nicknames.",
          "inline": false
        },
        {
          "name": "3. No spam or self-promo",
          "value": "Invites, referral codes and ads go in <#PROMO_CHANNEL_ID>.",
          "inline": false
        },
        {
          "name": "4. Right channel, right topic",
          "value": "Check the channel topic before posting.",
          "inline": false
        },
        {
          "name": "5. Discord ToS applies",
          "value": "Anything against Discord's [Terms](https://discord.com/terms) is against ours.",
          "inline": false
        },
        {
          "name": "Consequences",
          "value": "Warning → mute → ban. Severe cases skip steps.",
          "inline": false
        }
      ],
      "footer": { "text": "Last updated" },
      "timestamp": "2026-09-17T12:00:00.000Z"
    }
  ],
  "allowed_mentions": { "parse": [] }
}

Template 4: Components V2 version

Components V2 replaces embeds with a container of text blocks, separators and link buttons: real dividers between sections and a button to the full policy page. Two things change in the request: flags: 32768 with no content or embeds, and ?with_components=true on the webhook URL. An ordinary webhook can send this payload because the only buttons are link buttons (style: 5).

{
  "flags": 32768,
  "components": [
    {
      "type": 17,
      "accent_color": 5793266,
      "components": [
        { "type": 10, "content": "## 📜 Server Rules\nRead once, follow always." },
        { "type": 14, "divider": true, "spacing": 2 },
        {
          "type": 10,
          "content": "**1. Be respectful.** No harassment, slurs or targeted insults.\n**2. Keep it safe for work.** Avatars and nicknames included.\n**3. No spam or self-promotion** outside <#PROMO_CHANNEL_ID>."
        },
        { "type": 14, "divider": true, "spacing": 1 },
        {
          "type": 10,
          "content": "**4. Use the right channel.** Read the topic first.\n**5. No doxxing.** Private information stays private.\n**6. Discord's Terms and Guidelines apply everywhere.**"
        },
        { "type": 14, "divider": true, "spacing": 2 },
        { "type": 10, "content": "*Warning → mute → ban. Last updated <t:1789646400:D>.*" },
        {
          "type": 1,
          "components": [
            {
              "type": 2,
              "style": 5,
              "label": "Full policies",
              "url": "https://example.com/policies"
            },
            {
              "type": 2,
              "style": 5,
              "label": "Discord Guidelines",
              "url": "https://discord.com/guidelines"
            }
          ]
        }
      ]
    }
  ],
  "allowed_mentions": { "parse": [] }
}

Text displays accept the same markdown as message content, so the ## heading renders as a real heading, and <t:1789646400:D> shows the date in each reader’s time zone (swap in your own Unix timestamp). The Components V2 guide covers the other component types.

Template 5: Rules plus a verification note

Many servers gate the other channels behind “read the rules, then react or press a button”. The webhook can post that message but cannot hand out the role: webhooks only send. Something else has to watch the message, either a reaction-role bot you already run or an interactive button through the bot integration on discord-webhook.com. The payload is the same either way:

{
  "embeds": [
    {
      "title": "📜 Server Rules",
      "description": "**1. Be respectful.** No harassment, slurs or targeted insults.\n**2. Keep it safe for work.** Messages, avatars and nicknames included.\n**3. No spam or self-promotion** outside <#PROMO_CHANNEL_ID>.\n**4. Discord's Terms and Guidelines apply everywhere.**\n\nWarning → mute → ban.",
      "color": 5793266
    },
    {
      "title": "✅ Verify to unlock the server",
      "description": "React with ✅ to this message to confirm you have read the rules. Verification gives you the <@&MEMBER_ROLE_ID> role and unlocks <#GENERAL_CHANNEL_ID> and every other channel.\n\nNothing happening after a minute? Ask in <#SUPPORT_CHANNEL_ID>.",
      "color": 5763719,
      "footer": { "text": "Last updated" },
      "timestamp": "2026-09-17T12:00:00.000Z"
    }
  ],
  "allowed_mentions": { "parse": [] }
}

<@&MEMBER_ROLE_ID> renders as a role mention; inside an embed it never pings, and the empty allowed_mentions keeps it that way if you move it into content. Send this one with ?wait=true (next section): a reaction-role bot needs the message ID to know which message to watch. If you would rather use a button than a reaction, see interactive buttons with actions.

Sending, pinning and updating with PATCH

Every template is a plain POST. Add ?wait=true so Discord returns the created message instead of an empty 204; you need its id for editing later and for the reaction-role bot in template 5:

WEBHOOK="https://discord.com/api/webhooks/YOUR_ID/YOUR_TOKEN"

curl -s -H "Content-Type: application/json" \
     -d @rules.json \
     "$WEBHOOK?wait=true" | jq -r '.id'

For the Components V2 template the URL becomes "$WEBHOOK?wait=true&with_components=true".

Pinning. Webhook endpoints cannot pin. Pin the message once by hand (message menu → Pin Message) or with a bot that has Manage Messages. PATCH keeps the message ID, so the pin survives every edit.

Updating. Edit the JSON, bump the timestamp, and PATCH the same shape to the message URL:

MESSAGE_ID="123456789012345678"

curl -s -X PATCH -H "Content-Type: application/json" \
     -d @rules.json \
     "$WEBHOOK/messages/$MESSAGE_ID"

PATCH replaces the fields you send: embeds replaces all embeds, so always send the complete payload, not just the embed you changed. For a Components V2 message add ?with_components=true to the PATCH URL too. Keep the message ID somewhere safe; the edit and delete guide covers GET and DELETE on the same URL.

Common errors

400 with embeds.0.description in the body. The description passed 4096 characters. Move a section into a second embed (template 2) or fields (template 3); the whole message is capped at 6000 characters across all embeds.

400 on the Components V2 template. Either flags: 32768 is missing, ?with_components=true is not on the URL, or content/embeds are still present. All three conditions must hold.

Role mentions ping everyone with the role. Whether <@&ROLE_ID> pings depends on allowed_mentions. Mentions inside embeds never notify, but the same mention in content or in a Components V2 text display does. The templates set "parse": []; keep it in the JSON you PATCH as well, because Discord re-parses mentions on every edit.

The pin still shows the old text. You POSTed a new message instead of PATCHing the old one. DELETE the duplicate at its message URL and PATCH the original.

{"message":"Unknown Webhook","code":10015}. The webhook was deleted or the URL is wrong. Recreate it in Server Settings → Integrations → Webhooks and repost; a new webhook cannot edit the old message.

FAQ

Can a webhook give someone a role when they react to the rules?

No. A webhook can only send, edit and delete messages. Role assignment needs a bot: a reaction-role bot pointed at the message ID, or an interactive button added through a bot integration such as the one on discord-webhook.com.

How do I update the rules without reposting?

Send the full JSON again with PATCH https://discord.com/api/webhooks/{id}/{token}/messages/{message_id}. The message keeps its ID, pin and link. Get the ID by posting with ?wait=true the first time.

Can I ping @everyone with the rules message?

Yes, if allowed_mentions permits it, for example { "parse": ["everyone"] } with @everyone in content. For a post you will edit later, keep "parse": [] in the JSON you PATCH so the rules message can never ping the whole server by accident.

What is the maximum length of a rules embed?

4096 characters per description, 1024 per field value, 25 fields, 10 embeds and 6000 characters total across all embeds in one message. Anything longer belongs in a linked document.

Next steps

Pick the template that matches your server’s size, replace the placeholder IDs, and send it with ?wait=true so you can PATCH it later. To tweak wording and colours with a live preview, paste any payload into the Discord Webhook builder and export it back as JSON or code.

Tags: discord rules templatediscord server rules embedserver rulesembed templatescomponents v2webhook jsoncommunitymoderation

Related articles

All articles

Build it in the visual editor

Embeds, Components V2, buttons and polls with a live Discord preview. Free, no signup.