Datto RMM API v2

The Datto RMM REST API v2 gives programmatic access to the remote monitoring and management platform — devices, sites, site variables, alerts, jobs, audit data, filters, users, activity logs and account settings. It publishes an anonymous OpenAPI 3.1.0 document (61 paths, 65 operations, 123 schemas) at /api/v3/api-docs on each regional host, uses OAuth 2.0 access tokens issued at /auth/oauth/token, and enforces 600 read and 100 write requests per rolling 60 seconds.

OpenAPI Specification

kaseya-datto-rmm-openapi-original.json Raw ↑
{
  "openapi": "3.1.0",
  "info": {
    "title": "Datto RMM API",
    "description": "Datto RMM (Remote Monitoring and Management) REST API",
    "license": {
      "name": "\u00a9Datto, Inc. - All rights reserved. ",
      "url": "http://www.datto.com/"
    },
    "version": "2.0.0 (Build 235_0add0e4d537431f30405d568ccb46b6d7af1f183)"
  },
  "servers": [
    {
      "url": "https://syrah-api.centrastage.net/api",
      "description": "Generated server url"
    }
  ],
  "tags": [
    {
      "name": "/v2/site",
      "description": "Operations on sites"
    },
    {
      "name": "/v3/device",
      "description": "Operations on devices (v3 API)"
    },
    {
      "name": "/v2/audit",
      "description": "Operations on audit data"
    },
    {
      "name": "/v2/system",
      "description": "RMM API System operations"
    },
    {
      "name": "/v2/job",
      "description": "Operations on jobs"
    },
    {
      "name": "/v2/device",
      "description": "Operations on devices"
    },
    {
      "name": "/v3/account",
      "description": "Operations on accounts (v3 API)"
    },
    {
      "name": "/v2/account",
      "description": "Operations on accounts"
    },
    {
      "name": "/v2/activity-logs",
      "description": "Fetching RMM Activity Logs"
    },
    {
      "name": "/v2/filter",
      "description": "Operations on filters"
    },
    {
      "name": "/v2/alert",
      "description": "Operations on alerts"
    },
    {
      "name": "/v3/site",
      "description": "Operations on sites (v3 API)"
    },
    {
      "name": "/v2/user",
      "description": "Operations on users"
    }
  ],
  "paths": {
    "/v2/site": {
      "put": {
        "tags": [
          "/v2/site"
        ],
        "summary": "Creates a new site in the authenticated user's account.",
        "operationId": "create",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateSiteRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "500": {
            "description": "Internal Server Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "example": {
                  "timestamp": 1781181715656,
                  "status": 500,
                  "error": "Internal Server Error",
                  "path": "/v2/site"
                }
              }
            }
          },
          "409": {
            "description": "Conflict",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "example": {
                  "timestamp": 1781181715656,
                  "status": 409,
                  "error": "Conflict",
                  "path": "/v2/site"
                }
              }
            }
          },
          "400": {
            "description": "Request is invalid.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "example": {
                  "timestamp": 1781181715656,
                  "status": 400,
                  "error": "Bad Request",
                  "path": "/v2/site"
                }
              }
            }
          },
          "401": {
            "description": "Request can not be authorized.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "example": {
                  "timestamp": 1781181715656,
                  "status": 401,
                  "error": "Unauthorized",
                  "path": "/v2/site"
                }
              }
            }
          },
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "description": "Site data",
                  "properties": {
                    "id": {
                      "type": "integer",
                      "format": "int64"
                    },
                    "uid": {
                      "type": "string",
                      "description": "Unique alphanumeric UID of this site"
                    },
                    "accountUid": {
                      "type": "string",
                      "description": "Unique alphanumeric UID of the account to which this site belongs"
                    },
                    "name": {
                      "type": "string"
                    },
                    "description": {
                      "type": "string"
                    },
                    "notes": {
                      "type": "string"
                    },
                    "onDemand": {
                      "type": "boolean"
                    },
                    "splashtopAutoInstall": {
                      "type": "boolean"
                    },
                    "proxySettings": {
                      "$ref": "#/components/schemas/ProxySettings"
                    },
                    "devicesStatus": {
                      "$ref": "#/components/schemas/DevicesStatus"
                    },
                    "autotaskCompanyName": {
                      "type": "string"
                    },
                    "autotaskCompanyId": {
                      "type": "string"
                    },
                    "portalUrl": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v2/site/{siteUid}/variable": {
      "put": {
        "tags": [
          "/v2/site"
        ],
        "summary": "Creates a site variable in the site identified by the given site Uid.",
        "operationId": "createSiteVariable",
        "parameters": [
          {
            "name": "siteUid",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Variable Creation Request"
              }
            }
          },
          "required": true
        },
        "responses": {
          "500": {
            "description": "Internal Server Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "example": {
                  "timestamp": 1781181715656,
                  "status": 500,
                  "error": "Internal Server Error",
                  "path": "/v2/site/{siteUid}/variable"
                }
              }
            }
          },
          "409": {
            "description": "Request aborted due to concurrent write access to this record.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "example": {
                  "timestamp": 1781181715656,
                  "status": 409,
                  "error": "Conflict",
                  "path": "/v2/site/{siteUid}/variable"
                }
              }
            }
          },
          "403": {
            "description": "Authenticated user doesn't have access to this resource.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "example": {
                  "timestamp": 1781181715656,
                  "status": 403,
                  "error": "Forbidden",
                  "path": "/v2/site/{siteUid}/variable"
                }
              }
            }
          },
          "400": {
            "description": "Request parameters are invalid.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "example": {
                  "timestamp": 1781181715656,
                  "status": 400,
                  "error": "Bad Request",
                  "path": "/v2/site/{siteUid}/variable"
                }
              }
            }
          },
          "404": {
            "description": "Variable was not found.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "example": {
                  "timestamp": 1781181715656,
                  "status": 404,
                  "error": "Not Found",
                  "path": "/v2/site/{siteUid}/variable"
                }
              }
            }
          },
          "401": {
            "description": "Request can not be authorized.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "example": {
                  "timestamp": 1781181715656,
                  "status": 401,
                  "error": "Unauthorized",
                  "path": "/v2/site/{siteUid}/variable"
                }
              }
            }
          },
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/v2/device/{deviceUid}/site/{siteUid}": {
      "put": {
        "tags": [
          "/v2/device"
        ],
        "summary": "Moves a device from one site to another site.",
        "operationId": "moveDevice",
        "parameters": [
          {
            "name": "deviceUid",
            "in": "path",
            "description": "The UID of the device to move to a different site",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "siteUid",
            "in": "path",
            "description": "The UID of the target site",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "500": {
            "description": "Internal Server Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "example": {
                  "timestamp": 1781181715656,
                  "status": 500,
                  "error": "Internal Server Error",
                  "path": "/v2/device/{deviceUid}/site/{siteUid}"
                }
              }
            }
          },
          "409": {
            "description": "Request aborted due to concurrent write access to this record.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "example": {
                  "timestamp": 1781181715656,
                  "status": 409,
                  "error": "Conflict",
                  "path": "/v2/device/{deviceUid}/site/{siteUid}"
                }
              }
            }
          },
          "404": {
            "description": "Device and/or site not found.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "example": {
                  "timestamp": 1781181715656,
                  "status": 404,
                  "error": "Not Found",
                  "path": "/v2/device/{deviceUid}/site/{siteUid}"
                }
              }
            }
          },
          "403": {
            "description": "Authenticated user doesn't have access to this resource.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "example": {
                  "timestamp": 1781181715656,
                  "status": 403,
                  "error": "Forbidden",
                  "path": "/v2/device/{deviceUid}/site/{siteUid}"
                }
              }
            }
          },
          "401": {
            "description": "Request can not be authorized.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "example": {
                  "timestamp": 1781181715656,
                  "status": 401,
                  "error": "Unauthorized",
                  "path": "/v2/device/{deviceUid}/site/{siteUid}"
                }
              }
            }
          },
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/v2/device/{deviceUid}/quickjob": {
      "put": {
        "tags": [
          "/v2/device"
        ],
        "summary": "Creates a quick job on the device identified by the given device Uid.",
        "operationId": "createQuickJob",
        "parameters": [
          {
            "name": "deviceUid",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateQuickJobRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "500": {
            "description": "Internal Server Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "example": {
                  "timestamp": 1781181715656,
                  "status": 500,
                  "error": "Internal Server Error",
                  "path": "/v2/device/{deviceUid}/quickjob"
                }
              }
            }
          },
          "409": {
            "description": "Conflict",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "example": {
                  "timestamp": 1781181715656,
                  "status": 409,
                  "error": "Conflict",
                  "path": "/v2/device/{deviceUid}/quickjob"
                }
              }
            }
          },
          "404": {
            "description": "Device was not found.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "example": {
                  "timestamp": 1781181715656,
                  "status": 404,
                  "error": "Not Found",
                  "path": "/v2/device/{deviceUid}/quickjob"
                }
              }
            }
          },
          "403": {
            "description": "Authenticated user doesn't have access to this resource.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "example": {
                  "timestamp": 1781181715656,
                  "status": 403,
                  "error": "Forbidden",
                  "path": "/v2/device/{deviceUid}/quickjob"
                }
              }
            }
          },
          "400": {
            "description": "Request data is invalid.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "example": {
                  "timestamp": 1781181715656,
                  "status": 400,
                  "error": "Bad Request",
                  "path": "/v2/device/{deviceUid}/quickjob"
                }
              }
            }
          },
          "401": {
            "description": "Request cannot be authorized.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "example": {
                  "timestamp": 1781181715656,
                  "status": 401,
                  "error": "Unauthorized",
                  "path": "/v2/device/{deviceUid}/quickjob"
                }
              }
            }
          },
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "description": "Create Quick Job Response",
                  "properties": {
                    "jobComponents": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/JobComponent"
                      }
                    },
                    "job": {
                      "$ref": "#/components/schemas/Job"
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v2/account/variable": {
      "put": {
        "tags": [
          "/v2/account"
        ],
        "summary": "Creates an account variable",
        "operationId": "createAccountVariable",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Variable Creation Request"
              }
            }
          },
          "required": true
        },
        "responses": {
          "500": {
            "description": "Internal Server Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "example": {
                  "timestamp": 1781181715656,
                  "status": 500,
                  "error": "Internal Server Error",
                  "path": "/v2/account/variable"
                }
              }
            }
          },
          "409": {
            "description": "Request aborted due to concurrent write access to this record.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "example": {
                  "timestamp": 1781181715656,
                  "status": 409,
                  "error": "Conflict",
                  "path": "/v2/account/variable"
                }
              }
            }
          },
          "403": {
            "description": "Authenticated user doesn't have access to this resource.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "example": {
                  "timestamp": 1781181715656,
                  "status": 403,
                  "error": "Forbidden",
                  "path": "/v2/account/variable"
                }
              }
            }
          },
          "400": {
            "description": "Request parameters are invalid.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "example": {
                  "timestamp": 1781181715656,
                  "status": 400,
                  "error": "Bad Request",
                  "path": "/v2/account/variable"
                }
              }
            }
          },
          "404": {
            "description": "Variable was not found.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "example": {
                  "timestamp": 1781181715656,
                  "status": 404,
                  "error": "Not Found",
                  "path": "/v2/account/variable"
                }
              }
            }
          },
          "401": {
            "description": "Request can not be authorized.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "example": {
                  "timestamp": 1781181715656,
                  "status": 401,
                  "error": "Unauthorized",
                  "path": "/v2/account/variable"
                }
              }
            }
          },
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/v3/device/{deviceUid}/udf": {
      "post": {
        "tags": [
          "/v3/device"
        ],
        "summary": "Sets the user defined fields of a device identified by the given device Uid.",
        "description": "V3 enforces strict type validation: each UDF must match its configured type (STRING/BOOLEAN/NUMBER/DATE). Type mismatches are rejected. Set value to null to delete a UDF.",
        "operationId": "setUdfFields",
        "parameters": [
          {
            "name": "deviceUid",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SetUserDefinedFieldsRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "500": {
            "description": "Internal Server Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "example": {
                  "timestamp": 1781181715656,
                  "status": 500,
                  "error": "Internal Server Error",
                  "path": "/v3/device/{deviceUid}/udf"
                }
              }
            }
          },
          "409": {
            "description": "Request aborted due to concurrent write access to this record.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "example": {
                  "timestamp": 1781181715656,
                  "status": 409,
                  "error": "Conflict",
                  "path": "/v3/device/{deviceUid}/udf"
                }
              }
            }
          },
          "404": {
            "description": "Device was not found.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "example": {
                  "timestamp": 1781181715656,
                  "status": 404,
                  "error": "Not Found",
                  "path": "/v3/device/{deviceUid}/udf"
                }
              }
            }
          },
          "403": {
            "description": "Authenticated user doesn't have access to this resource.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "example": {
                  "timestamp": 1781181715656,
                  "status": 403,
                  "error": "Forbidden",
                  "path": "/v3/device/{deviceUid}/udf"
                }
              }
            }
          },
          "400": {
            "description": "Request is invalid.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "example": {
                  "timestamp": 1781181715656,
                  "status": 400,
                  "error": "Bad Request",
                  "path": "/v3/device/{deviceUid}/udf"
                }
              }
            }
          },
          "401": {
            "description": "Request can not be authorized.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "example": {
                  "timestamp": 1781181715656,
                  "status": 401,
                  "error": "Unauthorized",
                  "path": "/v3/device/{deviceUid}/udf"
                }
              }
            }
          },
          "200": {
            "description": "OK"
          }
        },
        "deprecated": true
      }
    },
    "/v2/user/resetApiKeys": {
      "post": {
        "tags": [
          "/v2/user"
        ],
        "summary": "Resets the authenticated user's API access and secret keys.",
        "operationId": "resetApiKeys",
        "responses": {
          "500": {
            "description": "Internal Server Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "example": {
                  "timestamp": 1781181715656,
                  "status": 500,
                  "error": "Internal Server Error",
                  "path": "/v2/user/resetApiKeys"
                }
              }
            }
          },
          "409": {
            "description": "Request aborted due to concurrent write access to this record.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "example": {
                  "timestamp": 1781181715656,
                  "status": 409,
                  "error": "Conflict",
                  "path": "/v2/user/resetApiKeys"
                }
              }
            }
          },
          "401": {
            "description": "Request can not be authorized.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "example": {
                  "timestamp": 1781181715656,
                  "status": 401,
                  "error": "Unauthorized",
                  "path": "/v2/user/resetApiKeys"
                }
              }
            }
          },
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "description": "Authentication user keys",
                  "properties": {
                    "apiAccessKey": {
                      "type": "string"
                    },
                    "apiSecretKey": {
                      "type": "string"
                    },
                    "userName": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v2/site/{siteUid}": {
      "get": {
        "tags": [
          "/v2/site"
        ],
        "summary": "Fetches data of the site (including total number of devices) identified by the given site Uid.",
        "operationId": "getSite",
        "parameters": [
          {
            "name": "siteUid",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "500": {
            "description": "Internal Server Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "example": {
                  "timestamp": 1781181715656,
                  "status": 500,
                  "error": "Internal Server Error",
                  "path": "/v2/site/{siteUid}"
                }
              }
            }
          },
          "409": {
            "description": "Conflict",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "example": {
                  "timestamp": 1781181715656,
                  "status": 409,
                  "error": "Conflict",
                  "path": "/v2/site/{siteUid}"
                }
              }
            }
          },
          "404": {
            "description": "Site was not found.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "example": {
                  "timestamp": 1781181715656,
                  "status": 404,
                  "error": "Not Found",
                  "path": "/v2/site/{siteUid}"
                }
              }
            }
          },
          "403": {
            "description": "Authenticated user doesn't have access to this resource.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "example": {
                  "timestamp": 1781181715656,
                  "status": 403,
                  "error": "Forbidden",
                  "path": "/v2/site/{siteUid}"
                }
              }
            }
          },
          "401": {
            "description": "Request can not be authorized.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "example": {
                  "timestamp": 1781181715656,
                  "status": 401,
                  "error": "Unauthorized",
                  "path": "/v2/site/{siteUid}"
                }
              }
            }
          },
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "description": "Site data",
                  "properties": {
                    "id": {
                      "type": "integer",
                      "format": "int64"
                    },
                    "uid": {
                      "type": "string",
                      "description": "Unique alphanumeric UID of this site"
                    },
                    "accountUid": {
                      "type": "string",
                      "description": "Unique alphanumeric UID of the account to which this site belongs"
                    },
                    "name": {
                      "type": "string"
                    },
                    "description": {
                      "type": "string"
                    },
                    "notes": {
                      "type": "string"
                    },
                    "onDemand": {
                      "type": "boolean"
                    },
                    "splashtopAutoInstall": {
                      "type": "boolean"
                    },
                    "proxySettings": {
                      "$ref": "#/components/schemas/ProxySettings"
                    },
                    "devicesStatus": {
             

# --- truncated at 32 KB (371 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/kaseya/refs/heads/main/openapi/kaseya-datto-rmm-openapi-original.json