Destination type

Slack Destination

Use Slack destinations when routed events should become channel alerts for incidents, approvals, review queues, deployments, or team-visible operational signals.

SLACKSlack chat.postMessage APIPOSTCommunication
Slack destination delivery flowFastHook routes accepted events through a connection to a Slack destination and stores delivery attempt evidence.AcceptedRequestsource verifiedConnectionRoute branchfilters and transformsretry policySLACKSlackSlack chat.postMessage APIPOSTAttemptEvidencestatus + bodyDestination config owns target, auth, method, rate limit, disabled state, and delivery attempt evidence.
For Slack destinations, FastHook renders message and Block Kit templates, sends through Slack chat.postMessage, and stores the Slack API response as delivery attempt evidence.

When to use this destination type

Choose SLACK when the receiver target is Slack chat.postMessage 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 destination can be reused by multiple connections when several source branches should feed the same receiver. Reuse keeps receiver capacity, credentials, and attempt evidence attached to one destination id.

FastHook dashboard fields

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

Channel

Slack channel name such as #ops-alerts or a channel ID such as C123.... Use IDs for private or renamed channels.

Message text

Slack text template with FastHook tokens such as {{event_id}} and {{payload.customer.email}}. Keep it meaningful even when using blocks.

Block Kit JSON

Optional Slack blocks payload after template rendering. Validate the rendered JSON before using it for production alerts.

Bot token

Slack bot token with chat:write scope and permission to post in the target channel.

Max delivery rate

Built-in one message per second pacing.

API config fields

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

config.channel

Required Slack channel name or channel ID. Prefer channel IDs such as C123... for production, private channels, and renamed channels.

config.text_template

Required Slack message text template. It is also the fallback text Slack uses for notifications and accessibility when blocks are present.

config.blocks_template

Optional Block Kit JSON array or object with a blocks array. FastHook renders template tokens before parsing the JSON.

config.auth_type

SLACK_BOT_TOKEN.

config.auth.bot_token

Slack bot token, usually starting with xoxb-, used as the chat.postMessage Bearer token.

config.rate_limit

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

config.rate_limit_period

Rate-limit period. Slack destinations are fixed at second.

Slack destination config
{
  "name": "ops-slack-alerts",
  "type": "SLACK",
  "config": {
    "channel": "#ops-alerts",
    "text_template": "FastHook event {{event_id}}\n```{{payload}}```",
    "blocks_template": "[{\"type\":\"section\",\"text\":{\"type\":\"mrkdwn\",\"text\":\"*FastHook event* {{event_id}}\\nCustomer: {{payload.customer.email}}\"}}]",
    "auth_type": "SLACK_BOT_TOKEN",
    "auth": {
      "bot_token": "xoxb-your-slack-bot-token"
    },
    "rate_limit": 1,
    "rate_limit_period": "second"
  }
}
Create Slack 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": "ops-slack-alerts",
  "type": "SLACK",
  "config": {
    "channel": "#ops-alerts",
    "text_template": "FastHook event {{event_id}}\n```{{payload}}```",
    "blocks_template": "[{\"type\":\"section\",\"text\":{\"type\":\"mrkdwn\",\"text\":\"*FastHook event* {{event_id}}\\nCustomer: {{payload.customer.email}}\"}}]",
    "auth_type": "SLACK_BOT_TOKEN",
    "auth": {
      "bot_token": "xoxb-your-slack-bot-token"
    },
    "rate_limit": 1,
    "rate_limit_period": "second"
  }
}'

Authentication

Destination authentication is outbound. It helps the receiver trust or accept FastHook delivery, and it is separate from source authentication that verifies the original webhook producer.

  • Slack bot token with chat:write scope
  • Optional chat:write.public scope for posting to public channels without inviting the app first

HTTP methods and rate limit

This destination type uses the methods below for delivery attempts. Rate limits apply at the destination boundary, so every connection that targets the same destination shares that capacity.

POST

Rate limit: Locked to 1 request per second.

Delivery behavior

  • FastHook renders Slack templates per delivery and calls Slack chat.postMessage.
  • Use a bot token from a Slack app installed into the same workspace as the target channel.
  • The bot needs chat:write. If you do not use chat:write.public, invite the app bot to the public channel before sending.
  • Private channels and multi-person DMs require a channel ID and the app bot must already be a member.
  • Slack API responses with ok: false are treated as failed delivery attempts even when Slack returns HTTP 200.
  • Block Kit templates must render to a JSON array or an object with a blocks array.
  • Slack destinations are locked to 1 request per second to avoid message bursts.

Setup checklist

  1. Create or open a Slack app in the workspace that owns the target channel.
  2. In OAuth & Permissions, add the Bot Token Scope chat:write. Add chat:write.public only if the app should post to public channels without being invited first.
  3. Install or reinstall the Slack app to the workspace after changing scopes, then copy the Bot User OAuth Token that starts with xoxb-.
  4. Invite the app bot to the target channel, or use a channel ID for private channels and confirm the bot is a member.
  5. Create a FastHook destination and choose SLACK as the destination type.
  6. Set the target channel, message text template, optional Block Kit JSON, and bot token.
  7. Connect only Slack-worthy events through filters before routing to the destination.

Troubleshooting

Attempts fail with channel_not_found or not_in_channel.

Confirm the channel value, prefer the channel ID, and invite the Slack app bot user to the channel. Private channels require membership before chat.postMessage can post.

Attempts fail with missing_scope.

Add chat:write to Bot Token Scopes, reinstall the Slack app to the workspace, then update the FastHook destination with the new xoxb token if Slack rotated it.

Attempts fail with invalid_auth.

Check config.auth.bot_token and rotate the token if it was revoked.

Blocks fail before delivery or Slack returns invalid_blocks.

Render the template with a sample event, validate that blocks_template is JSON, and make sure it is either an array of block objects or an object with a blocks array.

Messages post but notifications are unhelpful.

Keep text_template meaningful. Slack uses top-level text as fallback text for notifications and assistive clients when blocks are present.

Related docs