Appearance
Grafana
Grafana unified alerting Webhook contact points POST Alertmanager-shaped alert groups to Exhale. Each tenant gets a unique HTTPS URL token. Exhale scrubs the payload, upserts a Pulse (
source=grafana), and runs triage when status is firing / alerting.
This is ingest (creates Pulses). For dashboard and alert enrichment at triage time, see Grafana context.
See Sources for how Grafana fits with the other incoming webhooks.
On the hosted app, use the URL Connections copies. It starts with https://exhaleoncall.com/webhooks/. The customer host does not publish /v1/webhooks/....
Endpoint
After Connect in Connections → Sources → Observability & alerts → Grafana:
Preferred (keeps tokens out of proxy access logs):
POST https://exhaleoncall.com/webhooks/grafanaSend header X-Exhale-Webhook-Token: {token}.
Path form (also supported):
POST https://exhaleoncall.com/webhooks/grafana/{token}token— opaque URL segment; this token authenticates the delivery.- Response: 202 Accepted with
pulse_id,status,created, andmessage.
Unknown tokens return 404. Disabled or expired-trial tenants return 403.
Customer setup
- Sign in as admin → Connections → Sources → Grafana.
- Click Connect Grafana and copy the webhook URL.
- In Grafana, add a Webhook contact point and paste the
Exhale URL.
- Route alerts to that contact point via a notification policy.
- Send test alert creates a synthetic pulse and marks the integration configured.
See Grafana's official guide: Configure the webhook notifier for Alerting. See Grafana's official guide: Notification policies.
Rotate webhook token replaces the previous URL right away. Update Grafana after rotating.
Payload shape
| Field | Required | Notes |
|---|---|---|
groupKey | Yes | Stable id for dedupe (source=grafana) |
status | No | firing / alerting, resolved / ok |
title | No | Pulse title (else commonLabels.alertname) |
Lifecycle mapping
Grafana status | Pulse status |
|---|---|
firing, alerting | Received → triage |
resolved, ok | Resolved |
Example
bash
TOKEN="your-url-token"
curl -i -X POST "https://exhaleoncall.com/webhooks/grafana/${TOKEN}" \
-H "Content-Type: application/json" \
-d '{"status":"firing","groupKey":"demo-group","title":"High CPU"}'Related
See Errors & authentication for structured errors, 413 size limits, Redis delivery dedupe, and token rotation. Grafana has no vendor HMAC for these contact points — the Exhale URL token is the secret.