Discord webhook not posting
Events show up in console but never reach Discord. Almost always one of five things, and console tells you which.
Start here: does the event appear in your server console?
- Yes, but not in Discord → the webhook is the problem. Work down this page.
- No, not even in console → the event is switched off or filtered. Jump to nothing in console.
That split matters because DiscordLogger logs every event to console whether or not Discord accepted it. If console is silent, Discord was never the issue.
1. The URL didn’t save, or has stray characters
The most common cause by a distance. Check plugins/DiscordLogger/config.yml:
webhook:
url: "https://discord.com/api/webhooks/1234567890/AbCdEf…"
Things that break it:
- Stray quotes — a URL pasted inside quotes that are already there
- A trailing space before the closing quote
- A line break in the middle, from a terminal that wrapped it
- The channel URL instead of the webhook URL.
discord.com/channels/…is the page you were looking at. A webhook URL contains/api/webhooks/.
Avoid the whole class of problem by setting it in game instead — nothing to edit and it reloads for you:
/discordlogger webhook https://discord.com/api/webhooks/…
2. The webhook was deleted in Discord
Console shows a 404.
Webhooks die when someone deletes them, or when the channel they belong to is deleted. The URL keeps its shape, so nothing looks wrong until you check.
Recreate it: Edit Channel → Integrations → Webhooks → New Webhook → Copy Webhook URL, then set it again.
3. Your host is blocking outbound HTTPS
Console shows a timeout rather than an error code.
Some hosts firewall outbound connections by default. Discord’s API is on
discord.com over 443. If you can’t reach it, nothing will help until that’s
opened — ask your host to allow outbound HTTPS.
Quick check from the server box:
curl -I https://discord.com/api/webhooks
No response means it’s the network, not the plugin.
4. The event is turned off
Every event has its own toggle:
log:
player:
join:
enabled: true
If enabled is false, nothing is sent and nothing is logged. The
configuration reference lists all of them.
5. A filter is catching it
This is the one people miss, because it looks identical to “broken”.
Some commands are filtered by default — /login, /register, /msg and
similar — because command logging posts the line exactly as typed, which would
publish passwords and private messages to your channel. That’s deliberate.
Other filters that silently suppress events:
| Filter | Suppresses |
|---|---|
filters.ignored_players |
everything from those players |
filters.exempt_permission |
everything from anyone holding it |
filters.ignored_worlds |
everything in those worlds |
filters.minimum_chat_length |
short chat messages |
filters.ignored_teleport_causes |
teleports, including bed and dismount by default |
filters.minimum_explosion_blocks |
small explosions |
Nothing appears in console either
Then it isn’t the webhook. In order:
- Is the plugin enabled?
/pluginsshould show DiscordLogger in green. - Did it fail to load? Look for
Unsupported API version— that means the plugin is newer than your server. Check the supported versions. - Are you on Paper? Spigot and CraftBukkit are not supported; the plugin says so plainly on startup rather than failing with a stack trace.
- Is the event filtered or disabled? See above.
Moderation events specifically
Bans, kicks and op changes only log when they actually succeeded. A failed attempt from someone without permission doesn’t appear — that’s intended, so the channel is a record of what happened rather than what was attempted.
Worth knowing: if you use a punishment plugin such as LiteBans or LibertyBans, those keep their own database rather than the vanilla ban list, so moderation logging may not detect them. That’s a known gap rather than a misconfiguration.
Still stuck
Console is the source of truth — it always says what happened. If you’re stuck, open an issue with the console output.
Redact your webhook URL first. It’s a credential, and an issue is public.
Next
- Setup guide — from scratch, including creating the webhook
- Configuration reference — every key explained
- Config generator — rebuild your config cleanly