1. Fire an Alert

route:
receiver: "handler"
receivers:
- name: "handler"
webhook_configs:
- url: "https://api.gethandler.app/api/v1/alertmanager?token=YOUR_CHANNEL_TOKEN&user=YOUR_USER_KEY"
send_resolved: trueReliable push notifications for on-call engineers. Delivered over APNs and FCM with native Alertmanager support.
Free forever with ten minutes to get running. No credit card required.

We built a universal way to open and close incidents, inspired by Alertmanager, but not tied to it. Any system that can POST a webhook can fire and resolve the same way. See the examples below.

route:
receiver: "handler"
receivers:
- name: "handler"
webhook_configs:
- url: "https://api.gethandler.app/api/v1/alertmanager?token=YOUR_CHANNEL_TOKEN&user=YOUR_USER_KEY"
send_resolved: true
route:
receiver: "handler"
receivers:
- name: "handler"
webhook_configs:
- url: "https://api.gethandler.app/api/v1/alertmanager?token=YOUR_CHANNEL_TOKEN&user=YOUR_USER_KEY"
send_resolved: true
curl -sS -X POST \
"https://api.gethandler.app/api/v1/universal?token=YOUR_CHANNEL_TOKEN&user=YOUR_USER_KEY" \
-H "Content-Type: application/json" \
-d ''
curl -sS -X POST \
"https://api.gethandler.app/api/v1/universal?token=YOUR_CHANNEL_TOKEN&user=YOUR_USER_KEY" \
-H "Content-Type: application/json" \
-d ''
curl -sS -X POST \
"https://api.gethandler.app/api/v1/universal?token=YOUR_CHANNEL_TOKEN&user=YOUR_USER_KEY" \
-H "Content-Type: application/json" \
-d ''
curl -sS -X POST \
"https://api.gethandler.app/api/v1/universal?token=${{ secrets.HANDLER_TOKEN }}&user=${{ secrets.HANDLER_USER }}" \
-H "Content-Type: application/json" \
-d ''
curl -sS -X POST \
"https://api.gethandler.app/api/v1/universal?token=${{ secrets.HANDLER_TOKEN }}&user=${{ secrets.HANDLER_USER }}" \
-H "Content-Type: application/json" \
-d ''
curl -sS -X POST \
"https://api.gethandler.app/api/v1/universal?token=${{ secrets.HANDLER_TOKEN }}&user=${{ secrets.HANDLER_USER }}" \
-H "Content-Type: application/json" \
-d ''
# Jenkinsfile, sh """ ... """
curl -sS -X POST \
"https://api.gethandler.app/api/v1/universal?token=${HANDLER_TOKEN}&user=${HANDLER_USER}" \
-H "Content-Type: application/json" \
-d ''
curl -sS -X POST \
"https://api.gethandler.app/api/v1/universal?token=${HANDLER_TOKEN}&user=${HANDLER_USER}" \
-H "Content-Type: application/json" \
-d ''
# Jenkinsfile, sh """ ... """
curl -sS -X POST \
"https://api.gethandler.app/api/v1/universal?token=${HANDLER_TOKEN}&user=${HANDLER_USER}" \
-H "Content-Type: application/json" \
-d ''Features
We do not like landings that hide what the product really looks like. Let the screens below show Handler in full, so you can decide if it is for you.


Reliable Push Notifications
APNs and FCM with the app closed. Title, body, and priority on the lock screen.

Emergency
Priority 2. Retries until you acknowledge.

Global Mute & Alert Snooze
Mute everything for 5 minutes to several hours when you need a break.

Inbox
Every firing and resolved alert in one searchable stream.

Alert details with history
Labels, timeline, and push/ack history for every incident.

Quiet Hours
Scheduled silence for sounds. Alerts still hit Inbox; critical can override.

Live updates
Live app updates and cross-device sync. No pull to refresh.

Configurable sounds
Different tones for emergency, firing, and resolved.
Comparison
Where Handler differs from the channels most teams already use for alerts.
| Capability | Handler | Slack | SMS | |
|---|---|---|---|---|
| Push via APNs & FCM | — | |||
| Emergency retry until ACK | — | — | — | |
| Native Alertmanager fire & resolve | — | — | — | |
| Inbox | ||||
| Active Alerts | — | — | — | |
| Alert detail with full history | — | — | — | |
| Rich notifications | — | — | — | |
| Customizable sounds & settings | — | — | — | |
| Customizable Quiet Hours | — | — | — | |
| Live / cross-device sync | — |
Handler exists so important alerts can cut through everyday notification noise. Slack and Discord webhooks don't have that punch for on-call.
I built Handler from my own DevOps and homelab needs: easy to send, hard to miss on the phone.