LandfallDocs
Triggering integrations · Cortex XDR

Opening a war room from a Cortex XDR incident

This page is about opening incidents automatically the moment Cortex XDR's own outbound webhook fires. It is not about reading telemetry; if you want the investigation agent to query your Cortex XDR alerts/incidents once an incident already exists, see Connecting Cortex XDR instead. The two are independent, and most teams eventually set up both.

Cortex XDR
incident notification fires
Webhook, signed
X-XDR-HMAC-SHA256
Landfall
opens an incident

How it works

Unlike Datadog, Coralogix, CloudWatch, or Sentry — which all share one endpoint authenticated by a single bearer ingest token — Cortex XDR signs every webhook delivery it sends with an HMAC-SHA256 signature, using a secret configured in Cortex XDR's own notification settings. Landfall verifies that signature per organization, the same dedicated verification mode PagerDuty and GitHub's webhooks already use. This is a deliberate design choice, not an oversight: Cortex XDR's own incident objects carry a tags field, which would collide with Datadog's own detector on the shared endpoint if Cortex XDR were placed there — using its own signed, per-organization route avoids that collision structurally rather than by careful ordering.

What you'll need

  • An admin seat on your Landfall organization, to set the Cortex XDR webhook signing secret.
  • Admin access to Cortex XDR's own Settings → Configurations → Integrations → External Applications area.
  • A Cortex XDR connection already saved in Landfall (see Connecting Cortex XDR) — the same connection panel holds the webhook signing secret field.

1. Set a webhook signing secret

In Landfall, open Settings → Integrations → Cortex XDR and fill in the Webhook signing secret field with any secret value you choose (Cortex XDR does not generate one for you) — this is the same shared secret both sides will use to sign/verify deliveries, matching how PagerDuty's own webhook signing secret works.

2. Point Cortex XDR at Landfall

In Cortex XDR, add a new webhook-forwarding External Application pointed at your organization's own trigger URL:

Menu pathCortex XDR → Settings → Configurations → Integrations → External Applications → Add Application → Webhook
Webhook URLhttps://api.landfalls.ai/triggers/cortex-xdr/<your-org-slug>
Signing secretThe same value you pasted into Landfall's connection panel in step 1

Cortex XDR signs every delivery with X-XDR-HMAC-SHA256 — an HMAC-SHA256 of the exact request body, using the secret above. Landfall verifies this signature before ever looking at the body's shape; an unsigned or wrongly-signed delivery is refused with the same uniform 401 every other signed-webhook source in Landfall returns, with no hint about which organization it was addressed to.

What Cortex XDR's fields become

Cortex XDR fieldBecomes
incident_idThe attach identity — a repeat delivery for the same incident attaches rather than opening a duplicate.
name / incident_nameThe incident title. Falls back to "Cortex XDR incident <id>" if neither is present.
severitycritical → sev1, high → sev2, medium → sev3, everything else (low, informational, unstated) → sev4.
creation_timeThe incident's occurrence time (epoch milliseconds).
statusA resolved/closed-family status maps this delivery to a recovery rather than a fresh trigger.
alert_sourcesCarried as entity hints for the incident's provenance.
xdr_urlA click-through link back to the incident in Cortex XDR, when present.

Every field besides incident_id is optional in the mapping: a wrong field-presence assumption degrades to "field absent, hint not derived" rather than a rejected delivery.

3. Test it

Cortex XDR's own webhook-forwarding settings don't offer a built-in test-payload button, so the fastest check is signing and posting a realistic body yourself:

Terminal · Worked example
BODY='{
  "incident_id": "7",
  "creation_time": 1700000000000,
  "severity": "high",
  "status": "new",
  "description": "Suspicious PowerShell execution",
  "alert_count": 3,
  "alert_sources": ["XDR Agent"]
}'
SIGNATURE=$(printf '%s' "$BODY" | openssl dgst -sha256 -hmac "<your webhook signing secret>" | sed 's/^.* //')

curl -i -X POST https://api.landfalls.ai/triggers/cortex-xdr/<your-org-slug> \
  -H "X-XDR-HMAC-SHA256: $SIGNATURE" \
  -H "Content-Type: application/json" \
  -d "$BODY"

Opens an incident titled Cortex XDR incident 7 at sev2 (from high), category suggested security.

Troubleshooting

What you seeWhat it means
401The signature is missing, malformed, doesn't match the configured secret, or the organization slug in the URL is unrecognized — all return the identical uniform response, by design, so the endpoint cannot be used to enumerate which organizations exist.
422The signature verified, but the body carried neither incident_id nor creation_time — not a Cortex XDR incident-notification shape Landfall recognizes.
Signature always failsConfirm the secret pasted into Landfall's connection panel and the one configured in Cortex XDR's webhook settings are byte-for-byte identical, with no trailing whitespace.
A repeat notification opens a second incident instead of attachingShould not happen — the same incident_id always attaches. If it does, check whether Cortex XDR is sending a different incident_id for what looks like the same underlying detection.

Reference

EndpointPOST https://api.landfalls.ai/triggers/cortex-xdr/<org-slug>
AuthX-XDR-HMAC-SHA256: <hex digest> — an HMAC-SHA256 of the raw request body, keyed by your organization's Cortex XDR webhook signing secret; not the shared bearer ingest token
Set the secretSettings → Integrations → Cortex XDR → Webhook signing secret
CategoryEvery Cortex XDR-sourced incident is auto-suggested security
Each deliveryAttaches to the existing incident for the same incident_id, or opens a new one
Rejected payloads422 after a verified signature with no recognizable shape, no incident created; an unsigned or wrongly-signed request is a uniform 401