Appearance
Datadog
Datadog monitor webhooks POST custom JSON to Exhale. Each tenant gets a unique HTTPS URL token. Exhale scrubs the payload, upserts a Pulse (source=datadog), and runs triage when the alert transition maps to triggered / warn / similar.
Not the same as Context Datadog: Connections → Context → Datadog is API-key enrichment at triage time. Connections → Integrations → Datadog (this guide) creates Pulses from webhook deliveries only.
See Incoming integrations for how Datadog fits alongside PagerDuty, Grafana, and Manual webhook.
OpenAPI: POST /webhooks/datadog (header token) and POST /webhooks/datadog/{token}.
Endpoint
After Connect in Connections → Integrations → Observability & alerts → Datadog:
Preferred (keeps tokens out of proxy access logs):
POST https://exhale.kolstromsystems.com/webhooks/datadogSend header X-Exhale-Webhook-Token: {token}.
Path form (also supported):
POST https://exhale.kolstromsystems.com/webhooks/datadog/{token}Design partners may substitute https://exhale-staging.kolstromsystems.com as the host.
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 → Integrations → Datadog.
- Click Connect Datadog and copy the webhook URL.
- In Datadog, open Integrations → Webhooks, add a webhook, and paste the Exhale URL.
- Use a custom payload template with
alert_idandalert_transition(Datadog variables such as$ALERT_IDand$ALERT_TRANSITION). - Route monitors to that webhook.
- Send test alert creates a synthetic pulse and marks the integration configured.
Rotate webhook token invalidates the previous URL immediately — update Datadog after rotating.
Payload shape
| Field | Required | Notes |
|---|---|---|
alert_id | Yes (or monitor_id / alert_cycle_key) | Stable id for dedupe (source=datadog) |
alert_transition | No | Triggered, Recovered, Warn, … |
title / alert_title | No | Pulse title |
Lifecycle mapping
| Datadog transition | Pulse status |
|---|---|
| Triggered, Warn, No Data, Renotify, … | Received → triage |
| Recovered, Resolved, OK | Resolved |
Example
bash
TOKEN="your-url-token"
curl -i -X POST "https://exhale.kolstromsystems.com/webhooks/datadog/${TOKEN}" \
-H "Content-Type: application/json" \
-d '{"alert_id":"123","alert_transition":"Triggered","title":"High CPU"}'Related
Full detail (dedupe, env vars, security, Context vs ingest): Datadog webhooks in the repository wiki.