Generic Webhook
Send alerts to AlertFlow from any tool that can make an HTTPS POST request.
Overview
The generic webhook integration accepts JSON payloads and maps them to AlertFlow's standard alert format using configurable field mappings. If your tool isn't natively supported, this is your starting point.
Ingest URL
POST https://app.yourdomain.com/api/inbound/webhook/<your-token>
Content-Type: application/json
Your token is unique per integration. Create an integration in the dashboard to get yours.
Standard payload format
If your tool can send custom JSON, use this format for zero-configuration ingestion:
{
"title": "High CPU usage on WEB-01",
"severity": "high",
"status": "firing",
"source": "custom-monitor",
"description": "CPU usage at 94% for 5 minutes",
"fingerprint": "web01-cpu-high",
"dedup_key": "web01-cpu",
"labels": {
"host": "WEB-01",
"client": "Acme Corp",
"region": "us-east-1",
"env": "production"
},
"annotations": {
"runbook": "https://wiki.example.com/runbooks/high-cpu",
"dashboard": "https://grafana.example.com/d/abc123"
}
}
Field reference
titlestringbodyrequiredHuman-readable alert title. Shown prominently in the dashboard and notifications.
severitystringbodyrequiredOne of: critical, high, medium, low, info. Case-insensitive.
statusstringbodyfiring (default), resolved, acknowledged, or suppressed. Send resolved to auto-resolve an existing alert by fingerprint.
sourcestringbodyThe originating system: nagios, custom-script, cloudwatch, etc.
descriptionstringbodyFull alert body / description. Displayed in the alert detail panel and included in email notifications.
fingerprintstringbodyExplicit deduplication key. Alerts with the same fingerprint and status firing are deduplicated. Omit to let AlertFlow auto-generate one from title + source.
dedup_keystringbodyAlternative to fingerprint. AlertFlow treats these as identical.
labelsobjectbodyKey-value metadata attached to the alert. Shown in the detail panel, available in workflow conditions. Common keys: host, client, region, env, service.
annotationsobjectbodyKey-value metadata, typically links — runbook, dashboard, ticket. Shown in the alert detail panel.
Custom field mappings
If you can't control the payload format, configure field mappings in the integration settings:
- Open the integration in the AlertFlow dashboard.
- Click Edit → Field Mappings.
- Map your payload's field paths to AlertFlow fields using dot-notation:
data.alert.name→title. - Set up a severity map to translate your tool's priority values to AlertFlow levels.
Example — mapping a Nagios-style payload:
{ "host_name": "WEB-01", "state": "CRITICAL", "output": "CPU CRITICAL 94%" }
| Source path | AlertFlow field | Notes |
|---|---|---|
output | title | Alert title |
state | severity | Via severity map |
host_name | labels.host | Available as a label |
Severity map:
| Source value | AlertFlow severity |
|---|---|
CRITICAL | critical |
WARNING | high |
UNKNOWN | medium |
OK | info |
Auto-resolve
AlertFlow can auto-resolve a firing alert when it receives a payload with status: "resolved" and a matching fingerprint or dedup_key:
curl -X POST https://app.yourdomain.com/api/inbound/webhook/YOUR_TOKEN \
-H "Content-Type: application/json" \
-d '{"fingerprint":"web01-cpu-high","status":"resolved","title":"High CPU on WEB-01"}'
Code examples
curl -X POST https://app.yourdomain.com/api/inbound/webhook/YOUR_TOKEN \
-H "Content-Type: application/json" \
-d '{
"title": "Disk space critical on DB-01",
"severity": "critical",
"source": "cron-monitor",
"labels": {"host": "DB-01", "client": "Contoso"}
}'
Response codes
| Code | Meaning |
|---|---|
200 | Alert received and queued |
202 | Alert accepted (async processing) |
400 | Malformed JSON or missing required fields |
401 | Invalid or disabled ingest token |
429 | Rate limit exceeded — retry after Retry-After seconds |