Skip to content

Datadog

Navi.sh has a native Datadog integration that parses monitor alert webhook payloads directly — no template configuration needed.

POST/v1/events/datadog/{token}

Setup in Datadog

  1. In the Navi.sh dashboard, go to Integrations → Datadog and copy your integration URL.
  2. In Datadog, go to Integrations → Webhooks.
  3. Click New Webhook and fill in:
    • Name: navi-sh (or any name you like)
    • URL: the integration URL you copied above (format: https://api.navi.sh/v1/events/datadog/<token>).
  4. Leave the Payload field as the Datadog default — Navi.sh reads the native format.
  5. Click Save.
  6. In each monitor you want to route to Navi.sh, add the webhook as a notification channel: @webhook-navi-sh.

Auto-resolve

Incidents auto-resolve when Datadog sends a recovery webhook with:

  • alert_transition: "Recovered", or
  • alert_type: "success"

Navi.sh correlates trigger and recovery events using (in order of preference):

  1. alert_cycle_key
  2. aggregation_key
  3. alert_id
  4. id (fallback — datadog-<id>)

POST /v1/events/datadog/{token}

Accepts Datadog monitor alert webhook payloads. Configure this URL in Integrations → Webhooks within your Datadog account.

Incidents auto-resolve when alert_transition is "Recovered" or alert_type is "success". Deduplicates via alert_cycle_key, aggregation_key, alert_id, or id (in that order).

The token is generated in your navi.sh workspace under Integrations.

Payload schema

FieldTypeDescription
aggreg_keystringAlias used by Datadog's template variable naming. (example: cpu-web-01)
aggregation_keystringKey used to aggregate related events. (example: cpu-web-01)
alertCycleKeystringCamel-case alias for alert_cycle_key. (example: cycle-abc-123)
alertTransitionstring (Triggered, Recovered, No Data)Camel-case alias for alert_transition. (example: Triggered)
alert_cycle_keystringLinks trigger and recovery events in the same alert lifecycle. (example: cycle-abc-123)
alert_idstringDatadog alert ID. (example: 123456789)
alert_metricstringMetric name that triggered the alert. (example: system.cpu.user)
alert_querystringThe monitor query expression. (example: avg(last_5m):avg:system.cpu.user{host:web-01} > 90)
alert_scopestringComma-separated tag scope that triggered the condition. (example: host:web-01,env:prod)
alert_transitionstring (Triggered, Recovered, No Data)Lifecycle transition. Recovered or success signals auto-resolve. (example: Triggered)
alert_typestring (error, warning, success, info)Alert type. (example: error)
bodystringAlias used by some Datadog webhook templates. (example: CPU usage crossed 90% threshold on web-01)
dateintegerUnix epoch timestamp (seconds). (example: 1.7053122e+09)
event_textstringAlert message text. (example: CPU usage crossed 90% threshold on web-01)
event_titlestringMonitor alert title. (example: [Triggered] CPU usage > 90%)
event_typestringDatadog event type. (example: monitor_alert)
hostnamestringSource hostname. (example: web-01.us-east-1)
idintegerNumeric Datadog event ID. (example: 1.23456789e+08)
linkstringDirect link to the alert in Datadog. (example: https://app.datadoghq.com/monitors/123456789)
monitor_namestringName of the Datadog monitor. (example: CPU usage on web-01)
prioritystring (normal, low)Alert priority. (example: normal)
snapshotstringURL to a graph snapshot image of the alerting metric. (example: https://p.datadoghq.com/sb/abc-snapshot.png)
source_type_namestringDatadog source type name. (example: MONITOR_ALERT)
tagsarray of stringList of key:value tags attached to the alert. (example: [env:prod team:backend])
titlestringAlias used by some Datadog webhook templates. (example: [Triggered] CPU usage > 90%)

Examples

Monitor Triggered

json
{
  "alert_id": "12345678",
  "alert_transition": "Triggered",
  "alert_type": "error",
  "date": 1705312200,
  "event_text": "Error rate is above 5% for the last 10 minutes",
  "event_title": "High error rate on api service",
  "hostname": "api-01.prod",
  "id": 987654321,
  "monitor_name": "API Error Rate Monitor",
  "priority": "normal",
  "tags": [
    "env:production",
    "service:api"
  ]
}

Response codes

  • 202 — Accepted — processing is asynchronous
  • 400 — Invalid request body (malformed JSON or wrong content type)
  • 401 — Invalid service token
  • 500 — Unexpected server error

Built by the Navi.sh team.