List devices
const url = 'http://localhost:3000/api/v1/devices?limit=20&offset=0&cursor=550e8400-e29b-41d4-a716-446655440000&status=ONLINE&labels=%7B%22environment%22%3A%22production%22%2C%22region%22%3A%22us-west%22%7D&labelKey=environment&unlabeled=true&search=edge-01&architecture=amd64&appVersion=1.2.3';const options = {method: 'GET', headers: {'X-API-Key': '<X-API-Key>'}};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request GET \ --url 'http://localhost:3000/api/v1/devices?limit=20&offset=0&cursor=550e8400-e29b-41d4-a716-446655440000&status=ONLINE&labels=%7B%22environment%22%3A%22production%22%2C%22region%22%3A%22us-west%22%7D&labelKey=environment&unlabeled=true&search=edge-01&architecture=amd64&appVersion=1.2.3' \ --header 'X-API-Key: <X-API-Key>'Retrieves a paginated list of devices in the caller’s organization. All filters are evaluated server-side and combined with AND: status, labels, labelKey, unlabeled, free-text search (name, clientId, reported device ID, serial number), CPU architecture (Margo rc2 enum) and deployed application version.
Authorizations
Section titled “Authorizations”Parameters
Section titled “Parameters”Query Parameters
Section titled “Query Parameters”Example
20Maximum number of devices to return
Example
0Number of devices to skip for pagination
Example
550e8400-e29b-41d4-a716-446655440000Cursor for cursor-based pagination (alternative to offset): the nextCursor device ID returned by the previous page
Example
ONLINEFilter by device status
Example
{"environment":"production","region":"us-west"}Filter by device labels: a JSON-encoded object of exact key/value pairs, all of which must match (AND). Example: {“environment”:“production”,“region”:“us-west”}. 1-20 entries, string values only. Malformed JSON or non-string values are rejected with 400.
Example
environmentFilter devices that carry this label key, with any value. Combines with labels (AND).
Example
trueWhen true, return only devices without any labels. Cannot be combined with labels or labelKey.
Example
edge-01Free-text search: case-insensitive substring match on device name, clientId, the Margo self-reported device ID and the Margo-reported serial number. The characters %, _ and backslash match literally.
Example
arm64Filter by CPU architecture as reported by the device in its Margo capabilities (properties.resources.cpu.architecture). Margo rc2 enum.
Example
1.2.3Filter devices that have at least one non-removed deployment of this exact application version
Header Parameters
Section titled “Header Parameters”UUID of the organization (tenant) the request acts in. It selects the tenant and grants nothing: the server checks membership or an open tenant switch. Not needed for global operations. A malformed value returns 400. API keys are fixed to their own organization; another organization returns 403. The x-organization-source header grants nothing.
Responses
Section titled “Responses”List of devices retrieved successfully
object
Array of device objects
object
Unique device identifier (UUID)
Client-provided device identifier
Human-readable device name
Current device status
Device capabilities as reported during onboarding
object
Key-value labels for device organization and filtering
object
Timestamp of last communication from device
Set when deletion was requested (FM-1359). The device stays listed while its deployments are withdrawn; it is deleted once the removals are confirmed or time out.
Timestamp when device was registered
Timestamp of last device update
Margo self-reported DeviceId (properties.id from the device capabilities manifest). Unique per organization among non-deleted devices — null if this device has never reported capabilities, or if it collided with another device already holding the same value (FM-1043) and its write was rejected.
Latest reported CPU usage percentage (FM-770, from VictoriaMetrics). Null if the device has never reported telemetry.
Latest reported memory usage percentage (FM-770, from VictoriaMetrics). Null if the device has never reported telemetry.
Latest reported disk usage percentage (FM-770, from VictoriaMetrics). Null if the device has never reported telemetry.
Count of non-removed deployment instances currently targeting this device (FM-770). Always a real count, independent of telemetry availability.
Total number of devices matching the filter criteria
Indicates if there are more devices available
Cursor for fetching the next page of results
Example
{ "data": [ { "id": "550e8400-e29b-41d4-a716-446655440000", "clientId": "edge-device-001", "name": "Production Edge Gateway 1", "status": "ONLINE", "capabilities": { "cpu": { "cores": 4, "architecture": "arm64" }, "memory": { "total": 8192 }, "containers": { "runtime": "containerd" } }, "labels": { "environment": "production", "region": "us-west", "tier": "edge" }, "lastSeenAt": "2024-01-15T10:30:00Z", "deletionRequestedAt": "2024-01-15T10:30:00Z", "createdAt": "2024-01-01T00:00:00Z", "updatedAt": "2024-01-15T10:30:00Z", "reportedDeviceId": "wm-uc20-m3000-ax4b14pc7500001", "cpuUsagePercent": 42.5, "memoryUsagePercent": 67.2, "diskUsagePercent": 55.1, "runningWorkloadCount": 3 } ], "total": 150, "hasMore": true, "nextCursor": "eyJpZCI6IjEyMzQifQ=="}Malformed or contradictory query parameters (for example an architecture outside the Margo rc2 enum, invalid labels JSON, or unlabeled=true combined with labels)
Unauthorized - Invalid or missing authentication
Forbidden - Insufficient permissions