Discord is the easiest of the four supported alert destinations to wire up. There is no app to create, no OAuth flow, no admin approval -- just a channel-level webhook URL that you generate in one dialog and paste into the Digital Empire integrations page.
The 3-step setup
- In Discord, right-click the channel you want alerts in and pick "Edit Channel," then "Integrations." Click "Webhooks," then "New Webhook."
- Name the webhook (for example "Digital Empire Alerts") and optionally upload an avatar. Click "Copy Webhook URL." Save.
- On the Digital Empire integrations page for your product (PixelProof, EntryProof, or TariffWatch), pick "Discord" as the channel type. Paste the URL you copied. Save. Click "Send test alert" to confirm the wire.
The Discord webhook documentation on discord.com/developers/docs documents this flow authoritatively. As of Aug 2026 -- verify current on the same page if Discord has moved the settings UI (they occasionally rename tabs).
Screenshot placeholder -- Discord channel Integrations tab with the "New Webhook" button and URL copy affordance. Andy will upload the real screenshot after wire-up.
<img src="/help/screenshots/discord-webhook-url.png" alt="Discord channel Integrations tab showing the New Webhook button and copy URL affordance" />
What we actually send to Discord
The Discord webhook envelope uses standard HTTP semantics defined in RFC 9110 at rfc-editor.org: our dispatcher expects 2xx on success and treats 429 (rate-limited) per RFC 6585 at rfc-editor.org without retrying.
Discord webhooks accept a rich embeds array that renders as a colored, structured message rather than plain text. Our dispatcher formats every alert this way. The Discord message-embed reference at discord.com/developers/docs documents the schema. The body we POST looks like this:
{ "embeds": [{ "title": "Pixel break on your-store.myshopify.com", "description": "The Meta Pixel is no longer firing PageView on your product pages.", "url": "https://digital-empire-app.vercel.app/meta-monitor", "color": 12124957, "fields": [{ "name": "Severity", "value": "critical", "inline": true }, { "name": "Event", "value": "pixel_missing", "inline": true }], "timestamp": "2026-08-24T18:00:00Z" }] }
The color field is a decimal integer, not a hex string -- Discord's schema is unusual on this point. Critical alerts render dark red, medium amber, low grey. Inline fields render side by side on desktop and stack on mobile, matching the Discord message rendering reference on discord.com/developers/docs.
Rate limits -- Discord is generous but not infinite
Discord publishes webhook-specific rate limits in the rate limits reference at discord.com/developers/docs. The two limits that matter for alerting:
- Per-webhook burst: approximately 5 requests per 2 seconds. Bursts above this get 429 responses.
- Per-channel sustained: approximately 30 messages per 60 seconds. Sustained volume above this also 429s.
Our 10-alert-per-hour cap sits comfortably under both. If you route several products into the same Discord channel and each fires close to 10 alerts per hour, you can still stay under Discord's per-channel sustained limit -- but if you also have other bots posting into the same channel, do the math. As of Aug 2026 -- verify current on the Discord docs page above; the numbers occasionally shift.
Security -- Discord URLs are unsigned bearer secrets
A Discord webhook URL is a bearer secret. Anyone who has it can post any message into that channel, impersonating the webhook's configured name and avatar. Do not embed the URL in a client-side JavaScript bundle, a public repo, or a screenshot in a public support thread. If a URL leaks, delete the webhook in the channel Integrations tab and create a new one -- Discord invalidates the old URL immediately.
The bearer-secret model is documented explicitly in the Discord webhook security notes on discord.com/developers/docs -- Discord does not sign webhook payloads and does not authenticate the sender beyond URL knowledge, so URL confidentiality is the entire security boundary.
Discord vs Slack vs PagerDuty vs Teams -- which to pick
For most Digital Empire customers the pattern is:
- Slack for team-wide visibility, one channel per severity or one channel total.
- PagerDuty for on-call incidents that need a human to be paged now.
- Discord for community-oriented setups (agencies with client channels, indie-builder shared servers) where a Discord server is already the daily hub.
- Microsoft Teams for enterprise customers whose entire org is on Microsoft 365.
Nothing prevents you from routing to all four. On the integrations page, add each as a separate webhook row with the appropriate severity floor -- critical to PagerDuty, everything to Slack, high and above to Teams, and Discord for a specific product's dev-focused channel.
Was this helpful?
Related articles
FAQ
Do I need Discord Nitro or a paid server? No. Webhooks work on every Discord server tier including the free tier.
Can I send different alerts to different Discord channels? Yes -- one webhook per channel in Discord, one row per webhook on the Digital Empire integrations page, and set the event filter or severity floor on each row.
Why is my Discord webhook rejecting messages with 429? You exceeded the 5-per-2-seconds burst or 30-per-60-seconds sustained rate. Our dispatcher's 10/hr cap normally prevents this, but if multiple products all fire simultaneously into the same channel, you can hit it. Spread destinations across channels.
Can Discord webhooks post to a threaded reply? Yes, by appending ?thread_id=<id> to the webhook URL, per the Discord thread-message reference at discord.com/developers/docs. Our dispatcher preserves query strings on the webhook URL, so this pattern works.
Still stuck? Email hello@citationsafe.com or hello@argushq.ai.