You set up a webhook in Discord to send automatic messages, but the @everyone mention inside the message does not trigger a notification for server members. The @everyone tag appears as plain text instead of creating a ping. This problem occurs because Discord requires explicit permission for webhooks to use @everyone and @here mentions. This article explains the exact permission and message formatting requirements to make @everyone work in webhook messages.
Key Takeaways: Fixing @everyone in Discord Webhooks
- Server Settings > Roles > @everyone > Permissions > Mention @everyone, @here, and All Roles: The webhook itself must have this permission enabled to send pinging mentions.
- Message content must include the literal string “@everyone”: The webhook payload must contain the exact text @everyone in the content field — not a role ID or mention syntax.
- Webhook user must have the correct role hierarchy: The bot or integration that created the webhook must be above the target role in the server role list.
Why @everyone Mentions in Webhooks Fail to Ping
Discord webhooks are treated as a special user type. When a webhook sends a message that includes @everyone, Discord checks two conditions before allowing the ping to fire. First, the webhook must have the Mention @everyone, @here, and All Roles permission in the server channel where the webhook posts. Second, the message content must contain the exact plain text string @everyone — not a role mention using angle brackets or a role ID.
If either condition is not met, the @everyone text appears as plain text and does not trigger a notification. Many users format their webhook payload incorrectly by using role mention syntax such as <@&roleID> or by omitting the permission entirely. The webhook does not have a built-in bypass for mention restrictions. It must follow the same permission rules as any other user in the server.
The Role of the @everyone Permission
The @everyone role in a Discord server has a specific permission called Mention @everyone, @here, and All Roles. By default, this permission is enabled for the @everyone role. However, if a server administrator has disabled this permission for the @everyone role or for the specific channel where the webhook posts, the webhook cannot use @everyone. The webhook inherits the permission set of the user or bot that created it, but the channel-level override can block the mention.
Webhook Content Field Requirements
When sending a webhook message via the Discord API, the content field must contain the exact string @everyone. Do not use <@&123456789> or any other role mention format. The string must be plain text. If you include a space before or after the @ symbol, the mention will not work. For example, @everyone check this out works. @ everyone or @ everyone does not work.
Steps to Fix Webhook @everyone Not Pinging
Follow these steps in order. Verify each step before moving to the next.
- Check the @everyone Permission in the Server
Open Discord and go to your server. Click the server name at the top left. Select Server Settings > Roles. Click the @everyone role. Scroll to General Permissions. Make sure Mention @everyone, @here, and All Roles is toggled ON. If it is off, toggle it on and click Save Changes. - Check the @everyone Permission in the Specific Channel
In the channel where the webhook posts, click the gear icon to open Channel Settings. Go to Permissions. Find the @everyone role in the list. Check the Mention @everyone, @here, and All Roles permission. If it is set to a red X (denied) or a gray slash (neutral), change it to a green checkmark (allowed). Click Save Changes. - Verify the Webhook Message Content Format
Locate the script or application that sends the webhook message. Open the payload JSON. Ensure thecontentfield contains@everyoneas a plain string. Example correct payload:{"content": "@everyone New update is live!"}
Do not use{"content": "<@&123456789> New update is live!"}or any role ID format. - Test the Webhook with a Simple Message
Send a test message using the same webhook URL. Use a tool like curl, Postman, or a Discord webhook tester. Send this exact payload:curl -X POST -H "Content-Type: application/json" -d '{"content":"@everyone test ping"}' YOUR_WEBHOOK_URL
Check if the message appears in the channel and if you receive a notification. If the ping works, the issue is in your original script. - Check the Webhook Creator Role Hierarchy
In Server Settings > Roles, look at the role list. The role of the user or bot that created the webhook must be above the @everyone role in the list. Drag the creator’s role above @everyone if needed. This is rarely an issue because @everyone is usually at the bottom, but verify if other fixes fail. - Recreate the Webhook If Permissions Were Changed
If you changed permissions after the webhook was created, the webhook may not pick up the new settings. Delete the webhook in Server Settings > Integrations > Webhooks. Create a new webhook, copy the URL, and update your script. Test again.
If Discord Webhook Still Has Issues After the Main Fix
Webhook Sends Message but @everyone Appears as Plain Text
This indicates the permission is correct but the content format is wrong. Double-check that your script sends @everyone with no extra characters. Some programming languages escape the @ symbol or add invisible Unicode characters. Use a hex dump tool to verify the exact bytes being sent. The string should be 40 65 76 65 72 79 6F 6E 65 in hex.
Webhook Does Not Send Any Message
If the webhook sends nothing at all, the issue is not related to @everyone. Check the webhook URL for typos. Verify that the webhook is not rate-limited. Discord limits webhooks to 30 messages per second per channel. If you exceed this, messages are dropped. Also check that the webhook has not been deleted or invalidated.
Webhook Works in One Channel but Not Another
Each channel has its own permission overrides. Repeat the permission check in the failing channel. The @everyone role may have Mention @everyone denied in that specific channel even if it is allowed at the server level. Go to Channel Settings > Permissions and set it to allowed.
Bot Webhook vs User-Created Webhook
Bots can create webhooks with their own permissions. If a bot created the webhook, the bot must have the Mention @everyone permission. If the bot lacks this permission, the webhook inherits the restriction. Grant the bot the required permission in Server Settings > Roles.
Webhook Mention Methods: @everyone vs Role ID Mention
| Item | @everyone Mention | Role ID Mention |
|---|---|---|
| Content format | Plain text @everyone |
<@&roleID> |
| Permission required | Mention @everyone, @here, and All Roles | Mention @everyone, @here, and All Roles |
| Pings all server members | Yes | Only members with that role |
| Works with webhook | Yes, with correct permission | Yes, but requires role ID |
| Common mistake | Using role ID format instead of plain text | Using @everyone text instead of role ID |
To mention a specific role instead of everyone, use the role ID format. Find the role ID by enabling Developer Mode in User Settings > Advanced, then right-click the role in Server Settings and copy ID. Use <@&roleID> in the content field. This method still requires the Mention @everyone, @here, and All Roles permission.
Now you can make webhook @everyone mentions ping correctly by setting the proper permission and using the exact plain text format. Test with a simple curl command first. If the ping still fails, check channel-level overrides and recreate the webhook. As an advanced tip, use Discord’s webhook rate limit of 30 messages per second to batch notifications rather than sending one per event.