Skip to main content
A webhook is a URL that your monitoring tool calls each time an alert fires, so Resolve sees the alert within seconds. You create one per tool, map the tool’s JSON fields to a title, severity, and service, and decide whether CloudThinker starts a root cause analysis (RCA) on its own.

How an alert flows

An alert that reaches the webhook doesn’t become an incident directly. It goes through Pulse first.
A raw event passes suppression, joins a cluster, and is classified; a cluster with an actionable signal goes to Resolve triage and becomes an incident.A raw event passes suppression, joins a cluster, and is classified; a cluster with an actionable signal goes to Resolve triage and becomes an incident.

Pulse drops noise and groups signals into clusters; only a cluster with an actionable signal reaches triage.

A signal is an event that survived noise suppression. A cluster is a group of related signals that Pulse treats as one problem. Only a cluster that holds an actionable signal goes to triage, which decides whether it becomes an incident. A webhook is one of three ways alerts reach Resolve. If your source is polled or arrives in a chat channel instead, see Connect alert sources.

Before you start

  • The workspace Admin role.
  • Admin access to the monitoring tool, so you can add a webhook to it.
  • One real alert payload you can trigger on demand, or a sample of its JSON.

Create the webhook

1

Open the platform

Go to Resolve → Integrations and select your tool, for example Datadog, Grafana, or PagerDuty.
2

Add a signal

Under Signals to Resolve, click Add signal (or Add another signal). The Create Webhook dialog opens with three steps.
3

Basic Info

Keep or change Webhook Name (it defaults to <Tool> Webhook) and add an optional Description. Click Next.
4

Configure

Check Field Mapping and Severity Mapping. Both come pre-filled for the tool you picked. Leave Send directly to CloudThinker off (why). Click Next.
5

Advanced

Pick an Auth Method and set Auto-investigate (both explained below). Click Create.
Success state: a dialog shows the Webhook URL, the Secret Key under Authentication Setup, and Integration Examples with cURL, JavaScript, Python, and Node.js tabs. Copy the URL and the Secret Key now: the key is shown only once. The same dialog shows a Setup Guide for your tool: follow it to paste them in. The cURL tab is the fastest way to send a test.
Copy the Secret Key before you click Done. If you lose it, go to Resolve → Integrations, open the tool, and under Signals to Resolve open the webhook row’s Manage menu (⋯) → Regenerate credentials. That replaces both the Webhook URL and the Secret Key, and the old pair stops working at once. Every tool using the webhook needs the new URL and key.

Map the fields

Each mapping field takes a path into the alert’s JSON. Only Title Path is required.
  • Use dotted keys, like event.data.title, and [n] for a list item, like alerts[0].labels.severity. A leading $. is accepted and dropped.
  • A path can have at most 8 segments. Keys that contain a dot can’t be addressed, and there are no fallback paths.
  • A path must end at a single text or number value. A path that ends at a list or object maps to nothing.
Your tool decides the payload shape. In Datadog, for example, you write the JSON yourself in the webhook’s Payload field, using Datadog’s template variables. The Datadog preset reads title, body, and alert_type. Add a service key with one service name, because the preset’s default Service Path (tags) points at a list and maps to nothing:
A fixed service value applies to every monitor that notifies this webhook. Datadog’s $ALERT_TYPE sends error, warning, info, or success, but the Datadog preset’s Severity Mapping covers alert, warn, ok, and no data. Under Severity Mapping, click Customize, then Add Mapping for each of these rows (change the levels to suit your team). You can also add them later from the webhook row’s Manage menu (⋯) → Edit. A success (recovery) event doesn’t close anything. It arrives as an ordinary signal, and the cluster still closes after 12 quiet hours or when a person resolves it. CloudThinker’s classifier treats a recovery or healthy state as not actionable, so its cluster doesn’t go to triage on its own. The check is a model judgment, so a recovery can still slip through. A person can always send a cluster to triage with Escalate. Severity Mapping translates the tool’s own words into CloudThinker’s five levels: critical, high, medium, low, and info. The generic preset maps warning to medium and error to high, for example. Matching ignores case and surrounding spaces, so ERROR and error hit the same row. If your tool isn’t listed, use Custom source instead. It captures one real payload and lets you click the fields to map.

Choose authentication

The dialog names the credential after the method you pick: Secret Key for Bearer Token, HMAC Secret for HMAC Signature, and API Secret for API Key. It’s the same credential, shown once either way.

Decide when RCA starts

Auto-investigate is on by default: this webhook’s actionable clusters go to triage, which opens an incident and investigates it. Turn it off and its alerts stay in Pulse until someone clicks Escalate and Send to triage. With Only from a minimum severity, pick a floor: Info and above, Low and above, Medium and above, High and above, or Critical only. Alerts below it still group with related alerts, but don’t start triage on their own. What starts an investigation shows how these options combine with On duty and manual starts.
Each automatic investigation is billed in credits. Set a minimum severity, or a Credit limit, before you connect a noisy tool.
Send directly to CloudThinker (on the Configure step, off by default) skips Pulse filtering and grouping. CloudThinker then judges each event on its own. Leave it off unless the tool already deduplicates its alerts.

Test the whole path

1

Fire one real alert

Trigger a representative alert from your tool, or send the request from the cURL tab in Integration Examples. With Bearer Token, a test looks like this:
A successful delivery returns 200 with a body that includes "success": true and a request_id. If you haven’t added the Datadog rows yet, error maps to medium.
2

Check Pulse

Open Resolve → Pulse and find the signal with the title you mapped.
3

Check the incident

On Resolve → Pulse, a cluster that went to triage moves to the Routed lane once it’s linked to an incident. Then open Resolve → Investigation. With Auto-investigate and On duty both on, the incident shows AI is handling. If the cluster never reaches Routed, classification may have judged it not actionable. See Clusters troubleshooting.
Success state: the signal appears in Pulse with the right title, severity, and service, and an eligible incident shows AI is handling. A 200 alone only proves delivery. Test one alert for each severity row you rely on. With the Datadog example above, send one error (maps to high) and one warning (maps to medium).

Limits and responses

Each webhook takes up to 1,000 deliveries an hour by default. Deliveries past that still get 200 with "success": true, because the limit is checked after the response, but they’re dropped silently. They never become signals and don’t count in Signals ingested on Pulse analytics. Resolve doesn’t show a dropped count, so the only sign is alerts missing from Resolve → Pulse during a burst.To avoid it:
  • Raise the limit: open the webhook row’s Manage menu (⋯) → Edit and change Rate limit (requests per hour). It goes up to 10,000, and 0 means no limit.
  • Split high-volume monitors across more than one webhook.
  • Deduplicate or group alerts in the tool before they’re sent.
Pulse treats a delivery as a duplicate when its source, resource, title, severity, and event time (to the minute; see Timestamp Path for where it comes from) match a signal from the last hour. A duplicate adds to that signal’s count instead of creating a new one. A cluster closes after 12 hours with no new signal, or when a person resolves it. See Cluster lifecycle.

Troubleshooting

Cause: the auth header doesn’t match the Auth Method, or (for a 401) the tool still sends to an old Webhook URL. Check: the URL, and the header name and secret in your tool against Authentication Setup. Fix: paste the secret again, or use Regenerate credentials in the webhook row’s Manage menu under Resolve → Integrations.
Cause: Pulse suppressed the alert as noise, counted it as a duplicate of an earlier signal, or the time window hides it. Check: widen the window on Resolve → Pulse, then hover the funnel at the top to see how many events were suppressed. If you sent the same alert twice within a minute, look for the earlier signal: its count went up instead (see Limits and responses). Fix: see Noise suppression for each check.
Cause: a path doesn’t match the payload, or the tool’s severity value has no mapping row. Fix: compare the paths against a real payload, then add the missing value to Severity Mapping.
Cause: Auto-investigate is off, the severity is below the floor, or On duty shows Paused. Fix: check all three against What starts an investigation, or click Escalate and Send to triage on the cluster. If an incident is already open, click Investigate on it.

Next steps

Connect CloudWatch

Send CloudWatch alarms through EventBridge.

Add a custom source

Connect a system with no preset by clicking its payload fields.

Understand Pulse

See how signals are filtered, grouped, and routed.

Manage integrations

Check readiness and turn on outcomes for each platform.