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.
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 modeChoose Channel webhook or Slash-command follow-up.
Webhook URLWEBHOOK only: secret Discord webhook URL for the target channel.
Message textDiscord content template with FastHook tokens such as {{event_id}} and {{payload.text}}.
Username templateWEBHOOK only: optional sender display name override.
Avatar URL templateWEBHOOK only: optional sender avatar override.
Embeds JSONOptional Discord embed payload after template rendering.
Existing thread ID templateWEBHOOK only: routes the message into an existing Discord thread.
New forum thread nameWEBHOOK only: creates a new thread when the webhook belongs to a forum or media channel.
Components JSONOptional action rows, link buttons, and other supported Discord components.
Poll JSONOptional Discord poll request.
File uploads JSONOptional file list fetched from public HTTPS URLs. Supports FastHook template tokens.
Allowed mentionsControls whether rendered @mentions can ping users, roles, or everyone.
Suppress automatic link embedsSets Discord's SUPPRESS_EMBEDS message flag.
Send without push notificationSets Discord's SUPPRESS_NOTIFICATIONS message flag.
Max delivery rateBuilt-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_modeWEBHOOK (default) sends to a channel webhook; INTERACTION_FOLLOWUP answers a routed slash-command interaction.
config.webhook_urlRequired only in WEBHOOK mode: Discord execute webhook URL from the target channel integration settings.
config.content_templateDiscord message content template. Defaults to FastHook event {{event_id}} plus {{payload}}.
config.username_templateOptional WEBHOOK-mode sender username template.
config.avatar_url_templateOptional WEBHOOK-mode sender avatar URL template.
config.embeds_templateOptional Discord embed JSON object or array. FastHook renders template tokens before parsing JSON.
config.components_templateOptional Discord message components JSON array, including action rows and link buttons.
config.poll_templateOptional Discord poll JSON object.
config.files_templateOptional JSON array of public HTTPS file URLs or objects with url, filename, description, and spoiler fields. Templates are rendered before parsing.
config.thread_id_templateOptional WEBHOOK-mode existing Discord thread ID or template. Mutually exclusive with thread_name_template.
config.thread_name_templateOptional WEBHOOK-mode new forum or media thread name. Mutually exclusive with thread_id_template.
config.suppress_embedsSuppress automatic link embeds when true.
config.suppress_notificationsSend without a push notification when true.
config.allowed_mentions_parseOptional array of mention categories: roles, users, everyone. Empty prevents mention pings.
config.rate_limitBuilt-in delivery pacing for Discord webhook messages. Discord webhook destinations are fixed at 1.
config.rate_limit_periodRate-limit period. Discord webhook destinations are fixed at second.
{
"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"
}
}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.
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
- Create a FastHook destination and choose DISCORD_WEBHOOK as the destination type.
- Choose Channel webhook for a normal channel message, or Slash-command follow-up for the result of a routed Discord Interaction.
- 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.
- For Slash-command follow-up, connect the destination to a Discord Interactions source; FastHook reuses the original interaction token automatically.
- Set message text, optional embeds, components/buttons, poll, file uploads, flags, and allowed mentions policy.
- 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.