# Alert channels

Alert channels deliver an alert when a monitor goes down and when it recovers. The dashboard calls them **integrations**, and they belong to a project.

:::caution[Alert channels per plan]
Free includes 1 alert channel, Starter 5, and Pro and Business unlimited. At the limit, the Integrations page shows "Notification limit reached" and asks you to upgrade.
:::

## Adding an alert channel

<Steps>

1. In the sidebar, go to **Integrations** and click **Add Integration**.

2. Choose a channel type and fill in its details.

3. Leave **Enable for all monitors in this project** on to alert this channel for every monitor in the project. Turn it off to choose monitors one by one in their settings.

4. Save the integration, then click **Send Test** on its card. The card shows **Sent!** when the test message goes out.

</Steps>

## Channel types

| Kind | Channels |
| --- | --- |
| Chat | Slack, Microsoft Teams, Google Chat, Discord, Mattermost, Rocket.Chat, Matrix, Telegram, Signal |
| On-call and incident response | PagerDuty, Opsgenie, Grafana OnCall, Squadcast, GoAlert, Splunk On-Call |
| Push notifications | ntfy, Gotify, Pushover, Browser Notifications |
| Email and webhooks | Email, Webhook |

Each type asks for what it needs to deliver the alert, for example:

| Channel | You provide |
| --- | --- |
| Email | Email addresses |
| Slack | A webhook URL and a channel |
| PagerDuty | An integration key |
| Opsgenie | An API key and a region |
| ntfy | A server URL and a topic |
| Webhook | An endpoint URL and a secret |

The **Webhook** channel here is the older notification webhook. For new integrations, use [project webhooks](https://site.dev.tunnelhq.com/docs/webhooks/), which are signed, retried, and logged.

## Choosing which monitors alert

- Every new monitor uses every active integration in the project, however it's created: in the dashboard, from a [subscription URL](https://site.dev.tunnelhq.com/docs/import/#subscription-urls) or a project export, or through the [REST API](https://site.dev.tunnelhq.com/docs/api/), the [MCP server](https://site.dev.tunnelhq.com/docs/mcp/), or the [CLI](https://site.dev.tunnelhq.com/docs/cli/). When you add one in the dashboard, you can choose which integrations instead.
- To change a monitor's channels, open the monitor's **Settings** tab and use [Notification integrations](https://site.dev.tunnelhq.com/docs/concepts/monitors/#notification-integrations).

## From the API, the CLI, or an AI assistant

You can see a project's channels, choose which ones a monitor's alerts go to, and send a test alert without opening the dashboard. Making or editing a channel stays in the dashboard, because its form holds the channel's secrets, such as a bot token or a webhook address. None of these ever show a channel's settings.

- **REST API:** [`GET /channels`](https://site.dev.tunnelhq.com/docs/api/reference/operations/list-channels/) lists the channels, and [`PUT /servers/:id/channels`](https://site.dev.tunnelhq.com/docs/api/reference/operations/set-monitor-channels/) sets a monitor's whole list (`[]` means no channel). [`POST /servers/:id/test-alert`](https://site.dev.tunnelhq.com/docs/api/reference/operations/send-test-alert/) sends a test and says which channels took it.
- **CLI:** `thq channels list`, `show`, `set`, and `test`. See [Manage alert channels](https://site.dev.tunnelhq.com/docs/cli/#manage-alert-channels).
- **MCP server:** `list_channels`, `get_alert_channels`, `set_alert_channels`, and `send_test_alert`. See [Tools](https://site.dev.tunnelhq.com/docs/mcp/#tools).
- **[AI SRE](https://site.dev.tunnelhq.com/docs/ai-sre/):** it can suggest where a monitor's alerts should go, or a test alert, as a card. Nothing changes until someone who can edit monitors approves it.

Changing a monitor's channels or sending a test alert needs a role that can edit monitors. A test alert reaches at most 10 channels, and each person can send 10 test messages an hour, counting the dashboard's test buttons too.

## What sends an alert

| When a monitor | Alert |
| --- | --- |
| Goes **Down** | Yes |
| Recovers | Yes |
| Goes **Partial** | Only if the monitor's [Notify on partial outage](https://site.dev.tunnelhq.com/docs/concepts/regions/#partial-failure-alerts) switch is on |
| Is **Degraded** or **Unknown** | No |

To be alerted again while a monitor stays down, use [Repeat the alert](#repeating-an-alert). To hold a monitor's alerts for a while, [mute it](#muting-alerts).

## Repeating an alert

**Repeat the alert** alerts a monitor's channels again while its outage is open and nobody has acknowledged it. Choose **Never** (the default), **Every 10 minutes**, **Every 30 minutes**, or **Every hour**.

- On an Uptime check, it's next to **Confirmation period**, in the check's settings and in the **Add check** dialog. Heartbeats don't have it.
- On a tunnel, it's under **Settings → Advanced Settings**. It replaces **Resend Notification if Down X times consecutively**.
- For many monitors at once, tick them in the Tunnels or Uptime list and choose **Settings** in the selection bar. **Repeat the alert** there starts at **Unchanged**, which leaves each monitor as it is.

It repeats up to 4 more times, and stops as soon as someone [acknowledges the incident](https://site.dev.tunnelhq.com/docs/concepts/incidents/#acknowledging-an-incident) or the incident ends. A repeat reads, for example, "Still down after 35m (repeat 1 of 4):" followed by the last check's error.

Repeats go to the monitor's alert channels, including a legacy [notification webhook](https://site.dev.tunnelhq.com/docs/webhooks/#notification-webhooks-legacy) if it's one of them. [Project webhooks](https://site.dev.tunnelhq.com/docs/webhooks/) don't repeat: they fire once on the way down and once on recovery. A muted or paused monitor gets no repeats, and a mute doesn't use them up.

## Muting alerts

Mute a monitor to hold its alerts for a while, while its checks keep running. For planned work, a [maintenance window](https://site.dev.tunnelhq.com/docs/concepts/maintenance/) also pauses the checks, opens no incidents, and doesn't count against uptime.

- In the Tunnels or Uptime list, open a row's **⋯** menu, choose **Mute alerts**, then **For 15 minutes**, **For 1 hour**, **For 4 hours**, or **Until I unmute**. The Cards view has the same item. On a phone, the card's sheet lists the four choices, such as **Mute alerts for 1 hour**.
- On a tunnel's or check's page, click **Mute**, beside **Pause**, and pick the same choices.

Heartbeats can be muted too. While a monitor is muted:

- Its checks keep running, and incidents still open and close.
- No alert channel is sent anything: no down or recovery alerts, no [repeats](#repeating-an-alert), and no SSL or domain expiry alerts.
- [Project webhooks](https://site.dev.tunnelhq.com/docs/webhooks/) still fire, because they feed your own systems, and **Send test alert** still sends.

A muted row shows **Alerts muted · 45m left** under its status (minutes under an hour, then hours, such as **4h left**), or **Alerts muted** when it's muted until you unmute. Hover it to see when the mute ends. On the monitor's page, the button reads **Muted · 45m**, with an **Unmute** button beside it.

A timed mute ends by itself. To end one early, choose **Unmute alerts** in the row's menu, or click **Unmute**.

Muting needs the same role as pausing. For roles that can't pause, **Mute alerts** is shown but disabled.

## Turning a channel off

Each integration card has an on/off switch. While a channel is off, it sends no alerts, and **Send Test** is disabled.
