Webhook Guides

Webhook to Discord

A webhook to Discord workflow turns selected provider or internal events into Discord channel messages through a first-class FastHook DISCORD_WEBHOOK destination. It works well for incident alerts, release notes, community operations, support handoffs, and lightweight operational feeds.

Configure a Discord webhook URL, message template, optional username, avatar, embeds JSON, and allowed mentions policy on the destination. Add filters before the destination so Discord receives useful messages instead of every raw event.

Discord source vs Discord destination

IntentFastHook patternPage
Receive Discord interaction callbacksDiscord source with Ed25519 signature verificationDiscord webhooks guide
Send provider events into a Discord channelDiscord Webhook destination using Discord execute webhookThis page

Discord notification use cases

  • Alert an engineering or support channel when a webhook delivery fails.
  • Post deployment, release, or workflow events from GitHub into a Discord server.
  • Notify community moderators about payment, signup, or moderation events.
  • Send selected Stripe, Shopify, GitHub, or custom events to a channel with readable templates.
  • Replay missed notifications after fixing a Discord webhook URL or embed template.

Create the Discord destination

Create a Discord webhook in the target channel and keep the webhook URL secret. Use one FastHook destination per channel or workflow so rate limits, replay, and pause controls stay easy to reason about.

Create Discord destination
curl -X POST "https://api.fasthook.io/v1/destinations" \
  -H "Authorization: Bearer fhp_xxx" \
  -H "x-team-id: tm_3b5335b627084a838b" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Discord incident feed",
    "type": "DISCORD_WEBHOOK",
    "config": {
      "webhook_url": "https://discord.com/api/webhooks/...",
      "content_template": "Webhook failed: {{payload.type}} for {{payload.customer.email}}",
      "username_template": "FastHook Alerts",
      "embeds_template": "[{\"title\":\"Webhook event\",\"description\":\"{{payload.type}}\",\"color\":15158332}]",
      "allowed_mentions_parse": [],
      "rate_limit": 1,
      "rate_limit_period": "second"
    }
  }'

Shape the Discord message

Discord accepts message content and optional embeds. Keep the top-level content short enough for channel scanning, then put structured context in embeds when operators need more detail.

Discord message template
{
  "content_template": "Payment failed for {{payload.customer.email}}",
  "embeds_template": "[{\"title\":\"Payment failed\",\"fields\":[{\"name\":\"Invoice\",\"value\":\"{{payload.invoice_id}}\"}]}]",
  "allowed_mentions_parse": []
}

Route only Discord-worthy events

  • Send failures, approvals, reviews, releases, and incidents to Discord.
  • Avoid sending every successful webhook unless the channel is intentionally a live event feed.
  • Filter by provider event type, environment, severity, customer tier, or payload fields before delivery.
  • Use a staging Discord destination before replaying production failures into a real channel.
  • Keep allowed mentions empty unless pinging users, roles, or everyone is intentional.

Debug Discord delivery

  • 401, 403, or 404 usually means the Discord webhook URL is missing, revoked, incomplete, or belongs to another channel.
  • Embed failures usually mean the rendered embeds_template is not valid Discord embed JSON.
  • Unexpected pings usually mean allowed_mentions_parse permits users, roles, or everyone.
  • Rate limiting should be handled with pacing and narrow replay windows.
  • Inspect the FastHook destination attempt response before editing templates or replaying a batch.

Retries, replay, and logs

Discord messages are useful for team awareness, but FastHook remains the delivery record. Each Discord attempt keeps response status, latency, rendered delivery evidence, and retry context, so operators can fix the destination before replaying important missed notifications.

  • Retry temporary Discord API or network failures with backoff.
  • Replay only action-worthy missed notifications after fixing URL or embed configuration.
  • Use rate limits so replay does not flood active channels.
  • Keep high-volume event archives in FastHook, object storage, or Sheets rather than Discord history.

Related guides