# Uptime Kuma

> Add phone-call escalation to self-hosted Uptime Kuma with Edesy OnCall. Set up a Webhook notification with the application/json preset; down events call your team, up events resolve the incident.

Source: https://edesy.in/docs/oncall/ingest/uptime-kuma

If you already run Uptime Kuma, keep it for checks and add Edesy OnCall for the part Kuma doesn't do: **phone calls that escalate until someone presses 1**.

## 1. Create an alert webhook monitor

In OnCall, go to **Monitors → New**, choose **Alert webhook** and pick an escalation policy. Copy the URL from the monitor page:

```
https://oncall.edesy.in/ingest/<token>
```

## 2. Add a Webhook notification in Kuma

In Uptime Kuma: **Settings → Notifications → Setup Notification**.

```
Notification Type: Webhook
Post URL:          https://oncall.edesy.in/ingest/<token>
Request Body:      Preset - application/json
```

Save it, then enable the notification on each Kuma monitor you want to page for (or tick "Default enabled" and "Apply on all existing monitors").

## How Kuma events are mapped

OnCall recognises Kuma's payload automatically (a body with `heartbeat` or `monitor`).

| OnCall field | Taken from |
|---|---|
| Down or up | `heartbeat.status`: `0` is down, `1` is up |
| Dedup key | The Kuma monitor's ID, so each Kuma monitor gets its own incident |
| Title (read on the call) | `monitor.name` |
| Message | `heartbeat.msg` |

A down event opens an incident and runs your escalation policy. The next up event for the same Kuma monitor resolves it.

Kuma's **Test** button sends a message without a heartbeat. OnCall accepts it and does nothing, so testing never calls anyone. Use **Test** on a contact in OnCall to hear a real alert call.

Add `?format=uptimekuma` to the URL to force the parser.

## Responses and limits

A good delivery returns `202` with `{"data":{"accepted":1}}`. Bad JSON returns `400 invalid_payload`, an unknown URL `404`. Up to 120 requests a minute per IP.

## FAQ

**Why not just use Kuma's own notifications?**
Kuma can notify many apps, but OnCall adds phone calls in English or Hindi, press 1 to acknowledge, and escalation to the next person when nobody answers.

**Does my Kuma server need to be public?**
No. Kuma sends outgoing requests to OnCall; nothing needs to reach your server.

**One OnCall monitor or many?**
One alert webhook monitor can take all your Kuma monitors; each Kuma monitor becomes its own incident. Create separate OnCall monitors if different teams should be paged.

See also: [Generic JSON](https://edesy.in/docs/oncall/ingest/generic-json) and the [Uptime Kuma phone call alerts](https://edesy.in/uptime-monitoring-phone-call-alerts/integrations/uptime-kuma-phone-call-alerts) page.
