Signalarm

Uptime Kuma

Ring your iPhone when a monitor goes down. Uptime Kuma's webhook notification supports a custom body and additional headers, so it can call the API directly.

1. Add a notification

Settings, Notifications, Setup Notification. Choose Webhook as the notification type and fill in:

Setting Value
Friendly Name Signalarm
Post URL https://api.signalarm.app/v1/alarms
Request Body Custom Body

Custom Body (a Liquid template; Uptime Kuma 1.23 or later):

{% raw %}

{% case heartbeatJSON['status'] %}{% when 0 %}{% assign state = "down" %}{% when 1 %}{% assign state = "up" %}{% when 2 %}{% assign state = "pending" %}{% else %}{% assign state = "in maintenance" %}{% endcase %}
{
  "fire_in": 0,
  "title": {{ monitorJSON['name'] | append: " is " | append: state | json }}
}

{% endraw %}

Additional Headers:

{
  "Authorization": "Bearer <API_TOKEN>",
  "Content-Type": "application/json"
}

{% raw %}monitorJSON['name'] is the monitor name and heartbeatJSON['status'] is 0 for DOWN, 1 for UP, 2 for PENDING and 3 for MAINTENANCE, so the alarm title reads Website is down, Website is up, Website is pending or Website is in maintenance. The json filter JSON-encodes the title (including the quotes), so a monitor name containing a quote still produces a valid body. {{ msg | json }} holds Uptime Kuma's own message if you prefer the full text (the API rejects titles longer than 200 characters).{% endraw %}

2. Attach it to monitors

Enable the notification on the monitors that should wake you, or turn on Default enabled and Apply on all existing monitors on the notification.

3. Test

Press Test on the notification. Your iPhone should ring within a minute (the API's minimum lead time is 30 seconds).

UP events also ring

Uptime Kuma sends the same webhook for DOWN and UP and has no per-notification filter, so a recovery also rings, with the title ... is up. To ring only when a monitor goes down, route the webhook through a small relay (a Cloudflare Worker, or a Home Assistant webhook trigger that calls the Home Assistant recipe) that drops events whose heartbeat.status is not 0.

Reference: API reference