Recipe · Uptime Kuma

Uptime Kuma → WhatsApp, two fields, no plugin

Kuma's stock Webhook notification can already speak pingwa: a custom body and one header. Works on Uptime Kuma ≥ 1.23 (custom body shipped in 1.23; extra headers in 1.19). Text join to get a key first.

§ 1

The recipe

Settings → Notifications → Webhook:

Uptime Kuma → Notification setup
Post URL:        https://pingwa.dev/v1/notify
Request Body:    Custom Body
Body:            {"text": "{{ msg }}"}
Additional Headers:
                 {"Authorization": "Bearer pw_YOUR_KEY",
                  "Content-Type": "application/json"}

That's it. {{ msg }} is Kuma's own alert line ("[MyServer] [🔴 Down] …"). Hit Test and your phone buzzes. Want more detail? The template context also has {{ monitorJSON.name }} and {{ heartbeatJSON.status }} (Liquid syntax). Verified 2026-07-23 live against Uptime Kuma 1.23.17 (docker): message delivered end-to-end.

The Content-Type header is not optional: without it Kuma 1.x double-encodes the custom body and the API rejects it with a 422.

§ 2

Don't page yourself into the quota

The free plan carries 30 paid messages a month, and a monitor that flaps can eat that in an hour. Keep Resend Notification if Down X times at 0 (one ping per incident), set a sane Retries count before a monitor counts as down, and attach the notification only to monitors you'd get out of bed for. A 402 from pingwa tells you exactly what ran out; a 429 means slow down (60/min).

§ 3

Two-way, and the Apprise route

These alerts are one-way. When a script should act (restart the box, rollback, scale), switch the send to POST /v1/ask with buttons and approve from your phone. See the API docs. Kuma also ships an Apprise notification type. If you already run Apprise, use the pingwa Apprise recipe URL there instead.

§ 4

FAQ

Which Uptime Kuma version do I need?

Custom request body arrived in 1.23.0, additional headers in 1.19.0. Any 2.x works too. On older versions upgrade, or use the Apprise notification type with the Apprise recipe.

Why not a native Kuma provider?

The stock webhook already carries everything pingwa needs. A native provider would only save you pasting two fields. If you'd use one anyway, tell us and we'll weigh the PR.

Up AND down messages?

Kuma sends the webhook for both transitions; {{ msg }} carries the 🔴/✅ marker. Each is one message, so pick monitors accordingly.

QR code to join pingwa on WhatsApp

Scan the code and get instant access. It opens WhatsApp with “join” ready to send, and your API key comes straight back.

pingwa carries the ping over the official Meta Cloud API. Your own number stays out of it (why that matters). Alerts landing outside your 24h reply window are paid template sends; the free plan's 30/month covers a well-tended homelab.