Destination type

Discord Webhook Destination Configuration

Use Discord destinations to turn routed events into channel webhook messages or final follow-up responses for slash commands.

DISCORD_WEBHOOKDiscord execute webhook APIPOSTCommunication
Discord Webhook destination delivery flowFastHook routes accepted events through a connection to a Discord Webhook destination and stores delivery attempt evidence.AcceptedRequestsource verifiedConnectionRoute branchfilters and transformsretry policyDISCORD_WEBHOOKDiscord WebhookDiscord execute webhook APIPOSTAttemptEvidencestatus + bodyDestination config owns target, auth, method, rate limit, disabled state, and delivery attempt evidence.
For Discord Webhook HTTP destinations, FastHook sends the configured method to the receiver URL and stores response status, body, latency, and retry evidence.

When to use this destination type

Choose DISCORD_WEBHOOK when the receiver target is Discord execute webhook API. Destinations are outbound delivery targets: they do not decide whether a source request should be accepted, and they do not own connection filters or transformations. They own where the final delivery goes and how FastHook should authenticate, pace, disable, and inspect that delivery.

A Discord Webhook destination can be reused by multiple connections when several source branches should feed this receiver. Reuse keeps its capacity, credentials, and attempt evidence attached to one destination id.

FastHook dashboard fields

In the dashboard, create a destination, set Destination Type to DISCORD_WEBHOOK, then fill the fields below.

Delivery mode

Choose Channel webhook or Slash-command follow-up.

Webhook URL

WEBHOOK only: secret Discord webhook URL for the target channel.

Message text

Discord content template with FastHook tokens such as {{event_id}} and {{payload.text}}.

Username template

WEBHOOK only: optional sender display name override.

Avatar URL template

WEBHOOK only: optional sender avatar override.

Embeds JSON

Optional Discord embed payload after template rendering.

Existing thread ID template

WEBHOOK only: routes the message into an existing Discord thread.

New forum thread name

WEBHOOK only: creates a new thread when the webhook belongs to a forum or media channel.

Components JSON

Optional action rows, link buttons, and other supported Discord components.

Poll JSON

Optional Discord poll request.

File uploads JSON

Optional file list fetched from public HTTPS URLs. Supports FastHook template tokens.

Allowed mentions

Controls whether rendered @mentions can ping users, roles, or everyone.

Suppress automatic link embeds

Sets Discord's SUPPRESS_EMBEDS message flag.

Send without push notification

Sets Discord's SUPPRESS_NOTIFICATIONS message flag.

Max delivery rate

Built-in one message per second pacing.

API config fields

The REST API stores Discord Webhook destination behavior under config. Use PATCH for focused edits and PUT only when the request contains the full config you want to keep.

config.delivery_mode

WEBHOOK (default) sends to a channel webhook; INTERACTION_FOLLOWUP answers a routed slash-command interaction.

config.webhook_url

Required only in WEBHOOK mode: Discord execute webhook URL from the target channel integration settings.

config.content_template

Discord message content template. Defaults to FastHook event {{event_id}} plus {{payload}}.

config.username_template

Optional WEBHOOK-mode sender username template.

config.avatar_url_template

Optional WEBHOOK-mode sender avatar URL template.

config.embeds_template

Optional Discord embed JSON object or array. FastHook renders template tokens before parsing JSON.

config.components_template

Optional Discord message components JSON array, including action rows and link buttons.

config.poll_template

Optional Discord poll JSON object.

config.files_template

Optional JSON array of public HTTPS file URLs or objects with url, filename, description, and spoiler fields. Templates are rendered before parsing.

config.thread_id_template

Optional WEBHOOK-mode existing Discord thread ID or template. Mutually exclusive with thread_name_template.

config.thread_name_template

Optional WEBHOOK-mode new forum or media thread name. Mutually exclusive with thread_id_template.

config.suppress_embeds

Suppress automatic link embeds when true.

config.suppress_notifications

Send without a push notification when true.

config.allowed_mentions_parse

Optional array of mention categories: roles, users, everyone. Empty prevents mention pings.

config.rate_limit

Built-in delivery pacing for Discord webhook messages. Discord webhook destinations are fixed at 1.

config.rate_limit_period

Rate-limit period. Discord webhook destinations are fixed at second.

Discord Webhook destination config
{
  "name": "orders-api",
  "type": "DISCORD_WEBHOOK",
  "config": {
    "url": "https://api.example.com/webhooks/fasthook",
    "http_method": "POST",
    "auth_type": "FASTHOOK_SIGNATURE",
    "auth": {},
    "rate_limit": 10,
    "rate_limit_period": "second"
  }
}
Create Discord Webhook destination with cURL
curl -X POST "https://api.fasthook.io/v1/destinations" \
  -H "Authorization: Bearer $FASTHOOK_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "name": "orders-api",
  "type": "DISCORD_WEBHOOK",
  "config": {
    "url": "https://api.example.com/webhooks/fasthook",
    "http_method": "POST",
    "auth_type": "FASTHOOK_SIGNATURE",
    "auth": {},
    "rate_limit": 10,
    "rate_limit_period": "second"
  }
}'

Authentication

Discord Webhook destination authentication is outbound. It helps this receiver trust or accept FastHook delivery and remains separate from source authentication for the original webhook producer.

  • Discord webhook URL for channel delivery
  • Original signed Interaction token for automatic follow-up delivery

HTTP methods and rate limit

Discord Webhook uses the methods below for delivery attempts. Its destination rate limit is shared by every connection that targets this receiver.

POST

Rate limit: Locked to 1 request per second.

Delivery behavior

  • WEBHOOK mode calls Discord's execute webhook endpoint with wait=true. The webhook URL is the credential; keep it secret and rotate it if exposed.
  • INTERACTION_FOLLOWUP mode obtains the application ID and interaction token from the original signature-verified request. No token is stored in destination configuration.
  • FastHook automatically defers ordinary interactions inside Discord's three-second deadline; follow-ups must be delivered before Discord's 15-minute token lifetime ends.
  • Embeds templates must render to a JSON object or an array of embed objects.
  • Forum and media channel webhooks require thread_id_template or thread_name_template. Threads, username, and avatar are not supported by Discord's follow-up endpoint.
  • Components templates render to a JSON array; FastHook enables Discord's with_components query option automatically.
  • Poll templates render to a Discord poll request object.
  • File uploads use multipart/form-data with payload_json and files[n]. FastHook accepts up to 10 public HTTPS files, 10 MiB per file, and 20 MiB total per message; private, loopback, and metadata hosts are blocked.
  • For private slash-command replies, enable Private slash-command responses on the Discord Interactions Source. FastHook sets EPHEMERAL in the initial defer so the follow-up inherits it.
  • Allowed mentions default to an empty parse list so rendered @mentions do not ping recipients unexpectedly.
  • Discord webhook destinations are locked to 1 request per second to avoid message bursts.

Setup checklist

  1. Create a FastHook destination and choose DISCORD_WEBHOOK as the destination type.
  2. Choose Channel webhook for a normal channel message, or Slash-command follow-up for the result of a routed Discord Interaction.
  3. For Channel webhook, create a webhook in Discord channel settings, copy its URL, and configure a thread ID or thread name for Forum/Media channels.
  4. For Slash-command follow-up, connect the destination to a Discord Interactions source; FastHook reuses the original interaction token automatically.
  5. Set message text, optional embeds, components/buttons, poll, file uploads, flags, and allowed mentions policy.
  6. Connect only Discord-worthy events through filters before routing to the destination.

Troubleshooting

Attempts fail with 401, 403, or 404.

Confirm the webhook still exists, belongs to the target channel, and was copied completely.

Discord rejects embeds.

Render the template with a sample event and validate that embeds_template is a JSON object or array accepted by Discord.

Discord rejects a forum or media channel message.

Set exactly one of thread_id_template or thread_name_template. Forum and media webhooks require a target thread.

An Interaction follow-up fails after the command was received.

Confirm the destination is connected directly to a Discord Interactions source and delivery starts within 15 minutes. FastHook falls back to the original source payload when a transformation removes application_id or token.

Discord ignores or rejects components or polls.

Validate the rendered components_template as a JSON array and poll_template as a JSON object supported by Discord.

Messages post but mentions do not ping.

Set allowed_mentions_parse to users, roles, or everyone only when intentional. Empty is the safer default.

Related docs