> ## Documentation Index
> Fetch the complete documentation index at: https://docs.use.observer/llms.txt
> Use this file to discover all available pages before exploring further.

# Slack, Discord, Teams, and webhooks

> Post incident alerts to a chat channel or a signed HTTPS endpoint.

Slack, Discord, Microsoft Teams, the generic webhook, and email all follow the
same shape: you provide one connection value, choose a scope, and save. Each
formats the incident for its destination.

## Slack

<Steps>
  <Step title="Create an incoming webhook">
    In Slack, open **Apps**, add **Incoming Webhooks**, and choose the channel that
    should receive alerts. Slack returns a webhook URL that starts with
    `https://hooks.slack.com/services/`.
  </Step>

  <Step title="Add the integration">
    In the Observer console, open **Alerts**, choose **Add alert**, pick
    **Slack**, and paste the webhook URL. Choose org-wide or a single page, then
    save.
  </Step>

  <Step title="Test it">
    Use **Send test** from the row's actions menu. A sample message formatted with Slack Block Kit should
    appear in the channel.
  </Step>
</Steps>

Slack rate-limits incoming webhooks to roughly one message per second.
Observer paces delivery to stay under that.

## Discord

Create a webhook in **Server Settings**, **Integrations**, **Webhooks**, and
copy its URL (it starts with `https://discord.com/api/webhooks/`). Add a
**Discord** integration in Observer and paste the URL. Alerts arrive as a rich
embed colored by severity.

## Microsoft Teams

Add an **Incoming Webhook** connector to the target Teams channel and copy the
URL (its host ends in `webhook.office.com`). Add a **Microsoft Teams** integration in
Observer and paste the URL. Alerts arrive as an Adaptive Card.

## Generic webhook

The generic webhook posts a JSON body to any HTTPS endpoint you control.

<Steps>
  <Step title="Add the integration">
    Pick **Generic webhook**, paste your endpoint URL, and optionally set a signing
    secret.
  </Step>

  <Step title="Verify the signature">
    When a secret is set, every request carries an `X-Observer-Signature` header:
    `sha256=` followed by the HMAC-SHA-256 of `timestamp.body`, where `timestamp`
    is the `X-Observer-Timestamp` header value. A legacy `X-Observer-Signature-Legacy`
    header signs the body alone. Verify `X-Observer-Signature` as described in the
    [Webhook payload reference](/docs/reference/webhook-payloads#signature-verification).
  </Step>
</Steps>

The body is `{event, event_id, incident_id, org_id, page: {id, name, subdomain}, title, body, severity, status, url, occurred_at}`.
See the [Webhook payload reference](/docs/reference/webhook-payloads) for each
field and event type.

## Email

Pick **Email** and enter the address that should receive incident alerts. This
is the operator alert path. It is separate from the public subscriptions
(email, Slack, Teams, or webhook) that visitors sign up for on the status
page; see [Subscribe to a status page](/docs/guides/status-page-subscriptions).

<Warning>
  **HTTPS and reachability**

  Webhook URLs must use HTTPS and resolve to a public address. Observer rejects
  loopback, private, and link-local targets, and does not follow redirects. A
  4xx response other than 429 is treated as a configuration error and is not
  retried; 429, 5xx, and network errors retry with backoff (up to 5 attempts).
</Warning>


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.