# Uptime alerts and silence windows

When a monitor goes down, EvoHub can tell you in two ways: through **notification channels** (a Slack or Microsoft Teams channel, or a webhook) and by **paging On-Call** through an escalation policy. You can use either or both. Silence windows mute those alerts while you do planned work.

## What triggers an alert

| Event | Notification channels | On-Call |
|-------|----------------------|---------|
| Monitor goes down | Down alert with the reason | Alert raised (if an escalation policy is set) |
| Still down after the re-alert interval | Repeated down alert | Alerted again |
| Monitor recovers | Recovery message with how long it was down | Alert resolved |
| SSL certificate below its threshold | Warning with the days left | No |
| Monitor is slow (degraded) | No | Lower-priority alert, if **Also page on-call when slow** is on |

The reason in each alert is the failing check's error, for example "Expected status 200–299, got 503" or "keyword "ok" not found in response body".

## Notification channels

A notification channel is a destination for uptime alerts. You create channels once, then link them to the monitors that should use them.

### Create a channel

:::steps
### Open Notification channels
In **Uptime**, select **Notification channels**. The **Where notifications go** card lists your channels. Click **Add destination**.

### Pick a type
Choose **Slack or Microsoft Teams channel** or **Webhook**.

### Enter the destination
- **Slack or Microsoft Teams channel**: pick a **Channel** from the ones connected in **Organization → Chat apps**. If none is connected yet, connect [Slack](https://docs.evohub.io/slack.md) or [Microsoft Teams](https://docs.evohub.io/microsoft-teams.md) there first.
- **Webhook**: enter a **Name** and your endpoint's **Webhook URL** (it must start with `https://`). Optionally set a **Secret header** value so your endpoint can check that requests come from EvoHub. Private and local network addresses are not allowed.

### Save
Click **Add destination**.
:::

To delete a channel, click **Remove** next to it.

Channels made earlier from a Slack incoming-webhook URL are marked **Legacy**. They keep working until you remove them. Once Slack is connected in **Chat apps**, use **Move to Slack app** on the legacy channel and pick the Slack channel. Then link the new channel to the monitors that used the old one, on each monitor's page, and remove the old one.

EvoHub does not currently offer an email notification channel for Uptime. To be called, texted or emailed, page your team through On-Call instead.

### Link a channel to a monitor

Open the monitor, find **Notification Channels**, and click **Add channel**. In **Link a notification channel**, pick one of your channels. A monitor only alerts the channels linked to it. To unlink one, use **Unlink channel** next to it.

### Webhook payload

A webhook channel receives a `POST` with a JSON body. When you set a secret, it is sent in the `X-Webhook-Secret` header. Your endpoint should answer with a `2xx` status.

:::tabs
::tab{title="Down"}
```json
{
  "event": "triggered",
  "monitor_id": "mon_6f1c2e4a-0b7d-4d1e-9a52-2c8e7f3b1a90",
  "monitor_name": "Checkout API",
  "monitor_url": "https://api.example.com/health",
  "cause": "Expected status 200–299, got 503",
  "timestamp": "2026-10-09T14:30:00Z"
}
```
::tab{title="Recovered"}
```json
{
  "event": "resolved",
  "monitor_id": "mon_6f1c2e4a-0b7d-4d1e-9a52-2c8e7f3b1a90",
  "monitor_name": "Checkout API",
  "monitor_url": "https://api.example.com/health",
  "timestamp": "2026-10-09T14:42:10Z",
  "down_duration_seconds": 730
}
```
:::

SSL expiry warnings are also sent with `"event": "triggered"`, with the warning as the `cause`.

## Page your team through On-Call

To have a down monitor page whoever is on call, give it an escalation policy:

:::steps
### Edit the monitor
Open the monitor and click **Edit** (or set this when you create it).

### Pick an escalation policy
Under **Alerting**, choose an **Escalation Policy**. **None — do not alert on-call** turns paging off.

### Choose how often to re-alert
Set **Re-alert while still down**: every 5, 15, 30 or 60 minutes.
:::

When the monitor goes down, On-Call receives a high-severity alert titled `Monitor Down: <monitor name>`, with the failure reason as its description. On-Call then notifies people as the [escalation policy](https://docs.evohub.io/escalation-policies.md) says. Repeats for the same outage are grouped into the same alert, and the alert resolves on its own when the monitor recovers.

If you turned on **Also page on-call when slow**, a slow monitor raises a medium-severity alert titled `<monitor name> is slow`, which resolves when the monitor is no longer degraded.

Picking a policy needs permission to read On-Call escalation policies (`oncall:escalation:read`). Without it, the console explains that the monitor will not page anyone.

## Silence windows

A silence window mutes alerts for a while, for example during a deployment or planned maintenance. Monitors keep checking while silenced. There are three ways to silence alerts.

### Silence the whole organization

Use this to mute everything at once.

:::steps
### Open the silence menu
Click the bell icon, **Silence notifications**, in the top bar of the EvoHub console.

### Pick a duration
Under **Silence uptime & on-call**, choose **30 min**, **1 hour**, **4 hours** or **8 hours**.
:::

While the silence lasts, a banner reads "Notifications silenced — uptime & on-call alerts are muted", and the bell menu shows the time left. Uptime notification channels and On-Call paging are both muted for the whole organization. A silence always ends on its own; there is no open-ended option. To end it early, open the bell menu and click **Resume notifications**.

Silencing needs `uptime:silence:write`, which Owners, Admins and Members have. People without it do not see the bell.

### Silence during a maintenance window

When you schedule maintenance in **On-Call → Maintenance**, the **Schedule maintenance** form has two silencing options:

- **Silence on-call alerts for this window**: while the window is in progress, On-Call does not page anyone, and Uptime does not open incidents or send alerts for any monitor in your organization. With the option unticked, the window still shows as maintenance but silences nothing.
- **Silence uptime monitors (optional)**: pick monitors whose notification channels stay quiet between the window's start and end. These monitors show **Maintenance** in the **Monitors** list while muted.

See [Incidents and maintenance](https://docs.evohub.io/status-incidents-and-maintenance.md#schedule-maintenance) for publishing the same window on a status page.

### Silence through the API

You can also set silences with an [API key](https://docs.evohub.io/api-keys-and-scopes.md) that has the `uptime:silence:write` scope.

Mute Uptime's notification channels across the organization for a number of minutes:

```bash
curl -X PUT https://evohub.io/api/v1/silence \
  -H "X-API-Key: $EVOHUB_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"minutes": 60}'
```

`DELETE /api/v1/silence` lifts it, and `GET /api/v1/silence` returns `silenced_until`. This call mutes Uptime's notification channels only. The bell menu in the console also silences On-Call.

Mute one monitor's notification channels for a fixed window:

```bash
curl -X PUT https://evohub.io/api/v1/monitors/<monitor-id>/silence \
  -H "X-API-Key: $EVOHUB_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"starts_at": "2026-10-10T22:00:00Z", "ends_at": "2026-10-10T23:30:00Z"}'
```

`GET` on the same path returns the monitor's silence, and `DELETE` removes it.

## Related

- [Uptime monitoring](https://docs.evohub.io/uptime-overview.md)
- [Escalation policies](https://docs.evohub.io/escalation-policies.md)
- [Notifications in On-Call](https://docs.evohub.io/notifications.md)
- [Weekly email summary](https://docs.evohub.io/weekly-summary.md)
