When you send a message through a Discord webhook, the @everyone role mention can trigger a notification for every member in the channel. This behavior is often unwanted when posting automated updates, announcements, or logs where not every member needs an alert. The root cause is that Discord webhooks default to allowing @everyone and @here mentions unless you explicitly disable them in the webhook payload. This article explains how to configure your webhook request to suppress @everyone pings by using the allowed_mentions property in the JSON payload.
Key Takeaways: Suppressing @everyone in Discord Webhooks
- Set
allowed_mentions: { "parse": [] }: Prevents all role and user mentions, including @everyone and @here. - Set
allowed_mentions: { "roles": [] }: Blocks role mentions but still allows user mentions. - Test with a tool like curl or Postman: Verify the suppression works before automating your webhook.
How Discord Webhooks Handle @everyone Mentions
Discord webhooks are HTTP endpoints that allow external services to post messages into a channel. When you send a JSON payload that includes @everyone or @here, Discord treats them as role mentions by default. This means every member in the channel receives a notification, which can be disruptive for routine updates like build notifications, server logs, or scheduled announcements.
The Discord API provides the allowed_mentions object to control which mentions are processed. By default, if you omit allowed_mentions, all mentions in the message content are allowed. To suppress @everyone, you must explicitly set allowed_mentions to an empty parse array or to a roles array that excludes the everyone role. This setting applies only to the specific webhook request and does not affect the webhook’s global configuration.
Prerequisites for Suppressing @everyone
Before you begin, ensure you have the following:
- A Discord server where you have the Manage Webhooks permission.
- The webhook URL for the channel where you want to post messages.
- Access to a tool that can send HTTP POST requests, such as curl, Postman, or a custom script in Python, Node.js, or your preferred language.
Steps to Suppress @everyone Pings in a Webhook Message
Follow these steps to send a webhook message that contains @everyone in the text but does not trigger notifications.
- Copy the webhook URL
Open Discord and go to the channel where you want to post. Click the gear icon next to the channel name and select Integrations. Under Webhooks, click the webhook name and then click Copy Webhook URL. The URL looks likehttps://discord.com/api/webhooks/1234567890/abcdef. - Prepare the JSON payload with allowed_mentions
Create a JSON object that includes thecontentfield with your message and theallowed_mentionsfield. To suppress all role mentions including@everyoneand@here, set"parse": []. Example:{ "content": "Hello @everyone, this is a test message.", "allowed_mentions": { "parse": [] } } - Send the POST request using curl
Open a terminal or command prompt. Run the following command, replacingWEBHOOK_URLwith your actual URL:curl -X POST -H "Content-Type: application/json" -d '{"content":"Hello @everyone, test message.","allowed_mentions":{"parse":[]}}' WEBHOOK_URL - Verify the message appears without a ping
Check the Discord channel. The message should display@everyoneas plain text, and you should not see the red notification badge or hear a ping sound on any client.
Alternative: Suppress Only Role Mentions
If you want to allow user mentions (like @username) but block role mentions, use the roles array set to an empty array:
{
"content": "Hello @everyone and @user123, this is a test.",
"allowed_mentions": {
"roles": []
}
}
This configuration suppresses @everyone and @here but still processes user mentions like @user123.
Common Mistakes When Suppressing @everyone
“I set allowed_mentions but the ping still happens”
The most common cause is using an incorrect JSON structure. Ensure that allowed_mentions is a direct child of the root JSON object, not nested inside another property. Also confirm that the parse array is empty: "parse": []. If you write "parse": ["users"], role mentions remain active.
“The webhook is from a bot, not a channel webhook”
Bot accounts have their own allowed_mentions configuration in the bot’s code. If you are using a bot to post via webhook, you must set allowed_mentions in the bot’s message send method, not in the webhook payload. This article applies only to channel webhooks created through Discord’s Integrations menu.
“I want to suppress @everyone for all future webhooks from this URL”
Discord does not support a permanent suppression setting on the webhook URL itself. You must include allowed_mentions in every payload where you want suppression. Automate this by hardcoding the allowed_mentions object in your script or application that sends the webhook requests.
Webhook Payload Options: Suppress All vs Suppress Roles Only
| Option | Suppress All Mentions | Suppress Role Mentions Only |
|---|---|---|
| JSON key | "allowed_mentions": { "parse": [] } |
"allowed_mentions": { "roles": [] } |
| Effect on @everyone | Suppressed | Suppressed |
| Effect on @here | Suppressed | Suppressed |
| Effect on user mentions | Suppressed | Allowed |
| Effect on role mentions | Suppressed | Suppressed |
You can now send Discord webhook messages that include the text @everyone without triggering notifications. The key is to include the allowed_mentions object with an empty parse array or an empty roles array in every payload. For automated scripts, always add this property to avoid accidental pings. As an advanced tip, if you need to allow mentions to a specific role while blocking others, use "allowed_mentions": { "roles": ["role_id_here"] } to permit only that role.