On this page0
Unfamiliar word? See Glossary: words used in these docs. Looking for the tasks in order? Begin at Start Here.
Reference
Included in: All plans. Which Plan Includes What
The Zonitix Agent (Mac / Win / Linux)
A small agent that runs on a workforce machine and reports its own inventory and security posture to your instance on a schedule. Each build carries a Zonitix release signature that your instance checks before hosting it.
It is the reporting layer that keeps the device inventory current — instead of a serial number typed in once, each machine reports its own truth every check-in.
Availability By Platform
Availability. The agent ships for macOS, Linux and Windows today. All three share the same signed protocol and PKI, but they are at different maturities: macOS is the broadest, while the Linux and Windows agents report a narrower set (listed below). Each section below says which platform it describes.
Three Platform Layers
macOS
Available nowA menu-bar app plus a root daemon. Requires macOS 13+. Identity is a non-exportable Secure Enclave key where the Mac has one (Apple silicon and T2) and the build is signed for it, with a software-key fallback otherwise.
Linux
Available nowA single static binary running as a headless systemd daemon — no GUI. A 64-bit agent for distributions that use systemd (Debian/Ubuntu, RHEL/Fedora, SUSE). Identity is a P-256 key in a root-only file (no Secure Enclave or TPM). Reports a narrower set than macOS — see below.
Windows
Available nowAn MSI-installed Windows service plus a system-tray app and a status panel. A 64-bit (x64) agent. Identity is a P-256 key in an admin-protected file (no TPM). Reports BitLocker, firewall and Defender, and escrows the BitLocker recovery key. Narrower than macOS — see below.
Supported Operating Systems
The Zonitix platform is browser-based — your team uses it from any operating system, with nothing to install. Only the optional agent has OS requirements; a machine without it can still have a record in the device inventory, created by an administrator through the API.
| Operating system | Status | Requirements |
|---|---|---|
| macOS | Available | macOS 13 (Ventura) or later · Apple silicon or Intel (one universal build). Secure Enclave key where the Mac has one and the build is signed for it; software key otherwise. |
| Linux | Available | A 64-bit agent for systemd distributions (Debian/Ubuntu, RHEL/Fedora, SUSE) · installs as a root systemd service · single static binary, no runtime dependencies. The software list comes from dpkg or rpm. The pending-update list needs apt or dnf, and the update command and the settings that install a package need apt, dnf or yum; on a distribution without them (SUSE, for example) the update list reads none and those actions are reported as unsupported or failed. Non-systemd inits (e.g. Alpine/OpenRC) are not covered. |
| Windows | Available | A 64-bit (x64) agent · installed by MSI (a one-line elevated PowerShell, or the MSI pushed through Intune, GPO or SCCM with the server address and enrollment token passed in). Runs as a service with a system-tray app; installing needs local admin. |
What The macOS Agent Reports
Each check-in carries a fixed, inspectable set of inventory and posture fields — the complete list is below. The agent applies no hardening setting and runs no command unless an admin starts it: a hardening profile the machine is in scope for, or a queued remote command (both described below). It updates itself only to a version your administrator has adopted. There is no running-process list, no keystroke or screen capture, and no location tracking.
Machine
hostname · macOS version & build · architecture · chip · model · CPU cores · memory · serial number · the user signed in at the screen · system-disk free/total
Security posture
FileVault (whether a recovery key exists, the names of the local accounts that can unlock the disk, and encryption progress while it is encrypting) · System Integrity Protection (SIP) · Gatekeeper · firewall · XProtect version
Management
MDM enrollment (and whether via Automated Device Enrollment) · installed configuration-profile identifiers · Activation Lock
Remote access
Remote Login (SSH) · Screen Sharing · Apple Remote Desktop
Accounts & sign-in
Local-admin accounts · auto-login (and the account name it is set for) and guest-account exposure
Update policy
Automatic check / download / install for macOS, security responses and App Store apps
Software
Installed applications in the Applications folder (name, version and bundle identifier; up to 2,000) · pending macOS/software updates, from the system’s own last update scan
Backup & health
Time Machine status & last backup · uptime · last boot time · battery cycle count & condition
Network
Primary interface · local IPv4 addresses
One limit: if the system’s update tool does not answer within a minute, the agent reports no pending updates, not “unknown”.
It is not an Apple MDM: it installs no Apple configuration profiles and it never wipes a device. What an admin can ask it to do is a short, fixed list — lock the screen, restart, install OS updates, rename the computer, or uninstall itself — covered under Remote commands below.
What The Linux Agent Reports
The Linux agent collects a deliberately smaller set than macOS: machine facts, installed packages, pending updates and a focused security posture. It does not yet collect SSH/remote-access, local-admin accounts, or uptime — those are planned. A security probe that can’t run reports nothing rather than a false value, so your instance can tell “unknown” from “off”. Two limits: the firewall check looks at ufw and firewalld only, so a machine protected another way reads as off, and with neither apt nor dnf on the machine the pending-update check reads “none”. The Linux and Windows software lists are capped at 2,000 entries each, like the macOS one.
Machine
hostname · OS name and version · kernel release · architecture · CPU model & cores · memory · model (DMI) · serial (the DMI product UUID or the machine-id, not the maker’s serial number) · logged-in user (the first session listed, console or SSH) · root-filesystem free/total
Security posture
SELinux mode · AppArmor · firewall (ufw / firewalld) · LUKS disk encryption (on when any encrypted volume exists) · Secure Boot · whether auditd, time sync, fail2ban and automatic updates are active (so drift on an enforced control shows up)
Software
Installed packages (dpkg or rpm, name + version) · packages with a pending upgrade (apt or dnf, from cached package lists, no network refresh)
What The Windows Agent Reports
A focused set: machine facts, installed software, pending Windows Updates and three posture signals. It does not yet collect TPM state, local-admin accounts, or remote-access (RDP) status. One limit: if Windows returns an error when BitLocker or Microsoft Defender is read, the agent reports that one as off, not as “unknown”.
Machine
hostname · Windows edition & build · architecture · CPU · model · cores · memory · serial (BIOS / SMBIOS / MachineGuid) · a user name, which is the account the agent’s own service runs as and not the person signed in · system-drive free/total
Security posture
BitLocker disk encryption · Windows Defender Firewall · Microsoft Defender antivirus
Software
Installed programs (from the Windows uninstall registry, name + version + publisher) · pending Windows Updates (from a search the agent repeats at most every 20 hours)
If the drive is already BitLocker-encrypted, the agent also escrows its recovery key to your instance over the signed channel, where it is stored encrypted at rest.
Enrollment & Check-In
In plain terms: the first time the agent runs it registers the machine with your instance and creates its own identity key, whose private half never leaves that machine. After that it checks in every 15 minutes by default, proves each report came from that machine, and picks up any settings or commands waiting for it. The three steps, with the calls the agent makes, are under Technical detail below, and the byte-level specification is on Fleet Policy & Agent Signing.
What The User Sees
On macOS, a menu-bar item whose icon reflects health. Its dropdown shows this Mac (model, chip, macOS, serial, memory, disk), available software updates with an Install action, and a fleet section (which instance it reports to, last check-in, device ID, and whether the signing key is held in the Secure Enclave). If the daemon is doing the work, the menu-bar app is just a viewer — closing it stops nothing.
On Linux there is no GUI. The agent is a headless systemd service: an admin checks its status, follows its log, and can print exactly what it would report at any time, with the service commands listed under Technical detail below.
On Windows, a background service does the work, with a system-tray app and a status panel (model, OS, device ID, last check-in, reporting-to host, health). An admin manages the service through the Windows Service Manager and reads its logs; the tray app is just a viewer.
Endpoint Hardening (Enforcement)
Reading posture is the default. Add controls to a profile in Devices → Profiles and the agent enforces them on the devices in that profile’s scope, using native tooling as root or SYSTEM — no MDM required — and corrects drift on each check-in. Several of these settings are mapped to SOC 2 and HITRUST controls; the Compliance coverage view on the Profiles page shows which. It is opt-in per control: no hardening setting is applied to a device no profile covers. The agent never changes two things: SSH settings on Linux, which it only writes to the machine’s own log, and Windows BitLocker, whose state it reports. Disabling a profile stops the agent applying it; settings already applied stay as they are.
macOS controls
Firewall + stealth · Gatekeeper · screen-lock password + idle timeout (best-effort: written for the signed-in user; the locked version is the Apple MDM setting) · disable Remote Login (SSH) · disable Screen Sharing / ARD · disable guest and auto-login · software-update policy (security updates, major macOS updates, App Store app updates)
Linux controls
Firewall (ufw or firewalld: inbound traffic denied by default with SSH allowed, so other inbound services need their own rules; reported as failed when neither tool is installed) · fail2ban · auditd · time sync · automatic security updates. The agent installs fail2ban, auditd or the unattended updater when it is missing.
Windows controls
Windows Defender Firewall (all profiles) · Defender real-time protection · automatic Windows Update install. BitLocker stays report-only for now (with recovery-key escrow) — auto-enable waits until escrow is proven, to avoid lockout.
Enforcement changes device configuration only when an admin puts the device in a profile’s scope. It is not MDM — no Apple configuration profiles and no device wipe (those are the separate Apple MDM below).
Apple MDM (Preview)
Separate from the agent, Zonitix runs a managed Apple MDM — built on the open-source NanoMDM engine — for the controls only Apple MDM provides: enrollment, configuration profiles, and remote lock/wipe. Unlike your instance, it is one Zonitix-hosted service shared across customers, with each customer’s devices in a separate tenant.
Status: preview. Tested end-to-end on our own test Mac, with real enrollment, configuration-profile delivery, and remote lock/wipe. Today you upload your own Apple push (APNs) certificate — its private key rests only in the MDM, never in the Zonitix app. FileVault recovery-key escrow through MDM is part of the preview (see MDM & Device Operations) but is not yet listed as validated end-to-end. Not yet available: zero-touch (DEP/ADE) enrollment, and it is Mac-first. We don’t call it generally available until it is.
Deploying The Agent
Every platform enrolls with your instance’s reusable enrollment token. You don’t generate it: the Linux and Windows install commands in Devices → Add devices carry it, and a Mac receives it from a device-management profile or from a package built for your instance. It is one token for all three platforms. It expires after 90 days and your instance replaces it automatically in the last 14 days before expiry, leaving the old one valid until it lapses so installers already handed out keep working. An admin can also rotate it by hand in Devices → Settings if it leaks: that revokes the old token at once for every platform. The one-line Linux and Windows install commands keep working, because they download the install script fresh each time and it carries the current token; an install script or installer that was saved or pushed through another tool earlier carries the old token and must be fetched again. Already-enrolled devices are unaffected. The agent presents the token once at enrollment, then authenticates every heartbeat with its own key. A machine enrolling for the first time lands as Pending approval — visible, but not trusted until an admin approves it, on its Inventory row or in the device’s detail view. Step by step: the enroll a device guide. The install command for each platform is under Technical detail below.
Who Does What
The agent is a shared responsibility: you deploy and govern it, Zonitix hosts the control plane and verifies everything cryptographically. Agent reports go to your single-tenant instance only; the one thing that reaches us is a count of devices per agent version, in the licence check-in. Apple MDM, if you use it, is the exception: it runs on the shared Zonitix MDM service described above.
| Your team (the admin) | Zonitix |
|---|---|
| Adopt each platform’s signed agent release (one click per platform — nothing to upload) | Signs and publishes releases; your instance re-verifies the checksum and vendor signature before hosting one |
| Install the agent on each computer (the Linux and Windows install commands carry the enrollment token; a Mac gets it from a device-management profile or a package built for your instance); approve newly enrolled devices | Pins each device’s public key at enrollment — one record per serial |
| Set the check-in interval in Device Settings, and choose which hardening controls to enforce in Profiles | Delivers policy on the signed heartbeat; verifies signature, timestamp and nonce |
| Assign devices to people, review posture, act on drift | Keeps the catalog current from each check-in; stores escrowed keys encrypted at rest |
| Own the backup / key-escrow destination (an S3-compatible bucket or an Azure Blob Storage container that you own) | Never holds your data — it lives on your instance |
| Retire a device that has left service; separately, uninstall the agent from a machine | Refuses reports from a retired device; relays the uninstall command, after which the agent removes itself |
Operating The Fleet
Set Policy
In Devices → Settings, per platform: the check-in interval (5 minutes to 24 hours) and, on macOS, whether the user may quit the menu-bar app. Changes apply on the next check-in. Hardening and software-update controls are not set here — they live in Profiles.
Turn On Enforcement
In Devices → Profiles, each platform has a Baseline profile for fleet-wide controls; add narrower profiles for a group or specific devices. The agent applies a profile at the device’s next check-in and corrects drift every check-in after. Two things the agent never changes: SSH settings on Linux, which it only writes to the machine’s own log, and Windows BitLocker, whose state it reports. Disabling a profile stops the agent applying it and leaves applied settings as they are. Step by step: the compliance profile guide.
Update The Agent
Your instance offers the build an administrator has adopted; each agent verifies it (its SHA-256 hash and a Zonitix release signature, on every platform) and refuses a downgrade before self-updating; the checks and the key handling are under Release Signature And Trust Bundle. You can pilot a new version on a group first, or freeze one device at its current version. Retiring a device and uninstalling the agent are two different actions — see Device lifecycle and Remote commands below.
Check Status
macOS: the menu-bar app and agent logs. Linux: the service status and its journal, with the commands listed under Technical detail below. Windows: the Services console and the tray / status panel.
Remote Commands
An admin who can manage devices can queue a command from a device’s detail view, or for many devices at once from the inventory. The agent picks it up at its next check-in, so a command is never instant and an offline machine waits. Every command is audited, each device keeps a command history, and a command can be cancelled while it is still queued. All five can be queued for macOS, Linux and Windows; on a Mac, Lock screen is the exception described below.
The wait has a limit. A command still queued after 7 days is marked expired, which is audited, and has to be queued again. Retiring a device, rejecting its enrollment or deleting it cancels everything queued for it, which is audited too, and so does re-enrolling the machine, so a rebuilt computer never runs a command meant for its previous life. One bulk request takes at most 500 devices; the dashboard sends a larger selection in batches. The written reason for a destructive command must be at least 3 characters; anything past 500 is cut off.
Lock screen
Locks the screen on Windows (someone must be signed in) and on Linux. Reversible: the user signs back in as usual. On a Mac running current macOS the command reports failed, because the system helper it calls is no longer there; lock a Mac with the Apple MDM lock, which needs a PIN to undo.
Restart
Restarts the machine one minute after the command arrives.
Install OS updates
macOS: installs available software updates, without forcing a restart. Linux: security updates only, non-interactive. Windows: a Windows Update scan and install. None of them restarts the machine; the result says when a restart is needed.
Rename computer
Letters, digits and inner hyphens only; up to 63 characters, 15 on Windows, where it takes effect after a restart.
Uninstall agent
The agent removes itself and stops reporting. Needs a separate destructive-actions permission, a fresh sign-in check and a written reason. While an uninstall is queued, no other command can be queued for that device.
The agent has no wipe command on any platform. Erasing a Mac is an Apple MDM action, described under MDM & Device Operations.
Removing The Agent By Hand
The remote uninstall needs the machine to check in. For one that is offline, off the network or being retired, Devices → Settings has an Uninstall section per platform, whose Uninstall the agent card gives a command to copy and run on the machine itself. The machine stops reporting as soon as it runs. This removes software only: retire the device record separately (see Device lifecycle).
macOS
Needs an admin password. Removes the agent only. If the Mac is also enrolled in Apple MDM, remove its enrollment profile separately in System Settings → General → VPN & Device Management.
Linux
Needs root rights. Safe to run more than once, so it can go into a configuration-management job to clear many hosts.
Windows
Settings → Apps → “Zonitix Agent” → Uninstall, or the elevated PowerShell shown. Its last line also clears the folder that holds the agent’s identity and config, which the MSI leaves in place.
Device Lifecycle
Retiring a device and uninstalling its agent are separate. Uninstall removes the software from a machine; retire tells your instance to stop trusting a device, whether or not the agent is still on it.
Pending approval
A newly enrolled machine is visible but not trusted. Approve it, or reject the enrollment. Approval and owner assignment can be done in bulk.
Retire
Takes a device out of service; a reason is required. Reversible. A retired device’s check-ins are refused, so it can no longer report or receive policy or commands, and it cannot enroll again. A rejected enrollment is treated the same way.
Return to service
Undoes a retire, so the machine can report (or enroll) again.
Delete
Permanent. Needs the destructive-actions permission, a fresh sign-in check and a written reason, and is audited.
New-Hire Computers (Reservations)
In plain terms: when onboarding starts for someone whose hardware checklist includes a laptop or desktop, Zonitix holds a place for that computer in the inventory, owned by the new hire, before the machine exists on the network. When the real machine enrolls, the placeholder becomes the managed device. Monitors, keyboards and other accessories are not reserved; they stay ticks on the onboarding checklist.
Where you see it
Devices → Inventory shows “N computers are reserved for new hires — they become managed devices when they enroll.” with a View button, which applies the Lifecycle filter “Reserved for new hires”. A reserved row reads “Waiting for IT” until a serial is recorded on the onboarding hardware step, then “Waiting for enrollment”.
Automatic link
Only on the same serial number, compared without regard to letter case. A machine that enrolls through the agent or through Apple MDM with the serial recorded for the reservation takes its place, and the new hire is its owner. A Linux agent reports a machine ID in place of the maker’s serial number, so a serial copied from the label will not match.
Suggested link
An unowned device that enrolled in the last 30 days, and is not of a different operating system from the reserved computer, is offered as a match: “… just enrolled — is it Jane’s laptop?”. Someone who can manage devices clicks “Yes, link it” or “Not a new hire’s”. Nothing is linked by guessing.
The audit actions written for a reservation, and the routes behind the suggestion, are under Technical detail below.
Software Inventory
Devices → Software lists every application the agents report across the fleet, grouped by title with its versions and the number of devices that have each. What an agent lists is the Applications folder on a Mac, the programs registered with Windows, and the dpkg or rpm packages on Linux, up to 2,000 per device. Open a title to see which devices have it, search the list, or export it as CSV (the export is audited). A smart device group can also target devices by installed application, so a profile or rollout can be scoped to “every machine with this app”. It is an inventory: the agent reports what is installed and does not install or remove applications.
Alerts, Trends And Compliance Rules
Set in Devices → Settings. Alerts go by email to everyone who can manage devices, one message per alert type per check rather than one per device, and a condition that stays true is reported once, not repeatedly. If email is not set up, alerts are still recorded in the dashboard.
Alerts (each can be turned off)
Devices awaiting approval · a trusted device silent for 7+ days (adjustable) · a device that was compliant and no longer is · disk encryption reported off · Apple push certificate expiring (30, 14, 7 and 1 days before) · enrollment token about to expire
Stale threshold
Days without a check-in before a device counts as stale in the overview and inventory. Default 7; 1 to 365.
Minimum OS version
Per platform. A device reporting an older version is flagged “Below minimum OS” and counts as not compliant. Reported, not enforced — the agent never upgrades the OS on its own.
Minimum supported agent
Per platform. Devices on an older agent keep checking in and can still update, but their reports stop counting as compliance evidence until they do.
Trends
One fleet snapshot a day — devices online, at risk, encryption and firewall coverage, pending approvals, below minimum OS — charted over the last 30 days in the dashboard; the trends route returns up to 365.
Timings
Alert check: every 15 minutes. Command expiry and profile status checks: every 15 minutes. Apple MDM device sync: every 15 minutes in the background, and at most once a minute when a Devices page loads. Trend snapshot: checked hourly, one kept per UTC day. A device shows Online when its last check-in is within three check-in intervals: 45 minutes at the default 15-minute interval.
Alert thresholds
Silent device: 7 days by default, 1 to 365. Enrollment token: 7 days before expiry by default, 1 to 90. Push certificate: 30, 14, 7 and 1 days by default; up to 6 values, each 1 to 365. Recipients are fixed to everyone who can manage devices.
Export & custom fields
The inventory exports to CSV with the filters you have applied (audited). You can define your own device fields alongside department, location, cost centre and asset tag.
Tier. The agent and its endpoint hardening are part of Core and included on every plan. Turning its security posture into exported, auditor-ready evidence is the Compliance Hub, on the Advanced tier.
If something here is not working as you expect, start with When something goes wrong.
The plain explanation is above. This part is for IT and developers: the exact settings, permission names, API addresses and data fields behind it. Closed: select the heading above to open it. While it is closed, your browser’s find-on-page (Ctrl+F or Cmd+F) does not search this part.
The Three Steps Of A Check-In
The calls behind Enrollment & Check-In above. The byte-level specification is on Fleet Policy & Agent Signing.
1 · Enroll (Once Per Machine)
On first run the agent generates its own P-256 key, then calls POST /agent/enroll with an enrollment token and its public key. Your instance pins the public key and creates one device record per physical machine (keyed by the serial number the agent sends, which on Linux is a machine ID). Only the public key ever leaves the machine. On macOS the private key is held in the Secure Enclave where the Mac has one and the build is signed for it (a software key otherwise), on Linux in a root-only file, and on Windows in an admin-protected file under ProgramData.
2 · Heartbeat (On A Schedule)
Every check-in the agent collects the fields above and calls POST /agent/heartbeat. The body is signed with the device key; your instance verifies the signature, a ±5-minute timestamp window, and a one-time nonce (so a captured request cannot be replayed). The default cadence is every 15 minutes; fleet policy can tighten it, down to a 5-minute floor.
3 · Policy & Updates (In The Response)
The heartbeat response can carry fleet policy (check-in interval, and on macOS whether the user may quit the menu-bar app), the hardening settings from the profiles the device is in scope for, any queued remote commands, and a signed self-update instruction the agent verifies before installing: on every platform the package must match its published SHA-256 hash and carry a release signature made with a Zonitix release key the agent already trusts. It refuses a downgrade. The scheme is specified under Release Signature And Trust Bundle.
Install Commands By Platform
The commands behind Deploying The Agent above. Substitute your own instance’s API address for https://<your-instance>-api.zonitix.com.
macOS
The agent comes as a .pkg installer: push it with Jamf, Intune or Munki, or send a per-user install invite by email from the dashboard, which links to the package your instance hosts. The agent reads its server and token from a managed-preferences profile or, failing that, from an agent.json file that only a package built for your instance carries. With neither, it installs but does not enroll.
Linux
One elevated line: curl -fsSL https://<your-instance>-api.zonitix.com/agent/linux/install | sudo bash. It drops the static binary, writes the per-tenant config, and enables the zonitix-agentd systemd service.
Windows
Deploy the MSI through Intune, Group Policy or SCCM, passing ZONITIX_SERVER, ZONITIX_TOKEN and ZONITIX_INTERVAL as MSI properties for an unattended install — or run a one-line elevated PowerShell: irm https://<your-instance>-api.zonitix.com/agent/windows/install | iex. Installing requires local admin.
ZONITIX_INTERVAL is the check-in interval in seconds (default 900, which is 15 minutes). It is only the starting value: once the agent checks in, the interval in the fleet policy applies (minimum 5 minutes). The three values are written to HKLM\Software\Zonitix\Agent, and only when both ZONITIX_SERVER and ZONITIX_TOKEN are supplied; without them the MSI installs with no tenant configuration. A silent install looks like this, using the server address shown in Devices → Settings:
msiexec /i ZonitixAgentSetup-<version>-x64.msi /qn ZONITIX_SERVER=https://<your-server-address> ZONITIX_TOKEN=<token> ZONITIX_INTERVAL=900
Service Commands And File Locations
For Three Platform Layers, What The User Sees, Check Status and Removing The Agent By Hand above.
macOS
The menu-bar app is ZonitixAgent.app and the root daemon is zonitix-agentd. Installed applications are read from /Applications.
Linux
The systemd service is zonitix-agentd. Status: systemctl status zonitix-agentd. Follow the journal: journalctl -u zonitix-agentd -f. Print what it would report: zonitix-agentd collect. The OS name and version are read from /etc/os-release. The uninstall command needs sudo.
Windows
The identity key is in an admin-protected file under ProgramData. The last line of the uninstall PowerShell clears ProgramData\Zonitix, which the MSI leaves in place.
Remote Command Audit Actions
For Remote Commands above. A command still queued after 7 days is audited as DEVICE_COMMAND_EXPIRED. Everything cancelled for a device that is retired, rejected, deleted or enrolled again is audited as DEVICE_COMMAND_CANCELLED.
Reservation Audit Actions And Routes
For New-Hire Computers (Reservations) above.
Audit
DEVICE_RESERVED · DEVICE_RESERVATION_SERIAL · DEVICE_RESERVATION_LINKED (by serial match or by an admin) · DEVICE_RESERVATION_DISMISSED · DEVICE_RESERVATION_RELEASED
Routes, under /api/v1/user-management: GET /devices/reservations/suggestions (view_devices) returns the devices waiting for an answer and the count of open reservations. POST /devices/:id/link-reservation with { reservationId } and POST /devices/:id/dismiss-reservation-suggestion need manage_devices. Linking answers 400 without a reservationId or when the device has not enrolled, 404 for an unknown device, and 409 when the reservation is no longer open.