Skip to content
Back to skills

Devices

ASecurity

Datto RMM device management: identifiers (UID, hostname, MAC), device types and statuses, user-defined fields (UDF1-30), warranty data, and device lookup/update/delete operations.

  • 48 stars
  • 0 votes
  • 0 copies
  • 0 views
  • Added October 2, 2026
ai-agentsjavascriptgojavaapisecuritydocumentation

Works with

  • cli
  • api

Security analysis

A100/100

Pro scans all 5 files and shows the line behind each finding

Scanned October 2, 2026

npx -y skills add wyre-technology/msp-claude-plugins --skill devices --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Devices?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Devices
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/wyre-technology-devices-b3ba8f97/badge)](https://www.skillsdirectory.com/skills/wyre-technology-devices-b3ba8f97)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: "Datto RMM Devices"
description: >
  Datto RMM device management: identifiers (UID, hostname, MAC), device
  types and statuses, user-defined fields (UDF1-30), warranty data, and
  device lookup/update/delete operations.
when_to_use: >-
  When listing, searching, managing, and monitoring endpoints. Use when: datto device, rmm device,
  device status, device lookup, managed device, device hostname, device online, device offline,
  endpoint management, or device udf.
---

# Datto RMM Device Management

## Overview

Devices are the core managed entities in Datto RMM. Each device represents an endpoint with the Datto agent installed - workstations, servers, ESXi hosts, or network devices. This skill covers device identification, status monitoring, user-defined fields, and common device operations.

## Anti-triggers

- **The billable or contracted record for the same machine** — use
  `autotask-configuration-items`.
- **The documentation record for the same machine** — use
  `itglue-configurations`.
- **Hardware specs or installed software** — those come from the
  periodic audit, not the device record; use `datto-rmm-audit`.
- **A security sensor rather than the RMM agent** — an endpoint
  commonly runs both; use `rocketcyber-agents`.
- **The same endpoint under a different RMM** — "device" means the
  managed endpoint in most of them, so the wording never disambiguates;
  confirm which agent is enrolled, then use `ncentral-devices`,
  `ninjaone-devices`, or `atera-agents` (Atera reserves
  "device" for agentless monitors).

## Key Concepts

### Device Identifiers

Every device has multiple identifiers:

| Identifier | Type | Description | Example |
|------------|------|-------------|---------|
| `deviceUid` | string | Globally unique identifier | `d4e5f6a7-b8c9-0d1e-2f3a-4b5c6d7e8f9a` |
| `deviceId` | integer | Legacy numeric ID | `123456` |
| `hostname` | string | Computer name | `ACME-DC01` |
| `intIpAddress` | string | Internal IP address | `192.168.1.100` |
| `extIpAddress` | string | External/public IP | `203.0.113.50` |
| `macAddresses` | array | Network interface MACs | `["00:1A:2B:3C:4D:5E"]` |

### Device Types

| Type | Description | Typical Use |
|------|-------------|-------------|
| `Desktop` | Workstation/PC | End-user computers |
| `Laptop` | Portable workstation | Mobile workers |
| `Server` | Windows/Linux server | Infrastructure |
| `ESXi Host` | VMware hypervisor | Virtualization |
| `Network Device` | Router/switch/firewall | SNMP-monitored |
| `Printer` | Network printer | Print infrastructure |

### Device Status

| Status | Description | Business Impact |
|--------|-------------|-----------------|
| `online` | Agent checking in | Normal operation |
| `offline` | No agent communication | May require attention |
| `rebooting` | Restart in progress | Temporary state |
| `unknown` | Status undetermined | Check connectivity |

### Field Reference

Devices carry identifier, site, type/status, network, OS, hardware, agent, and
timestamp fields, plus 30 user-defined fields (`udf1`-`udf30`, 255 char max,
commonly used for asset tag, department, primary user, location, purchase
date, lease expiration). See [references/fields.md](references/fields.md)
for the complete `Device` interface and UDF table.

## Common Workflows

### Device Lookup by Hostname

```javascript
async function findDeviceByHostname(client, hostname) {
  // Fetch all devices (with pagination)
  const allDevices = [];
  let url = '/api/v2/devices?max=250';

  while (url) {
    const response = await client.request(url);
    allDevices.push(...response.devices);
    url = response.pageDetails?.nextPageUrl;
  }

  // Search case-insensitive
  const matches = allDevices.filter(d =>
    d.hostname.toLowerCase().includes(hostname.toLowerCase())
  );

  if (matches.length === 0) {
    return { found: false, suggestions: [] };
  }

  if (matches.length === 1) {
    return { found: true, device: matches[0] };
  }

  return {
    found: false,
    ambiguous: true,
    suggestions: matches.map(d => ({
      hostname: d.hostname,
      uid: d.uid,
      site: d.siteName
    }))
  };
}
```

Equivalent lookups by IP and MAC address, an offline-device report, and a
bulk UDF update helper follow the same pagination pattern - see
[references/examples.md](references/examples.md) for the full
implementations, including UDF/description length validation.

## API Patterns

- `GET /api/v2/devices?max=250` - list all devices (paginated via `pageDetails.nextPageUrl`)
- `GET /api/v2/device/{deviceUid}` - get a single device
- `GET /api/v2/site/{siteUid}/devices?max=250` - devices scoped to a site
- `POST /api/v2/device/{deviceUid}` - update device fields (description, UDFs)
- `DELETE /api/v2/device/{deviceUid}` - remove device from Datto RMM (does not uninstall the agent)

See [references/api.md](references/api.md) for full request/response examples.

## Gotchas

- **Deleting a device does not uninstall the agent** - it only removes the device record from Datto RMM.
- **UDF values are capped at 255 characters**; `description` is capped at 1000. Both fail with 400 `Invalid field value` when exceeded.
- **`status` can lag behind real connectivity.** Combine it with `lastSeen` to determine effective status - see `getDeviceEffectiveStatus` in [references/examples.md](references/examples.md).
- **MAC addresses arrive in inconsistent formats** (colons, dashes, none) - normalize before comparing.
- **Use `deviceUid`, not hostname, for lookups and updates** - hostnames are not guaranteed unique across sites.
- Respect rate limits on bulk operations (e.g., a short sleep between sequential per-device requests).

See [references/errors.md](references/errors.md) for the full device API error table.

## Related Skills

- [Datto RMM Alerts](../alerts/SKILL.md) - Device alert management
- [Datto RMM Audit](../audit/SKILL.md) - Device hardware/software inventory
- [Datto RMM Jobs](../jobs/SKILL.md) - Running jobs on devices
- [Datto RMM Sites](../sites/SKILL.md) - Site-level device management
- [Datto RMM API Patterns](../api-patterns/SKILL.md) - Authentication and pagination

Files in this skill

  • SKILL.md6 KB
  • references/api.md2.2 KB
  • references/errors.md592 B
  • references/examples.md4.1 KB
  • references/fields.md2.4 KB

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…