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:
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
blocksarray 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
- Create a channel-post webhook in Settings → Webhooks and pick the destination channel.
- Copy the endpoint URL and secret.
- 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 ablockstemplate.
See connecting tools that can't sign for a worked PostHog/Datadog/Grafana example.