Skip to content

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 → IntegrationsObservability & alertsDatadog:

Preferred (keeps tokens out of proxy access logs):

POST https://exhale.kolstromsystems.com/webhooks/datadog

Send 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, and message.

Unknown tokens return 404. Disabled or expired-trial tenants return 403.


Customer setup

  1. Sign in as adminConnections → IntegrationsDatadog.
  2. Click Connect Datadog and copy the webhook URL.
  3. In Datadog, open Integrations → Webhooks, add a webhook, and paste the Exhale URL.
  4. Use a custom payload template with alert_id and alert_transition (Datadog variables such as $ALERT_ID and $ALERT_TRANSITION).
  5. Route monitors to that webhook.
  6. 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

FieldRequiredNotes
alert_idYes (or monitor_id / alert_cycle_key)Stable id for dedupe (source=datadog)
alert_transitionNoTriggered, Recovered, Warn, …
title / alert_titleNoPulse title

Lifecycle mapping

Datadog transitionPulse status
Triggered, Warn, No Data, Renotify, …Received → triage
Recovered, Resolved, OKResolved

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"}'

Full detail (dedupe, env vars, security, Context vs ingest): Datadog webhooks in the repository wiki.

Exhale by Kolstrom Systems LLC