Get device data for CDN-connected devices
GET/api/cdn/device
Returns DeviceDataV2 per device. By default returns only active devices.
Use ?device_status=inactive or ?device_status=all to widen by enrollment state.
Use ?device_mode=orchestrated, ?device_mode=reactive, or ?device_mode=both to filter by device flags.
When ?device_mode= is set, add ?device_connectivity=online or ?device_connectivity=offline to further filter by heartbeat TTL.
Request
Query Parameters
Repeated device ID filter: ?device_id=id1&device_id=id2. Omit to return all.
Device status filter: active (default), inactive, or all.
Device mode filter: orchestrated (ORCHESTRATE_ME flag), reactive (REACTIVE_MODE flag), or both. Omit for no mode filter.
Device connectivity filter (only applied when ?device_mode= is set): online (active SSE subscription on ManagedCommand channel), offline (not subscribed), or both.
Responses
- 200
- 500
DeviceDataV2 for each CDN-connected device (active only by default).
- application/json
- Schema
- Example (from schema)
Schema
Array [
]
data
object
Device - Enrollment: Device connection and authentication configurations
Possible values: [cache, remote]
Device identifier
Device type tokens
When true, requests that a master agent orchestrate this device.
Master device-id that is currently orchestrating this device, if any.
Platform name
Platform identifier
When true, the device subscribes to the master SSE command channel.
Available GetApp server URLs
metadata
object
nullable
required
Device - MetaData: Physical and logical device properties
bandwidth
object
nullable
A single bandwidth measurement result.
battery
object
nullable
Comprehensive battery status information
Battery health as a percentage (0-100), based on current capacity vs design capacity
Whether the device is plugged into power (charging or full)
Whether this is a virtual/emulated battery (e.g., in VM)
Battery level as a percentage (0-100)
Battery state description (Charging, Discharging, Full, Empty, Unknown)
Estimated time remaining in minutes (for discharge or charge)
IP address
location
object
nullable
MAC address
Device name
Operating system
OS release version
Available storage in bytes
Currently active GetApp server URL.
Deprecated for local v2 consumers — read from GET /agent/status instead.
Still authoritative in the CDN per-device snapshot, where no per-device
status endpoint exists (mirrors versions).
versions
object
nullable
Installed software versions reported by the device.
GetApp agent version
GetApp agent-UI version
Per-field last-changed timestamps (ISO-8601 UTC), grouped by field group as
{ group: { field: ISO-8601 } }, where group is one of metadata or enrollment.
Populated from the device_metadata ledger.
Last snapshot timestamp (UTC)
Warning message indicating the data field may be incomplete or unreliable.
When present, surface it visibly to the user.
Device identifier — matches the deviceId in CDN discovery.
true when this entry represents the local CDN master agent itself.
true when the device has an active SSE subscription on the ManagedCommand channel.
[
{
"data": {
"deliverySource": "cache",
"deviceId": "string",
"deviceType": [
"string"
],
"orchestrateMe": true,
"orchestratedBy": "string",
"platform": "string",
"platformId": "string",
"reactiveMode": true,
"urlGetAppServerAvailable": [
"string"
],
"metadata": {
"bandwidth": {
"connectionType": "string",
"downloadKbps": 0,
"measuredAt": "string",
"uploadKbps": 0
},
"battery": {
"health": 0,
"isPluggedIn": true,
"isVirtual": true,
"level": 0,
"state": "string",
"timeRemainingMinutes": 0
},
"ipAddress": "string",
"location": {
"alt": "string",
"lat": "string",
"long": "string"
},
"macAddress": "string",
"name": "string",
"os": "string",
"osRelease": "string",
"storageAvailable": 0,
"versions": {
"agent": "string",
"agentUi": "string"
}
},
"metadataUpdatedAt": {},
"snapshotDate": "2026-11-08T13:48:42.243Z"
},
"dataWarning": "string",
"deviceId": "string",
"isMaster": true,
"isOnline": true
}
]
- application/json
- Schema
- Example (from schema)
Schema
{
"message": "string",
"name": "string",
"statusCode": 0
}