Webhook Destination Configuration

Configure Xyte's outbound webhook for a specific destination service — Rootly and SolarWinds.

Configure Xyte's outbound webhook for a specific destination service.

👉 Pick your service: use the Rootly / SolarWinds tabs below.

Rootly receives Xyte incidents through its Generic Webhook alert source. Xyte pushes each incident create, update and close to a URL Rootly generates for you.


Part 1 — Create the alert source in Rootly

  1. In Rootly, go to Alerts → Sources.
  2. Click + New Source and choose Generic Webhook.
  3. Give the source a name (for example, Xyte) and pick an Owning Team.
  4. Open Connection Instructions on the source. Rootly shows:
    • the URL to post to — https://webhooks.rootly.com/webhooks/incoming/generic_webhooks
    • an Authorization Header — Scheme (Bearer) and Credentials (your secret)
  5. Choose how alerts are routed: In-App Routing (route inside Rootly) or Direct Routing (encode the target in the URL).
Rootly's Connection Instructions dialog showing the webhook URL, the Bearer scheme and the credentials, with the secret redacted

Part 2 — Configure the webhook in Xyte

In the Xyte organization portal go to Connections → Integrations → Webhooks, then:

FieldValue
Create / Update / Close incident URLhttps://webhooks.rootly.com/webhooks/incoming/generic_webhooks?secret=<your_secret>
Add custom header to requestsChecked
Custom Header — Field nameContent-Type
Custom Header — Field valueapplication/json

Pass the secret as a query string parameter at the end of the URL, not as a header.

The Xyte Webhooks integration form with the Rootly URL in all three fields, a Content-Type custom header, and status Active
📘

Why the query string, when Rootly recommends a Bearer header?

Xyte sends only one custom header, and it is needed for Content-Type: application/json.
There is no second header available for Authorization, so use the ?secret= form, which Rootly supports for exactly this case.

Supported endpoint formats

FormatURL
Base endpointhttps://webhooks.rootly.com/webhooks/incoming/generic_webhooks
Fixed target endpointhttps://webhooks.rootly.com/webhooks/incoming/generic_webhooks/notify/<type>/<id>

Both formats support the ?secret=<value> query parameter for authentication.

Common misconfiguration

Do not use the custom header to pass the secret. Use the custom header only for Content-Type: application/json. If the secret is sent in an unsupported format, the webhook shows an Error status and delivery fails.

Field nameField value
IncorrectBearer<secret>
IncorrectAuthorizationBearer <secret>
CorrectContent-Typeapplication/json

Part 3 — Map the payload fields in Rootly

⚠️

Do not skip this step. Without it every Xyte incident appears in Rootly as an alert literally titled "Alert", with an empty description — even though the correct title is present in the payload Rootly received.

A Rootly alert shown as Alert, with the Xyte payload below it containing title Edge offline

Rootly does not guess which JSON key is the title. On the alert source, open the Fields tab. It contains three default fields — Title, Description and Source Link — which are empty until you fill them in, using liquid variables to read from the Xyte payload:

Rootly fieldValueResult
Title{{ alert.data.title }}Edge offline instead of Alert
Description{{ alert.data.description }}The incident description
Source Linkyour Xyte incident URLClick-through back to Xyte
The Rootly Fields tab with empty Title, Description and Source Link and the liquid placeholder

You can confirm the mapping on the same screen: pick any received alert, then switch between the Payload and Alert Fields panels to see the raw JSON next to the fields Rootly derived from it.


Part 4 — Deduplicate and auto-resolve

By default each Xyte create, update and close becomes a separate alert in Rootly, and closing an incident in Xyte does not resolve anything. The alert source's Events tab fixes both:

  1. Unique Identifier — set to $.short_id. This is the Xyte incident number (INC-E6Q9D), identical across that incident's create, update and close.
  2. Combine duplicate alerts into one alert — on. Updates fold into the original alert instead of stacking.
  3. Auto-Resolve alerts — on. Then add a Resolution Condition matching the close event, for example $.change equals close (or $.status equals closed).

With those set, one Xyte incident produces one Rootly alert that resolves itself when the incident closes in Xyte.


Part 5 — Verify

Click Test create, Test update and Test close in Xyte — each should report Test connection successful. Then open Alerts in Rootly and confirm new alerts appear against the source, carrying the mapped title.


What Xyte sends

A real incident as received by Rootly:

{
  "id": "5cd69a13-0373-47a0-05c9-f77a4025d7cf",
  "title": "Edge offline",
  "change": "close",
  "device": "MAC Agent",
  "status": "closed",
  "issue": "rule_8dc02e2-3e20-4e60-bfc7-13472379369c",
  "location": "Overview/New-Jersey",
  "priority": 1,
  "short_id": "INC-N633D",
  "space_id": "",
  "created_at": "2026-05-07T03:22:16.889Z",
  "updated_at": "2026-05-07T01:48:25.820Z"
}

change is create, update or close. The body is fixed — fields cannot be renamed on the Xyte side, which is why the mapping in Part 3 happens in Rootly.

Additional resources


Did this page help you?