> ## Documentation Index
> Fetch the complete documentation index at: https://docs.flashduty.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Datto RMM alert integration

> Send Datto RMM device alert and auto-resolve events to Flashduty On-call through a webhook.

Use a Datto RMM webhook to send device alerts to Flashduty On-call. Each Datto RMM alert maps to one Flashduty alert. When an alert resolves automatically, Datto RMM's "alert resolved" request closes the same Flashduty alert.

Datto RMM sends a request body that you write yourself, so paste the JSON templates below into Datto RMM.

<div className="hide">
  ## In Flashduty On-call

  ***

  Create either a dedicated or shared **Datto RMM** alert integration and copy its complete Push URL.
</div>

## Configure Datto RMM

***

You can configure the webhook on a single monitor's response settings or globally. **Turning on Global Webhooks automatically disables the webhooks set on individual monitors**, so use one or the other.

<Steps>
  <Step title="Set the URL and format">
    * Global: go to **Setup → Integrations → Global Webhooks**, click **Turn On**, and select the alert priorities that should send webhooks
    * Single monitor: add a webhook in the monitor's response settings

    Paste the complete Flashduty Push URL into **URL** (500 characters at most) and select **application/json** as the **Content Type**.
  </Step>

  <Step title="Set the alert-raised payload">
    Paste this into the **When alert is raised** payload:

    ```json theme={null}
    {
      "event": "triggered",
      "alert_uid": "[alert_uid]",
      "alert_type": "[alert_type]",
      "alert_category": "[alert_category]",
      "alert": "[alert]",
      "alert_message": "[alert_message_en]",
      "device_uid": "[device_uid]",
      "device_hostname": "[device_hostname]",
      "device_os": "[device_os]",
      "device_ip": "[device_ip]",
      "site_name": "[sitename]",
      "platform": "[platform]",
      "severity": "Critical"
    }
    ```

    `severity` is an optional fixed value because Datto RMM has no priority variable. Global Webhooks can use a different value per priority. Without it the alert is Warning. Accepted values are `Critical`, `High`, `Moderate`, `Low`, and `Information`.
  </Step>

  <Step title="Set the alert-resolved payload">
    Turn on **When alert is resolved (optional)** and use the same payload with `event` set to `resolved`; `severity` can be omitted:

    ```json theme={null}
    {
      "event": "resolved",
      "alert_uid": "[alert_uid]",
      "alert_type": "[alert_type]",
      "alert_category": "[alert_category]",
      "alert": "[alert]",
      "alert_message": "[alert_message_en]",
      "device_uid": "[device_uid]",
      "device_hostname": "[device_hostname]",
      "device_os": "[device_os]",
      "device_ip": "[device_ip]",
      "site_name": "[sitename]",
      "platform": "[platform]"
    }
    ```

    <Warning>
      Keep `event` and `alert_uid`. Flashduty rejects a request without `alert_uid` because it could not match the later recovery, and `event` must be `triggered` or `resolved`. Datto RMM substitutes variables inside JSON strings, so a double quote in an alert message can break the JSON. If that happens, remove `alert_message` and `alert`.
    </Warning>
  </Step>

  <Step title="Test and verify">
    Click **Test Webhook** (**Test Alert Webhook** for global webhooks) to confirm Datto RMM can send. When both payloads are set, they are sent together. The test uses your template, so Flashduty cannot tell it apart from a real alert and creates a normal alert; close it by hand afterwards. Then let a real alert fire and resolve and confirm the Flashduty alert closes.
  </Step>
</Steps>

## Alert Key

***

Flashduty uses `alert_uid` (the Datto RMM variable `[alert_uid]`, documented as "The alert ID") as the Alert Key. The alert-raised and alert-resolved payloads use the same variable, so they refer to the same alert. Changes to device, site, alert type, message, or severity do not change the Alert Key.

## Status and severity

***

| `event` | Flashduty status |
| :- | :- |
| `triggered` | Triggered; severity comes from `severity` |
| `resolved` | Recovered |

| `severity` | Flashduty severity |
| :- | :- |
| `Critical` | Critical |
| `High`, `Moderate` | Warning |
| `Low`, `Information` | Info |
| Empty or other | Warning |

## About recovery

***

Datto RMM sends the resolved payload only when an alert resolves **automatically**; resolving an alert manually in the console sends nothing. Turn on [auto-close after timeout](/en/on-call/channel/create-edit) in the channel that receives these alerts, with a suggested duration of 24 hours, so manually resolved alerts do not stay open.

## Troubleshooting

***

* **Flashduty returns an invalid-parameter error**: Check that the payload is valid JSON, `alert_uid` is not empty, and `event` is `triggered` or `resolved`
* **The alert does not recover**: Check that **When alert is resolved (optional)** is on and uses the `resolved` template; manually resolved alerts send no recovery
* **A monitor's own webhook stopped sending**: Global Webhooks is on, which disables webhooks set on individual monitors
* **Payload too large**: Datto RMM limits a payload to 64 KB, so shorten the template
