Channel posts

A channel-post webhook delivers each verified event into a chat channel as a message authored by the endpoint. Point CI/CD, error trackers, or product-analytics integrations at a channel and the team sees each event inline.

When to use it

Use a channel post when the event is something people should see — a deploy result, an error spike, a new signup, an on-call alert. The message lands in the channel like any other, so it's searchable and threadable.

If instead the event should start automated work, use a workflow trigger.

Authentication

Channel posts use one generic verifier scheme — Shared secret (header token). There's no scheme to choose: channel posts exist to connect external tools (PostHog, Datadog, Grafana, Zapier/Make) that can send a static header but can't HMAC-sign a request.

Configure the sender to send the endpoint secret as a header:

Authorization: Bearer <endpoint-secret>

X-Webhook-Secret: <endpoint-secret> also works. The secret is compared in constant time, and only requests presenting a current secret are accepted.

This is weaker than the signed schemes used by workflow triggers: it authenticates the sender but gives no per-request body integrity or replay protection, so it relies on TLS. Rotate the secret like any other — see Rotating the secret.

What gets posted

  • Payloads with a blocks array render as a rich, structured message — headings, sections, field grids, dividers, context lines.
  • Anything else renders as the event type plus a formatted payload preview (pretty-printed JSON, or raw text).

Rich messages are opt-in by sending a blocks array. See Rich messages for the full block vocabulary and per-block examples.

Identity

The message is posted as a system author using the endpoint's display name, so it reads as coming from the integration (e.g. "Deploys") rather than a raw id. The author is shown with a webhook glyph icon. A webhook cannot ping members or @channel — mentions render as inert text.

Response

Channel posts acknowledge with 202 as soon as the event is verified and accepted (on_received). There's nothing to wait for, so the sync response modes used by workflow triggers don't apply here.

Connecting a tool

  1. Create a channel-post webhook in Settings → Webhooks and pick the destination channel.
  2. Copy the endpoint URL and secret.
  3. In the tool, set the request URL to the endpoint URL, add the Authorization: Bearer <secret> header, and — for a rich message — set the body to a blocks template.

See connecting tools that can't sign for a worked PostHog/Datadog/Grafana example.