# Uptime alerts and silence windows

When a monitor goes down, EvoHub can tell you in two ways: through **notification channels** (Slack 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 Channels
In **Uptime**, select **Channels** and click **Add Channel**.

### Name it and pick a type
Enter a **Name**, for example `Engineering Slack`, and choose **Slack** or **Webhook**.

### Enter the destination
- **Slack**: paste a Slack incoming-webhook URL (it starts with `https://hooks.slack.com/`) into **Webhook URL**.
- **Webhook**: enter your endpoint's **Webhook URL**. 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 Channel**.
:::

To delete a channel, use the trash icon next to it on the **Channels** page.

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**. Pick one of your channels. A monitor only alerts the channels linked to it. To unlink one, use the remove icon 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-dev.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.
- **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-dev.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-dev.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-dev.evohub.io/uptime-overview.md)
- [Escalation policies](https://docs-dev.evohub.io/escalation-policies.md)
- [Notifications in On-Call](https://docs-dev.evohub.io/notifications.md)
- [Weekly email summary](https://docs-dev.evohub.io/weekly-summary.md)
