Prometheus Alertmanager
Send Prometheus Alertmanager notifications to Uptimeify Incident Management via a webhook receiver, mapped from commonLabels and the first alert.
Uptimeify's Alertmanager preset maps Alertmanager's webhook_config notification payload directly: the summary/alertname, severity label, status, and instance are pre-mapped.
1. Create the alert source in Uptimeify
Go to Incident Management → Alert Sources → New, pick the Prometheus Alertmanager preset, name it, and create it. On the success screen, copy the ingest URL (https://<your-domain>/api/im/ingest/<token>). It is shown once and never displayed again in cleartext. If you lose it, rotate the token from the source's Settings tab.
2. Add a webhook receiver in Alertmanager
Add a receiver to your alertmanager.yml pointing at the ingest URL:
receivers:
- name: uptimeify
webhook_configs:
- url: "https://<your-domain>/api/im/ingest/<token>"
send_resolved: truesend_resolved: true is required. Without it, Alertmanager never calls the webhook when an alert resolves, so incidents in Uptimeify would stay open forever even after the underlying problem clears.
3. Route alerts to the receiver
Reference the receiver from a route in the same file (either as the default route, or a nested route matching specific labels):
route:
receiver: uptimeify
# ...existing routing tree, or a nested `routes:` matcher instead of the defaultReload or restart Alertmanager to pick up the config change (amtool check-config first is a good sanity check).
Default field mapping
Alertmanager groups multiple firing alerts into one notification; the preset reads the title and instance from the first alert (alerts[0]) in that group, and severity from the group-level commonLabels:
| Alertmanager field | Normalized field |
|---|---|
alerts[0].annotations.summary (falls back to commonLabels.alertname) | Title |
commonLabels.severity | Severity (via the map below) |
status (top-level) | Status: resolved resolves the alert, anything else (typically firing) keeps it open |
alerts[0].labels.instance | Host |
alerts[0].fingerprint | Dedup key: Alertmanager's own stable per-alert identity |
Severity map
This only works if your alert rules set a severity label:
Alertmanager severity label | Uptimeify severity |
|---|---|
critical | sev1 |
warning | sev3 |
info | sev4 |
Any other value, or a missing severity label, falls back to the source's configured default severity. There is no sev2 mapping for Alertmanager, since its own severity convention is typically just critical/warning/info.
Sample payload
This is the shape of payload Uptimeify's Alertmanager preset expects:
{
"version": "4",
"groupKey": "{}:{alertname=\"InstanceDown\"}",
"truncatedAlerts": 0,
"status": "firing",
"receiver": "uptimeify-webhook",
"groupLabels": { "alertname": "InstanceDown" },
"commonLabels": { "alertname": "InstanceDown", "severity": "critical", "job": "node" },
"commonAnnotations": { "summary": "Instance 10.0.0.5:9100 down" },
"externalURL": "http://alertmanager.example.com:9093",
"alerts": [
{
"status": "firing",
"labels": { "alertname": "InstanceDown", "severity": "critical", "instance": "10.0.0.5:9100", "job": "node" },
"annotations": { "summary": "Instance 10.0.0.5:9100 down", "description": "10.0.0.5:9100 has been down for more than 5 minutes." },
"startsAt": "2026-07-17T12:00:00.000Z",
"endsAt": "0001-01-01T00:00:00Z",
"generatorURL": "http://prometheus.example.com:9090/graph?g0.expr=up%7Bjob%3D%22node%22%7D+%3D%3D+0",
"fingerprint": "5b6e6e8f7a1c9d3e"
}
]
}You can send this exact payload against your source's mapping from the Payload Mapping tab in the dashboard to verify the setup before reloading Alertmanager with the real receiver.
Grafana Alerting
Send Grafana Alerting notifications to Uptimeify Incident Management via a Webhook contact point, mapped from the alert group's first alert.
Sentry
Send Sentry issue alerts to Uptimeify Incident Management via an internal integration webhook, mapped from the event's level, message, and environment.