Table of Contents
Overview
This article is the reference for all 193 operations of the Matrix42 Empirum REST API (OpenAPI specification Matrix42.Empirum.RestApi | v1, version 1.0.0). For each operation it lists the HTTP method and path, the description, the required role, parameters, request body and responses.
For installation, authentication, principal management, conventions and PowerShell examples, see the article Empirum REST API: Integration and Automation Guide.
Common Request Details
| Item | Details |
|---|---|
| Base URL |
https://empirum-api.contoso.local:5443 (host and port depend on your installation) |
| Authentication |
Authorization: Bearer <access token> for all operations except /health and /api/auth/token
|
| API version | Optional header api-version on every operation. Current and default value: 1. The header is not repeated in the parameter tables below. |
| Content type |
application/json for request and response bodies unless stated otherwise |
| Paging | List and search operations accept skip and top and return items, skip, top, totalCount and hasMore
|
| Timestamps | ISO 8601, UTC |
| Errors |
400 invalid request, 401 not authenticated, 403 missing role, 404 not found, 409 conflict with a machine-readable code
|
Operations per Area
| Area | Operations |
|---|---|
| Authentication | 1 |
| Administration | 13 |
| Computers | 67 |
| Deployment Groups | 43 |
| Software Packages | 8 |
| Patches | 7 |
| Patch Management Groups | 14 |
| Operating System Imports | 4 |
| PXE Boot Images | 4 |
| Language Pack Imports | 4 |
| Agent Templates | 4 |
| Software Classes | 3 |
| Variable Definitions | 7 |
| Variable Configurations | 3 |
| System | 5 |
| Tasks | 2 |
| Queues | 2 |
| Service Endpoints | 2 |
Authentication
Issues access tokens for API principals.
| Method | Path | Summary |
|---|---|---|
| POST | /api/auth/token |
Issues a short-lived Bearer JWT. |
POST /api/auth/token
Issues a short-lived Bearer JWT.
Required role: none (no authentication required)
Request body (required, application/x-www-form-urlencoded)
| Field | Type | Required | Description |
|---|---|---|---|
grant_type |
string | No | OAuth 2.0 grant type (client_credentials). |
client_id |
string | No | Client ID of the local principal. |
client_secret |
string | No | Client secret of the local principal. |
Responses
| Status | Description | Schema |
|---|---|---|
200 |
OK | Rfc6749TokenResponse |
Response fields (Rfc6749TokenResponse):
| Field | Type | Required | Description |
|---|---|---|---|
access_token |
string | Yes | Bearer token for the Authorization header. |
token_type |
string | Yes | Token type (Bearer). |
expires_in |
integer (int32) | Yes | Token lifetime in seconds. |
Administration
Manages local and Identity Provider principals, roles and admin features. All operations require the role admin.manage.
| Method | Path | Summary |
|---|---|---|
| GET | /api/admin/principals |
Returns all Identity Provider principals (Client and User) with their roles. |
| POST | /api/admin/principals |
Creates or updates a principal identified by (SubjectType, SubjectId, Issuer). |
| GET | /api/admin/principals/{id} |
Returns a single principal by its database id. |
| PUT | /api/admin/principals/{id} |
Updates DisplayName, Issuer and Roles of an existing principal. |
| DELETE | /api/admin/principals/{id} |
Deletes a principal and its role assignments. |
| GET | /api/admin/local-principals |
Returns all local principals (client credentials) with their roles. |
| POST | /api/admin/local-principals |
Creates a new local principal. |
| GET | /api/admin/local-principals/{id} |
Returns a single local principal by its database id. |
| PUT | /api/admin/local-principals/{id} |
Updates Description, ExpiresAtUtc and Roles of a local principal. |
| DELETE | /api/admin/local-principals/{id} |
Permanently deletes a local principal and its role assignments. |
| PATCH | /api/admin/local-principals/{id}/revoke |
Revokes or restores a local principal. |
| GET | /api/admin/roles |
Returns all roles that can be assigned to principals, with descriptions. |
| GET | /api/admin/features |
Returns which optional features are enabled for the admin UI. |
GET /api/admin/principals
Returns all Identity Provider principals (Client and User) with their roles.
Required role: admin.manage
Responses
| Status | Description | Schema |
|---|---|---|
200 |
OK | array of PrincipalDto |
Response fields (PrincipalDto):
| Field | Type | Required | Description |
|---|---|---|---|
id |
integer (int32) | Yes | ID of the principal. |
subjectType |
string | Yes | Subject type (client or user). |
subjectId |
string | Yes | Subject ID in the identity provider. |
displayName |
string, nullable | Yes | Display name. |
issuer |
string, nullable | Yes | Token issuer of the identity provider. |
roles |
array of string | Yes | Assigned roles. |
POST /api/admin/principals
Creates or updates a principal identified by (SubjectType, SubjectId, Issuer).
Required role: admin.manage
Request body (required, application/json, schema UpsertPrincipalRequest)
| Field | Type | Required | Description |
|---|---|---|---|
isUser |
boolean | Yes |
true if the subject is a user. |
subjectId |
string | Yes | Subject ID in the identity provider. |
displayName |
string, nullable | Yes | Display name. |
issuer |
string, nullable | Yes | Token issuer of the identity provider. |
roles |
array of string | Yes | Assigned roles. |
Example request body (placeholder values):
{
"isUser": false,
"subjectId": "string",
"displayName": "string",
"issuer": "string",
"roles": [
"string"
]
}Responses
| Status | Description | Schema |
|---|---|---|
200 |
OK | PrincipalDto |
Response fields (PrincipalDto):
| Field | Type | Required | Description |
|---|---|---|---|
id |
integer (int32) | Yes | |
subjectType |
string | Yes | Subject type (client or user). |
subjectId |
string | Yes | Subject ID in the identity provider. |
displayName |
string, nullable | Yes | Display name. |
issuer |
string, nullable | Yes | Token issuer of the identity provider. |
roles |
array of string | Yes | Assigned roles. |
GET /api/admin/principals/{id}
Returns a single principal by its database id.
Required role: admin.manage
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id |
path | integer (int32) | Yes | Principal ID. |
Responses
| Status | Description | Schema |
|---|---|---|
200 |
OK | PrincipalDto |
Response fields (PrincipalDto):
| Field | Type | Required | Description |
|---|---|---|---|
id |
integer (int32) | Yes | |
subjectType |
string | Yes | Subject type (client or user). |
subjectId |
string | Yes | Subject ID in the identity provider. |
displayName |
string, nullable | Yes | Display name. |
issuer |
string, nullable | Yes | Token issuer of the identity provider. |
roles |
array of string | Yes | Assigned roles. |
PUT /api/admin/principals/{id}
Updates DisplayName, Issuer and Roles of an existing principal.
Required role: admin.manage
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id |
path | integer (int32) | Yes | Principal ID. |
Request body (required, application/json, schema UpdatePrincipalRequest)
| Field | Type | Required | Description |
|---|---|---|---|
displayName |
string, nullable | Yes | Display name. |
issuer |
string, nullable | Yes | Token issuer of the identity provider. |
roles |
array of string | Yes | Assigned roles. |
Example request body (placeholder values):
{
"displayName": "string",
"issuer": "string",
"roles": [
"string"
]
}Responses
| Status | Description | Schema |
|---|---|---|
200 |
OK | PrincipalDto |
Response fields (PrincipalDto):
| Field | Type | Required | Description |
|---|---|---|---|
id |
integer (int32) | Yes | |
subjectType |
string | Yes | Subject type (client or user). |
subjectId |
string | Yes | Subject ID in the identity provider. |
displayName |
string, nullable | Yes | Display name. |
issuer |
string, nullable | Yes | Token issuer of the identity provider. |
roles |
array of string | Yes | Assigned roles. |
DELETE /api/admin/principals/{id}
Deletes a principal and its role assignments.
Required role: admin.manage
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id |
path | integer (int32) | Yes | Principal ID. |
Responses
| Status | Description | Schema |
|---|---|---|
200 |
OK | – |
GET /api/admin/local-principals
Returns all local principals (client credentials) with their roles.
Required role: admin.manage
Responses
| Status | Description | Schema |
|---|---|---|
200 |
OK | array of LocalPrincipalDto |
Response fields (LocalPrincipalDto):
| Field | Type | Required | Description |
|---|---|---|---|
id |
integer (int32) | Yes | ID of the principal. |
clientId |
string | Yes | Computer ID (Empirum client_id). |
description |
string, nullable | Yes | Description of the principal. |
roles |
array of string | Yes | Assigned roles. |
isRevoked |
boolean | Yes |
true if the principal is revoked. |
expiresAtUtc |
string (date-time), nullable | Yes | Expiry date (UTC). |
createdAtUtc |
string (date-time) | Yes | Creation time (UTC). |
POST /api/admin/local-principals
Creates a new local principal.
Required role: admin.manage
Request body (required, application/json, schema CreateLocalPrincipalRequest)
| Field | Type | Required | Description |
|---|---|---|---|
description |
string, nullable | Yes | Description of the principal. |
roles |
array of string | Yes | Assigned roles. |
expiresAtUtc |
string (date-time), nullable | Yes | Expiry date (UTC). |
Example request body (placeholder values):
{
"description": "string",
"roles": [
"string"
],
"expiresAtUtc": "2026-01-01T00:00:00Z"
}Responses
| Status | Description | Schema |
|---|---|---|
200 |
OK | CreateLocalPrincipalResponse |
Response fields (CreateLocalPrincipalResponse):
| Field | Type | Required | Description |
|---|---|---|---|
id |
integer (int32) | Yes | |
clientId |
string | Yes | Computer ID (Empirum client_id). |
description |
string, nullable | Yes | |
roles |
array of string | Yes | Assigned roles. |
isRevoked |
boolean | Yes |
true if the principal is revoked. |
expiresAtUtc |
string (date-time), nullable | Yes | Expiry date (UTC). |
createdAtUtc |
string (date-time) | Yes | Creation time (UTC). |
plaintextKey |
string | Yes | Client secret. Shown only once; store it securely. |
GET /api/admin/local-principals/{id}
Returns a single local principal by its database id.
Required role: admin.manage
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id |
path | integer (int32) | Yes | Local principal ID. |
Responses
| Status | Description | Schema |
|---|---|---|
200 |
OK | LocalPrincipalDto |
Response fields (LocalPrincipalDto):
| Field | Type | Required | Description |
|---|---|---|---|
id |
integer (int32) | Yes | |
clientId |
string | Yes | Computer ID (Empirum client_id). |
description |
string, nullable | Yes | |
roles |
array of string | Yes | Assigned roles. |
isRevoked |
boolean | Yes |
true if the principal is revoked. |
expiresAtUtc |
string (date-time), nullable | Yes | Expiry date (UTC). |
createdAtUtc |
string (date-time) | Yes | Creation time (UTC). |
PUT /api/admin/local-principals/{id}
Updates Description, ExpiresAtUtc and Roles of a local principal.
Required role: admin.manage
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id |
path | integer (int32) | Yes | Local principal ID. |
Request body (required, application/json, schema UpdateLocalPrincipalRequest)
| Field | Type | Required | Description |
|---|---|---|---|
description |
string, nullable | Yes | Description of the principal. |
roles |
array of string | Yes | Assigned roles. |
expiresAtUtc |
string (date-time), nullable | Yes | Expiry date (UTC). |
Example request body (placeholder values):
{
"description": "string",
"roles": [
"string"
],
"expiresAtUtc": "2026-01-01T00:00:00Z"
}Responses
| Status | Description | Schema |
|---|---|---|
200 |
OK | LocalPrincipalDto |
Response fields (LocalPrincipalDto):
| Field | Type | Required | Description |
|---|---|---|---|
id |
integer (int32) | Yes | |
clientId |
string | Yes | Computer ID (Empirum client_id). |
description |
string, nullable | Yes | |
roles |
array of string | Yes | Assigned roles. |
isRevoked |
boolean | Yes |
true if the principal is revoked. |
expiresAtUtc |
string (date-time), nullable | Yes | Expiry date (UTC). |
createdAtUtc |
string (date-time) | Yes | Creation time (UTC). |
DELETE /api/admin/local-principals/{id}
Permanently deletes a local principal and its role assignments.
Required role: admin.manage
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id |
path | integer (int32) | Yes | Local principal ID. |
Responses
| Status | Description | Schema |
|---|---|---|
200 |
OK | – |
PATCH /api/admin/local-principals/{id}/revoke
Revokes or restores a local principal.
Required role: admin.manage
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id |
path | integer (int32) | Yes | Local principal ID. |
Request body (required, application/json, schema SetRevokedRequest)
| Field | Type | Required | Description |
|---|---|---|---|
isRevoked |
boolean | Yes |
true if the principal is revoked. |
Example request body (placeholder values):
{
"isRevoked": false
}Responses
| Status | Description | Schema |
|---|---|---|
200 |
OK | LocalPrincipalDto |
Response fields (LocalPrincipalDto):
| Field | Type | Required | Description |
|---|---|---|---|
id |
integer (int32) | Yes | |
clientId |
string | Yes | Computer ID (Empirum client_id). |
description |
string, nullable | Yes | |
roles |
array of string | Yes | Assigned roles. |
isRevoked |
boolean | Yes |
true if the principal is revoked. |
expiresAtUtc |
string (date-time), nullable | Yes | Expiry date (UTC). |
createdAtUtc |
string (date-time) | Yes | Creation time (UTC). |
GET /api/admin/roles
Returns all roles that can be assigned to principals, with descriptions.
Required role: admin.manage
Responses
| Status | Description | Schema |
|---|---|---|
200 |
OK | array of RoleDto |
Response fields (RoleDto):
| Field | Type | Required | Description |
|---|---|---|---|
role |
string | Yes | Role. |
description |
string | Yes | Description of the role. |
GET /api/admin/features
Returns which optional features are enabled for the admin UI.
Required role: admin.manage
Responses
| Status | Description | Schema |
|---|---|---|
200 |
OK | AdminFeatures |
Response fields (AdminFeatures):
| Field | Type | Required | Description |
|---|---|---|---|
idpEnabled |
boolean | Yes |
true if Identity Provider principals are enabled. |
Computers
Computer objects, hardware and software inventory, health and security posture, fleet issue sweeps, software deployment, reinstall and uninstall, activation, rescan, reboot, variables and effective OS deployment settings.
| Method | Path | Summary |
|---|---|---|
| GET | /api/computer |
Returns a paged list of all managed Empirum endpoints. |
| POST | /api/computer |
Creates a computer in Empirum. |
| GET | /api/computer/{id} |
Returns a single managed endpoint by its Empirum client_id. |
| PATCH | /api/computer/{id} |
Partially updates a computer — only the provided fields change. |
| DELETE | /api/computer/{id} |
Deletes a computer. |
| POST | /api/computer/search |
Searches managed endpoints using one or more filter criteria. |
| GET | /api/computer/patch-status |
Returns the fleet-wide status of a single patch across all computers with scan data for it. |
| POST | /api/computer/software-search |
Returns all computers that have every specified product installed (AND across the list). |
| POST | /api/computer/distribution-history/search |
Searches distribution events across all computers (ArchiveDistJobs). |
| GET | /api/computer/issues/low-disk |
Returns all endpoints with at least one fixed drive below the free-space threshold, with drive details. |
| GET | /api/computer/issues/battery-wear |
Returns all endpoints with at least one battery worn below the health threshold (full-charge capacity as a percentage of design capacity), with battery details. |
| GET | /api/computer/issues/bitlocker-off |
Returns Windows endpoints whose fixed disks are not BitLocker-encrypted per inventory. |
| GET | /api/computer/issues/pending-reboot |
Returns all endpoints with a pending reboot. |
| GET | /api/computer/issues/stale-agent |
Returns all endpoints whose UEM agent has stopped reporting on schedule. |
| GET | /api/computer/issues/stale-inventory |
Returns all endpoints whose last inventory scan is at least minDaysStale days old. |
| GET | /api/computer/issues/failed-deployment |
Returns all endpoints with at least one software deployment that has failed, with the failed package list. |
| GET | /api/computer/issues/shared-package-failure |
Returns packages whose installation fails on multiple devices, grouped by package. |
| GET | /api/computer/issues/shared-package-failure/devices |
Drill-down for the shared-package-failure issue: all devices (paged) where the given package currently fails. |
| GET | /api/computer/issues/missing-patch |
Returns all endpoints currently missing patches. |
| GET | /api/computer/issues/stale-deployment |
Returns endpoints where a software installation was assigned but never started, even though the device is online. |
| GET | /api/computer/issues/agent-suspended |
Returns all endpoints whose UEM agent is currently paused. |
| GET | /api/computer/issues/overview |
Returns all endpoints that have at least one active issue, with each matched issue inline. |
| GET | /api/computer/{id}/issues |
Full issue picture for one endpoint: every fleet issue evaluated against this device, with detail inline. |
| GET | /api/computer/{id}/security-posture |
Returns antivirus, firewall, Secure Boot, and script-policy state for an endpoint. |
| GET | /api/computer/{id}/system-info |
Returns last-inventory system info and customer-defined management properties for an endpoint. |
| GET | /api/computer/{id}/variables |
Lists this computer's directly-assigned variable value(s). |
| POST | /api/computer/{id}/variables/search |
Resolves a single computer variable's value, with optional inheritance resolution. |
| PUT | /api/computer/{id}/variables/{varId} |
Sets this computer's own (direct) value for a scalar (non-collection) variable. A null or omitted value deletes the override, falling back to inheritance/catalog default on later reads. |
| GET | /api/computer/{id}/variables/{varId}/collection |
Lists this computer's direct entries (bundles) for a collection variable. |
| POST | /api/computer/{id}/variables/{varId}/collection |
Adds one new entry (bundle) to a collection variable on this computer. |
| PATCH | /api/computer/{id}/variables/{varId}/collection/{collectionId} |
Partially updates one existing variable collection entry. |
| DELETE | /api/computer/{id}/variables/{varId}/collection/{collectionId} |
Deletes an entire variable collection entry (all its child values). |
| GET | /api/computer/{id}/reboot-status |
Returns whether a reboot is pending and what triggered it (e.g. WindowsUpdate, SoftwareInstall). |
| GET | /api/computer/{id}/groups |
Returns the Empirum deployment groups the endpoint belongs to, optionally filtered by a group-name substring. |
| GET | /api/computer/{id}/packages/{packageId}/groups |
Returns the configuration/assignment groups through which a given package is assigned to this computer. |
| GET | /api/computer/{id}/agent-template |
Returns the computer's effective Agent Template — resolved via its own group and ancestor groups by EMC's own resolver (assignment only ever happens at the group level), with the winning group as provenance. |
| GET | /api/computer/{id}/os-image-sku |
Returns the computer's effective OS image SKU — resolved via its own group and ancestor groups by EMC's own resolver, with the winning group as provenance. |
| GET | /api/computer/{id}/pxe-bootimage |
Returns the computer's effective PXE boot image — resolved via its own group and ancestor groups by EMC's own resolver, with the winning group as provenance. |
| GET | /api/computer/{id}/language-packs |
Returns the computer's effective OS Language Packs (multi-assign — one winner per pack) — resolved via its own group and ancestor groups by EMC's own resolver, each with the winning group as provenance. |
| GET | /api/computer/{id}/uem-agent |
Returns UEM agent information grouped into three objects: desiredState, inventory, and dailyStatus. |
| GET | /api/computer/{id}/health |
Returns the agent reporting status and overall health classification for an endpoint. |
| GET | /api/computer/{id}/software-deployment |
Returns the assigned Empirum packages for software deployment. |
| GET | /api/computer/{id}/patch-status |
Returns missing-patch counts and the date of the last patch scan. |
| POST | /api/computer/{id}/patches-search |
Searches the detailed patch list for a computer with optional filtering and pagination. |
| GET | /api/computer/{id}/setup-error-log |
Returns cumulative setup.inf error output from failed software deployments. |
| GET | /api/computer/{id}/distribution-history |
Returns the most recent software distribution events for the device from the Empirum agent status-message log (ArchiveDistJobs). |
| GET | /api/computer/{id}/inventory/installed-software |
Returns the software inventory detected during the last Empirum scan. |
| GET | /api/computer/{id}/inventory/services |
Returns Windows services on an endpoint, optionally filtered by status or name. |
| GET | /api/computer/{id}/inventory/disks |
Returns disk drive capacity and free-space data from the last inventory scan. |
| GET | /api/computer/{id}/inventory/batteries |
Returns battery details (status, capacity, health/wear) from the last inventory scan. |
| GET | /api/computer/{id}/inventory/network-adapters |
Returns network adapter configuration (IP, MAC, DNS, DHCP) from the last inventory scan. |
| GET | /api/computer/{id}/inventory/printers |
Returns installed printers (WMI-based: name, port, driver, share, resolution) from the last inventory scan. |
| GET | /api/computer/{id}/inventory/bios |
Returns BIOS details (manufacturer, versions, serial number, UUID) from the last inventory scan. |
| GET | /api/computer/{id}/inventory/computer-system |
Returns WMI ComputerSystem data (manufacturer, model) from the last inventory scan. |
| GET | /api/computer/{id}/inventory/video-controllers |
Returns video controllers (GPU name, RAM, video mode) from the last inventory scan. |
| GET | /api/computer/{id}/inventory/monitors |
Returns attached monitors (EDID name, serial, size, resolution) from the last inventory scan. |
| GET | /api/computer/{id}/inventory/processors |
Returns processors (name, manufacturer, core/logical-processor counts, clock speeds) from the last inventory scan. |
| GET | /api/computer/{id}/inventory |
Returns the aggregated inventory picture of one computer in a single call: core record, system info, BIOS, WMI ComputerSystem, disks, network adapters, batteries, printers, video controllers, monitors, and processors. |
| POST | /api/computer/{id}/software-reinstall |
Triggers an enforced reinstall of a package via its existing tree assignment. |
| GET | /api/computer/{id}/software-reinstall |
Lists the currently existing reinstall groups for this computer. |
| DELETE | /api/computer/{id}/software-reinstall |
Cancels the given pending reinstall for this computer by removing the associated reinstall group. |
| POST | /api/computer/{id}/software-uninstall |
Triggers the uninstallation of an installed, assigned package on this computer. |
| GET | /api/computer/{id}/pm-groups |
Returns the Patch Management groups that apply to this computer through its group memberships. |
| POST | /api/computer/{id}/rescan |
Forces a fresh inventory or patch scan on this computer. |
| POST | /api/computer/{id}/reboot |
Flags this computer to reboot at the UEM agent's next polling interval (Empirum SRL — Silent Reboot Logic). |
| POST | /api/computer/{id}/activation |
Activates this computer for software deployment or PXE boot. |
| DELETE | /api/computer/{id}/activation |
Deactivates this computer. |
GET /api/computer
Returns a paged list of all managed Empirum endpoints.
Required role: computer.read
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
skip |
query | integer (int32) | No | Number of items to skip (paging). |
top |
query | integer (int32) | No | Maximum number of items to return (page size). |
lastSeenAfter |
query | string (date-time) | No | Only computers seen after this UTC timestamp. |
modifiedAfter |
query | string (date-time) | No | Only objects modified after this UTC timestamp (delta synchronization). |
inventoryAfter |
query | string (date-time) | No | Only computers inventoried after this UTC timestamp. |
inventoryBefore |
query | string (date-time) | No | Only computers inventoried before this UTC timestamp. |
neverSeen |
query | boolean | No | Only computers that never contacted the server. |
neverInventoried |
query | boolean | No | Only computers without an inventory. |
Responses
| Status | Description | Schema |
|---|---|---|
200 |
OK | PagedResultOfComputer |
The response is a paged result (items, skip, top, totalCount, hasMore). Fields of each item:
| Field | Type | Required | Description |
|---|---|---|---|
id |
integer (int32) | Yes | Computer ID (Empirum client_id). |
hostname |
string | Yes | Hostname of the computer. |
domain |
string, nullable | Yes | Domain name. |
macAddress |
string, nullable | Yes | MAC address. |
uuid |
string (uuid) | Yes | Hardware UUID of the computer. |
lastSeenUtc |
string (date-time), nullable | Yes | Last agent contact (UTC). |
serialNumber |
string, nullable | No | Serial number. |
lastModified |
string (date-time), nullable | No | Time of the last modification (UTC). |
inventoryDate |
string (date-time), nullable | No | Date of the last inventory (UTC). |
inventoryId |
string, nullable | No | Inventory ID. |
ou |
string, nullable | No | Organizational unit (OU). |
pxeSupport |
boolean | No |
true if the computer supports PXE boot. |
isPxeActive |
boolean | No |
true if PXE boot is activated. |
POST /api/computer
Creates a computer in Empirum.
Either macAddress or a non-empty uuid is required; a computer without ipAddress is DHCP. The new computer belongs to no group — assign it afterwards with POST /api/group/{id}/computers. Returns 409 when the name+domain or the MAC already belongs to another computer.
Required role: computer.write
Request body (required, application/json, schema ComputerWriteRequest)
Body for POST /api/computer (create); also the internal merge base/result of PATCH /api/computer/{id}. Mirrors the EmpirumAPI computer property set (TFS EmpirumAPI\EmpirumAPI\Computer.cs GetProperties): Domain and IsDomain are mandatory, and either MacAddress or Uuid must be supplied. Ou sets only this computer's own CompVariables override for the ORGANIZATIONAL_UNIT designation (EMC's "OU for computer accounts" field) — a forced group value still takes precedence when reading the effective OU (see ComputerDbRepository.EffectiveOuSql); this is unaffected by writes here. An empty string on PATCH deletes the override (falls back to any inherited group value or catalog default), not just blanks it — see ComputerPatchRequest. DHCP is derived, not a field: a computer with no IpAddress is DHCP. Custom01–30 are deliberately not writable (read-only on the management block for now). Group membership is never set here — creating a computer and putting it into a group are separate operations; use POST /api/group/{id}/computers afterwards, which applies the full assignment rules (config-group exclusivity, special-group refusal). SerialNumber (optional) seeds/overwrites WMIBios.SerialNumber for the client — EMC itself never lets an admin set this manually (WMIBios is otherwise populated only by inventory/location-sync), so this is a REST-only convenience for pre-provisioning before the first inventory scan; a later scan overwrites it as usual. Writable on PATCH too (an empty string deletes the WMIBios row rather than blanking it — see ComputerPatchRequest), same delete-not-blank convention as Ou. Unknown JSON properties are rejected (400 naming the property) — a typo'd field on a write must not silently no-op. Description is accepted for backward compatibility with clients built against the pre-597219 contract but is a pure no-op: never stored, never validated beyond deserialization. The controller logs a warning when a caller still sends it (see LogWarningDescriptionFieldIgnored).
| Field | Type | Required | Description |
|---|---|---|---|
name |
string | Yes | Name of the computer. |
domain |
string | Yes | Domain name. |
isDomain |
boolean | Yes |
true if the computer is domain-joined. |
inventoryId |
string, nullable | No | Inventory ID. |
macAddress |
string, nullable | No | MAC address. |
uuid |
string (uuid), nullable | No | Hardware UUID of the computer. |
pxeSupport |
boolean | No |
true if the computer supports PXE boot. |
ipAddress |
string, nullable | No | IP address. |
subnetMask |
string, nullable | No | Subnet mask. |
standardGateway |
string, nullable | No | Default gateway. |
ou |
string, nullable | No | Organizational unit (OU). |
serialNumber |
string, nullable | No | Serial number. |
description |
string, nullable | No | Description of the computer. |
Example request body (placeholder values):
{
"name": "string",
"domain": "string",
"isDomain": false,
"inventoryId": "string",
"macAddress": "string",
"uuid": "00000000-0000-0000-0000-000000000000",
"pxeSupport": false,
"ipAddress": "string",
"subnetMask": "string",
"standardGateway": "string",
"ou": "string",
"serialNumber": "string",
"description": "string"
}Responses
| Status | Description | Schema |
|---|---|---|
200 |
OK | Not described in the specification |
409 |
Conflict | ComputerWriteConflict |
GET /api/computer/{id}
Returns a single managed endpoint by its Empirum client_id.
Required role: computer.read
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id |
path | integer (int32) | Yes | Computer ID (Empirum client_id). |
Responses
| Status | Description | Schema |
|---|---|---|
200 |
OK | Computer |
Response fields (Computer):
| Field | Type | Required | Description |
|---|---|---|---|
id |
integer (int32) | Yes | |
hostname |
string | Yes | Hostname of the computer. |
domain |
string, nullable | Yes | Domain name. |
macAddress |
string, nullable | Yes | MAC address. |
uuid |
string (uuid) | Yes | Hardware UUID of the computer. |
lastSeenUtc |
string (date-time), nullable | Yes | Last agent contact (UTC). |
serialNumber |
string, nullable | No | Serial number. |
lastModified |
string (date-time), nullable | No | Time of the last modification (UTC). |
inventoryDate |
string (date-time), nullable | No | Date of the last inventory (UTC). |
inventoryId |
string, nullable | No | Inventory ID. |
ou |
string, nullable | No | Organizational unit (OU). |
pxeSupport |
boolean | No |
true if the computer supports PXE boot. |
isPxeActive |
boolean | No |
true if PXE boot is activated. |
PATCH /api/computer/{id}
Partially updates a computer; only the provided fields change.
The patch is merged onto the current writable field set: an omitted/null field keeps the stored value, an empty string clears it, the empty GUID clears uuid. The merged result must still satisfy the write rules (MAC-or-UUID, static-IP block, …). Returns 409 when the new name+domain or MAC belongs to another computer.
Required role: computer.write
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id |
path | integer (int32) | Yes | Computer ID (Empirum client_id). |
Request body (required, application/json, schema ComputerPatchRequest)
Body for PATCH /api/computer/{id} — a partial update merged onto the computer's current writable field set: an omitted/null field keeps the stored value, an empty string clears it. Uuid: pass the empty GUID to clear. There is no groupId — group membership is a group operation (POST/DELETE /api/group/{id}/computers), never a computer write. The merged result runs through string? ComputerWriteRules.Validate(ComputerWriteRequest request, out ComputerWriteRequest normalized), so invariants (MAC-or-UUID, static-IP block, …) hold after the merge. Unknown JSON properties are rejected (400 naming the property) — on a PATCH a typo'd field would otherwise return 200 while silently not updating anything. Description is accepted for backward compatibility but is a pure no-op — see ComputerWriteRequest's doc comment. SerialNumber follows the same delete-not-blank convention as Ou: an empty string deletes the WMIBios row (not just clears the column) so a later inventory scan can seed it cleanly again.
| Field | Type | Required | Description |
|---|---|---|---|
name |
string, nullable | No | Name of the computer. |
domain |
string, nullable | No | Domain name. |
isDomain |
boolean, nullable | No |
true if the computer is domain-joined. |
inventoryId |
string, nullable | No | Inventory ID. |
macAddress |
string, nullable | No | MAC address. |
uuid |
string (uuid), nullable | No | Hardware UUID of the computer. |
pxeSupport |
boolean, nullable | No |
true if the computer supports PXE boot. |
ipAddress |
string, nullable | No | IP address. |
subnetMask |
string, nullable | No | Subnet mask. |
standardGateway |
string, nullable | No | Default gateway. |
ou |
string, nullable | No | Organizational unit (OU). |
serialNumber |
string, nullable | No | Serial number. |
description |
string, nullable | No | Description of the computer. |
Example request body (placeholder values):
{
"name": "string",
"domain": "string",
"isDomain": false,
"inventoryId": "string",
"macAddress": "string",
"uuid": "00000000-0000-0000-0000-000000000000",
"pxeSupport": false,
"ipAddress": "string",
"subnetMask": "string",
"standardGateway": "string",
"ou": "string",
"serialNumber": "string",
"description": "string"
}Responses
| Status | Description | Schema |
|---|---|---|
200 |
OK | Not described in the specification |
409 |
Conflict | ComputerWriteConflict |
DELETE /api/computer/{id}
Deletes a computer.
Required role: computer.write
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id |
path | integer (int32) | Yes | Client id of the computer to delete. |
force |
query | boolean | No | Required true to delete a computer that is still assigned to a group. |
Responses
| Status | Description | Schema |
|---|---|---|
204 |
Deleted. | – |
404 |
Typed body: `ComputerNotFound`. | ComputerDeleteConflict |
409 |
Typed body: `MasterServer` (never deletable) or `Assigned` (retry with `force=true`). | ComputerDeleteConflict |
POST /api/computer/search
Searches managed endpoints using one or more filter criteria.
Required role: computer.read
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
skip |
query | integer (int32) | No | Number of items to skip (paging). |
top |
query | integer (int32) | No | Maximum number of items to return (page size). |
Request body (required, application/json, schema ComputerSearchFilter)
| Field | Type | Required | Description |
|---|---|---|---|
clientId |
integer (int32), nullable | No | Computer ID (Empirum client_id). |
hostname |
string, nullable | No | Hostname of the computer. |
uuid |
string (uuid), nullable | No | Hardware UUID of the computer. |
macAddress |
string, nullable | No | MAC address. |
serialNumber |
string, nullable | No | Serial number. |
domain |
string, nullable | No | Domain name. |
manufacturer |
string, nullable | No | Manufacturer. |
minRamGb |
integer (int32), nullable | No | Minimum RAM in GB. |
lastSeenAfter |
string (date-time), nullable | No | Only computers seen after this UTC timestamp. |
modifiedAfter |
string (date-time), nullable | No | Only computers modified after this UTC timestamp. |
inventoryAfter |
string (date-time), nullable | No | Only computers inventoried after this UTC timestamp. |
inventoryBefore |
string (date-time), nullable | No | Only computers inventoried before this UTC timestamp. |
neverSeen |
boolean, nullable | No | Only computers that never contacted the server. |
neverInventoried |
boolean, nullable | No | Only computers without an inventory. |
osName |
string, nullable | No | Operating system name. |
osEdition |
string, nullable | No | Operating system edition. |
osVersion |
string, nullable | No | Operating system version. |
osBuild |
string, nullable | No | Operating system build number. |
platform |
string, nullable | No | Platform. |
language |
string, nullable | No | Language. |
architecture |
string, nullable | No | Architecture. |
ipAddress |
string, nullable | No | IP address. |
ou |
string, nullable | No | Organizational unit (OU). |
pxeSupport |
boolean, nullable | No |
true if the computer supports PXE boot. |
isPxeActive |
boolean, nullable | No |
true if PXE boot is activated. |
Example request body (placeholder values):
{
"clientId": 0,
"hostname": "string",
"uuid": "00000000-0000-0000-0000-000000000000",
"macAddress": "string",
"serialNumber": "string",
"domain": "string",
"manufacturer": "string",
"minRamGb": 0,
"lastSeenAfter": "2026-01-01T00:00:00Z",
"modifiedAfter": "2026-01-01T00:00:00Z",
"inventoryAfter": "2026-01-01T00:00:00Z",
"inventoryBefore": "2026-01-01T00:00:00Z",
"neverSeen": false,
"neverInventoried": false,
"osName": "string",
"osEdition": "string",
"osVersion": "string",
"osBuild": "string",
"platform": "string",
"language": "string",
"architecture": "string",
"ipAddress": "string",
"ou": "string",
"pxeSupport": false,
"isPxeActive": false
}Responses
| Status | Description | Schema |
|---|---|---|
200 |
OK | PagedResultOfComputer |
The response is a paged result (items, skip, top, totalCount, hasMore). Fields of each item:
| Field | Type | Required | Description |
|---|---|---|---|
id |
integer (int32) | Yes | Computer ID (Empirum client_id). |
hostname |
string | Yes | Hostname of the computer. |
domain |
string, nullable | Yes | Domain name. |
macAddress |
string, nullable | Yes | MAC address. |
uuid |
string (uuid) | Yes | Hardware UUID of the computer. |
lastSeenUtc |
string (date-time), nullable | Yes | Last agent contact (UTC). |
serialNumber |
string, nullable | No | Serial number. |
lastModified |
string (date-time), nullable | No | Time of the last modification (UTC). |
inventoryDate |
string (date-time), nullable | No | Date of the last inventory (UTC). |
inventoryId |
string, nullable | No | Inventory ID. |
ou |
string, nullable | No | Organizational unit (OU). |
pxeSupport |
boolean | No |
true if the computer supports PXE boot. |
isPxeActive |
boolean | No |
true if PXE boot is activated. |
GET /api/computer/patch-status
Returns the fleet-wide status of a single patch across all computers with scan data for it.
Required role: computer.read
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
skip |
query | integer (int32) | No | Number of items to skip (paging). |
top |
query | integer (int32) | No | Maximum number of items to return (page size). |
lastSeenWithinDays |
query | integer (int32) | No | Only computers that contacted the server within the last N days. |
domain |
query | string | No | Filter by domain name. |
hostnameContains |
query | string | No | Filter by a substring of the hostname. |
groupId |
query | string (uuid) | No | Restrict results to computers in this deployment group (GUID). |
IsEmpty |
query | boolean | No | Filter for empty (true) or non-empty (false) results. |
patchId |
query | integer (int32) | No | Patch ID. |
qNumber |
query | string | No | Filter by patch Q-number (KB article). |
patchName |
query | string | No | Filter by patch name (substring). |
scanStatus |
query | string | No | Filter by patch scan status. |
Responses
| Status | Description | Schema |
|---|---|---|
200 |
OK | PagedResultOfPatchStatusDevice |
The response is a paged result (items, skip, top, totalCount, hasMore). Fields of each item:
One computer's scan state for a single patch (fleet-wide patch pivot).
| Field | Type | Required | Description |
|---|---|---|---|
id |
integer (int32) | Yes | ID of the patch. |
hostname |
string | Yes | Hostname of the computer. |
domain |
string, nullable | Yes | Domain name. |
lastScanDate |
string (date-time), nullable | Yes | Date of the last patch scan. |
scanStatus |
string, nullable | Yes | Patch scan status. |
patchStatus |
string, nullable | Yes | Patch status. |
isAssigned |
boolean | Yes |
true if assigned. |
installedDate |
string (date-time), nullable | Yes | Installation date. |
qNumber |
string, nullable | Yes | Patch Q-number (KB article). |
patchName |
string, nullable | Yes | Patch name. |
productName |
string, nullable | Yes | Product name. |
patchId |
integer (int32) | Yes | Patch ID. |
patchUid |
string (uuid) | Yes | Unique patch identifier. |
productId |
integer (int32) | No | Patch catalog product ID. |
POST /api/computer/software-search
Returns all computers that have every specified product installed (AND across the list).
Required role: computer.read
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
skip |
query | integer (int32) | No | Number of items to skip (paging). |
top |
query | integer (int32) | No | Maximum number of items to return (page size). |
Request body (required, application/json, schema InstalledSoftwareSearchRequest)
| Field | Type | Required | Description |
|---|---|---|---|
products |
array of InstalledSoftwareFilter | Yes | Products. |
Example request body (placeholder values):
{
"products": [
{
"productName": "string",
"version": "string"
}
]
}Responses
| Status | Description | Schema |
|---|---|---|
200 |
Paged list of matching computers. | PagedResultOfComputer |
The response is a paged result (items, skip, top, totalCount, hasMore). Fields of each item:
| Field | Type | Required | Description |
|---|---|---|---|
id |
integer (int32) | Yes | Computer ID (Empirum client_id). |
hostname |
string | Yes | Hostname of the computer. |
domain |
string, nullable | Yes | Domain name. |
macAddress |
string, nullable | Yes | MAC address. |
uuid |
string (uuid) | Yes | Hardware UUID of the computer. |
lastSeenUtc |
string (date-time), nullable | Yes | Last agent contact (UTC). |
serialNumber |
string, nullable | No | Serial number. |
lastModified |
string (date-time), nullable | No | Time of the last modification (UTC). |
inventoryDate |
string (date-time), nullable | No | Date of the last inventory (UTC). |
inventoryId |
string, nullable | No | Inventory ID. |
ou |
string, nullable | No | Organizational unit (OU). |
pxeSupport |
boolean | No |
true if the computer supports PXE boot. |
isPxeActive |
boolean | No |
true if PXE boot is activated. |
POST /api/computer/distribution-history/search
Searches distribution events across all computers (ArchiveDistJobs).
Required role: computer.read
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
skip |
query | integer (int32) | No | Number of items to skip (paging). |
top |
query | integer (int32) | No | Maximum number of items to return (page size). |
Request body (required, application/json, schema DistributionHistorySearchFilter)
| Field | Type | Required | Description |
|---|---|---|---|
packageName |
string, nullable | No | Substring match on the package name. |
version |
string, nullable | No | Prefix match on the package version, e.g. "11.0" matches 11.0, 11.0.4, ... |
after |
string (date-time), nullable | No | Only events at or after this UTC timestamp. |
before |
string (date-time), nullable | No | Only events at or before this UTC timestamp. |
result |
string, nullable | No | Substring (case-insensitive) match on the result, e.g. "Success". |
installMode |
string, nullable | No | Substring (case-insensitive) match on the install mode. |
info |
string, nullable | No | Substring (case-insensitive) match on the info field (the installer command line the agent reported). |
Example request body (placeholder values):
{
"packageName": "string",
"version": "string",
"after": "2026-01-01T00:00:00Z",
"before": "2026-01-01T00:00:00Z",
"result": "string",
"installMode": "string",
"info": "string"
}Responses
| Status | Description | Schema |
|---|---|---|
200 |
OK | PagedResultOfComputerDistributionEvent |
The response is a paged result (items, skip, top, totalCount, hasMore). Fields of each item:
| Field | Type | Required | Description |
|---|---|---|---|
computerId |
integer (int32) | Yes | Computer ID (Empirum client_id). |
hostname |
string | Yes | Hostname of the computer. |
domain |
string, nullable | Yes | Domain name. |
packageName |
string, nullable | Yes | Package name. |
version |
string, nullable | Yes | Version. |
result |
string, nullable | Yes | Result. |
classification |
string, nullable | Yes | Patch classification. |
logDateUtc |
string (date-time), nullable | Yes | Log entry time (UTC). |
kbNumber |
string, nullable | Yes | KB article number. |
installMode |
string, nullable | Yes | Installation mode. |
info |
string, nullable | Yes |
GET /api/computer/issues/low-disk
Returns all endpoints with at least one fixed drive below the free-space threshold, with drive details.
Required role: computer.read
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
skip |
query | integer (int32) | No | Number of items to skip (paging). |
top |
query | integer (int32) | No | Maximum number of items to return (page size). |
lastSeenWithinDays |
query | integer (int32) | No | Only computers that contacted the server within the last N days. |
domain |
query | string | No | Filter by domain name. |
hostnameContains |
query | string | No | Filter by a substring of the hostname. |
groupId |
query | string (uuid) | No | Restrict results to computers in this deployment group (GUID). |
IsEmpty |
query | boolean | No | Filter for empty (true) or non-empty (false) results. |
minFreePercent |
query | integer (int32) | No | Report drives with less free space than this percentage. |
minFreeGb |
query | integer (int32) | No | Report drives with less free space than this value in GB. |
Responses
| Status | Description | Schema |
|---|---|---|
200 |
OK | PagedResultOfLowDiskComputer |
The response is a paged result (items, skip, top, totalCount, hasMore). Fields of each item:
| Field | Type | Required | Description |
|---|---|---|---|
id |
integer (int32) | Yes | Computer ID (Empirum client_id). |
hostname |
string | Yes | Hostname of the computer. |
domain |
string, nullable | Yes | Domain name. |
macAddress |
string, nullable | Yes | MAC address. |
uuid |
string (uuid) | Yes | Hardware UUID of the computer. |
lastSeenUtc |
string (date-time), nullable | Yes | Last agent contact (UTC). |
serialNumber |
string, nullable | Yes | Serial number. |
lowDiskDrives |
array of LowDiskDrive | Yes | Drives below the free space threshold. |
GET /api/computer/issues/battery-wear
Returns all endpoints with at least one battery worn below the health threshold (full-charge capacity as a percentage of design capacity), with battery details.
Required role: computer.read
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
skip |
query | integer (int32) | No | Number of items to skip (paging). |
top |
query | integer (int32) | No | Maximum number of items to return (page size). |
lastSeenWithinDays |
query | integer (int32) | No | Only computers that contacted the server within the last N days. |
domain |
query | string | No | Filter by domain name. |
hostnameContains |
query | string | No | Filter by a substring of the hostname. |
groupId |
query | string (uuid) | No | Restrict results to computers in this deployment group (GUID). |
IsEmpty |
query | boolean | No | Filter for empty (true) or non-empty (false) results. |
maxHealthPercent |
query | integer (int32) | No | Report batteries with a health (full charge vs. design capacity) at or below this percentage. |
Responses
| Status | Description | Schema |
|---|---|---|
200 |
OK | PagedResultOfBatteryWearComputer |
The response is a paged result (items, skip, top, totalCount, hasMore). Fields of each item:
| Field | Type | Required | Description |
|---|---|---|---|
id |
integer (int32) | Yes | Computer ID (Empirum client_id). |
hostname |
string | Yes | Hostname of the computer. |
domain |
string, nullable | Yes | Domain name. |
macAddress |
string, nullable | Yes | MAC address. |
uuid |
string (uuid) | Yes | Hardware UUID of the computer. |
lastSeenUtc |
string (date-time), nullable | Yes | Last agent contact (UTC). |
serialNumber |
string, nullable | Yes | Serial number. |
wornBatteries |
array of WornBattery | Yes | Batteries below the health threshold. |
GET /api/computer/issues/bitlocker-off
Returns Windows endpoints whose fixed disks are not BitLocker-encrypted per inventory.
Required role: computer.read
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
skip |
query | integer (int32) | No | Number of items to skip (paging). |
top |
query | integer (int32) | No | Maximum number of items to return (page size). |
lastSeenWithinDays |
query | integer (int32) | No | Only computers that contacted the server within the last N days. |
domain |
query | string | No | Filter by domain name. |
hostnameContains |
query | string | No | Filter by a substring of the hostname. |
groupId |
query | string (uuid) | No | Restrict results to computers in this deployment group (GUID). |
IsEmpty |
query | boolean | No | Filter for empty (true) or non-empty (false) results. |
Responses
| Status | Description | Schema |
|---|---|---|
200 |
OK | PagedResultOfBitlockerOffComputer |
The response is a paged result (items, skip, top, totalCount, hasMore). Fields of each item:
| Field | Type | Required | Description |
|---|---|---|---|
id |
integer (int32) | Yes | Computer ID (Empirum client_id). |
hostname |
string | Yes | Hostname of the computer. |
domain |
string, nullable | Yes | Domain name. |
macAddress |
string, nullable | Yes | MAC address. |
uuid |
string (uuid) | Yes | Hardware UUID of the computer. |
lastSeenUtc |
string (date-time), nullable | Yes | Last agent contact (UTC). |
serialNumber |
string, nullable | Yes | Serial number. |
unencryptedDisks |
array of BitlockerOffDisk | Yes | Fixed drives without BitLocker encryption. |
GET /api/computer/issues/pending-reboot
Returns all endpoints with a pending reboot.
Required role: computer.read
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
skip |
query | integer (int32) | No | Number of items to skip (paging). |
top |
query | integer (int32) | No | Maximum number of items to return (page size). |
lastSeenWithinDays |
query | integer (int32) | No | Only computers that contacted the server within the last N days. |
domain |
query | string | No | Filter by domain name. |
hostnameContains |
query | string | No | Filter by a substring of the hostname. |
groupId |
query | string (uuid) | No | Restrict results to computers in this deployment group (GUID). |
IsEmpty |
query | boolean | No | Filter for empty (true) or non-empty (false) results. |
minDaysSinceLastReboot |
query | integer (int32) | No | Minimum number of days since the last reboot. |
Responses
| Status | Description | Schema |
|---|---|---|
200 |
OK | PagedResultOfComputer |
The response is a paged result (items, skip, top, totalCount, hasMore). Fields of each item:
| Field | Type | Required | Description |
|---|---|---|---|
id |
integer (int32) | Yes | Computer ID (Empirum client_id). |
hostname |
string | Yes | Hostname of the computer. |
domain |
string, nullable | Yes | Domain name. |
macAddress |
string, nullable | Yes | MAC address. |
uuid |
string (uuid) | Yes | Hardware UUID of the computer. |
lastSeenUtc |
string (date-time), nullable | Yes | Last agent contact (UTC). |
serialNumber |
string, nullable | No | Serial number. |
lastModified |
string (date-time), nullable | No | Time of the last modification (UTC). |
inventoryDate |
string (date-time), nullable | No | Date of the last inventory (UTC). |
inventoryId |
string, nullable | No | Inventory ID. |
ou |
string, nullable | No | Organizational unit (OU). |
pxeSupport |
boolean | No |
true if the computer supports PXE boot. |
isPxeActive |
boolean | No |
true if PXE boot is activated. |
GET /api/computer/issues/stale-agent
Returns all endpoints whose UEM agent has stopped reporting on schedule.
Required role: computer.read
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
skip |
query | integer (int32) | No | Number of items to skip (paging). |
top |
query | integer (int32) | No | Maximum number of items to return (page size). |
lastSeenWithinDays |
query | integer (int32) | No | Only computers that contacted the server within the last N days. |
domain |
query | string | No | Filter by domain name. |
hostnameContains |
query | string | No | Filter by a substring of the hostname. |
groupId |
query | string (uuid) | No | Restrict results to computers in this deployment group (GUID). |
IsEmpty |
query | boolean | No | Filter for empty (true) or non-empty (false) results. |
minHoursStale |
query | integer (int32) | No | Minimum number of hours since the last agent contact. |
maxHoursStale |
query | integer (int32) | No | Maximum number of hours since the last agent contact. |
Responses
| Status | Description | Schema |
|---|---|---|
200 |
OK | PagedResultOfStaleAgentComputer |
The response is a paged result (items, skip, top, totalCount, hasMore). Fields of each item:
| Field | Type | Required | Description |
|---|---|---|---|
id |
integer (int32) | Yes | Computer ID (Empirum client_id). |
hostname |
string | Yes | Hostname of the computer. |
domain |
string, nullable | Yes | Domain name. |
macAddress |
string, nullable | Yes | MAC address. |
uuid |
string (uuid) | Yes | Hardware UUID of the computer. |
lastSeenUtc |
string (date-time), nullable | Yes | Last agent contact (UTC). |
serialNumber |
string, nullable | Yes | Serial number. |
hoursStale |
number (double), nullable | Yes | Hours since the last agent contact. |
GET /api/computer/issues/stale-inventory
Returns all endpoints whose last inventory scan is at least minDaysStale days old.
Required role: computer.read
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
skip |
query | integer (int32) | No | Number of items to skip (paging). |
top |
query | integer (int32) | No | Maximum number of items to return (page size). |
lastSeenWithinDays |
query | integer (int32) | No | Only computers that contacted the server within the last N days. |
domain |
query | string | No | Filter by domain name. |
hostnameContains |
query | string | No | Filter by a substring of the hostname. |
groupId |
query | string (uuid) | No | Restrict results to computers in this deployment group (GUID). |
IsEmpty |
query | boolean | No | Filter for empty (true) or non-empty (false) results. |
minDaysStale |
query | integer (int32) | No | Minimum age of the last inventory in days. |
includeNeverInventoried |
query | boolean | No | Include computers that were never inventoried. |
Responses
| Status | Description | Schema |
|---|---|---|
200 |
OK | PagedResultOfStaleInventoryComputer |
The response is a paged result (items, skip, top, totalCount, hasMore). Fields of each item:
LastInventoryUtc/DaysStale are null for never-inventoried devices (only included when the sweep asks for them).
| Field | Type | Required | Description |
|---|---|---|---|
id |
integer (int32) | Yes | Computer ID (Empirum client_id). |
hostname |
string | Yes | Hostname of the computer. |
domain |
string, nullable | Yes | Domain name. |
macAddress |
string, nullable | Yes | MAC address. |
uuid |
string (uuid) | Yes | Hardware UUID of the computer. |
lastSeenUtc |
string (date-time), nullable | Yes | Last agent contact (UTC). |
serialNumber |
string, nullable | Yes | Serial number. |
lastInventoryUtc |
string (date-time), nullable | Yes | Time of the last inventory (UTC). |
daysStale |
number (double), nullable | Yes | Age of the last inventory in days. |
GET /api/computer/issues/failed-deployment
Returns all endpoints with at least one software deployment that has failed, with the failed package list.
Required role: computer.read
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
skip |
query | integer (int32) | No | Number of items to skip (paging). |
top |
query | integer (int32) | No | Maximum number of items to return (page size). |
lastSeenWithinDays |
query | integer (int32) | No | Only computers that contacted the server within the last N days. |
domain |
query | string | No | Filter by domain name. |
hostnameContains |
query | string | No | Filter by a substring of the hostname. |
groupId |
query | string (uuid) | No | Restrict results to computers in this deployment group (GUID). |
IsEmpty |
query | boolean | No | Filter for empty (true) or non-empty (false) results. |
minFailedCount |
query | integer (int32) | No | Minimum number of failed installations. |
softwareId |
query | string (uuid) | No | Software package ID (GUID). |
packageName |
query | string | No | Filter by package name (substring). |
Responses
| Status | Description | Schema |
|---|---|---|
200 |
OK | PagedResultOfFailedDeploymentComputer |
The response is a paged result (items, skip, top, totalCount, hasMore). Fields of each item:
| Field | Type | Required | Description |
|---|---|---|---|
id |
integer (int32) | Yes | Computer ID (Empirum client_id). |
hostname |
string | Yes | Hostname of the computer. |
domain |
string, nullable | Yes | Domain name. |
macAddress |
string, nullable | Yes | MAC address. |
uuid |
string (uuid) | Yes | Hardware UUID of the computer. |
lastSeenUtc |
string (date-time), nullable | Yes | Last agent contact (UTC). |
serialNumber |
string, nullable | Yes | Serial number. |
failedPackages |
array of FailedDeploymentItem | Yes | Packages with failed installations. |
GET /api/computer/issues/shared-package-failure
Returns packages whose installation fails on multiple devices, grouped by package.
Required role: computer.read
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
skip |
query | integer (int32) | No | Number of items to skip (paging). |
top |
query | integer (int32) | No | Maximum number of items to return (page size). |
lastSeenWithinDays |
query | integer (int32) | No | Only computers that contacted the server within the last N days. |
domain |
query | string | No | Filter by domain name. |
hostnameContains |
query | string | No | Filter by a substring of the hostname. |
groupId |
query | string (uuid) | No | Restrict results to computers in this deployment group (GUID). |
IsEmpty |
query | boolean | No | Filter for empty (true) or non-empty (false) results. |
minAffectedCount |
query | integer (int32) | No | Minimum number of affected devices per package. |
softwareId |
query | string (uuid) | No | Software package ID (GUID). |
includeDevices |
query | boolean | No | Include the list of affected devices in the result. |
Responses
| Status | Description | Schema |
|---|---|---|
200 |
OK | PagedResultOfSharedPackageFailure |
The response is a paged result (items, skip, top, totalCount, hasMore). Fields of each item:
| Field | Type | Required | Description |
|---|---|---|---|
softwareId |
string (uuid), nullable | Yes | Software package ID (GUID). |
packageName |
string, nullable | Yes | Package name. |
affectedDeviceCount |
integer (int32) | Yes | Number of affected devices. |
affectedDevices |
array of SharedFailureDevice | Yes | Affected devices. |
GET /api/computer/issues/shared-package-failure/devices
Drill-down for the shared-package-failure issue: all devices (paged) where the given package currently fails.
Required role: computer.read
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
skip |
query | integer (int32) | No | Number of items to skip (paging). |
top |
query | integer (int32) | No | Maximum number of items to return (page size). |
lastSeenWithinDays |
query | integer (int32) | No | Only computers that contacted the server within the last N days. |
domain |
query | string | No | Filter by domain name. |
hostnameContains |
query | string | No | Filter by a substring of the hostname. |
groupId |
query | string (uuid) | No | Restrict results to computers in this deployment group (GUID). |
IsEmpty |
query | boolean | No | Filter for empty (true) or non-empty (false) results. |
softwareId |
query | string (uuid) | No | Software package ID (GUID). |
packageName |
query | string | No | Filter by package name (substring). |
Responses
| Status | Description | Schema |
|---|---|---|
200 |
OK | PagedResultOfSharedFailureDevice |
The response is a paged result (items, skip, top, totalCount, hasMore). Fields of each item:
| Field | Type | Required | Description |
|---|---|---|---|
id |
integer (int32) | Yes | Computer ID (Empirum client_id). |
hostname |
string | Yes | Hostname of the computer. |
domain |
string, nullable | Yes | Domain name. |
lastFailedUtc |
string (date-time), nullable | Yes | Time of the last failed installation (UTC). |
errorText |
string, nullable | Yes | Error text. |
GET /api/computer/issues/missing-patch
Returns all endpoints currently missing patches.
Required role: computer.read
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
skip |
query | integer (int32) | No | Number of items to skip (paging). |
top |
query | integer (int32) | No | Maximum number of items to return (page size). |
lastSeenWithinDays |
query | integer (int32) | No | Only computers that contacted the server within the last N days. |
domain |
query | string | No | Filter by domain name. |
hostnameContains |
query | string | No | Filter by a substring of the hostname. |
groupId |
query | string (uuid) | No | Restrict results to computers in this deployment group (GUID). |
IsEmpty |
query | boolean | No | Filter for empty (true) or non-empty (false) results. |
qNumber |
query | string | No | Filter by patch Q-number (KB article). |
bulletinId |
query | string | No | Filter by security bulletin ID. |
bulletinTitle |
query | string | No | Filter by security bulletin title (substring). |
productName |
query | string | No | Filter by product name (substring). |
patchType |
query | string | No | Filter by patch type. |
minSeverity |
query | string | No | Minimum vendor severity. |
minCvss |
query | number (double) | No | Minimum CVSS score. |
minVrr |
query | number (double) | No | Minimum Vulnerability Risk Rating (VRR) score. |
assigned |
query | boolean | No | Filter for assigned (true) or unassigned (false) items. |
minCount |
query | integer (int32) | No | Minimum number of missing patches per computer. |
Responses
| Status | Description | Schema |
|---|---|---|
200 |
OK | PagedResultOfMissingPatchComputer |
The response is a paged result (items, skip, top, totalCount, hasMore). Fields of each item:
| Field | Type | Required | Description |
|---|---|---|---|
id |
integer (int32) | Yes | Computer ID (Empirum client_id). |
hostname |
string | Yes | Hostname of the computer. |
domain |
string, nullable | Yes | Domain name. |
macAddress |
string, nullable | Yes | MAC address. |
uuid |
string (uuid) | Yes | Hardware UUID of the computer. |
lastSeenUtc |
string (date-time), nullable | Yes | Last agent contact (UTC). |
serialNumber |
string, nullable | Yes | Serial number. |
missingPatches |
array of MissingPatchItem | Yes | Missing patches. |
pmClientGaps |
array of string | Yes |
GET /api/computer/issues/stale-deployment
Returns endpoints where a software installation was assigned but never started, even though the device is online.
Required role: computer.read
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
skip |
query | integer (int32) | No | Number of items to skip (paging). |
top |
query | integer (int32) | No | Maximum number of items to return (page size). |
lastSeenWithinDays |
query | integer (int32) | No | Only computers that contacted the server within the last N days. |
domain |
query | string | No | Filter by domain name. |
hostnameContains |
query | string | No | Filter by a substring of the hostname. |
groupId |
query | string (uuid) | No | Restrict results to computers in this deployment group (GUID). |
IsEmpty |
query | boolean | No | Filter for empty (true) or non-empty (false) results. |
minHoursPending |
query | integer (int32) | No | Minimum number of hours a reboot has been pending. |
softwareId |
query | string (uuid) | No | Software package ID (GUID). |
packageName |
query | string | No | Filter by package name (substring). |
maxDaysPending |
query | integer (int32) | No | Maximum number of days a deployment has been pending. |
Responses
| Status | Description | Schema |
|---|---|---|
200 |
OK | PagedResultOfStaleDeploymentComputer |
The response is a paged result (items, skip, top, totalCount, hasMore). Fields of each item:
| Field | Type | Required | Description |
|---|---|---|---|
id |
integer (int32) | Yes | Computer ID (Empirum client_id). |
hostname |
string | Yes | Hostname of the computer. |
domain |
string, nullable | Yes | Domain name. |
macAddress |
string, nullable | Yes | MAC address. |
uuid |
string (uuid) | Yes | Hardware UUID of the computer. |
lastSeenUtc |
string (date-time), nullable | Yes | Last agent contact (UTC). |
serialNumber |
string, nullable | Yes | Serial number. |
stalePendingPackages |
array of StaleDeploymentItem | Yes | Packages pending longer than the threshold. |
GET /api/computer/issues/agent-suspended
Returns all endpoints whose UEM agent is currently paused.
Required role: computer.read
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
skip |
query | integer (int32) | No | Number of items to skip (paging). |
top |
query | integer (int32) | No | Maximum number of items to return (page size). |
lastSeenWithinDays |
query | integer (int32) | No | Only computers that contacted the server within the last N days. |
domain |
query | string | No | Filter by domain name. |
hostnameContains |
query | string | No | Filter by a substring of the hostname. |
groupId |
query | string (uuid) | No | Restrict results to computers in this deployment group (GUID). |
IsEmpty |
query | boolean | No | Filter for empty (true) or non-empty (false) results. |
Responses
| Status | Description | Schema |
|---|---|---|
200 |
OK | PagedResultOfSuspendedComputer |
The response is a paged result (items, skip, top, totalCount, hasMore). Fields of each item:
| Field | Type | Required | Description |
|---|---|---|---|
id |
integer (int32) | Yes | Computer ID (Empirum client_id). |
hostname |
string | Yes | Hostname of the computer. |
domain |
string, nullable | Yes | Domain name. |
macAddress |
string, nullable | Yes | MAC address. |
uuid |
string (uuid) | Yes | Hardware UUID of the computer. |
lastSeenUtc |
string (date-time), nullable | Yes | Last agent contact (UTC). |
serialNumber |
string, nullable | Yes | Serial number. |
suspensionMode |
SuspensionMode (enum: Suspended, PresentationMode, MaintenanceMode) | Yes | Agent suspension mode. |
suspendedUntil |
string (date-time), nullable | Yes | End of the agent suspension (UTC). |
GET /api/computer/issues/overview
Returns all endpoints that have at least one active issue, with each matched issue inline.
lastSeenDays=0 disables the recency filter. issues restricts to a comma-separated subset of issue names (e.g. "low-disk,failed-deployment"); omitted = all issues. minFreePercent/minFreeGb, maxHealthPercent, minHoursStale/maxHoursStale, and minHoursPending/maxDaysPending override the low-disk, battery-wear, stale-agent, and stale-deployment thresholds respectively — omitting them reproduces that endpoint's default behavior exactly.
Required role: computer.read
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
skip |
query | integer (int32) | No | Number of items to skip (paging). |
top |
query | integer (int32) | No | Maximum number of items to return (page size). |
lastSeenWithinDays |
query | integer (int32) | No | Only computers that contacted the server within the last N days. |
domain |
query | string | No | Filter by domain name. |
hostnameContains |
query | string | No | Filter by a substring of the hostname. |
groupId |
query | string (uuid) | No | Restrict results to computers in this deployment group (GUID). |
IsEmpty |
query | boolean | No | Filter for empty (true) or non-empty (false) results. |
lastSeenDays |
query | integer (int32) | No | Only computers that contacted the server within the last N days. |
issues |
query | string | No | Restrict the overview to these issue types. |
minFreePercent |
query | integer (int32) | No | Report drives with less free space than this percentage. |
minFreeGb |
query | integer (int32) | No | Report drives with less free space than this value in GB. |
maxHealthPercent |
query | integer (int32) | No | Report batteries with a health (full charge vs. design capacity) at or below this percentage. |
minHoursStale |
query | integer (int32) | No | Minimum number of hours since the last agent contact. |
maxHoursStale |
query | integer (int32) | No | Maximum number of hours since the last agent contact. |
minHoursPending |
query | integer (int32) | No | Minimum number of hours a reboot has been pending. |
maxDaysPending |
query | integer (int32) | No | Maximum number of days a deployment has been pending. |
Responses
| Status | Description | Schema |
|---|---|---|
200 |
OK | PagedResultOfIssueOverviewComputer |
The response is a paged result (items, skip, top, totalCount, hasMore). Fields of each item:
| Field | Type | Required | Description |
|---|---|---|---|
id |
integer (int32) | Yes | Computer ID (Empirum client_id). |
hostname |
string | Yes | Hostname of the computer. |
domain |
string, nullable | Yes | Domain name. |
macAddress |
string, nullable | Yes | MAC address. |
uuid |
string (uuid) | Yes | Hardware UUID of the computer. |
lastSeenUtc |
string (date-time), nullable | Yes | Last agent contact (UTC). |
serialNumber |
string, nullable | Yes | Serial number. |
issues |
array of IssueHit | Yes | Issues. |
GET /api/computer/{id}/issues
Full issue picture for one endpoint: every fleet issue evaluated against this device, with detail inline.
Same verdict logic as the fleet issues endpoints (each sweep scoped to this client). Null sections mean the issue is not present. Missing patches use the SecurityPatch default and are capped at 25 entries — use the per-device patches-search for the full list.
Required role: computer.read
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id |
path | integer (int32) | Yes | Computer ID (Empirum client_id). |
Responses
| Status | Description | Schema |
|---|---|---|
200 |
OK | ComputerIssues |
Response fields (ComputerIssues):
Full issue picture for one device: every fleet issue evaluated against this client, with the same detail payload the per-issue sweep would embed. A null section (or false/null scalar) means the issue is not present; ActiveIssues lists the names of all sections that hit, in IssueNames.Overview order.
| Field | Type | Required | Description |
|---|---|---|---|
id |
integer (int32) | Yes | |
hostname |
string | Yes | Hostname of the computer. |
domain |
string, nullable | Yes | Domain name. |
macAddress |
string, nullable | Yes | MAC address. |
uuid |
string (uuid) | Yes | Hardware UUID of the computer. |
lastSeenUtc |
string (date-time), nullable | Yes | Last agent contact (UTC). |
serialNumber |
string, nullable | Yes | Serial number. |
activeIssues |
array of string | Yes | Active issues. |
failedPackages |
array of FailedDeploymentItem, nullable | Yes | Packages with failed installations. |
missingPatches |
array of MissingPatchItem, nullable | Yes | Missing patches. |
pmClientGaps |
array of string, nullable | Yes | |
unencryptedDisks |
array of BitlockerOffDisk, nullable | Yes | Fixed drives without BitLocker encryption. |
lowDiskDrives |
array of LowDiskDrive, nullable | Yes | Drives below the free space threshold. |
wornBatteries |
array of WornBattery, nullable | Yes | Batteries below the health threshold. |
pendingReboot |
boolean | Yes |
true if a reboot is pending. |
staleAgentHours |
number (double), nullable | Yes | Threshold in hours for a stale agent. |
staleInventoryDays |
number (double), nullable | Yes | Threshold in days for a stale inventory. |
stalePendingPackages |
array of StaleDeploymentItem, nullable | Yes | Packages pending longer than the threshold. |
suspensionMode |
SuspensionMode (enum: Suspended, PresentationMode, MaintenanceMode) | Yes | Agent suspension mode. |
suspendedUntil |
string (date-time), nullable | Yes | End of the agent suspension (UTC). |
GET /api/computer/{id}/security-posture
Returns antivirus, firewall, Secure Boot, and script-policy state for an endpoint.
Required role: computer.read
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id |
path | integer (int32) | Yes | Computer ID (Empirum client_id). |
staleAfterDays |
query | integer (int32) | No | Number of days after which an inventory is considered stale. |
Responses
| Status | Description | Schema |
|---|---|---|
200 |
OK | SecurityPosture |
Response fields (SecurityPosture):
Per-component security status with inventory-scan staleness context. Component data comes from the last inventory scan; when that scan is older than StaleAfterDays (query parameter, default 3), IsStale is true and component statuses (e.g. an "up to date" antivirus signature) may not reflect the current device state. A never-inventoried device is always stale (null date/age).
| Field | Type | Required | Description |
|---|---|---|---|
clientId |
integer (int32) | Yes | Computer ID (Empirum client_id). |
inventoryDateUtc |
string (date-time), nullable | Yes | Date of the last inventory (UTC). |
inventoryAgeDays |
integer (int32), nullable | Yes | Age of the last inventory in days. |
isStale |
boolean | Yes |
true if the inventory is older than the threshold. |
staleAfterDays |
integer (int32) | Yes | Threshold in days for a stale inventory. |
antivirus |
AntivirusInfo | Yes | Antivirus status. |
firewall |
FirewallStatus | Yes | Firewall status. |
secureBoot |
SecureBootStatus | Yes | Secure Boot status. |
scriptPolicy |
ScriptPolicyStatus | Yes | Script execution policy. |
bitlocker |
BitlockerInfo | Yes | BitLocker status. |
GET /api/computer/{id}/system-info
Returns last-inventory system info and customer-defined management properties for an endpoint.
Required role: computer.read
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id |
path | integer (int32) | Yes | Computer ID (Empirum client_id). |
Responses
| Status | Description | Schema |
|---|---|---|
200 |
OK | SystemInfo |
Response fields (SystemInfo):
| Field | Type | Required | Description |
|---|---|---|---|
clientId |
integer (int32) | Yes | Computer ID (Empirum client_id). |
name |
string, nullable | Yes | |
domain |
string, nullable | Yes | Domain name. |
fqdn |
string, nullable | Yes | Fully qualified domain name. |
inventoryId |
string, nullable | Yes | Inventory ID. |
lastSeenUtc |
string (date-time), nullable | Yes | Last agent contact (UTC). |
operatingSystem |
string, nullable | Yes | Operating system. |
osName |
string, nullable | Yes | Operating system name. |
osEdition |
string, nullable | Yes | Operating system edition. |
osVersion |
string, nullable | Yes | Operating system version. |
osBuild |
string, nullable | Yes | Operating system build number. |
platform |
string, nullable | Yes | Platform. |
language |
string, nullable | Yes | Language. |
architecture |
string, nullable | Yes | Architecture. |
processorName |
string, nullable | Yes | Processor name. |
processorCount |
integer (int32), nullable | Yes | Number of processors. |
processorMhz |
integer (int32), nullable | Yes | Processor clock speed in MHz. |
memoryMb |
integer (int32), nullable | Yes | Memory in MB. |
manufacturer |
string, nullable | Yes | Manufacturer. |
model |
string, nullable | Yes | Model. |
biosVersion |
string, nullable | Yes | BIOS version. |
biosDate |
string, nullable | Yes | BIOS date. |
userIsAdmin |
boolean, nullable | Yes |
true if the logged-on user has administrative rights. |
loggedOnUser |
string, nullable | Yes | Logged-on user. |
timeZone |
string, nullable | Yes | Time zone. |
inventoryDate |
string (date-time), nullable | Yes | Date of the last inventory (UTC). |
displayAdapter |
string, nullable | No | Display adapter. |
screenResolution |
string, nullable | No | Screen resolution. |
bitVersion |
integer (int32), nullable | No | Operating system bitness (32 or 64 bit). |
vmType |
string, nullable | No | Virtual machine type, if virtualized. |
ipAddress |
string, nullable | No | IP address. |
management |
ComputerManagement | No | Management information. |
tempDirSizeMb |
integer (int32), nullable | No | Size of the user temp directory in MB (InvComputer.TempDirSize). Null when the scan did not report it — the temp-dir scan is optional, and a stored 0 is treated as not reported. |
GET /api/computer/{id}/variables
Lists this computer's directly-assigned variable value(s).
Required role: computer.read
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id |
path | integer (int32) | Yes | Empirum client_id. |
skip |
query | integer (int32) | No | Number of items to skip (paging). |
top |
query | integer (int32) | No | Maximum number of items to return (page size). |
Responses
| Status | Description | Schema |
|---|---|---|
200 |
OK | PagedResultOfVariableValue |
The response is a paged result (items, skip, top, totalCount, hasMore). Fields of each item:
A resolved variable value for one computer or group. string VariableValue.Designation/ string VariableValue.DottedName mirror VariableDefinition. string? VariableValue.Value is null when the variable has no value at the requested scope — a direct-only ("own value only") read with no override returns null rather than falling back to an inherited or catalog-default value; an include-inherited read returns null only when nothing in the whole precedence chain (forced group, own value, inherited group/package, catalog default) has a value either.
| Field | Type | Required | Description |
|---|---|---|---|
varId |
integer (int32) | Yes | Variable definition ID. |
designation |
string | Yes | Designation. |
dottedName |
string | Yes | Fully qualified (dotted) variable name. |
value |
string, nullable | Yes |
POST /api/computer/{id}/variables/search
Resolves a single computer variable's value, with optional inheritance resolution.
Required role: computer.read
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id |
path | integer (int32) | Yes | Empirum client_id. |
skip |
query | integer (int32) | No | Number of items to skip (paging). |
top |
query | integer (int32) | No | Maximum number of items to return (page size). |
Request body (required, application/json, schema VariableValueSearchFilter)
Filter body for POST .../variables/search — single-variable lookup with optional inheritance resolution, the computer/group-scoped counterpart to VariableDefinitionSearchFilter.
| Field | Type | Required | Description |
|---|---|---|---|
name |
string, nullable | No | Raw designation or dotted "parent.child" name; mutually exclusive with varId. |
varId |
integer (int32), nullable | No | Variable's VarID; mutually exclusive with name. |
includeInherited |
boolean | No | False (default) returns only the direct override/value, with no fallback; true resolves the full inheritance precedence. |
Example request body (placeholder values):
{
"name": "string",
"varId": 0,
"includeInherited": false
}Responses
| Status | Description | Schema |
|---|---|---|
200 |
OK | PagedResultOfVariableValue |
The response is a paged result (items, skip, top, totalCount, hasMore). Fields of each item:
A resolved variable value for one computer or group. string VariableValue.Designation/ string VariableValue.DottedName mirror VariableDefinition. string? VariableValue.Value is null when the variable has no value at the requested scope — a direct-only ("own value only") read with no override returns null rather than falling back to an inherited or catalog-default value; an include-inherited read returns null only when nothing in the whole precedence chain (forced group, own value, inherited group/package, catalog default) has a value either.
| Field | Type | Required | Description |
|---|---|---|---|
varId |
integer (int32) | Yes | Variable definition ID. |
designation |
string | Yes | Designation. |
dottedName |
string | Yes | Fully qualified (dotted) variable name. |
value |
string, nullable | Yes |
PUT /api/computer/{id}/variables/{varId}
Sets this computer's own (direct) value for a scalar (non-collection) variable. A null or omitted value deletes the override, falling back to inheritance/catalog default on later reads.
Required role: computer.write
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id |
path | integer (int32) | Yes | Empirum client_id. |
varId |
path | integer (int32) | Yes | Variable's VarID (must not be a collection or UserDefined variable). |
Request body (required, application/json, schema SetVariableValueRequest)
Body for PUT .../variables/{varId} — sets this computer's/group's own (direct, non-inherited) value for a scalar (non-collection) variable. string? SetVariableValueRequest.Value = null (or an omitted field) deletes the underlying CompVariables/GroupVariables row entirely — a subsequent read falls back to inheritance/catalog default, mirroring the existing delete-not-blank convention for ORGANIZATIONAL_UNIT. An empty string "" is a real, stored value, not a deletion. Not valid for collection variables (DefCompPkgVar.Collection = 1) — use the .../collection endpoints instead.
| Field | Type | Required | Description |
|---|---|---|---|
value |
string, nullable | Yes |
Example request body (placeholder values):
{
"value": "string"
}Responses
| Status | Description | Schema |
|---|---|---|
200 |
OK | VariableValue |
Response fields (VariableValue):
A resolved variable value for one computer or group. string VariableValue.Designation/ string VariableValue.DottedName mirror VariableDefinition. string? VariableValue.Value is null when the variable has no value at the requested scope — a direct-only ("own value only") read with no override returns null rather than falling back to an inherited or catalog-default value; an include-inherited read returns null only when nothing in the whole precedence chain (forced group, own value, inherited group/package, catalog default) has a value either.
| Field | Type | Required | Description |
|---|---|---|---|
varId |
integer (int32) | Yes | Variable definition ID. |
designation |
string | Yes | Designation. |
dottedName |
string | Yes | Fully qualified (dotted) variable name. |
value |
string, nullable | Yes |
GET /api/computer/{id}/variables/{varId}/collection
Lists this computer's direct entries (bundles) for a collection variable.
Required role: computer.read
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id |
path | integer (int32) | Yes | Empirum client_id. |
varId |
path | integer (int32) | Yes | Collection variable's VarID (DefCompPkgVar.Collection = 1). |
skip |
query | integer (int32) | No | Number of items to skip (paging). |
top |
query | integer (int32) | No | Maximum number of items to return (page size). |
Responses
| Status | Description | Schema |
|---|---|---|
200 |
OK | PagedResultOfVariableCollectionEntry |
The response is a paged result (items, skip, top, totalCount, hasMore). Fields of each item:
One bundle/array-entry of a collection variable (DefCompPkgVar.Collection = 1) — one CompVariables/GroupVariables row per child variable, all sharing the same CollectionID. int VariableCollectionEntry.CollectionId is the raw CollectionID column value — verified live NOT to be contiguous from 1 (existing bundles can be numbered e.g. 2 and 3 with no row using 1); this is the identifier callers use to reference a specific entry (e.g. for PATCH), not a display position. IReadOnlyList<VariableValue> VariableCollectionEntry.Values has exactly one entry per child variable (DefCompPkgVar rows with ParentID = the collection variable's VarID), ordered by VarID ascending (their catalog definition order — no reliable SEQUENCE value was found live).
| Field | Type | Required | Description |
|---|---|---|---|
collectionId |
integer (int32) | Yes | Collection ID. |
values |
array of VariableValue | Yes |
POST /api/computer/{id}/variables/{varId}/collection
Adds one new entry (bundle) to a collection variable on this computer.
Required role: computer.write
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id |
path | integer (int32) | Yes | Empirum client_id. |
varId |
path | integer (int32) | Yes | Collection variable's VarID. |
Request body (required, application/json, schema VariableCollectionEntryRequest)
Body for POST .../variables/{varId}/collection — creates one new collection entry (bundle). IReadOnlyDictionary<string, string> VariableCollectionEntryRequest.Values is keyed by child Designation (not VarID) for readability; unknown keys (a Designation that isn't a child of this collection variable) are rejected with 400. A child may be omitted only if its DefCompPkgVar.DefaultValue is non-null — the created row then uses that default; omitting a child with no default is a 400. All child rows for the new entry are inserted together in one transaction — a partial bundle is never created.
| Field | Type | Required | Description |
|---|---|---|---|
values |
map of string to string | Yes |
Example request body (placeholder values):
{
"values": {}
}Responses
| Status | Description | Schema |
|---|---|---|
200 |
OK | VariableCollectionEntry |
Response fields (VariableCollectionEntry):
One bundle/array-entry of a collection variable (DefCompPkgVar.Collection = 1) — one CompVariables/GroupVariables row per child variable, all sharing the same CollectionID. int VariableCollectionEntry.CollectionId is the raw CollectionID column value — verified live NOT to be contiguous from 1 (existing bundles can be numbered e.g. 2 and 3 with no row using 1); this is the identifier callers use to reference a specific entry (e.g. for PATCH), not a display position. IReadOnlyList<VariableValue> VariableCollectionEntry.Values has exactly one entry per child variable (DefCompPkgVar rows with ParentID = the collection variable's VarID), ordered by VarID ascending (their catalog definition order — no reliable SEQUENCE value was found live).
| Field | Type | Required | Description |
|---|---|---|---|
collectionId |
integer (int32) | Yes | Collection ID. |
values |
array of VariableValue | Yes |
PATCH /api/computer/{id}/variables/{varId}/collection/{collectionId}
Partially updates one existing variable collection entry.
Required role: computer.write
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id |
path | integer (int32) | Yes | Empirum client_id. |
varId |
path | integer (int32) | Yes | Collection variable's VarID. |
collectionId |
path | integer (int32) | Yes | Entry's CollectionId (from GET .../collection — the raw DB value, not necessarily contiguous). |
Request body (required, application/json, schema VariableCollectionEntryPatchRequest)
Body for PATCH .../variables/{varId}/collection/{collectionId} — partially updates an existing collection entry (bundle), identified directly by its int VariableCollectionEntry.CollectionId (the raw DB value, not necessarily contiguous). Unlike VariableCollectionEntryRequest, this is a genuine partial update: only the supplied child Designations change, every other child value in the bundle is left untouched — an omitted child never falls back to DefaultValue (the bundle already has a real value for every child from when it was created). An unrecognized key is a 400, same as the create request.
| Field | Type | Required | Description |
|---|---|---|---|
values |
map of string to string | Yes |
Example request body (placeholder values):
{
"values": {}
}Responses
| Status | Description | Schema |
|---|---|---|
200 |
OK | VariableCollectionEntry |
Response fields (VariableCollectionEntry):
One bundle/array-entry of a collection variable (DefCompPkgVar.Collection = 1) — one CompVariables/GroupVariables row per child variable, all sharing the same CollectionID. int VariableCollectionEntry.CollectionId is the raw CollectionID column value — verified live NOT to be contiguous from 1 (existing bundles can be numbered e.g. 2 and 3 with no row using 1); this is the identifier callers use to reference a specific entry (e.g. for PATCH), not a display position. IReadOnlyList<VariableValue> VariableCollectionEntry.Values has exactly one entry per child variable (DefCompPkgVar rows with ParentID = the collection variable's VarID), ordered by VarID ascending (their catalog definition order — no reliable SEQUENCE value was found live).
| Field | Type | Required | Description |
|---|---|---|---|
collectionId |
integer (int32) | Yes | Collection ID. |
values |
array of VariableValue | Yes |
DELETE /api/computer/{id}/variables/{varId}/collection/{collectionId}
Deletes an entire variable collection entry (all its child values).
Required role: computer.write
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id |
path | integer (int32) | Yes | Empirum client_id. |
varId |
path | integer (int32) | Yes | Collection variable's VarID. |
collectionId |
path | integer (int32) | Yes | Entry's CollectionId (from GET .../collection — the raw DB value, not necessarily contiguous). |
Responses
| Status | Description | Schema |
|---|---|---|
204 |
No Content | – |
GET /api/computer/{id}/reboot-status
Returns whether a reboot is pending and what triggered it (e.g. WindowsUpdate, SoftwareInstall).
Required role: computer.read
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id |
path | integer (int32) | Yes | Computer ID (Empirum client_id). |
Responses
| Status | Description | Schema |
|---|---|---|
200 |
OK | RebootStatus |
Response fields (RebootStatus):
| Field | Type | Required | Description |
|---|---|---|---|
clientId |
integer (int32) | Yes | Computer ID (Empirum client_id). |
lastReboot |
string (date-time), nullable | Yes | Time of the last reboot (UTC). |
uptime |
string, nullable | Yes | Time since the last reboot. |
rebootRequired |
boolean | Yes |
true if a reboot is required. |
rebootRequiredSource |
string, nullable | Yes | Source that requires the reboot. |
lastUpdated |
string (date-time), nullable | Yes | Time of the last update (UTC). |
GET /api/computer/{id}/groups
Returns the Empirum deployment groups the endpoint belongs to, optionally filtered by a group-name substring.
Required role: computer.read
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id |
path | integer (int32) | Yes | Computer ID (Empirum client_id). |
skip |
query | integer (int32) | No | Number of items to skip (paging). |
top |
query | integer (int32) | No | Maximum number of items to return (page size). |
nameContains |
query | string | No | Filter by a substring of the name. |
Responses
| Status | Description | Schema |
|---|---|---|
200 |
OK | PagedResultOfDeviceGroup |
The response is a paged result (items, skip, top, totalCount, hasMore). Fields of each item:
| Field | Type | Required | Description |
|---|---|---|---|
groupId |
string (uuid) | Yes | Deployment group ID (GUID). |
name |
string | Yes | Name of the group. |
assignedToTree |
string, nullable | Yes | Tree the group is assigned to. |
description |
string, nullable | Yes | Description of the group. |
GET /api/computer/{id}/packages/{packageId}/groups
Returns the configuration/assignment groups through which a given package is assigned to this computer.
Required role: computer.read
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id |
path | integer (int32) | Yes | Computer ID (Empirum client_id). |
packageId |
path | string (uuid) | Yes | Software package ID (GUID). |
skip |
query | integer (int32) | No | Number of items to skip (paging). |
top |
query | integer (int32) | No | Maximum number of items to return (page size). |
Responses
| Status | Description | Schema |
|---|---|---|
200 |
OK | PagedResultOfDeviceGroup |
The response is a paged result (items, skip, top, totalCount, hasMore). Fields of each item:
| Field | Type | Required | Description |
|---|---|---|---|
groupId |
string (uuid) | Yes | Deployment group ID (GUID). |
name |
string | Yes | Name of the group. |
assignedToTree |
string, nullable | Yes | Tree the group is assigned to. |
description |
string, nullable | Yes | Description of the group. |
GET /api/computer/{id}/agent-template
Returns the computer's effective Agent Template — resolved via its own group and ancestor groups by EMC's own resolver (assignment only ever happens at the group level), with the winning group as provenance.
Required role: computer.read
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id |
path | integer (int32) | Yes | Computer ID (Empirum client_id). |
Responses
| Status | Description | Schema |
|---|---|---|
200 |
The effective Agent Template. | ComputerAgentTemplate |
Response fields (ComputerAgentTemplate):
The computer's effective Agent Template (single winner across the ancestor chain), with the group whose assignment won.
| Field | Type | Required | Description |
|---|---|---|---|
template |
AgentTemplate | Yes | Template. |
assignedGroupId |
string (uuid) | Yes | ID of the group that holds the assignment. |
assignedGroupPath |
string | Yes | Path of the group that holds the assignment. |
GET /api/computer/{id}/os-image-sku
Returns the computer's effective OS image SKU — resolved via its own group and ancestor groups by EMC's own resolver, with the winning group as provenance.
Required role: computer.read
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id |
path | integer (int32) | Yes | Computer ID (Empirum client_id). |
Responses
| Status | Description | Schema |
|---|---|---|
200 |
The effective OS image SKU. | ComputerOsImageSku |
Response fields (ComputerOsImageSku):
The computer's effective OS image SKU (single winner), with image-package context and the group whose assignment won.
| Field | Type | Required | Description |
|---|---|---|---|
skuId |
integer (int32) | Yes | OS image SKU (edition) ID. |
skuIndex |
integer (int32) | Yes | Index of the SKU in the image. |
edition |
string | Yes | Edition. |
imageName |
string | Yes | Image name. |
imagePath |
string, nullable | Yes | Path of the image. |
osLanguage |
string, nullable | Yes | Operating system language. |
os |
string, nullable | Yes | Operating system. |
osType |
string, nullable | Yes | Operating system type. |
osArchitecture |
string, nullable | Yes | Operating system architecture. |
assignedGroupId |
string (uuid) | Yes | ID of the group that holds the assignment. |
assignedGroupPath |
string | Yes | Path of the group that holds the assignment. |
GET /api/computer/{id}/pxe-bootimage
Returns the computer's effective PXE boot image — resolved via its own group and ancestor groups by EMC's own resolver, with the winning group as provenance.
Required role: computer.read
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id |
path | integer (int32) | Yes | Computer ID (Empirum client_id). |
Responses
| Status | Description | Schema |
|---|---|---|
200 |
The effective PXE boot image. | ComputerPxeBootImage |
Response fields (ComputerPxeBootImage):
The computer's effective PXE boot image (single winner), with the group whose assignment won.
| Field | Type | Required | Description |
|---|---|---|---|
imageId |
integer (int32) | Yes | Image ID. |
imageName |
string | Yes | Image name. |
assignedGroupId |
string (uuid) | Yes | ID of the group that holds the assignment. |
assignedGroupPath |
string | Yes | Path of the group that holds the assignment. |
GET /api/computer/{id}/language-packs
Returns the computer's effective OS Language Packs (multi-assign — one winner per pack) — resolved via its own group and ancestor groups by EMC's own resolver, each with the winning group as provenance.
Required role: computer.read
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id |
path | integer (int32) | Yes | Computer ID (Empirum client_id). |
skip |
query | integer (int32) | No | Number of items to skip (paging). |
top |
query | integer (int32) | No | Maximum number of items to return (page size). |
Responses
| Status | Description | Schema |
|---|---|---|
200 |
Paged list; empty when the computer resolves to none. | PagedResultOfComputerLanguagePack |
The response is a paged result (items, skip, top, totalCount, hasMore). Fields of each item:
One of the computer's effective OS Language Packs (multi-assign — one winner per pack), with the group whose assignment won.
| Field | Type | Required | Description |
|---|---|---|---|
packageId |
string (uuid) | Yes | Software package ID (GUID). |
imageName |
string | Yes | Image name. |
osLanguage |
string, nullable | Yes | Operating system language. |
imagePath |
string, nullable | Yes | Path of the image. |
os |
string, nullable | Yes | Operating system. |
osType |
string, nullable | Yes | Operating system type. |
osArchitecture |
string, nullable | Yes | Operating system architecture. |
assignedGroupId |
string (uuid) | Yes | ID of the group that holds the assignment. |
assignedGroupPath |
string | Yes | Path of the group that holds the assignment. |
GET /api/computer/{id}/uem-agent
Returns UEM agent information grouped into three objects: desiredState, inventory, and dailyStatus.
Required role: computer.read
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id |
path | integer (int32) | Yes | Computer ID (Empirum client_id). |
Responses
| Status | Description | Schema |
|---|---|---|
200 |
UEM agent info; `inventory` and `dailyStatus` are `null` if no data has been collected yet. | UemAgentInfo |
Response fields (UemAgentInfo):
| Field | Type | Required | Description |
|---|---|---|---|
clientId |
integer (int32) | Yes | Computer ID (Empirum client_id). |
outOfSync |
boolean, nullable | Yes |
true if the agent configuration differs from the assigned template. |
desiredState |
UemAgentDesiredState | Yes | Desired state. |
inventory |
UemAgentInventory | Yes | Inventory. |
dailyStatus |
UemAgentDailyStatus | Yes | Daily status reporting. |
pollingWindows |
UemAgentPollingWindows | Yes | Polling time windows. |
GET /api/computer/{id}/health
Returns the agent reporting status and overall health classification for an endpoint.
Required role: computer.read
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id |
path | integer (int32) | Yes | Computer ID (Empirum client_id). |
Responses
| Status | Description | Schema |
|---|---|---|
200 |
OK | EndpointHealth |
Response fields (EndpointHealth):
| Field | Type | Required | Description |
|---|---|---|---|
clientId |
integer (int32) | Yes | Computer ID (Empirum client_id). |
hostname |
string | Yes | Hostname of the computer. |
domain |
string, nullable | Yes | Domain name. |
macAddress |
string, nullable | Yes | MAC address. |
uuid |
string (uuid) | Yes | Hardware UUID of the computer. |
lastSeenUtc |
string (date-time), nullable | Yes | Last agent contact (UTC). |
agentStatus |
AgentStatus (enum: Reporting, Stale, Silent, Unknown) | Yes | Agent status. |
healthStatus |
HealthStatus (enum: Healthy, Warning, Unreachable) | Yes | Health status. |
operatingSystem |
string, nullable | Yes | Operating system. |
ipAddress |
string, nullable | Yes | IP address. |
manufacturer |
string, nullable | Yes | Manufacturer. |
model |
string, nullable | Yes | Model. |
architecture |
string, nullable | Yes | Architecture. |
inventoryDate |
string (date-time), nullable | Yes | Date of the last inventory (UTC). |
agentInstalled |
boolean, nullable | Yes |
true if the agent is installed. |
GET /api/computer/{id}/software-deployment
Returns the assigned Empirum packages for software deployment.
Registry-gated packages (notably the Patch-Management Fix package, which waits for a patch scan to flag missing patches approved for the device's assigned PM groups) legitimately stay Pending until their gate condition is met on the device — for those, Pending is by design, not a stuck deployment.
Required role: computer.read
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id |
path | integer (int32) | Yes | Empirum client_id of the target computer. |
packageId |
query | string (uuid) | No | Optional: narrow the list to this one package's assignment. |
includePreOsPackages |
query | boolean | No | Include Pre-OS (WinPE) package assignments. Default false mirrors EMC's deployment view, which hides them. |
Responses
| Status | Description | Schema |
|---|---|---|
200 |
OK | array of SoftwareDeployment |
Response fields (SoftwareDeployment):
| Field | Type | Required | Description |
|---|---|---|---|
softwareId |
string (uuid) | Yes | <inheritdoc /> |
name |
string, nullable | Yes | <inheritdoc /> |
version |
string, nullable | Yes | <inheritdoc /> |
revision |
string, nullable | Yes | <inheritdoc /> |
status |
DeploymentStatus (enum: Pending, Success, Failed) | Yes | Deployment state. Registry-gated packages (notably the Patch-Management Fix package) legitimately stay Pending until a patch scan detects a missing patch approved for the device's assigned PM groups — Pending is by design there, not stuck. |
installationState |
InstallationState (enum: Installed, Uninstalled, NotInstalled, None) | Yes | Installation state on the computer. |
desiredMode |
DistributionCommands | Yes | Desired distribution mode. |
currentMode |
DistributionCommands | Yes | Current distribution mode. |
installTime |
string (date-time), nullable | Yes | <inheritdoc /> |
errorText |
string, nullable | Yes | <inheritdoc /> |
setupErrorLogEntries |
array of SetupErrorLogEntry, nullable | No | The most recent entries from the client's SetupError log (client_id/errorlog columns in SetupErrorLog), for failed deployments only. These are NOT matched to this specific package — the log is an accumulated, client-wide string covering all packages, and no reliable per-package correlation is currently possible (see PBI #585668). Treat as general diagnostic context, not a package-specific root cause. Null for successful deployments. |
GET /api/computer/{id}/patch-status
Returns missing-patch counts and the date of the last patch scan.
Required role: computer.read
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id |
path | integer (int32) | Yes | Computer ID (Empirum client_id). |
Responses
| Status | Description | Schema |
|---|---|---|
200 |
Patch status; all-null counts/dates when no patch scan has been collected yet. | PatchStatus |
Response fields (PatchStatus):
| Field | Type | Required | Description |
|---|---|---|---|
clientId |
integer (int32) | Yes | The Empirum client ID. |
patchScanDate |
string (date-time), nullable | Yes | UTC timestamp of the last patch scan. |
patchDefinitionDate |
string (date-time), nullable | Yes | Date of the patch definition file used for the scan. |
definitionVersion |
string, nullable | Yes | Version string of the patch definition file. |
missingSecurityPatches |
integer (int32), nullable | Yes | Number of missing patches of type SecurityPatch (patchType = 1). |
missingNonSecurityPatches |
integer (int32), nullable | Yes | Number of missing patches of type SecurityTool (patchType = 4) and NonSecurityPatch (patchType = 8) combined. |
missingServicePacks |
integer (int32), nullable | Yes | Number of missing service packs. |
hasSecurityRisks |
boolean, nullable | Yes | True if any security risk was detected during the last scan. |
POST /api/computer/{id}/patches-search
Searches the detailed patch list for a computer with optional filtering and pagination.
Required role: computer.read
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id |
path | integer (int32) | Yes | Empirum client_id of the target computer. |
skip |
query | integer (int32) | No | Number of items to skip (paging). |
top |
query | integer (int32) | No | Maximum number of items to return (page size). |
Request body (optional, application/json, schema PatchDetailFilter)
| Field | Type | Required | Description |
|---|---|---|---|
scanStatus |
string, nullable | No | Patch scan status. |
vendorSeverity |
string, nullable | No | Severity as rated by the vendor. |
patchType |
PatchType (enum: SecurityPatch, SoftwareDistribution, SecurityTool, NonSecurityPatch, CustomAction) | No | Patch type. |
productName |
string, nullable | No | Product name. |
servicePack |
string, nullable | No | Service pack. |
isAssigned |
boolean, nullable | No |
true if assigned. |
qNumber |
string, nullable | No | Patch Q-number (KB article). |
bulletinId |
string, nullable | No | Security bulletin ID. |
releasedAfter |
string (date), nullable | No | Only patches released after this date. |
updatedAfter |
string (date), nullable | No | Only patches updated after this date. |
minCvssScore |
number (double), nullable | No | Minimum CVSS score. |
minVrrScore |
number (double), nullable | No | Minimum VRR score. |
Example request body (placeholder values):
{
"scanStatus": "string",
"vendorSeverity": "string",
"patchType": "SecurityPatch",
"productName": "string",
"servicePack": "string",
"isAssigned": false,
"qNumber": "string",
"bulletinId": "string",
"releasedAfter": "2026-01-01",
"updatedAfter": "2026-01-01",
"minCvssScore": 0.0,
"minVrrScore": 0.0
}Responses
| Status | Description | Schema |
|---|---|---|
200 |
Paged list of patch details (empty when no patch scan has been collected yet). | PagedResultOfPatchDetail |
The response is a paged result (items, skip, top, totalCount, hasMore). Fields of each item:
| Field | Type | Required | Description |
|---|---|---|---|
scanStatus |
string, nullable | Yes | Patch scan status. |
qNumber |
string, nullable | Yes | Patch Q-number (KB article). |
bulletinId |
string, nullable | Yes | Security bulletin ID. |
bulletinTitle |
string, nullable | Yes | Security bulletin title. |
vendorInformationPage |
string, nullable | Yes | URL of the vendor information page. |
patchName |
string, nullable | Yes | Patch name. |
vendorSeverity |
string, nullable | Yes | Severity as rated by the vendor. |
patchType |
PatchType (enum: SecurityPatch, SoftwareDistribution, SecurityTool, NonSecurityPatch, CustomAction) | Yes | Patch type. |
patchTypeName |
string, nullable | Yes | Name of the patch type. |
releaseDate |
string (date), nullable | Yes | Release date. |
updateDate |
string (date), nullable | Yes | Update date. |
bulletinReviseDate |
string (date), nullable | Yes | Revision date of the bulletin. |
cvssScore |
number (double), nullable | Yes | CVSS score. |
vrrScore |
number (double), nullable | Yes | Vulnerability Risk Rating (VRR) score. |
uninstallable |
boolean, nullable | Yes |
true if the patch can be uninstalled. |
language |
string, nullable | Yes | Language. |
productName |
string, nullable | Yes | Product name. |
servicePack |
string, nullable | Yes | Service pack. |
patchStatus |
string, nullable | Yes | Patch status. |
supersededBy |
string, nullable | Yes | Patch that supersedes this patch. |
isAssigned |
boolean, nullable | Yes |
true if assigned. |
installedDate |
string (date-time), nullable | Yes | Installation date. |
installedBy |
string, nullable | Yes | Installed by. |
reason |
string, nullable | Yes | Reason. |
patchId |
integer (int32) | Yes | Patch ID. |
patchUid |
string (uuid) | Yes | Unique patch identifier. |
GET /api/computer/{id}/setup-error-log
Returns cumulative setup.inf error output from failed software deployments.
Source: SetupErrorLog.errorlog — a single, accumulated, client-wide text log of setup.inf error output. Can contain additional detail not present in distribution-history (raw setup script error text vs. result codes). Entries are NOT scoped to a specific package (see software-deployment's setupErrorLogEntries for the same caveat). Ordered newest first.
Required role: computer.read
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id |
path | integer (int32) | Yes | Computer ID (Empirum client_id). |
skip |
query | integer (int32) | No | Number of items to skip (paging). |
top |
query | integer (int32) | No | Maximum number of items to return (page size). |
Responses
| Status | Description | Schema |
|---|---|---|
200 |
Paged list of parsed setup error log entries (empty when no SetupError log exists). | PagedResultOfSetupErrorLogEntry |
The response is a paged result (items, skip, top, totalCount, hasMore). Fields of each item:
| Field | Type | Required | Description |
|---|---|---|---|
timestamp |
string (date-time), nullable | Yes | Timestamp of the log entry, parsed from the SetupError log. |
productName |
string, nullable | Yes | Product name as recorded by the setup, e.g. "Empirum Subdepot". |
version |
string, nullable | Yes | Product version as recorded by the setup. |
revision |
string, nullable | Yes | Product revision as recorded by the setup. |
section |
string, nullable | Yes | Setup script section in which the error occurred. |
line |
integer (int32), nullable | Yes | Line number within the section. |
errorMessage |
string, nullable | Yes | Human-readable error message. |
GET /api/computer/{id}/distribution-history
Returns the most recent software distribution events for the device from the Empirum agent status-message log (ArchiveDistJobs).
Required role: computer.read
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id |
path | integer (int32) | Yes | Computer ID (Empirum client_id). |
skip |
query | integer (int32) | No | Number of items to skip (paging). |
top |
query | integer (int32) | No | Maximum number of items to return (page size). |
Responses
| Status | Description | Schema |
|---|---|---|
200 |
OK | PagedResultOfDistributionEvent |
The response is a paged result (items, skip, top, totalCount, hasMore). Fields of each item:
| Field | Type | Required | Description |
|---|---|---|---|
packageName |
string, nullable | Yes | Package name. |
version |
string, nullable | Yes | Version. |
result |
string, nullable | Yes | Result. |
classification |
string, nullable | Yes | Patch classification. |
logDateUtc |
string (date-time), nullable | Yes | Log entry time (UTC). |
kbNumber |
string, nullable | Yes | KB article number. |
installMode |
string, nullable | Yes | Installation mode. |
info |
string, nullable | Yes |
GET /api/computer/{id}/inventory/installed-software
Returns the software inventory detected during the last Empirum scan.
Required role: computer.read
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id |
path | integer (int32) | Yes | Computer ID (Empirum client_id). |
skip |
query | integer (int32) | No | Number of items to skip (paging). |
top |
query | integer (int32) | No | Maximum number of items to return (page size). |
Responses
| Status | Description | Schema |
|---|---|---|
200 |
Paged list of installed software (empty when no inventory scan has been collected yet). | PagedResultOfInstalledSoftware |
The response is a paged result (items, skip, top, totalCount, hasMore). Fields of each item:
| Field | Type | Required | Description |
|---|---|---|---|
productName |
string | Yes | Product name. |
version |
string, nullable | Yes | Version. |
revision |
string, nullable | Yes | Package revision. |
developer |
string, nullable | Yes | Developer or vendor. |
installDate |
string (date-time), nullable | Yes | Installation date. |
msiGuid |
string, nullable | Yes | MSI product code. |
GET /api/computer/{id}/inventory/services
Returns Windows services on an endpoint, optionally filtered by status or name.
Required role: computer.read
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id |
path | integer (int32) | Yes | Computer ID (Empirum client_id). |
skip |
query | integer (int32) | No | Number of items to skip (paging). |
top |
query | integer (int32) | No | Maximum number of items to return (page size). |
status |
query | string | No | Filter by status. |
nameContains |
query | string | No | Filter by a substring of the name. |
Responses
| Status | Description | Schema |
|---|---|---|
200 |
OK | PagedResultOfWindowsService |
The response is a paged result (items, skip, top, totalCount, hasMore). Fields of each item:
| Field | Type | Required | Description |
|---|---|---|---|
shortName |
string, nullable | Yes | Short name. |
displayName |
string, nullable | Yes | Display name. |
status |
string, nullable | Yes | Status. |
startMode |
string, nullable | Yes | Start mode of the service. |
runAsUser |
string, nullable | Yes | Account the service runs as. |
GET /api/computer/{id}/inventory/disks
Returns disk drive capacity and free-space data from the last inventory scan.
Required role: computer.read
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id |
path | integer (int32) | Yes | Computer ID (Empirum client_id). |
skip |
query | integer (int32) | No | Number of items to skip (paging). |
top |
query | integer (int32) | No | Maximum number of items to return (page size). |
Responses
| Status | Description | Schema |
|---|---|---|
200 |
OK | PagedResultOfDiskDrive |
The response is a paged result (items, skip, top, totalCount, hasMore). Fields of each item:
| Field | Type | Required | Description |
|---|---|---|---|
volume |
string | Yes | Drive or volume. |
driveTypeCode |
integer (int32) | Yes | Drive type code. |
totalSpaceGb |
number (double), nullable | Yes | Total size in GB. |
freeSpaceGb |
number (double), nullable | Yes | Free space in GB. |
usedPercent |
number (double), nullable | Yes | Used space in percent. |
label |
string, nullable | Yes | Label. |
bitlockerStatus |
BitlockerState (enum: Encrypted, Unencrypted, NotAvailable) | Yes | BitLocker status. |
bitlockerKeyProtectors |
string, nullable | Yes | BitLocker key protectors. |
GET /api/computer/{id}/inventory/batteries
Returns battery details (status, capacity, health/wear) from the last inventory scan.
Required role: computer.read
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id |
path | integer (int32) | Yes | Computer ID (Empirum client_id). |
Responses
| Status | Description | Schema |
|---|---|---|
200 |
OK | array of Battery |
Response fields (Battery):
| Field | Type | Required | Description |
|---|---|---|---|
name |
string, nullable | Yes | Battery name/model as reported by WMI. |
chemistry |
string, nullable | Yes | Battery chemistry (e.g. "Lithium Ion"). |
deviceId |
string, nullable | Yes | WMI device identifier. |
batteryStatus |
string, nullable | Yes | Current battery status as reported by WMI. |
designedCapacityMwh |
integer (int32), nullable | Yes | Designed capacity in mWh. |
fullChargedCapacityMwh |
integer (int32), nullable | Yes | Capacity in mWh when fully charged (degrades with wear). |
remainingCapacityPercent |
integer (int32), nullable | Yes | Wear level as computed by the inventory agent: full-charge capacity as a percentage of design capacity — NOT the current charge level (the agent stores FullChargedCapacity*100/DesignedCapacity in this column, ScanWinFunction.cpp). Same measure as double? Battery.HealthPercent, which is computed server-side with one decimal and should be preferred. |
healthPercent |
number (double), nullable | Yes | Battery health: full-charge capacity as a percentage of designed capacity (100 = no wear). Null when either capacity is missing or zero. |
GET /api/computer/{id}/inventory/network-adapters
Returns network adapter configuration (IP, MAC, DNS, DHCP) from the last inventory scan.
Required role: computer.read
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id |
path | integer (int32) | Yes | Computer ID (Empirum client_id). |
skip |
query | integer (int32) | No | Number of items to skip (paging). |
top |
query | integer (int32) | No | Maximum number of items to return (page size). |
Responses
| Status | Description | Schema |
|---|---|---|
200 |
OK | PagedResultOfNetworkAdapter |
The response is a paged result (items, skip, top, totalCount, hasMore). Fields of each item:
| Field | Type | Required | Description |
|---|---|---|---|
serviceName |
string, nullable | Yes | Service name. |
description |
string, nullable | Yes | Description of the network adapter. |
ipAddress |
string, nullable | Yes | IP address. |
macAddress |
string, nullable | Yes | MAC address. |
subnetMask |
string, nullable | Yes | Subnet mask. |
defaultGateway |
string, nullable | Yes | Default gateway. |
dnsServer |
string, nullable | Yes | DNS server. |
isDhcp |
boolean | Yes |
true if the address is assigned by DHCP. |
connectionType |
string, nullable | Yes | Connection type. |
GET /api/computer/{id}/inventory/printers
Returns installed printers (WMI-based: name, port, driver, share, resolution) from the last inventory scan.
Required role: computer.read
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id |
path | integer (int32) | Yes | Computer ID (Empirum client_id). |
skip |
query | integer (int32) | No | Number of items to skip (paging). |
top |
query | integer (int32) | No | Maximum number of items to return (page size). |
Responses
| Status | Description | Schema |
|---|---|---|
200 |
OK | PagedResultOfPrinter |
The response is a paged result (items, skip, top, totalCount, hasMore). Fields of each item:
| Field | Type | Required | Description |
|---|---|---|---|
name |
string, nullable | Yes | Printer name as reported by WMI. |
port |
string, nullable | Yes | Port the printer is attached to (e.g. "USB001", "IP_192.168.1.10"). |
shareName |
string, nullable | Yes | Network share name, if the printer is shared. |
driverName |
string, nullable | Yes | Installed printer driver name. |
driverVersion |
string, nullable | Yes | Installed printer driver version. |
comment |
string, nullable | Yes | Printer comment/description as configured on the device. |
isNetworkPrinter |
boolean | Yes | True if the printer is a network printer (WMIPrinter.NetworkPrinter = 1). |
isDefault |
boolean | Yes | True if this is the default printer (WMIPrinter.DefaultPrinter = 1). |
caption |
string, nullable | Yes | Printer caption as reported by WMI. |
capabilityDescriptions |
string, nullable | Yes | Printer capability descriptions as reported by WMI. |
horizontalResolution |
integer (int32), nullable | Yes | Horizontal print resolution in DPI. |
verticalResolution |
integer (int32), nullable | Yes | Vertical print resolution in DPI. |
GET /api/computer/{id}/inventory/bios
Returns BIOS details (manufacturer, versions, serial number, UUID) from the last inventory scan.
Required role: computer.read
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id |
path | integer (int32) | Yes | Computer ID (Empirum client_id). |
Responses
| Status | Description | Schema |
|---|---|---|
200 |
OK | Bios |
Response fields (Bios):
| Field | Type | Required | Description |
|---|---|---|---|
caption |
string, nullable | Yes | BIOS caption as reported by WMI (Win32_BIOS.Caption). |
manufacturer |
string, nullable | Yes | BIOS manufacturer (e.g. "LENOVO", "Dell Inc."). |
smBiosVersion |
string, nullable | Yes | SMBIOS BIOS version string (Win32_BIOS.SMBIOSBIOSVersion). |
serialNumber |
string, nullable | Yes | Device serial number as reported by the BIOS. |
version |
string, nullable | Yes | BIOS version string (Win32_BIOS.Version). |
uuid |
string, nullable | Yes | Hardware UUID as reported by the BIOS/SMBIOS. |
GET /api/computer/{id}/inventory/computer-system
Returns WMI ComputerSystem data (manufacturer, model) from the last inventory scan.
Required role: computer.read
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id |
path | integer (int32) | Yes | Computer ID (Empirum client_id). |
Responses
| Status | Description | Schema |
|---|---|---|
200 |
OK | ComputerSystem |
Response fields (ComputerSystem):
| Field | Type | Required | Description |
|---|---|---|---|
manufacturer |
string, nullable | Yes | System manufacturer (Win32_ComputerSystem.Manufacturer). Same source data as system-info's manufacturer (InvComputer.DeviceDeveloper). |
model |
string, nullable | Yes | System model (Win32_ComputerSystem.Model). Same source data as system-info's model (InvComputer.DeviceModel). |
GET /api/computer/{id}/inventory/video-controllers
Returns video controllers (GPU name, RAM, video mode) from the last inventory scan.
Required role: computer.read
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id |
path | integer (int32) | Yes | Computer ID (Empirum client_id). |
skip |
query | integer (int32) | No | Number of items to skip (paging). |
top |
query | integer (int32) | No | Maximum number of items to return (page size). |
Responses
| Status | Description | Schema |
|---|---|---|
200 |
OK | PagedResultOfVideoController |
The response is a paged result (items, skip, top, totalCount, hasMore). Fields of each item:
| Field | Type | Required | Description |
|---|---|---|---|
name |
string, nullable | Yes | Video controller name (e.g. "NVIDIA GeForce RTX 3060"). |
adapterCompatibility |
string, nullable | Yes | Adapter vendor/compatibility string. |
adapterRam |
string, nullable | Yes | Adapter RAM as reported by the inventory scan (raw string, typically bytes). |
videoProcessor |
string, nullable | Yes | Video processor/chip description. |
videoModeDescription |
string, nullable | Yes | Current video mode (resolution and color depth). |
currentRefreshRate |
string, nullable | Yes | Current refresh rate as reported by the inventory scan (raw string, Hz). |
GET /api/computer/{id}/inventory/monitors
Returns attached monitors (EDID name, serial, size, resolution) from the last inventory scan.
Required role: computer.read
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id |
path | integer (int32) | Yes | Computer ID (Empirum client_id). |
skip |
query | integer (int32) | No | Number of items to skip (paging). |
top |
query | integer (int32) | No | Maximum number of items to return (page size). |
Responses
| Status | Description | Schema |
|---|---|---|
200 |
OK | PagedResultOfDesktopMonitor |
The response is a paged result (items, skip, top, totalCount, hasMore). Fields of each item:
| Field | Type | Required | Description |
|---|---|---|---|
caption |
string, nullable | Yes | Monitor caption as reported by WMI. |
manufacturer |
string, nullable | Yes | Monitor manufacturer as reported by WMI. |
monitorType |
string, nullable | Yes | Monitor type/model description. |
monitorName |
string, nullable | Yes | Monitor name from the EDID data. |
serialNumber |
string, nullable | Yes | Monitor serial number from the EDID data. |
vendorId |
string, nullable | Yes | Three-letter EDID vendor id (e.g. "LEN", "DEL"). |
monitorSize |
string, nullable | Yes | Diagonal size from the EDID data (e.g. "27"). |
screenWidth |
integer (int32), nullable | Yes | Horizontal resolution in pixels. |
screenHeight |
integer (int32), nullable | Yes | Vertical resolution in pixels. |
pixelsPerXLogicalInch |
integer (int32), nullable | Yes | Horizontal pixel density. |
pixelsPerYLogicalInch |
integer (int32), nullable | Yes | Vertical pixel density. |
manufacturingYear |
integer (int32), nullable | Yes | Manufacturing year from the EDID data; null when not reported (stored 0). |
manufacturingWeek |
integer (int32), nullable | Yes | Manufacturing week from the EDID data; null when not reported (stored 0). |
GET /api/computer/{id}/inventory/processors
Returns processors (name, manufacturer, core/logical-processor counts, clock speeds) from the last inventory scan.
Required role: computer.read
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id |
path | integer (int32) | Yes | Computer ID (Empirum client_id). |
skip |
query | integer (int32) | No | Number of items to skip (paging). |
top |
query | integer (int32) | No | Maximum number of items to return (page size). |
Responses
| Status | Description | Schema |
|---|---|---|
200 |
OK | PagedResultOfProcessor |
The response is a paged result (items, skip, top, totalCount, hasMore). Fields of each item:
| Field | Type | Required | Description |
|---|---|---|---|
name |
string, nullable | Yes | Processor name (e.g. "Intel(R) Core(TM) i7-1185G7"). |
manufacturer |
string, nullable | Yes | Processor manufacturer (e.g. "GenuineIntel"). |
processorId |
string, nullable | Yes | Processor identifier string (Win32_Processor.ProcessorId). |
numberOfCores |
integer (int32), nullable | Yes | Physical core count; null on inventories older than the column. |
numberOfLogicalProcessors |
integer (int32), nullable | Yes | Logical processor count; null on inventories older than the column. |
maxClockSpeedMhz |
integer (int32), nullable | Yes | Maximum clock speed in MHz. |
currentClockSpeedMhz |
integer (int32), nullable | Yes | Clock speed in MHz at scan time. |
GET /api/computer/{id}/inventory
Returns the aggregated inventory picture of one computer in a single call: core record, system info, BIOS, WMI ComputerSystem, disks, network adapters, batteries, printers, video controllers, monitors, and processors.
Inventory only — health, security posture, and patch status stay on their dedicated endpoints. List sections are unpaged (capped at 500 rows each). Installed software and services are not included — use their dedicated endpoints.
Required role: computer.read
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id |
path | integer (int32) | Yes | Computer ID (Empirum client_id). |
Responses
| Status | Description | Schema |
|---|---|---|
200 |
OK | ComputerInventory |
Response fields (ComputerInventory):
Aggregated one-call inventory picture of a computer (PBI 593632): core record, system info, and the WMI/inventory hardware sections. Shared by GET /api/computer/{id}/inventory and the get_empirum_computer_inventory MCP tool. Deliberately inventory-only — health, security posture, and patch status live on their own endpoints (and the get_empirum_computer_status MCP tool). List sections are unpaged (capped at int PagingParameters.MaxTop rows each); installed software and services stay on their own endpoints (large payloads).
| Field | Type | Required | Description |
|---|---|---|---|
computer |
Computer | Yes | Core computer record (Clients row). |
systemInfo |
SystemInfo | Yes | System information. |
bios |
Bios | Yes | BIOS information. |
computerSystem |
ComputerSystem | Yes | Computer system information. |
disks |
array of DiskDrive | Yes | Fixed-disk capacity and BitLocker status. |
networkAdapters |
array of NetworkAdapter | Yes | Network adapter configuration. |
batteries |
array of Battery | Yes | Battery status and health. |
printers |
array of Printer | Yes | Installed printers (WMI). |
videoControllers |
array of VideoController | Yes | Video controllers (GPU). |
monitors |
array of DesktopMonitor | Yes | Attached monitors (EDID data). |
processors |
array of Processor | Yes | Processors incl. core/logical-processor counts. |
POST /api/computer/{id}/software-reinstall
Triggers an enforced reinstall of a package via its existing tree assignment.
Finds the existing (direct or inherited) tree assignment of the package for this computer, creates a reinstall group under that assignment point, and triggers an enforced reinstall. Fails if the package is not currently assigned to the computer anywhere in the tree, or if a reinstall is already pending for this computer+package.
Required role: reinstall.execute
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id |
path | integer (int32) | Yes | Computer ID (Empirum client_id). |
Request body (required, application/json, schema ReinstallRequest)
| Field | Type | Required | Description |
|---|---|---|---|
packageId |
string (uuid) | Yes | Software package ID (GUID). |
Example request body (placeholder values):
{
"packageId": "00000000-0000-0000-0000-000000000000"
}Responses
| Status | Description | Schema |
|---|---|---|
200 |
OK | ReinstallTriggered |
Response fields (ReinstallTriggered):
| Field | Type | Required | Description |
|---|---|---|---|
reinstallGroupId |
string (uuid) | Yes | ID of the reinstall group. |
parentGroupId |
string (uuid) | Yes | Parent group ID (GUID). |
parentGroupName |
string | Yes | Parent group name. |
softwareId |
string (uuid) | Yes | Software package ID (GUID). |
softwareName |
string, nullable | Yes | Software name. |
requestedAtUtc |
string (date-time), nullable | Yes | Time of the request (UTC). |
GET /api/computer/{id}/software-reinstall
Lists the currently existing reinstall groups for this computer.
Required role: computer.read
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id |
path | integer (int32) | Yes | Computer ID (Empirum client_id). |
packageId |
query | string (uuid) | No | Software package ID (GUID). |
skip |
query | integer (int32) | No | Number of items to skip (paging). |
top |
query | integer (int32) | No | Maximum number of items to return (page size). |
Responses
| Status | Description | Schema |
|---|---|---|
200 |
OK | PagedResultOfReinstallGroup |
The response is a paged result (items, skip, top, totalCount, hasMore). Fields of each item:
| Field | Type | Required | Description |
|---|---|---|---|
reinstallGroupId |
string (uuid) | Yes | ID of the reinstall group. |
parentGroupId |
string (uuid) | Yes | Parent group ID (GUID). |
parentGroupName |
string | Yes | Parent group name. |
softwareId |
string (uuid) | Yes | Software package ID (GUID). |
softwareName |
string, nullable | Yes | Software name. |
requestedAtUtc |
string (date-time), nullable | Yes | Time of the request (UTC). |
DELETE /api/computer/{id}/software-reinstall
Cancels the given pending reinstall for this computer by removing the associated reinstall group.
Required role: reinstall.execute
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id |
path | integer (int32) | Yes | Computer ID (Empirum client_id). |
reinstallGroupId |
query | string (uuid) | No | ID of the pending reinstall group. |
Responses
| Status | Description | Schema |
|---|---|---|
200 |
OK | CancelledReinstallGroup |
Response fields (CancelledReinstallGroup):
| Field | Type | Required | Description |
|---|---|---|---|
reinstallGroupId |
string (uuid) | Yes | ID of the reinstall group. |
parentGroupId |
string (uuid) | Yes | Parent group ID (GUID). |
parentGroupName |
string | Yes | Parent group name. |
POST /api/computer/{id}/software-uninstall
Triggers the uninstallation of an installed, assigned package on this computer.
EMC-console-equivalent semantics: sets the distribution mode of the package's nearest (direct or inherited) tree assignment to Uninstall and activates the computer — the agent removes the software at its next contact. The assignment itself is KEPT (this is what distinguishes uninstall from removing the assignment, which only stops managing the package and uninstalls nothing). The uninstall flag is set on the WHOLE assignment group: every computer in that group uninstalls the package (deliberate EMC semantics). Progress is observable via GET .../software-deployment (desiredMode Uninstall, installationState transitions to Uninstalled). Returns machine-readable 409 codes: PackageNotAssigned, PackageNotInstalled, UninstallAlreadyPending.
Required role: activation.execute
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id |
path | integer (int32) | Yes | Computer ID (Empirum client_id). |
Request body (required, application/json, schema UninstallRequest)
| Field | Type | Required | Description |
|---|---|---|---|
packageId |
string (uuid) | Yes | Software package ID (GUID). |
Example request body (placeholder values):
{
"packageId": "00000000-0000-0000-0000-000000000000"
}Responses
| Status | Description | Schema |
|---|---|---|
200 |
OK | Not described in the specification |
409 |
Conflict | SoftwareUninstallConflict |
GET /api/computer/{id}/pm-groups
Returns the Patch Management groups that apply to this computer through its group memberships.
Required role: computer.read
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id |
path | integer (int32) | Yes | Computer ID (Empirum client_id). |
skip |
query | integer (int32) | No | Number of items to skip (paging). |
top |
query | integer (int32) | No | Maximum number of items to return (page size). |
Responses
| Status | Description | Schema |
|---|---|---|
200 |
OK | PagedResultOfComputerPmGroup |
The response is a paged result (items, skip, top, totalCount, hasMore). Fields of each item:
A PM group that applies to a computer via its group memberships, resolved by EMC's own dbo.PM_getPMGroupsForComputer.
| Field | Type | Required | Description |
|---|---|---|---|
treeId |
string (uuid) | Yes | Group tree node ID. |
pmGroupId |
integer (int32) | Yes | PM group ID. |
pmGroupName |
string | Yes | PM group name. |
category |
PmGroupCategory (enum: Patch, ServicePack) | Yes | Category. |
isTestAssignment |
boolean | Yes |
true if this is a test assignment. |
tier |
integer (int32) | Yes | Tier. |
POST /api/computer/{id}/rescan
Forces a fresh inventory or patch scan on this computer.
Triggers an enforced reinstall of the assigned Empirum scan package; the agent runs the scan at its next contact. Idempotent: if a reinstall of the scan package is already pending, the existing group is returned with alreadyPending=true. Returns 409 with code ScanPackageNotAssigned when no scan package of the requested type is assigned to the computer anywhere in its tree. A Patch rescan is also the trigger for patch remediation: when the scan finds missing patches approved for the device's PM groups, it flags the device (PatchesMissing registry value) and the assigned Patch-Management Fix package installs them automatically at the next agent contact — no separate deployment call is needed.
Required role: scan.execute
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id |
path | integer (int32) | Yes | Computer ID (Empirum client_id). |
Request body (required, application/json, schema ScanRequest)
| Field | Type | Required | Description |
|---|---|---|---|
scanType |
ScanType (enum: Inventory, Patch) | Yes | Scan type. |
Example request body (placeholder values):
{
"scanType": "Inventory"
}Responses
| Status | Description | Schema |
|---|---|---|
200 |
OK | Not described in the specification |
409 |
Conflict | ScanPackageNotAssigned |
POST /api/computer/{id}/reboot
Flags this computer to reboot at the UEM agent's next polling interval (Empirum SRL — Silent Reboot Logic).
Required role: reboot.execute
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id |
path | integer (int32) | Yes | Computer ID (Empirum client_id). |
Request body (optional, application/json, schema RebootRequest)
Optional grace-period settings for a requested reboot. Defaults: force at the next agent poll (timeoutMinutes = -1), remind a logged-on user every 10 minutes.
| Field | Type | Required | Description |
|---|---|---|---|
timeoutMinutes |
integer (int32), nullable | Yes | Minutes the agent gives a logged-on user before forcing the reboot; -1 forces it immediately at the next poll. |
reminderMinutes |
integer (int32), nullable | Yes | Minutes between reminder prompts while the timeout runs. |
Example request body (placeholder values):
{
"timeoutMinutes": 0,
"reminderMinutes": 0
}Responses
| Status | Description | Schema |
|---|---|---|
200 |
OK | Not described in the specification |
409 |
Conflict | ComputerNotGroupAssigned |
POST /api/computer/{id}/activation
Activates this computer for software deployment or PXE boot.
Required role: activation.execute
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id |
path | integer (int32) | Yes | Computer ID (Empirum client_id). |
Request body (required, application/json, schema ComputerActivationRequest)
Request body for POST /api/computer/{id}/activation. At least one of software/pxe/pull must be true. wol schedules a Wake-on-LAN at the given time (UTC); wolNow: true sends it at request time (the EMC console's "Wake now" checkbox) — the two are mutually exclusive. A WOL always rides an activation (EMC rule), so "wake this computer" = { "software": true, "wolNow": true }. When srl is present without a WOL, the WOL time defaults to "now" (execute at the next agent poll) — the legacy SOAP API silently drops SRL without WOL, this API does not. global (default true, the EMC console's Global checkbox) applies the activation to ALL of the computer's assignment groups; false targets only its resolved membership node.
| Field | Type | Required | Description |
|---|---|---|---|
software |
boolean, nullable | Yes | Software deployment activation flag. |
pxe |
boolean, nullable | Yes | PXE boot activation flag. |
pull |
boolean, nullable | Yes | Pull distribution activation flag. |
wol |
string (date-time), nullable | Yes | Scheduled Wake-on-LAN time (UTC). |
srl |
SrlSettings | Yes | Silent Reboot Logic (SRL) setting. |
global |
boolean, nullable | Yes | Global activation flag. |
wolNow |
boolean, nullable | No | Send Wake-on-LAN immediately. |
Example request body (placeholder values):
{
"software": false,
"pxe": false,
"pull": false,
"wol": "2026-01-01T00:00:00Z",
"srl": {
"action": "Shutdown",
"timeoutMinutes": 0,
"reminderMinutes": 0
},
"global": false,
"wolNow": false
}Responses
| Status | Description | Schema |
|---|---|---|
200 |
OK | Not described in the specification |
409 |
Conflict | NoPxeBootImageAssigned |
DELETE /api/computer/{id}/activation
Deactivates this computer.
Required role: activation.execute
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id |
path | integer (int32) | Yes | Computer ID (Empirum client_id). |
software |
query | boolean | No | Activate or filter software deployment. |
pxe |
query | boolean | No | Activate or filter PXE boot. |
pull |
query | boolean | No | Activate or filter pull distribution. |
global |
query | boolean | No | Global activation flag. |
uninstall |
query | boolean | No | Uninstall distribution option. |
Responses
| Status | Description | Schema |
|---|---|---|
200 |
OK | Not described in the specification |
409 |
Conflict | ComputerNotGroupAssigned |
Deployment Groups
Deployment groups and their membership, assignments (packages, PXE boot images, OS image SKUs, Agent Templates, Language Packs, Variable Configurations, Software Classes), distribution options, depot servers, variables and activation.
| Method | Path | Summary |
|---|---|---|
| GET | /api/group |
Returns a paged list of Empirum deployment groups, optionally filtered by type and name. |
| POST | /api/group |
Creates a deployment group. |
| GET | /api/group/{id} |
Returns a single Empirum deployment group by its GUID. |
| DELETE | /api/group/{id} |
Deletes a deployment group. |
| PATCH | /api/group/{id} |
Partially updates the group's own properties — name and/or description. |
| GET | /api/group/{id}/all-assignments |
Returns a flat summary of everything on the group — packages, agent template, OS Language Packs, Variable Configurations, OS Image SKU, PXE boot image, and computer members. No nested details (no variables, no SKU list); each item carries enough id fields to look the object up via its own dedicated endpoint (Computer's intId is the client id, for GET /api/computer/{id}). Direct assignments only, same scope as GET .../computers without includeDescendants — computer membership always stays direct-only regardless of includeInherited. |
| GET | /api/group/{id}/computers |
Returns a paged list of computers that are members of the group. |
| POST | /api/group/{id}/computers |
Assigns one or more computers to the group. |
| DELETE | /api/group/{id}/computers |
Removes one or more computers from the group. |
| GET | /api/group/{id}/packages |
Returns a paged list of packages assigned to the group. |
| POST | /api/group/{id}/packages |
Assigns a software package to the group. |
| GET | /api/group/{id}/distribution-options |
Returns the effective distribution options for the group, or for one package's assignment to it. |
| PUT | /api/group/{id}/distribution-options |
Sets the distribution options for the group, or — with packageId — for one package's assignment to it (full replace — absent optional fields clear the stored values). Mirrors EMC's distribution-options dialog at group / assignment level; changes take effect for members on their next activation (no auto-activation — use the activation endpoint). Setting Uninstall makes every member computer of the group (and its subgroups) uninstall the package — or, at group level, every package assigned to the group — at its next activation. |
| GET | /api/group/{id}/depot-servers |
Returns the group's directly-assigned depot-server failover list, ordered by priority. |
| PUT | /api/group/{id}/depot-servers |
Replaces the group's entire ordered depot-server list (EMC group properties, Empirum-server tab). |
| DELETE | /api/group/{id}/packages/{packageId} |
Removes a software package assignment from the group. |
| POST | /api/group/{id}/pxe-bootimage |
Assigns a PXE boot image to the group. Always single-assign: a group has at most one active PXE image. |
| GET | /api/group/{id}/pxe-bootimage |
Returns the PXE boot image currently assigned to the group, if any. Always single-assign per group: a group has at most one active PXE boot image. |
| DELETE | /api/group/{id}/pxe-bootimage/{pxeId} |
Removes the PXE boot image assignment from the group. |
| POST | /api/group/{id}/os-image-sku |
Assigns an OS installation image SKU to the group. Always single-assign: a group has at most one active SKU. The package itself (Software.Type = OSInstallationImage) is never directly assignable — find the skuId via GET /api/operating-system-imports (SKUs nested per package). |
| GET | /api/group/{id}/os-image-sku |
Returns the OS image SKU currently assigned to the group, if any. Always single-assign per group: a group has at most one active SKU. |
| DELETE | /api/group/{id}/os-image-sku/{skuId} |
Removes the OS installation image SKU assignment from the group. |
| GET | /api/group/{id}/agent-template |
Returns the Agent Template currently assigned to the group, if any. Always single-assign per group: a group has at most one active Agent Template. |
| POST | /api/group/{id}/agent-template |
Assigns an Agent Template to the group. Always single-assign: a group has at most one active Agent Template. |
| DELETE | /api/group/{id}/agent-template/{packageId} |
Removes the Agent Template assignment from the group. |
| GET | /api/group/{id}/language-pack-imports |
Returns the OS Language Packs currently assigned to the group. Multi-assign, unlike Agent Template — a group can have several. |
| POST | /api/group/{id}/language-pack-imports |
Assigns an OS Language Pack to the group. Multi-assign, unlike Agent Template. |
| DELETE | /api/group/{id}/language-pack-imports/{packageId} |
Removes an OS Language Pack assignment from the group. |
| GET | /api/group/{id}/variable-configurations |
Returns the Variable Configurations currently assigned to the group. Multi-assign, like OS Language Pack. |
| POST | /api/group/{id}/variable-configurations |
Assigns a Variable Configuration to the group. Multi-assign, like OS Language Pack. |
| DELETE | /api/group/{id}/variable-configurations/{configId} |
Removes a Variable Configuration assignment from the group. |
| GET | /api/group/{id}/variables |
Lists this group's directly-assigned variable value(s). |
| POST | /api/group/{id}/variables/search |
Resolves a single group variable's value, with optional ancestor inheritance resolution. Unlike computer variables, a group has no "own computer value" tier. |
| PUT | /api/group/{id}/variables/{varId} |
Sets this group's own (direct) value for a scalar (non-collection) variable. A null or omitted value deletes the override, falling back to ancestor/catalog default on later reads. |
| GET | /api/group/{id}/variables/{varId}/collection |
Lists this group's direct entries (bundles) for a collection variable. No ancestor inheritance. |
| POST | /api/group/{id}/variables/{varId}/collection |
Adds one new entry (bundle) to a collection variable on this group. |
| PATCH | /api/group/{id}/variables/{varId}/collection/{collectionId} |
Partially updates one existing collection entry (bundle) on this group. |
| DELETE | /api/group/{id}/variables/{varId}/collection/{collectionId} |
Deletes an entire variable collection entry (all its child values). |
| GET | /api/group/{id}/software-classes |
Returns the Software Classes currently assigned to the group. Multi-assign, like OS Language Pack. |
| POST | /api/group/{id}/software-classes |
Assigns a Software Class to the group. Multi-assign, like OS Language Pack. |
| DELETE | /api/group/{id}/software-classes/{classId} |
Removes a Software Class assignment from the group. |
| POST | /api/group/{id}/activation |
Activates this group, cascading over its subtree's computers, users, and subgroups. |
| DELETE | /api/group/{id}/activation |
Deactivates this group, clearing the requested activation bits across the subtree. |
GET /api/group
Returns a paged list of Empirum deployment groups, optionally filtered by type and name.
Required role: group.read
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
skip |
query | integer (int32) | No | Number of items to skip (paging). |
top |
query | integer (int32) | No | Maximum number of items to return (page size). |
type |
query | GroupType | No | Filter by group type: ConfigurationGroups or AssignmentGroups (legacy Configuration/Assignment also accepted). Omit for all. |
nameContains |
query | string | No | Only groups whose name contains this substring. |
Responses
| Status | Description | Schema |
|---|---|---|
200 |
OK | PagedResultOfGroup |
The response is a paged result (items, skip, top, totalCount, hasMore). Fields of each item:
| Field | Type | Required | Description |
|---|---|---|---|
id |
string (uuid) | Yes | ID of the group. |
name |
string | Yes | Name of the group. |
assignedToTree |
string | Yes | Tree the group is assigned to. |
parentId |
string (uuid), nullable | Yes | Parent group ID (GUID). |
description |
string, nullable | No | Description of the group. |
POST /api/group
Creates a deployment group.
Required role: group.write
Request body (required, application/json, schema CreateGroupRequest)
Request body for creating a deployment group. ParentId is mandatory — root-level creates are not supported (mirrors the legacy SOAP API).
| Field | Type | Required | Description |
|---|---|---|---|
name |
string | Yes | Name of the group. |
type |
GroupType | Yes | Type of the group. |
parentId |
string (uuid) | Yes | Parent group ID (GUID). |
description |
string, nullable | No | Description of the group. |
Example request body (placeholder values):
{
"name": "string",
"type": {},
"parentId": "00000000-0000-0000-0000-000000000000",
"description": "string"
}Responses
| Status | Description | Schema |
|---|---|---|
201 |
The created group. | Group |
400 |
Invalid name or unknown group type. | ProblemDetails |
404 |
Typed body: `ParentNotFound` — no group with that id in the target tree. | GroupMembershipNotFound |
409 |
Typed body: `DuplicateName` (same name under the same parent) or `ParentSpecialGroup` (parent is a Reinstall/EOL/Restore group). | GroupCreateConflict |
Response fields (Group):
| Field | Type | Required | Description |
|---|---|---|---|
id |
string (uuid) | Yes | |
name |
string | Yes | |
assignedToTree |
string | Yes | Tree the group is assigned to. |
parentId |
string (uuid), nullable | Yes | Parent group ID (GUID). |
description |
string, nullable | No |
GET /api/group/{id}
Returns a single Empirum deployment group by its GUID.
Required role: group.read
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id |
path | string (uuid) | Yes | Deployment group ID (GUID). |
Responses
| Status | Description | Schema |
|---|---|---|
200 |
OK | Group |
Response fields (Group):
| Field | Type | Required | Description |
|---|---|---|---|
id |
string (uuid) | Yes | |
name |
string | Yes | |
assignedToTree |
string | Yes | Tree the group is assigned to. |
parentId |
string (uuid), nullable | Yes | Parent group ID (GUID). |
description |
string, nullable | No |
DELETE /api/group/{id}
Deletes a deployment group.
Required role: group.write
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id |
path | string (uuid) | Yes | Group GUID. |
force |
query | boolean | No | Required true to delete a group whose subtree still contains computers or users. |
Responses
| Status | Description | Schema |
|---|---|---|
204 |
Deleted (including the whole subtree). | – |
404 |
Typed body: `GroupNotFound`. | GroupMembershipNotFound |
409 |
Typed body: `SystemGroup`, `NotDeletableTree` (not a computer/assignment tree group), `SpecialGroup` (Reinstall/EOL/Restore), or `NotEmpty` (retry with `force=true`). | GroupDeleteConflict |
PATCH /api/group/{id}
Partially updates the group's own properties — name and/or description.
An omitted/null field keeps the stored value; an empty-string description clears it. The name cannot be cleared. Parent, tree and type are not updatable.
Required role: group.write
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id |
path | string (uuid) | Yes | Group GUID. |
Request body (required, application/json, schema GroupPatchRequest)
Body for PATCH /api/group/{id} — a partial update of the group's own properties (TreeDefinition.Name / GroupDescription): an omitted/null field keeps the stored value, an empty-string description clears it (SQL NULL). Name cannot be cleared — an empty name fails bool GroupWriteRules.ValidateName(string? name, out string error). Parent, tree and object type are deliberately not updatable (the legacy SOAP Group.Update ignores them too). Unknown JSON properties are rejected (400 naming the property) — on a PATCH a typo'd field would otherwise return 200 while silently not updating anything.
| Field | Type | Required | Description |
|---|---|---|---|
name |
string, nullable | No | Name of the group. |
description |
string, nullable | No | Description of the group. |
Example request body (placeholder values):
{
"name": "string",
"description": "string"
}Responses
| Status | Description | Schema |
|---|---|---|
200 |
The updated group. | Group |
400 |
Invalid name/description, or an empty patch body. | ProblemDetails |
404 |
Typed body: `GroupNotFound`. | GroupMembershipNotFound |
409 |
Typed body: `DuplicateName` (same name under the same parent), `SystemGroup`, `NotEditableTree`, or `SpecialGroup` (Reinstall/EOL/Restore). | GroupUpdateConflict |
Response fields (Group):
| Field | Type | Required | Description |
|---|---|---|---|
id |
string (uuid) | Yes | |
name |
string | Yes | |
assignedToTree |
string | Yes | Tree the group is assigned to. |
parentId |
string (uuid), nullable | Yes | Parent group ID (GUID). |
description |
string, nullable | No |
GET /api/group/{id}/all-assignments
Returns a flat summary of everything on the group — packages, agent template, OS Language Packs, Variable Configurations, OS Image SKU, PXE boot image, and computer members. No nested details (no variables, no SKU list); each item carries enough id fields to look the object up via its own dedicated endpoint (Computer's intId is the client id, for GET /api/computer/{id}). Direct assignments only, same scope as GET .../computers without includeDescendants — computer membership always stays direct-only regardless of includeInherited.
Required role: group.read
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id |
path | string (uuid) | Yes | Group GUID. |
includeInherited |
query | boolean | No | Also include the six assignable-object types inherited from ancestor groups (an assignment on a parent group reaches this group's computers too). Computer membership is unaffected by this flag. |
Responses
| Status | Description | Schema |
|---|---|---|
200 |
Flat list of assignment summary items (may be empty). | array of GroupAssignmentSummaryItem |
Response fields (GroupAssignmentSummaryItem):
One row in the GET {id}/all-assignments summary — no nested details (no variables, no SKU list), just enough to identify the object and look it up directly via its own dedicated catalog endpoint. Id/IntId/PackageId/SkuId are mutually exclusive per Type: Package/AgentTemplate/LanguagePackImport use Id (Software.SoftwareId); VariableConfiguration, PxeBootImage, and Computer use IntId (Computer: Clients.ClientId); OsImageSku uses PackageId (its parent OperatingSystemImport, the only directly queryable catalog endpoint for it) plus SkuId for clarity.
| Field | Type | Required | Description |
|---|---|---|---|
type |
GroupAssignmentType | Yes | Type of the group. |
id |
string (uuid), nullable | Yes | ID of the group. |
intId |
integer (int32), nullable | Yes | Integer ID. |
packageId |
string (uuid), nullable | Yes | Software package ID (GUID). |
skuId |
integer (int32), nullable | Yes | OS image SKU (edition) ID. |
name |
string | Yes | Name of the group. |
GET /api/group/{id}/computers
Returns a paged list of computers that are members of the group.
Required role: group.read
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id |
path | string (uuid) | Yes | Group GUID. |
skip |
query | integer (int32) | No | Number of items to skip (paging). |
top |
query | integer (int32) | No | Maximum number of items to return (page size). |
includeDescendants |
query | boolean | No | Also include computers that are members of child groups anywhere below this group. |
Responses
| Status | Description | Schema |
|---|---|---|
200 |
OK | PagedResultOfComputer |
The response is a paged result (items, skip, top, totalCount, hasMore). Fields of each item:
| Field | Type | Required | Description |
|---|---|---|---|
id |
integer (int32) | Yes | Computer ID (Empirum client_id). |
hostname |
string | Yes | Hostname of the computer. |
domain |
string, nullable | Yes | Domain name. |
macAddress |
string, nullable | Yes | MAC address. |
uuid |
string (uuid) | Yes | Hardware UUID of the computer. |
lastSeenUtc |
string (date-time), nullable | Yes | Last agent contact (UTC). |
serialNumber |
string, nullable | No | Serial number. |
lastModified |
string (date-time), nullable | No | Time of the last modification (UTC). |
inventoryDate |
string (date-time), nullable | No | Date of the last inventory (UTC). |
inventoryId |
string, nullable | No | Inventory ID. |
ou |
string, nullable | No | Organizational unit (OU). |
pxeSupport |
boolean | No |
true if the computer supports PXE boot. |
isPxeActive |
boolean | No |
true if PXE boot is activated. |
POST /api/group/{id}/computers
Assigns one or more computers to the group.
Each computer is processed independently with the single-computer rules (config-group exclusivity, special-group refusal); one failing computer does not stop the rest. AlreadyMember counts as success.
Required role: group.write
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id |
path | string (uuid) | Yes | Group GUID. |
Request body (required, application/json, schema BulkGroupComputersRequest)
Bulk membership request: client ids of the computers to assign to / remove from the group.
| Field | Type | Required | Description |
|---|---|---|---|
computerIds |
array of integer (int32) | Yes | Computer IDs (Empirum client_id). |
Example request body (placeholder values):
{
"computerIds": [
0
]
}Responses
| Status | Description | Schema |
|---|---|---|
200 |
Per-computer outcomes; `succeeded`/`failed` counts. | BulkGroupComputersResult |
400 |
Empty list or more than 500 ids. | ProblemDetails |
404 |
Typed body: `GroupNotFound`. | GroupMembershipNotFound |
Response fields (BulkGroupComputersResult):
Result of a bulk membership operation. Succeeded counts computers whose desired state now holds (including no-ops like AlreadyMember/NotMember).
| Field | Type | Required | Description |
|---|---|---|---|
groupId |
string (uuid) | Yes | Deployment group ID (GUID). |
succeeded |
integer (int32) | Yes | Number of successful items. |
failed |
integer (int32) | Yes | Number of failed items. |
results |
array of BulkGroupComputerResult | Yes | Per-item results. |
DELETE /api/group/{id}/computers
Removes one or more computers from the group.
Idempotent per computer — not-a-member counts as success.
Required role: group.write
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id |
path | string (uuid) | Yes | Group GUID. |
computerIds |
query | array of integer (int32) | No | Client ids of the computers to remove, e.g. ?computerIds=4711&computerIds=4712. |
Responses
| Status | Description | Schema |
|---|---|---|
200 |
Per-computer outcomes; `succeeded`/`failed` counts. | BulkGroupComputersResult |
400 |
Empty list or more than 500 ids. | ProblemDetails |
404 |
Typed body: `GroupNotFound`. | GroupMembershipNotFound |
Response fields (BulkGroupComputersResult):
Result of a bulk membership operation. Succeeded counts computers whose desired state now holds (including no-ops like AlreadyMember/NotMember).
| Field | Type | Required | Description |
|---|---|---|---|
groupId |
string (uuid) | Yes | Deployment group ID (GUID). |
succeeded |
integer (int32) | Yes | Number of successful items. |
failed |
integer (int32) | Yes | Number of failed items. |
results |
array of BulkGroupComputerResult | Yes | Per-item results. |
GET /api/group/{id}/packages
Returns a paged list of packages assigned to the group.
Required role: group.read
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id |
path | string (uuid) | Yes | Group GUID. |
skip |
query | integer (int32) | No | Number of items to skip (paging). |
top |
query | integer (int32) | No | Maximum number of items to return (page size). |
includeInherited |
query | boolean | No | Also include packages assigned to any ancestor group — an assignment on a parent group reaches this group's computers too. |
Responses
| Status | Description | Schema |
|---|---|---|
200 |
OK | PagedResultOfPackage |
The response is a paged result (items, skip, top, totalCount, hasMore). Fields of each item:
| Field | Type | Required | Description |
|---|---|---|---|
id |
string (uuid) | Yes | ID of the package. |
name |
string | Yes | Name of the package. |
packageName |
string, nullable | Yes | Package name. |
type |
string, nullable | Yes | Type of the package. |
subType |
string, nullable | Yes | Subtype. |
version |
string, nullable | Yes | Version. |
author |
string, nullable | Yes | Author. |
revision |
string, nullable | Yes | Package revision. |
operational |
boolean | Yes | "Ready to Install" flag of the package. |
os |
array of string | Yes | Operating system. |
POST /api/group/{id}/packages
Assigns a software package to the group.
Required role: group.write
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id |
path | string (uuid) | Yes | Group GUID. |
Request body (required, application/json, schema AssignGroupPackageRequest)
| Field | Type | Required | Description |
|---|---|---|---|
packageId |
string (uuid) | Yes | Software package ID (GUID). |
Example request body (placeholder values):
{
"packageId": "00000000-0000-0000-0000-000000000000"
}Responses
| Status | Description | Schema |
|---|---|---|
200 |
Already assigned — no-op success, `alreadyAssigned=true`. | GroupPackageAssignment |
201 |
Assigned; body echoes the assignment. | GroupPackageAssignment |
404 |
Typed body: `GroupNotFound` or `PackageNotFound`. | GroupMembershipNotFound |
409 |
Typed body: `SpecialGroup`, `CoveredBySoftwareClass`, or `WrongEndpointForType` (OS Installation Image packages are not directly assignable — use POST /api/group/{id}/os-image-sku with a specific SKU id from GET /api/operating-system-imports instead; Agent Template packages use POST /api/group/{id}/agent-template instead; OS Language Pack packages use POST /api/group/{id}/language-pack-imports instead). | GroupPackageConflict |
Response fields (GroupPackageAssignment):
Result of a package→group assignment. AlreadyAssigned marks the no-op case (the package was already assigned; the ChangeFlag nudge still ran, like legacy SOAP).
| Field | Type | Required | Description |
|---|---|---|---|
groupId |
string (uuid) | Yes | Deployment group ID (GUID). |
packageId |
string (uuid) | Yes | Software package ID (GUID). |
alreadyAssigned |
boolean | Yes |
true if the assignment already existed (no change). |
GET /api/group/{id}/distribution-options
Returns the effective distribution options for the group, or for one package's assignment to it.
Required role: group.read
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id |
path | string (uuid) | Yes | Group GUID. |
packageId |
query | string (uuid) | No | Scope to this package's assignment; omit for group-level options. |
Responses
| Status | Description | Schema |
|---|---|---|
200 |
The resolved distribution options. | DistributionOptions |
404 |
Group unknown (empty body), or — with a typed body — `packageId` does not exist (`PackageNotFound`) or is not assigned to the group (`PackageNotAssigned`), mirroring the legacy NOT_FOUND fault. | DistributionOptionsNotFound |
Response fields (DistributionOptions):
Distribution options effective for a group (inherited from the nearest configured ancestor) or for one package's assignment to the group, as resolved by dbo.EMPfncGetSwDistCommand — the same TVF the legacy SOAP GetDistributionOptions reads.
| Field | Type | Required | Description |
|---|---|---|---|
groupId |
string (uuid) | Yes | The group the options were resolved for. |
packageId |
string (uuid), nullable | Yes | The package whose assignment was queried; null for group-level options. |
distCommands |
integer (int32) | Yes | Raw Empirum distribution-command bitmask (see DistributionCommands). |
commands |
array of string | Yes | The bitmask decoded into flag names, e.g. ["Install", "Update"]. |
scheduleString |
string | Yes | Raw Empirum schedule string (semicolon-separated, agent-interpreted); empty when no schedule is set. |
schedule |
DistributionSchedule | Yes | Schedule. |
revokeCount |
integer (int32) | Yes | How often the user may postpone the installation (0 = not postponable). |
wol |
boolean | Yes | Whether Wake-on-LAN is requested for the distribution. |
revokeDate |
string (date-time), nullable | Yes | Date until which the user may postpone; null when not set. |
optionalDate |
string (date-time), nullable | Yes | Date until which an optional package is offered; null when not set. |
PUT /api/group/{id}/distribution-options
Sets the distribution options for the group, or — with packageId — for one package's assignment to it (full replace — absent optional fields clear the stored values). Mirrors EMC's distribution-options dialog at group / assignment level; changes take effect for members on their next activation (no auto-activation — use the activation endpoint). Setting Uninstall makes every member computer of the group (and its subgroups) uninstall the package — or, at group level, every package assigned to the group — at its next activation.
Required role: group.write
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id |
path | string (uuid) | Yes | Group GUID. |
packageId |
query | string (uuid) | No | Scope to this package's assignment (CompGrSwProp); omit for group-level options (CompConfGrProp). Same addressing as GET. |
Request body (required, application/json, schema SetDistributionOptionsRequest)
Body of PUT /api/group/{id}/distribution-options — the complete desired group-level state (full replace: absent optional fields clear the stored values, deliberately fixing the legacy SOAP writer's can't-clear behavior).
| Field | Type | Required | Description |
|---|---|---|---|
commands |
array of string | Yes | Command flag names, e.g. ["Install","Update","Hide"]. Must contain Install/Update or Uninstall — never both families. Accepted vocabulary mirrors the legacy .NET converter: Install, Update, AlwaysEnforce, Uninstall, UserCanRevoke, Hide, Offline, IgnoreMtf, Optional. |
scheduleString |
string, nullable | No | Raw Empirum schedule string (agent-interpreted, max 129 chars); null, empty or "now" = no schedule (install immediately). |
revokeCount |
integer (int32), nullable | No | How often the user may postpone (0–999); implies UserCanRevoke. |
revokeDate |
string (date-time), nullable | No | Date until which the user may postpone (must be in the future); implies UserCanRevoke. |
optionalDate |
string (date-time), nullable | No | Date until which an optional package is offered. |
wol |
boolean | No | Request Wake-on-LAN for the distribution. |
Example request body (placeholder values):
{
"commands": [
"string"
],
"scheduleString": "string",
"revokeCount": 0,
"revokeDate": "2026-01-01T00:00:00Z",
"optionalDate": "2026-01-01T00:00:00Z",
"wol": false
}Responses
| Status | Description | Schema |
|---|---|---|
200 |
The stored options, resolved via the same read as GET. | DistributionOptions |
400 |
Invalid commands (must contain Install/Update or Uninstall, never both families), RevokeCount out of 0–999, RevokeDate not in the future, or ScheduleString longer than 129 characters. | ProblemDetails |
404 |
Group unknown (empty body), or — with a typed body — `packageId` does not exist (`PackageNotFound`) or is not assigned to the group (`PackageNotAssigned`), mirroring GET. | DistributionOptionsNotFound |
Response fields (DistributionOptions):
Distribution options effective for a group (inherited from the nearest configured ancestor) or for one package's assignment to the group, as resolved by dbo.EMPfncGetSwDistCommand — the same TVF the legacy SOAP GetDistributionOptions reads.
| Field | Type | Required | Description |
|---|---|---|---|
groupId |
string (uuid) | Yes | The group the options were resolved for. |
packageId |
string (uuid), nullable | Yes | The package whose assignment was queried; null for group-level options. |
distCommands |
integer (int32) | Yes | Raw Empirum distribution-command bitmask (see DistributionCommands). |
commands |
array of string | Yes | The bitmask decoded into flag names, e.g. ["Install", "Update"]. |
scheduleString |
string | Yes | Raw Empirum schedule string (semicolon-separated, agent-interpreted); empty when no schedule is set. |
schedule |
DistributionSchedule | Yes | Schedule. |
revokeCount |
integer (int32) | Yes | How often the user may postpone the installation (0 = not postponable). |
wol |
boolean | Yes | Whether Wake-on-LAN is requested for the distribution. |
revokeDate |
string (date-time), nullable | Yes | Date until which the user may postpone; null when not set. |
optionalDate |
string (date-time), nullable | Yes | Date until which an optional package is offered; null when not set. |
GET /api/group/{id}/depot-servers
Returns the group's directly-assigned depot-server failover list, ordered by priority.
Direct assignment only — depot servers inherited from ancestor groups are not resolved. The first entry is the group's primary depot server.
Required role: group.read
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id |
path | string (uuid) | Yes | Group GUID. |
Responses
| Status | Description | Schema |
|---|---|---|
200 |
The ordered list (may be empty). | array of GroupDepotServer |
404 |
Typed body: `GroupNotFound`. | GroupMembershipNotFound |
Response fields (GroupDepotServer):
One depot server directly assigned to a group (GroupEmpServer row). SortOrder is the 1-based failover priority — "the group's depot server" is the SortOrder=1 entry, later entries are fallbacks. Direct assignment only; servers inherited from ancestor groups (EMC shows them greyed-out on the group's Empirum-server tab) are not resolved here.
| Field | Type | Required | Description |
|---|---|---|---|
serverId |
integer (int32) | Yes | Depot server ID. |
name |
string | Yes | Name of the group. |
sortOrder |
integer (int32) | Yes | Position in the ordered list. |
PUT /api/group/{id}/depot-servers
Replaces the group's entire ordered depot-server list (EMC group properties, Empirum-server tab).
Order is meaningful — the first entry is the primary depot server, later entries are failovers. An empty array clears the assignment. Enumerate assignable servers via GET /api/system/depot-servers. A change reactivates the group's members (new activation queue entries), exactly like saving the EMC dialog.
Required role: group.write
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id |
path | string (uuid) | Yes | Group GUID. |
Request body (required, application/json, schema SetGroupDepotServersRequest)
Body for PUT /api/group/{id}/depot-servers — replaces the group's entire ordered depot-server list (EMC failover chain). Order is meaningful (first entry = primary depot); an empty array clears the assignment. Every id must be a depot server (dbo.fnc_IsDepotServer = 1, i.e. a client carrying the 'Empirum Depot Server' or 'Empirum Master Server' computer role — enumerate via GET /api/system/depot-servers).
| Field | Type | Required | Description |
|---|---|---|---|
serverIds |
array of integer (int32) | Yes | Depot server IDs in failover order. |
Example request body (placeholder values):
{
"serverIds": [
0
]
}Responses
| Status | Description | Schema |
|---|---|---|
200 |
The new ordered list (also returned when it was already identical). | array of GroupDepotServer |
400 |
Typed body: `DuplicateServerIds`, `ServerNotFound`, or `NotDepotServer` — `serverIds` carries the offending ids. | GroupDepotServersInvalid |
404 |
Typed body: `GroupNotFound`. | GroupMembershipNotFound |
409 |
Typed body: `SpecialGroup` (Reinstall/EOL/Restore). | GroupDeleteConflict |
Response fields (GroupDepotServer):
One depot server directly assigned to a group (GroupEmpServer row). SortOrder is the 1-based failover priority — "the group's depot server" is the SortOrder=1 entry, later entries are fallbacks. Direct assignment only; servers inherited from ancestor groups (EMC shows them greyed-out on the group's Empirum-server tab) are not resolved here.
| Field | Type | Required | Description |
|---|---|---|---|
serverId |
integer (int32) | Yes | Depot server ID. |
name |
string | Yes | Name of the group. |
sortOrder |
integer (int32) | Yes | Position in the ordered list. |
DELETE /api/group/{id}/packages/{packageId}
Removes a software package assignment from the group.
Required role: group.write
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id |
path | string (uuid) | Yes | Group GUID. |
packageId |
path | string (uuid) | Yes | Software GUID of the package to unassign. |
Responses
| Status | Description | Schema |
|---|---|---|
204 |
Removed, or was not assigned (idempotent). | – |
404 |
Typed body: `GroupNotFound`. | GroupMembershipNotFound |
POST /api/group/{id}/pxe-bootimage
Assigns a PXE boot image to the group. Always single-assign: a group has at most one active PXE image.
Required role: group.write
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id |
path | string (uuid) | Yes | Group GUID. |
Request body (required, application/json, schema AssignGroupPxeBootImageRequest)
| Field | Type | Required | Description |
|---|---|---|---|
pxeId |
integer (int32) | Yes | PXE boot image ID. |
Example request body (placeholder values):
{
"pxeId": 0
}Responses
| Status | Description | Schema |
|---|---|---|
200 |
Already assigned — no-op success, `alreadyAssigned=true`. | GroupPxeBootImageAssignment |
201 |
Assigned; body echoes the assignment. | GroupPxeBootImageAssignment |
404 |
Typed body: `GroupNotFound` or `PxeBootImageNotFound`. | GroupPxeBootImageNotFound |
409 |
Typed body: `SpecialGroup` or `AlreadyAssignedSingleAssign` (a different PXE image is already assigned to this group — remove it first). | GroupPxeBootImageConflict |
Response fields (GroupPxeBootImageAssignment):
Result of a PXE boot image→group assignment. Always single-assign: a group has at most one active PXE image. AlreadyAssigned marks the no-op case (the same image was already assigned).
| Field | Type | Required | Description |
|---|---|---|---|
groupId |
string (uuid) | Yes | Deployment group ID (GUID). |
pxeId |
integer (int32) | Yes | PXE boot image ID. |
alreadyAssigned |
boolean | Yes |
true if the assignment already existed (no change). |
GET /api/group/{id}/pxe-bootimage
Returns the PXE boot image currently assigned to the group, if any. Always single-assign per group: a group has at most one active PXE boot image.
Required role: group.read
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id |
path | string (uuid) | Yes | Group GUID. |
includeInherited |
query | boolean | No | Also consider ancestor groups if this group has none assigned directly — the nearest ancestor's image wins. |
Responses
| Status | Description | Schema |
|---|---|---|
200 |
The assigned PXE boot image. | PxeBootImage |
404 |
Typed body: `GroupNotFound` or `NoPxeBootImageAssigned` (the group exists but has no PXE boot image assigned). | GroupPxeBootImageNotFound |
Response fields (PxeBootImage):
A PXE boot image (e.g. "StdWinPE") — the assignable object for POST /api/group/{id}/pxe-bootimage. Not a Software row; catalogued in dhcp_boot_info.
| Field | Type | Required | Description |
|---|---|---|---|
id |
integer (int32) | Yes | |
name |
string | Yes | |
bootFile |
string | Yes | Boot file. |
sysInfo |
integer (int32) | Yes | System information. |
archInfo |
integer (int32) | Yes | Architecture information. |
DELETE /api/group/{id}/pxe-bootimage/{pxeId}
Removes the PXE boot image assignment from the group.
Required role: group.write
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id |
path | string (uuid) | Yes | Group GUID. |
pxeId |
path | integer (int32) | Yes | Id of the PXE boot image to unassign. |
Responses
| Status | Description | Schema |
|---|---|---|
204 |
Removed, or was not assigned (idempotent). | – |
404 |
Typed body: `GroupNotFound`. | GroupPxeBootImageNotFound |
POST /api/group/{id}/os-image-sku
Assigns an OS installation image SKU to the group. Always single-assign: a group has at most one active SKU. The package itself (Software.Type = OSInstallationImage) is never directly assignable — find the skuId via GET /api/operating-system-imports (SKUs nested per package).
Required role: group.write
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id |
path | string (uuid) | Yes | Group GUID. |
Request body (required, application/json, schema AssignGroupOsImageSkuRequest)
| Field | Type | Required | Description |
|---|---|---|---|
skuId |
integer (int32) | Yes | OS image SKU (edition) ID. |
Example request body (placeholder values):
{
"skuId": 0
}Responses
| Status | Description | Schema |
|---|---|---|
200 |
Already assigned — no-op success, `alreadyAssigned=true`. | GroupOsImageSkuAssignment |
201 |
Assigned; body echoes the assignment. | GroupOsImageSkuAssignment |
404 |
Typed body: `GroupNotFound` or `SkuNotFound`. | GroupOsImageSkuNotFound |
409 |
Typed body: `SpecialGroup` or `AlreadyAssignedSingleAssign` (a different SKU is already assigned to this group — remove it first). | GroupOsImageSkuConflict |
Response fields (GroupOsImageSkuAssignment):
Result of an OS-image-SKU→group assignment. Always single-assign: a group has at most one active SKU. AlreadyAssigned marks the no-op case (the same SKU was already assigned).
| Field | Type | Required | Description |
|---|---|---|---|
groupId |
string (uuid) | Yes | Deployment group ID (GUID). |
skuId |
integer (int32) | Yes | OS image SKU (edition) ID. |
alreadyAssigned |
boolean | Yes |
true if the assignment already existed (no change). |
GET /api/group/{id}/os-image-sku
Returns the OS image SKU currently assigned to the group, if any. Always single-assign per group: a group has at most one active SKU.
Required role: group.read
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id |
path | string (uuid) | Yes | Group GUID. |
includeInherited |
query | boolean | No | Also consider ancestor groups if this group has none assigned directly — the nearest ancestor's SKU wins. |
Responses
| Status | Description | Schema |
|---|---|---|
200 |
The assigned OS image SKU with its parent image package. | GroupOsImageSku |
404 |
Typed body: `GroupNotFound` or `NoOsImageSkuAssigned` (the group exists but has no OS image SKU assigned). | GroupOsImageSkuNotFound |
Response fields (GroupOsImageSku):
The OS image SKU assigned to a group (GET .../os-image-sku), with its parent image package as context.
| Field | Type | Required | Description |
|---|---|---|---|
packageId |
string (uuid) | Yes | Software package ID (GUID). |
packageName |
string | Yes | Package name. |
skuId |
integer (int32) | Yes | OS image SKU (edition) ID. |
index |
integer (int32) | Yes | |
name |
string | Yes | |
description |
string, nullable | Yes |
DELETE /api/group/{id}/os-image-sku/{skuId}
Removes the OS installation image SKU assignment from the group.
Required role: group.write
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id |
path | string (uuid) | Yes | Group GUID. |
skuId |
path | integer (int32) | Yes | Id of the SKU to unassign. |
Responses
| Status | Description | Schema |
|---|---|---|
204 |
Removed, or was not assigned (idempotent). | – |
404 |
Typed body: `GroupNotFound`. | GroupOsImageSkuNotFound |
GET /api/group/{id}/agent-template
Returns the Agent Template currently assigned to the group, if any. Always single-assign per group: a group has at most one active Agent Template.
Required role: group.read
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id |
path | string (uuid) | Yes | Group GUID. |
includeInherited |
query | boolean | No | Also consider ancestor groups if this group has none assigned directly — the nearest ancestor's Agent Template wins. |
Responses
| Status | Description | Schema |
|---|---|---|
200 |
The assigned Agent Template. | AgentTemplate |
404 |
Typed body: `GroupNotFound` or `NoAgentTemplateAssigned` (the group exists but has no Agent Template assigned). | GroupAgentTemplateNotFound |
Response fields (AgentTemplate):
An Agent Template (Software.Type = "AgentTemplate") — the assignable object for POST /api/group/{id}/agent-template. A genuine Software row, but single-assign per group (unlike ordinary multi-assign packages) and kept off the general /packages surface. PackageName/Version/Author/Revision are deliberately omitted — live-DB verification showed they are always empty for this Software.Type, unlike ordinary packages. PollingIntervalSeconds/SuppressReboot/RemindUserOnReboot* are read from the template's AdtTemplateDetails SoftwareDepot node tree (same nodes UemAgentInfoResolver resolves per-computer); null when the template has no InventoryId or the node is missing.
| Field | Type | Required | Description |
|---|---|---|---|
id |
string (uuid) | Yes | |
name |
string | Yes | |
pollingIntervalSeconds |
integer (int32), nullable | Yes | Agent polling interval in seconds. |
suppressReboot |
boolean, nullable | Yes |
true if reboots are suppressed. |
remindUserOnReboot |
boolean, nullable | Yes |
true if the user is reminded before a reboot. |
remindUserOnRebootIntervalMinutes |
integer (int32), nullable | Yes | Reminder interval in minutes. |
forceRebootAfterMinutes |
integer (int32), nullable | Yes | Minutes after which a reboot is forced. |
POST /api/group/{id}/agent-template
Assigns an Agent Template to the group. Always single-assign: a group has at most one active Agent Template.
Required role: group.write
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id |
path | string (uuid) | Yes | Group GUID. |
Request body (required, application/json, schema AssignGroupAgentTemplateRequest)
| Field | Type | Required | Description |
|---|---|---|---|
packageId |
string (uuid) | Yes | Software package ID (GUID). |
Example request body (placeholder values):
{
"packageId": "00000000-0000-0000-0000-000000000000"
}Responses
| Status | Description | Schema |
|---|---|---|
200 |
Already assigned — no-op success, `alreadyAssigned=true`. | GroupAgentTemplateAssignment |
201 |
Assigned; body echoes the assignment. | GroupAgentTemplateAssignment |
404 |
Typed body: `GroupNotFound` or `AgentTemplateNotFound`. | GroupAgentTemplateNotFound |
409 |
Typed body: `SpecialGroup`, `CoveredBySoftwareClass`, or `AlreadyAssignedSingleAssign` (a different Agent Template is already assigned to this group — remove it first). | GroupAgentTemplateConflict |
Response fields (GroupAgentTemplateAssignment):
Result of an Agent Template→group assignment. Always single-assign: a group has at most one active Agent Template. AlreadyAssigned marks the no-op case (the same template was already assigned).
| Field | Type | Required | Description |
|---|---|---|---|
groupId |
string (uuid) | Yes | Deployment group ID (GUID). |
packageId |
string (uuid) | Yes | Software package ID (GUID). |
alreadyAssigned |
boolean | Yes |
true if the assignment already existed (no change). |
DELETE /api/group/{id}/agent-template/{packageId}
Removes the Agent Template assignment from the group.
Required role: group.write
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id |
path | string (uuid) | Yes | Group GUID. |
packageId |
path | string (uuid) | Yes | Software GUID of the Agent Template to unassign. |
Responses
| Status | Description | Schema |
|---|---|---|
204 |
Removed, or was not assigned (idempotent). | – |
404 |
Typed body: `GroupNotFound`. | GroupAgentTemplateNotFound |
GET /api/group/{id}/language-pack-imports
Returns the OS Language Packs currently assigned to the group. Multi-assign, unlike Agent Template — a group can have several.
Required role: group.read
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id |
path | string (uuid) | Yes | Group GUID. |
skip |
query | integer (int32) | No | Number of items to skip (paging). |
top |
query | integer (int32) | No | Maximum number of items to return (page size). |
includeInherited |
query | boolean | No | Also include OS Language Packs assigned to any ancestor group. |
Responses
| Status | Description | Schema |
|---|---|---|
200 |
Paged list of assigned OS Language Packs. | PagedResultOfLanguagePackImport |
The response is a paged result (items, skip, top, totalCount, hasMore). Fields of each item:
An OS Language Pack (Software.Type = "OSLanguagePack") — the assignable object for POST /api/group/{id}/language-pack-imports. A genuine Software row, multi-assign like ordinary packages, but written to the separate CompConfGrLanguagePack table (not CompConfGrSoft) and kept off the general /packages surface. PackageName/Version/Author/Revision are deliberately omitted — live-DB verification showed PackageName always duplicates Name and the others are always NULL for this Software.Type.
| Field | Type | Required | Description |
|---|---|---|---|
id |
string (uuid) | Yes | ID of the Language Pack. |
name |
string | Yes | Name of the Language Pack. |
POST /api/group/{id}/language-pack-imports
Assigns an OS Language Pack to the group. Multi-assign, unlike Agent Template.
Required role: group.write
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id |
path | string (uuid) | Yes | Group GUID. |
Request body (required, application/json, schema AssignGroupLanguagePackRequest)
| Field | Type | Required | Description |
|---|---|---|---|
packageId |
string (uuid) | Yes | Software package ID (GUID). |
Example request body (placeholder values):
{
"packageId": "00000000-0000-0000-0000-000000000000"
}Responses
| Status | Description | Schema |
|---|---|---|
200 |
Already assigned — no-op success, `alreadyAssigned=true`. | GroupLanguagePackAssignment |
201 |
Assigned; body echoes the assignment. | GroupLanguagePackAssignment |
404 |
Typed body: `GroupNotFound` or `LanguagePackNotFound`. | GroupLanguagePackNotFound |
409 |
Typed body: `SpecialGroup`. | GroupLanguagePackConflict |
Response fields (GroupLanguagePackAssignment):
Result of an OS Language Pack→group assignment. Multi-assign, unlike Agent Template. AlreadyAssigned marks the no-op case (the same language pack was already assigned).
| Field | Type | Required | Description |
|---|---|---|---|
groupId |
string (uuid) | Yes | Deployment group ID (GUID). |
packageId |
string (uuid) | Yes | Software package ID (GUID). |
alreadyAssigned |
boolean | Yes |
true if the assignment already existed (no change). |
DELETE /api/group/{id}/language-pack-imports/{packageId}
Removes an OS Language Pack assignment from the group.
Required role: group.write
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id |
path | string (uuid) | Yes | Group GUID. |
packageId |
path | string (uuid) | Yes | Software GUID of the OS Language Pack to unassign. |
Responses
| Status | Description | Schema |
|---|---|---|
204 |
Removed, or was not assigned (idempotent). | – |
404 |
Typed body: `GroupNotFound`. | GroupLanguagePackNotFound |
GET /api/group/{id}/variable-configurations
Returns the Variable Configurations currently assigned to the group. Multi-assign, like OS Language Pack.
Required role: group.read
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id |
path | string (uuid) | Yes | Group GUID. |
skip |
query | integer (int32) | No | Number of items to skip (paging). |
top |
query | integer (int32) | No | Maximum number of items to return (page size). |
includeInherited |
query | boolean | No | Also include Variable Configurations assigned to any ancestor group. |
Responses
| Status | Description | Schema |
|---|---|---|
200 |
Paged list of assigned Variable Configurations. | PagedResultOfVariableConfiguration |
The response is a paged result (items, skip, top, totalCount, hasMore). Fields of each item:
A Variable Configuration (VaPaConfigurations) — a named collection of variables that can be assigned to a group via POST /api/group/{id}/variable-configurations. Feeds into computer variable resolution (dbo.EMPfncGetVariableValueIncludingVariableConfigurations) alongside ordinary group variables. Multi-assign, like OS Language Pack.
| Field | Type | Required | Description |
|---|---|---|---|
id |
integer (int32) | Yes | ID of the Variable Configuration. |
configGuid |
string (uuid) | Yes | Variable Configuration GUID. |
name |
string | Yes | Name of the Variable Configuration. |
description |
string, nullable | Yes | Description of the Variable Configuration. |
createdDate |
string (date-time) | Yes | Creation date. |
lastUpdated |
string (date-time) | Yes | Time of the last update (UTC). |
variables |
array of VariableConfigurationVariable | Yes | Variables. |
POST /api/group/{id}/variable-configurations
Assigns a Variable Configuration to the group. Multi-assign, like OS Language Pack.
Required role: group.write
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id |
path | string (uuid) | Yes | Group GUID. |
Request body (required, application/json, schema AssignGroupVariableConfigurationRequest)
| Field | Type | Required | Description |
|---|---|---|---|
configId |
integer (int32) | Yes | Variable Configuration ID. |
Example request body (placeholder values):
{
"configId": 0
}Responses
| Status | Description | Schema |
|---|---|---|
200 |
Already assigned — no-op success, `alreadyAssigned=true`. | GroupVariableConfigurationAssignment |
201 |
Assigned; body echoes the assignment. | GroupVariableConfigurationAssignment |
404 |
Typed body: `GroupNotFound` or `VariableConfigurationNotFound`. | GroupVariableConfigurationNotFound |
409 |
Typed body: `SpecialGroup`. | GroupVariableConfigurationConflict |
Response fields (GroupVariableConfigurationAssignment):
Result of a Variable Configuration→group assignment. Multi-assign, like OS Language Pack. AlreadyAssigned marks the no-op case (the same configuration was already assigned).
| Field | Type | Required | Description |
|---|---|---|---|
groupId |
string (uuid) | Yes | Deployment group ID (GUID). |
configId |
integer (int32) | Yes | Variable Configuration ID. |
alreadyAssigned |
boolean | Yes |
true if the assignment already existed (no change). |
DELETE /api/group/{id}/variable-configurations/{configId}
Removes a Variable Configuration assignment from the group.
Required role: group.write
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id |
path | string (uuid) | Yes | Group GUID. |
configId |
path | integer (int32) | Yes | Id of the Variable Configuration to unassign. |
Responses
| Status | Description | Schema |
|---|---|---|
204 |
Removed, or was not assigned (idempotent). | – |
404 |
Typed body: `GroupNotFound`. | GroupVariableConfigurationNotFound |
GET /api/group/{id}/variables
Lists this group's directly-assigned variable value(s).
Required role: group.read
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id |
path | string (uuid) | Yes | Group GUID. |
skip |
query | integer (int32) | No | Number of items to skip (paging). |
top |
query | integer (int32) | No | Maximum number of items to return (page size). |
Responses
| Status | Description | Schema |
|---|---|---|
200 |
OK | PagedResultOfVariableValue |
The response is a paged result (items, skip, top, totalCount, hasMore). Fields of each item:
A resolved variable value for one computer or group. string VariableValue.Designation/ string VariableValue.DottedName mirror VariableDefinition. string? VariableValue.Value is null when the variable has no value at the requested scope — a direct-only ("own value only") read with no override returns null rather than falling back to an inherited or catalog-default value; an include-inherited read returns null only when nothing in the whole precedence chain (forced group, own value, inherited group/package, catalog default) has a value either.
| Field | Type | Required | Description |
|---|---|---|---|
varId |
integer (int32) | Yes | Variable definition ID. |
designation |
string | Yes | Designation. |
dottedName |
string | Yes | Fully qualified (dotted) variable name. |
value |
string, nullable | Yes |
POST /api/group/{id}/variables/search
Resolves a single group variable's value, with optional ancestor inheritance resolution. Unlike computer variables, a group has no "own computer value" tier.
Required role: group.read
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id |
path | string (uuid) | Yes | Group GUID. |
skip |
query | integer (int32) | No | Number of items to skip (paging). |
top |
query | integer (int32) | No | Maximum number of items to return (page size). |
Request body (required, application/json, schema VariableValueSearchFilter)
Filter body for POST .../variables/search — single-variable lookup with optional inheritance resolution, the computer/group-scoped counterpart to VariableDefinitionSearchFilter.
| Field | Type | Required | Description |
|---|---|---|---|
name |
string, nullable | No | Raw designation or dotted "parent.child" name; mutually exclusive with varId. |
varId |
integer (int32), nullable | No | Variable's VarID; mutually exclusive with name. |
includeInherited |
boolean | No | False (default) returns only the direct override/value, with no fallback; true resolves the full inheritance precedence. |
Example request body (placeholder values):
{
"name": "string",
"varId": 0,
"includeInherited": false
}Responses
| Status | Description | Schema |
|---|---|---|
200 |
OK | PagedResultOfVariableValue |
The response is a paged result (items, skip, top, totalCount, hasMore). Fields of each item:
A resolved variable value for one computer or group. string VariableValue.Designation/ string VariableValue.DottedName mirror VariableDefinition. string? VariableValue.Value is null when the variable has no value at the requested scope — a direct-only ("own value only") read with no override returns null rather than falling back to an inherited or catalog-default value; an include-inherited read returns null only when nothing in the whole precedence chain (forced group, own value, inherited group/package, catalog default) has a value either.
| Field | Type | Required | Description |
|---|---|---|---|
varId |
integer (int32) | Yes | Variable definition ID. |
designation |
string | Yes | Designation. |
dottedName |
string | Yes | Fully qualified (dotted) variable name. |
value |
string, nullable | Yes |
PUT /api/group/{id}/variables/{varId}
Sets this group's own (direct) value for a scalar (non-collection) variable. A null or omitted value deletes the override, falling back to ancestor/catalog default on later reads.
Required role: group.write
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id |
path | string (uuid) | Yes | Group GUID. |
varId |
path | integer (int32) | Yes | Variable's VarID (must not be a collection or UserDefined variable). |
Request body (required, application/json, schema SetVariableValueRequest)
Body for PUT .../variables/{varId} — sets this computer's/group's own (direct, non-inherited) value for a scalar (non-collection) variable. string? SetVariableValueRequest.Value = null (or an omitted field) deletes the underlying CompVariables/GroupVariables row entirely — a subsequent read falls back to inheritance/catalog default, mirroring the existing delete-not-blank convention for ORGANIZATIONAL_UNIT. An empty string "" is a real, stored value, not a deletion. Not valid for collection variables (DefCompPkgVar.Collection = 1) — use the .../collection endpoints instead.
| Field | Type | Required | Description |
|---|---|---|---|
value |
string, nullable | Yes |
Example request body (placeholder values):
{
"value": "string"
}Responses
| Status | Description | Schema |
|---|---|---|
200 |
OK | VariableValue |
Response fields (VariableValue):
A resolved variable value for one computer or group. string VariableValue.Designation/ string VariableValue.DottedName mirror VariableDefinition. string? VariableValue.Value is null when the variable has no value at the requested scope — a direct-only ("own value only") read with no override returns null rather than falling back to an inherited or catalog-default value; an include-inherited read returns null only when nothing in the whole precedence chain (forced group, own value, inherited group/package, catalog default) has a value either.
| Field | Type | Required | Description |
|---|---|---|---|
varId |
integer (int32) | Yes | Variable definition ID. |
designation |
string | Yes | Designation. |
dottedName |
string | Yes | Fully qualified (dotted) variable name. |
value |
string, nullable | Yes |
GET /api/group/{id}/variables/{varId}/collection
Lists this group's direct entries (bundles) for a collection variable. No ancestor inheritance.
Required role: group.read
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id |
path | string (uuid) | Yes | Group GUID. |
varId |
path | integer (int32) | Yes | Collection variable's VarID (DefCompPkgVar.Collection = 1). |
skip |
query | integer (int32) | No | Number of items to skip (paging). |
top |
query | integer (int32) | No | Maximum number of items to return (page size). |
Responses
| Status | Description | Schema |
|---|---|---|
200 |
OK | PagedResultOfVariableCollectionEntry |
The response is a paged result (items, skip, top, totalCount, hasMore). Fields of each item:
One bundle/array-entry of a collection variable (DefCompPkgVar.Collection = 1) — one CompVariables/GroupVariables row per child variable, all sharing the same CollectionID. int VariableCollectionEntry.CollectionId is the raw CollectionID column value — verified live NOT to be contiguous from 1 (existing bundles can be numbered e.g. 2 and 3 with no row using 1); this is the identifier callers use to reference a specific entry (e.g. for PATCH), not a display position. IReadOnlyList<VariableValue> VariableCollectionEntry.Values has exactly one entry per child variable (DefCompPkgVar rows with ParentID = the collection variable's VarID), ordered by VarID ascending (their catalog definition order — no reliable SEQUENCE value was found live).
| Field | Type | Required | Description |
|---|---|---|---|
collectionId |
integer (int32) | Yes | Collection ID. |
values |
array of VariableValue | Yes |
POST /api/group/{id}/variables/{varId}/collection
Adds one new entry (bundle) to a collection variable on this group.
Required role: group.write
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id |
path | string (uuid) | Yes | Group GUID. |
varId |
path | integer (int32) | Yes | Collection variable's VarID. |
Request body (required, application/json, schema VariableCollectionEntryRequest)
Body for POST .../variables/{varId}/collection — creates one new collection entry (bundle). IReadOnlyDictionary<string, string> VariableCollectionEntryRequest.Values is keyed by child Designation (not VarID) for readability; unknown keys (a Designation that isn't a child of this collection variable) are rejected with 400. A child may be omitted only if its DefCompPkgVar.DefaultValue is non-null — the created row then uses that default; omitting a child with no default is a 400. All child rows for the new entry are inserted together in one transaction — a partial bundle is never created.
| Field | Type | Required | Description |
|---|---|---|---|
values |
map of string to string | Yes |
Example request body (placeholder values):
{
"values": {}
}Responses
| Status | Description | Schema |
|---|---|---|
200 |
OK | VariableCollectionEntry |
Response fields (VariableCollectionEntry):
One bundle/array-entry of a collection variable (DefCompPkgVar.Collection = 1) — one CompVariables/GroupVariables row per child variable, all sharing the same CollectionID. int VariableCollectionEntry.CollectionId is the raw CollectionID column value — verified live NOT to be contiguous from 1 (existing bundles can be numbered e.g. 2 and 3 with no row using 1); this is the identifier callers use to reference a specific entry (e.g. for PATCH), not a display position. IReadOnlyList<VariableValue> VariableCollectionEntry.Values has exactly one entry per child variable (DefCompPkgVar rows with ParentID = the collection variable's VarID), ordered by VarID ascending (their catalog definition order — no reliable SEQUENCE value was found live).
| Field | Type | Required | Description |
|---|---|---|---|
collectionId |
integer (int32) | Yes | Collection ID. |
values |
array of VariableValue | Yes |
PATCH /api/group/{id}/variables/{varId}/collection/{collectionId}
Partially updates one existing collection entry (bundle) on this group.
Required role: group.write
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id |
path | string (uuid) | Yes | Group GUID. |
varId |
path | integer (int32) | Yes | Collection variable's VarID. |
collectionId |
path | integer (int32) | Yes | Entry's CollectionId (from GET .../collection — the raw DB value, not necessarily contiguous). |
Request body (required, application/json, schema VariableCollectionEntryPatchRequest)
Body for PATCH .../variables/{varId}/collection/{collectionId} — partially updates an existing collection entry (bundle), identified directly by its int VariableCollectionEntry.CollectionId (the raw DB value, not necessarily contiguous). Unlike VariableCollectionEntryRequest, this is a genuine partial update: only the supplied child Designations change, every other child value in the bundle is left untouched — an omitted child never falls back to DefaultValue (the bundle already has a real value for every child from when it was created). An unrecognized key is a 400, same as the create request.
| Field | Type | Required | Description |
|---|---|---|---|
values |
map of string to string | Yes |
Example request body (placeholder values):
{
"values": {}
}Responses
| Status | Description | Schema |
|---|---|---|
200 |
OK | VariableCollectionEntry |
Response fields (VariableCollectionEntry):
One bundle/array-entry of a collection variable (DefCompPkgVar.Collection = 1) — one CompVariables/GroupVariables row per child variable, all sharing the same CollectionID. int VariableCollectionEntry.CollectionId is the raw CollectionID column value — verified live NOT to be contiguous from 1 (existing bundles can be numbered e.g. 2 and 3 with no row using 1); this is the identifier callers use to reference a specific entry (e.g. for PATCH), not a display position. IReadOnlyList<VariableValue> VariableCollectionEntry.Values has exactly one entry per child variable (DefCompPkgVar rows with ParentID = the collection variable's VarID), ordered by VarID ascending (their catalog definition order — no reliable SEQUENCE value was found live).
| Field | Type | Required | Description |
|---|---|---|---|
collectionId |
integer (int32) | Yes | Collection ID. |
values |
array of VariableValue | Yes |
DELETE /api/group/{id}/variables/{varId}/collection/{collectionId}
Deletes an entire variable collection entry (all its child values).
Required role: group.write
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id |
path | string (uuid) | Yes | Group GUID. |
varId |
path | integer (int32) | Yes | Collection variable's VarID. |
collectionId |
path | integer (int32) | Yes | Entry's CollectionId (from GET .../collection — the raw DB value, not necessarily contiguous). |
Responses
| Status | Description | Schema |
|---|---|---|
204 |
No Content | – |
GET /api/group/{id}/software-classes
Returns the Software Classes currently assigned to the group. Multi-assign, like OS Language Pack.
Required role: group.read
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id |
path | string (uuid) | Yes | Group GUID. |
skip |
query | integer (int32) | No | Number of items to skip (paging). |
top |
query | integer (int32) | No | Maximum number of items to return (page size). |
includeInherited |
query | boolean | No | Also include Software Classes assigned to any ancestor group. |
Responses
| Status | Description | Schema |
|---|---|---|
200 |
Paged list of assigned Software Classes. | PagedResultOfSoftwareClass |
The response is a paged result (items, skip, top, totalCount, hasMore). Fields of each item:
A Software Class (EMC "Software Classes") — bundles multiple software packages under one assignable id, assigned to groups via CompConfGrSwClasses (ClassID → TreeID), not to be confused with an individual package assignment. A package already covered by a Software Class assigned to a group cannot also be assigned directly (see GroupWriteDbRepository.AssignPackage/AssignAgentTemplate — AssignPackageOutcome/ AssignAgentTemplateOutcome.CoveredBySoftwareClass).
| Field | Type | Required | Description |
|---|---|---|---|
id |
string (uuid) | Yes | ID of the Software Class. |
name |
string | Yes | Name of the Software Class. |
matchMode |
SoftwareClassMatchMode (enum: Or, And) | Yes | Match mode. |
packageIds |
array of string (uuid) | Yes | Software package IDs (GUIDs). |
POST /api/group/{id}/software-classes
Assigns a Software Class to the group. Multi-assign, like OS Language Pack.
Required role: group.write
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id |
path | string (uuid) | Yes | Group GUID. |
Request body (required, application/json, schema AssignGroupSoftwareClassRequest)
| Field | Type | Required | Description |
|---|---|---|---|
classId |
string (uuid) | Yes | Software Class ID. |
Example request body (placeholder values):
{
"classId": "00000000-0000-0000-0000-000000000000"
}Responses
| Status | Description | Schema |
|---|---|---|
200 |
Already assigned — no-op success, `alreadyAssigned=true`. | GroupSoftwareClassAssignment |
201 |
Assigned; body echoes the assignment. | GroupSoftwareClassAssignment |
404 |
Typed body: `GroupNotFound` or `SoftwareClassNotFound`. | GroupSoftwareClassNotFound |
409 |
Typed body: `SpecialGroup`. | GroupSoftwareClassConflict |
Response fields (GroupSoftwareClassAssignment):
Result of a Software Class→group assignment. Multi-assign, like OS Language Pack. AlreadyAssigned marks the no-op case (the same class was already assigned).
| Field | Type | Required | Description |
|---|---|---|---|
groupId |
string (uuid) | Yes | Deployment group ID (GUID). |
classId |
string (uuid) | Yes | Software Class ID. |
alreadyAssigned |
boolean | Yes |
true if the assignment already existed (no change). |
DELETE /api/group/{id}/software-classes/{classId}
Removes a Software Class assignment from the group.
Required role: group.write
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id |
path | string (uuid) | Yes | Group GUID. |
classId |
path | string (uuid) | Yes | Id of the Software Class to unassign. |
Responses
| Status | Description | Schema |
|---|---|---|
204 |
Removed, or was not assigned (idempotent). | – |
404 |
Typed body: `GroupNotFound`. | GroupSoftwareClassNotFound |
POST /api/group/{id}/activation
Activates this group, cascading over its subtree's computers, users, and subgroups.
Required role: activation.execute
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id |
path | string (uuid) | Yes | Deployment group ID (GUID). |
Request body (required, application/json, schema GroupActivationRequest)
Request body for POST /api/group/{id}/activation. At least one of software/pxe/pull must be true. The activation cascades over the group's subtree (member computers, users, and subgroups) inside dbo.ActivateConfigGroup. global (default true) additionally rewrites each member's flags across ALL of its group memberships, not just this subtree's rows; false keeps it subtree-only. (Deactivation is the opposite: its global is opt-in.) No WOL/SRL options at group level.
| Field | Type | Required | Description |
|---|---|---|---|
software |
boolean, nullable | Yes | Software deployment activation flag. |
pxe |
boolean, nullable | Yes | PXE boot activation flag. |
pull |
boolean, nullable | Yes | Pull distribution activation flag. |
global |
boolean, nullable | Yes | Global activation flag. |
Example request body (placeholder values):
{
"software": false,
"pxe": false,
"pull": false,
"global": false
}Responses
| Status | Description | Schema |
|---|---|---|
200 |
OK | Not described in the specification |
409 |
Conflict | GroupComputersMissingPxeBootImage |
DELETE /api/group/{id}/activation
Deactivates this group, clearing the requested activation bits across the subtree.
Required role: activation.execute
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id |
path | string (uuid) | Yes | Deployment group ID (GUID). |
software |
query | boolean | No | Activate or filter software deployment. |
pxe |
query | boolean | No | Activate or filter PXE boot. |
pull |
query | boolean | No | Activate or filter pull distribution. |
global |
query | boolean | No | Global activation flag. |
uninstall |
query | boolean | No | Uninstall distribution option. |
Responses
| Status | Description | Schema |
|---|---|---|
200 |
OK | GroupDeactivated |
Response fields (GroupDeactivated):
Confirmation that the group deactivation (dbo.ActivateConfigGroup Activity=2) was queued. When Global, the proc additionally cancels member computers' reinstall groups (legacy "Cancel Reinstall at Deaktivation" branch). Uninstall = DDC rewritten with UNINSTALL entries instead of the packages being removed from it.
| Field | Type | Required | Description |
|---|---|---|---|
groupId |
string (uuid) | Yes | Deployment group ID (GUID). |
software |
boolean | Yes | Software deployment activation flag. |
pxe |
boolean | Yes | PXE boot activation flag. |
pull |
boolean | Yes | Pull distribution activation flag. |
requestedAtUtc |
string (date-time) | Yes | Time of the request (UTC). |
global |
boolean | Yes | Global activation flag. |
uninstall |
boolean | Yes | Uninstall distribution option. |
Software Packages
Software package catalog, fleet deployment status, "Ready to Install" flag, package import from the PackageStore and hash generation.
| Method | Path | Summary |
|---|---|---|
| GET | /api/packages |
Returns a paged list of all Empirum software packages. |
| GET | /api/packages/{id} |
Returns a single Empirum software package by its GUID. |
| GET | /api/packages/{id}/status |
Returns the fleet-wide deployment status of one package across every computer it is assigned to. |
| PUT | /api/packages/{id}/operational |
Enables or disables the package for installation (the EMC "Ready to Install" checkbox). |
| POST | /api/packages/hash-generation |
Enqueues package hash generation for one package, or for all packages when none is specified. |
| POST | /api/packages/import |
Imports a package from the PackageStore folder and hashes it directly (enqueues an ImportPackage job; hash generation is chained by the backend). |
| GET | /api/packages/import/{trackingId} |
Returns the current status of a package import job (Pending, Running, Success or Failed). |
| POST | /api/packages/search |
Searches packages using one or more filter criteria. |
GET /api/packages
Returns a paged list of all Empirum software packages.
Required role: package.read
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
skip |
query | integer (int32) | No | Number of items to skip (paging). |
top |
query | integer (int32) | No | Maximum number of items to return (page size). |
Responses
| Status | Description | Schema |
|---|---|---|
200 |
OK | PagedResultOfPackage |
The response is a paged result (items, skip, top, totalCount, hasMore). Fields of each item:
| Field | Type | Required | Description |
|---|---|---|---|
id |
string (uuid) | Yes | ID of the package. |
name |
string | Yes | Name of the package. |
packageName |
string, nullable | Yes | Package name. |
type |
string, nullable | Yes | Type of the package. |
subType |
string, nullable | Yes | Subtype. |
version |
string, nullable | Yes | Version. |
author |
string, nullable | Yes | Author. |
revision |
string, nullable | Yes | Package revision. |
operational |
boolean | Yes | "Ready to Install" flag of the package. |
os |
array of string | Yes | Operating system. |
GET /api/packages/{id}
Returns a single Empirum software package by its GUID.
Required role: package.read
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id |
path | string (uuid) | Yes | Software package ID (GUID). |
Responses
| Status | Description | Schema |
|---|---|---|
200 |
OK | Package |
Response fields (Package):
| Field | Type | Required | Description |
|---|---|---|---|
id |
string (uuid) | Yes | |
name |
string | Yes | |
packageName |
string, nullable | Yes | Package name. |
type |
string, nullable | Yes | |
subType |
string, nullable | Yes | Subtype. |
version |
string, nullable | Yes | Version. |
author |
string, nullable | Yes | Author. |
revision |
string, nullable | Yes | Package revision. |
operational |
boolean | Yes | "Ready to Install" flag of the package. |
os |
array of string | Yes | Operating system. |
GET /api/packages/{id}/status
Returns the fleet-wide deployment status of one package across every computer it is assigned to.
Required role: package.read
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id |
path | string (uuid) | Yes | Software package ID (GUID). |
skip |
query | integer (int32) | No | Number of items to skip (paging). |
top |
query | integer (int32) | No | Maximum number of items to return (page size). |
groupId |
query | string (uuid) | No | Restrict results to computers in this deployment group (GUID). |
Responses
| Status | Description | Schema |
|---|---|---|
200 |
OK | PagedResultOfPackageDeploymentDevice |
The response is a paged result (items, skip, top, totalCount, hasMore). Fields of each item:
| Field | Type | Required | Description |
|---|---|---|---|
computerId |
integer (int32) | Yes | Computer ID (Empirum client_id). |
computerName |
string, nullable | Yes | Computer name. |
status |
DeploymentStatus (enum: Pending, Success, Failed) | Yes | Status. |
lastJobTime |
string (date-time), nullable | Yes | Time of the last job (UTC). |
errorText |
string, nullable | Yes | Error text. |
PUT /api/packages/{id}/operational
Enables or disables the package for installation (the EMC "Ready to Install" checkbox).
Required role: package.write
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id |
path | string (uuid) | Yes | Software package ID (GUID). |
Request body (required, application/json, schema SetPackageOperationalRequest)
Request body for enabling/disabling a package for installation (Software.bInstallReady — the EMC "Ready to Install" checkbox).
| Field | Type | Required | Description |
|---|---|---|---|
operational |
boolean | Yes | "Ready to Install" flag of the package. |
Example request body (placeholder values):
{
"operational": false
}Responses
| Status | Description | Schema |
|---|---|---|
200 |
OK | PackageOperationalResult |
Response fields (PackageOperationalResult):
Result of an operational toggle. Changed=false means the flag already had the requested value (idempotent no-op).
| Field | Type | Required | Description |
|---|---|---|---|
packageId |
string (uuid) | Yes | Software package ID (GUID). |
operational |
boolean | Yes | "Ready to Install" flag of the package. |
changed |
boolean | Yes |
true if the value changed. |
POST /api/packages/hash-generation
Enqueues package hash generation for one package, or for all packages when none is specified.
Required role: package.write
Request body (optional, application/json, schema HashGenerationRequest)
Request body for triggering package hash generation. Omit the body (or PackageId) to generate hashes for all packages.
| Field | Type | Required | Description |
|---|---|---|---|
packageId |
string (uuid), nullable | No | Software package ID (GUID). |
Example request body (placeholder values):
{
"packageId": "00000000-0000-0000-0000-000000000000"
}Responses
| Status | Description | Schema |
|---|---|---|
202 |
Accepted | HashGenerationTriggered |
404 |
Not Found | ProblemDetails |
Response fields (HashGenerationTriggered):
Result of enqueuing a CreateHashes job. PackageId/PackageName are null for the all-packages variant. There is no trackingId: the legacy queue insert creates no QueueJobResult row, so completion is not trackable — the hashes appear on the depot shares (PackageHashes.json) when the ActivationQueue SWM service finishes.
| Field | Type | Required | Description |
|---|---|---|---|
packageId |
string (uuid), nullable | Yes | Software package ID (GUID). |
packageName |
string, nullable | Yes | Package name. |
note |
string, nullable | No |
POST /api/packages/import
Imports a package from the PackageStore folder and hashes it directly (enqueues an ImportPackage job; hash generation is chained by the backend).
Required role: package.write
Request body (required, application/json, schema PackageImportRequest)
Request body for importing a package from the PackageStore folder. FolderPath is strictly relative to the PackageStore root (segments allowed, e.g. "Vendor\Product\Version"); absolute paths, drive letters, UNC paths and ".." are rejected. Overwrite maps to the legacy Force parameter — without it, re-importing an existing package fails on the backend.
| Field | Type | Required | Description |
|---|---|---|---|
folderPath |
string | Yes | Package folder path strictly relative to the PackageStore root (the Empirum 'ACTPath' option). Segments allowed; absolute paths, drive letters, UNC paths and ".." are rejected. Forward slashes are normalized to backslashes. Example: "Vendor\Product\1.0". |
overwrite |
boolean | No | True replaces an existing package with the same identity (legacy Force). Default false — re-importing an existing package then fails on the backend. |
Example request body (placeholder values):
{
"folderPath": "string",
"overwrite": false
}Responses
| Status | Description | Schema |
|---|---|---|
202 |
Accepted | PackageImportTriggered |
400 |
Bad Request | ProblemDetails |
409 |
Conflict | ProblemDetails |
Response fields (PackageImportTriggered):
Result of enqueuing an ImportPackage job. Unlike hash generation, import jobs ARE trackable: poll GET /api/packages/import/{trackingId}.
| Field | Type | Required | Description |
|---|---|---|---|
trackingId |
string (uuid) | Yes | Tracking ID (GUID) for follow-up requests. |
packageLocation |
string | Yes | Package location. |
note |
string, nullable | No |
GET /api/packages/import/{trackingId}
Returns the current status of a package import job (Pending, Running, Success or Failed).
Required role: package.read
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
trackingId |
path | string (uuid) | Yes | Tracking ID (GUID) returned by the triggering operation. |
Responses
| Status | Description | Schema |
|---|---|---|
200 |
OK | PackageImportStatus |
404 |
Not Found | ProblemDetails |
Response fields (PackageImportStatus):
Current status of an import job (latest QueueJobResult row for the tracking id). Status is the raw backend value: Pending, Running, Success or Failed.
| Field | Type | Required | Description |
|---|---|---|---|
trackingId |
string (uuid) | Yes | Tracking ID (GUID) for follow-up requests. |
status |
string | Yes | Status. |
message |
string, nullable | Yes | Human-readable message. |
timestamp |
string (date-time) | Yes | Timestamp (UTC). |
POST /api/packages/search
Searches packages using one or more filter criteria.
Required role: package.read
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
skip |
query | integer (int32) | No | Number of items to skip (paging). |
top |
query | integer (int32) | No | Maximum number of items to return (page size). |
Request body (required, application/json, schema PackageSearchFilter)
| Field | Type | Required | Description |
|---|---|---|---|
name |
string, nullable | No | Substring match on software display name. Case-insensitive on default Empirum collation. |
packageName |
string, nullable | No | Substring match on the Empirum internal package path identifier. |
author |
string, nullable | No | Substring match on author/vendor (Software.Author). |
type |
string, nullable | No | Substring match on package type. |
subType |
string, nullable | No | Substring match on package sub-type. |
version |
string, nullable | No | Substring match on version. |
Example request body (placeholder values):
{
"name": "string",
"packageName": "string",
"author": "string",
"type": "string",
"subType": "string",
"version": "string"
}Responses
| Status | Description | Schema |
|---|---|---|
200 |
OK | PagedResultOfPackage |
The response is a paged result (items, skip, top, totalCount, hasMore). Fields of each item:
| Field | Type | Required | Description |
|---|---|---|---|
id |
string (uuid) | Yes | ID of the package. |
name |
string | Yes | Name of the package. |
packageName |
string, nullable | Yes | Package name. |
type |
string, nullable | Yes | Type of the package. |
subType |
string, nullable | Yes | Subtype. |
version |
string, nullable | Yes | Version. |
author |
string, nullable | Yes | Author. |
revision |
string, nullable | Yes | Package revision. |
operational |
boolean | Yes | "Ready to Install" flag of the package. |
os |
array of string | Yes | Operating system. |
Patches
Patch catalog, patch and product lookups, patch and product approval.
| Method | Path | Summary |
|---|---|---|
| POST | /api/patches/search |
Searches the patch catalog without any assignment context. |
| GET | /api/patches/{patchId} |
Resolves a catalog patch to its human-readable identity. |
| GET | /api/patches/products/{productId} |
Resolves a patch-catalog product id to its name. |
| GET | /api/patches/{patchId}/products |
Lists the product versions a patch is linked into, with the number of link items each productId scope touches — the choices for the approval / add-to-group writes. |
| POST | /api/patches/{patchId}/approval |
Approves (releases) a catalog patch for ONE product version — the link items an EMC operator would select under that product node. Other product versions the patch is linked into are never touched. |
| DELETE | /api/patches/{patchId}/approval |
Revokes a patch approval. Without productId every link item of the patch is reverted (the repair path for patches over-approved by the pre-603407 API). |
| POST | /api/patches/products/{productId}/approval |
Approves (activates/allows as patch) an entire catalog product. |
POST /api/patches/search
Searches the patch catalog without any assignment context.
Required role: pm.read
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
skip |
query | integer (int32) | No | Number of items to skip (paging). |
top |
query | integer (int32) | No | Maximum number of items to return (page size). |
Request body (required, application/json, schema PatchCatalogFilter)
Filter for the context-free patch catalog search. All string fields are substring matches except VendorSeverity (exact severity name); AND-combined. Assigned: false = patches not in any PM group (the unassigned-catalog view), true = in at least one PM group, null = all.
| Field | Type | Required | Description |
|---|---|---|---|
nameContains |
string, nullable | No | Filter by a substring of the name. |
qNumber |
string, nullable | No | Patch Q-number (KB article). |
bulletinId |
string, nullable | No | Security bulletin ID. |
cve |
string, nullable | No | Filter by CVE ID. |
patchType |
PatchType (enum: SecurityPatch, SoftwareDistribution, SecurityTool, NonSecurityPatch, CustomAction) | No | Patch type. |
vendorSeverity |
string, nullable | No | Severity as rated by the vendor. |
minCvss |
number (double), nullable | No | Minimum CVSS score. |
minVrr |
number (double), nullable | No | Minimum VRR score. |
assigned |
boolean, nullable | No | Filter for assigned or unassigned items. |
releasedAfter |
string (date), nullable | No | Only patches released after this date. |
releasedBefore |
string (date), nullable | No | Only patches released before this date. |
updatedAfter |
string (date), nullable | No | Only patches updated after this date. |
updatedBefore |
string (date), nullable | No | Only patches updated before this date. |
Example request body (placeholder values):
{
"nameContains": "string",
"qNumber": "string",
"bulletinId": "string",
"cve": "string",
"patchType": "SecurityPatch",
"vendorSeverity": "string",
"minCvss": 0.0,
"minVrr": 0.0,
"assigned": false,
"releasedAfter": "2026-01-01",
"releasedBefore": "2026-01-01",
"updatedAfter": "2026-01-01",
"updatedBefore": "2026-01-01"
}Responses
| Status | Description | Schema |
|---|---|---|
200 |
OK | PagedResultOfPatchCatalogItem |
The response is a paged result (items, skip, top, totalCount, hasMore). Fields of each item:
One patch-catalog entry (PM_Patches grain — NOT the 19M-row link-item fan-out). CveIds come from PM_Cveids via PM_PatchToCveids; IsAssigned means any link item of this patch is a member of any PM group (PM_GroupAssignments).
| Field | Type | Required | Description |
|---|---|---|---|
patchId |
integer (int32) | Yes | Patch ID. |
patchUid |
string (uuid) | Yes | Unique patch identifier. |
name |
string | Yes | Name of the patch. |
qNumber |
string, nullable | Yes | Patch Q-number (KB article). |
bulletinId |
string, nullable | Yes | Security bulletin ID. |
patchType |
PatchType (enum: SecurityPatch, SoftwareDistribution, SecurityTool, NonSecurityPatch, CustomAction) | Yes | Patch type. |
vendorSeverity |
string, nullable | Yes | Severity as rated by the vendor. |
cvssScore |
number (double), nullable | Yes | CVSS score. |
vrrScore |
number (double), nullable | Yes | Vulnerability Risk Rating (VRR) score. |
releaseDate |
string (date), nullable | Yes | Release date. |
updateDate |
string (date), nullable | Yes | Update date. |
isAssigned |
boolean | Yes |
true if assigned. |
cveIds |
array of string | Yes | Related CVE IDs. |
sizeBytes |
integer (int64), nullable | No | Size in bytes. |
GET /api/patches/{patchId}
Resolves a catalog patch to its human-readable identity.
Required role: pm.read
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
patchId |
path | integer (int32) | Yes | Patch ID. |
Responses
| Status | Description | Schema |
|---|---|---|
200 |
OK | PatchCatalogItem |
Response fields (PatchCatalogItem):
One patch-catalog entry (PM_Patches grain — NOT the 19M-row link-item fan-out). CveIds come from PM_Cveids via PM_PatchToCveids; IsAssigned means any link item of this patch is a member of any PM group (PM_GroupAssignments).
| Field | Type | Required | Description |
|---|---|---|---|
patchId |
integer (int32) | Yes | Patch ID. |
patchUid |
string (uuid) | Yes | Unique patch identifier. |
name |
string | Yes | |
qNumber |
string, nullable | Yes | Patch Q-number (KB article). |
bulletinId |
string, nullable | Yes | Security bulletin ID. |
patchType |
PatchType (enum: SecurityPatch, SoftwareDistribution, SecurityTool, NonSecurityPatch, CustomAction) | Yes | Patch type. |
vendorSeverity |
string, nullable | Yes | Severity as rated by the vendor. |
cvssScore |
number (double), nullable | Yes | CVSS score. |
vrrScore |
number (double), nullable | Yes | Vulnerability Risk Rating (VRR) score. |
releaseDate |
string (date), nullable | Yes | Release date. |
updateDate |
string (date), nullable | Yes | Update date. |
isAssigned |
boolean | Yes |
true if assigned. |
cveIds |
array of string | Yes | Related CVE IDs. |
sizeBytes |
integer (int64), nullable | No | Size in bytes. |
GET /api/patches/products/{productId}
Resolves a patch-catalog product id to its name.
Required role: pm.read
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
productId |
path | integer (int32) | Yes | PM_Products id. |
Responses
| Status | Description | Schema |
|---|---|---|
200 |
OK | PmProductInfo |
Response fields (PmProductInfo):
Human-readable identity of a patch-catalog product (PM_Products row).
| Field | Type | Required | Description |
|---|---|---|---|
id |
integer (int32) | Yes | |
productName |
string | Yes | Product name. |
GET /api/patches/{patchId}/products
Lists the product versions a patch is linked into, with the number of link items each productId scope touches — the choices for the approval / add-to-group writes.
Required role: pm.read
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
patchId |
path | integer (int32) | Yes | PM_Patches id. |
Responses
| Status | Description | Schema |
|---|---|---|
200 |
OK | array of PatchProductLink |
Response fields (PatchProductLink):
One product version (PM_Products row) a patch is linked into, with the number of PM_PatchLinkedItems rows (the EMC console's approval grain) that a write scoped to this productId touches. ApprovalStatus = MAX(ItemStatus) over those link items.
| Field | Type | Required | Description |
|---|---|---|---|
productId |
integer (int32) | Yes | Patch catalog product ID. |
productName |
string | Yes | Product name. |
isVisible |
boolean | Yes |
true if visible. |
linkItemCount |
integer (int32) | Yes | Number of link items. |
approvalStatus |
PmPatchStatus (enum: Available, Downloading, Downloaded, Approved, Disapproved, Deleted, Approving, DownloadFailed, Revised, Deleting) | Yes | Approval status. |
POST /api/patches/{patchId}/approval
Approves (releases) a catalog patch for ONE product version — the link items an EMC operator would select under that product node. Other product versions the patch is linked into are never touched.
Required role: pm.approve
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
patchId |
path | integer (int32) | Yes | PM_Patches id, e.g. from the missing-patch issue's patchId field or the catalog search. |
productId |
query | integer (int32) | No | PM_Products id (the missing-patch item's productId, or one of GET /api/patches/{patchId}/products). Required unless allProducts. |
allProducts |
query | boolean | No | Explicitly approve the patch for every product version it is linked into (the EMC multi-select). Neither parameter → 400 ProductScopeRequired listing the product versions. |
Responses
| Status | Description | Schema |
|---|---|---|
200 |
OK | PatchApprovalResult |
Response fields (PatchApprovalResult):
Aggregate result of an approve/disapprove call over the link items of a patch in scope (PBI 603407): ProductId = the product version the call was scoped to (null = every product version the patch is linked into — explicit allProducts or unscoped disapprove), LinkItemsTotal = link items in that scope, PatchCount = 1 (kept for shape parity with PatchMembershipResult). Approval is asynchronous EMC-side: Approving count > 0 means the EMC ActivationQueue PM service is downloading the patch binary and will set Approved itself — poll for final state.
| Field | Type | Required | Description |
|---|---|---|---|
patchId |
integer (int32) | Yes | Patch ID. |
approving |
integer (int32) | Yes | Items that are approved by this request. |
alreadyApproved |
integer (int32) | Yes | Items that were already approved. |
invalidState |
integer (int32) | Yes | Items that could not be changed because of their state. |
message |
string | Yes | Human-readable message. |
productId |
integer (int32), nullable | No | Patch catalog product ID. |
linkItemsTotal |
integer (int32) | No | Total number of link items. |
patchCount |
integer (int32) | No | Number of patches. |
DELETE /api/patches/{patchId}/approval
Revokes a patch approval. Without productId every link item of the patch is reverted (the repair path for patches over-approved by the pre-603407 API).
Required role: pm.approve
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
patchId |
path | integer (int32) | Yes | PM_Patches id. |
productId |
query | integer (int32) | No | Optional PM_Products id — revert only that product version. |
Responses
| Status | Description | Schema |
|---|---|---|
200 |
OK | PatchApprovalResult |
Response fields (PatchApprovalResult):
Aggregate result of an approve/disapprove call over the link items of a patch in scope (PBI 603407): ProductId = the product version the call was scoped to (null = every product version the patch is linked into — explicit allProducts or unscoped disapprove), LinkItemsTotal = link items in that scope, PatchCount = 1 (kept for shape parity with PatchMembershipResult). Approval is asynchronous EMC-side: Approving count > 0 means the EMC ActivationQueue PM service is downloading the patch binary and will set Approved itself — poll for final state.
| Field | Type | Required | Description |
|---|---|---|---|
patchId |
integer (int32) | Yes | Patch ID. |
approving |
integer (int32) | Yes | Items that are approved by this request. |
alreadyApproved |
integer (int32) | Yes | Items that were already approved. |
invalidState |
integer (int32) | Yes | Items that could not be changed because of their state. |
message |
string | Yes | Human-readable message. |
productId |
integer (int32), nullable | No | Patch catalog product ID. |
linkItemsTotal |
integer (int32) | No | Total number of link items. |
patchCount |
integer (int32) | No | Number of patches. |
POST /api/patches/products/{productId}/approval
Approves (activates/allows as patch) an entire catalog product.
Required role: pm.approve
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
productId |
path | integer (int32) | Yes | PM_Products id, e.g. from GET /api/pmgroup/{id}/products. |
Responses
| Status | Description | Schema |
|---|---|---|
200 |
OK | ProductApprovalResult |
Response fields (ProductApprovalResult):
Result of a product-level approval fan-out across the product's PM_PatchLinkedItems AND PM_ServicePackLinkedItems. Per-link outcomes are aggregated; Disapproved/Deleted links count as InvalidState, never a whole-request conflict.
| Field | Type | Required | Description |
|---|---|---|---|
productId |
integer (int32) | Yes | Patch catalog product ID. |
approving |
integer (int32) | Yes | Items that are approved by this request. |
alreadyApproved |
integer (int32) | Yes | Items that were already approved. |
invalidState |
integer (int32) | Yes | Items that could not be changed because of their state. |
patchLinkCount |
integer (int32) | Yes | Number of patch link items. |
servicePackLinkCount |
integer (int32) | Yes | Number of service pack link items. |
Patch Management Groups
Patch Management (PM) groups, their products and patches, tree assignments and emergency patching.
| Method | Path | Summary |
|---|---|---|
| GET | /api/pmgroup |
Returns a paged list of Patch Management catalogue groups, optionally filtered by category and name. |
| POST | /api/pmgroup |
Creates a Patch Management catalogue group. |
| GET | /api/pmgroup/{id} |
Returns a single Patch Management catalogue group by its id. |
| GET | /api/pmgroup/{id}/products |
Returns a paged list of the products (patch-catalog entries) contained in the PM group. |
| POST | /api/pmgroup/{id}/products |
Adds a patch-catalog product to the PM group as Include or Test assignments. |
| GET | /api/pmgroup/{id}/patches |
Returns a paged list of the patches in the PM group. |
| POST | /api/pmgroup/{id}/patches |
Adds patches to the PM group as Include or Test assignments, scoped to ONE product version (productId — the rows an EMC operator would select) or explicitly to every product version the patches are linked into (allProducts). Neither → 400 ProductScopeRequired. |
| GET | /api/pmgroup/{id}/assignments |
Returns a paged list of the Empirum groups (tree nodes) the PM group is assigned to. |
| POST | /api/pmgroup/{id}/assignments |
Assigns the PM group to an Empirum group-tree node (ComputerGroupTree or AssignmentGroupTree). |
| DELETE | /api/pmgroup/{id}/assignments |
Removes the PM group's assignment from a tree node. |
| DELETE | /api/pmgroup/{id}/patches/{patchId} |
Removes a patch (all of its link items) from the PM group. |
| DELETE | /api/pmgroup/{id}/products/{productId} |
Removes all patches for a product from the PM group. |
| POST | /api/pmgroup/{id}/emergency-patching |
Triggers emergency patch remediation for the PM group across the target computers. |
| DELETE | /api/pmgroup/{id}/emergency-patching |
Removes the emergency assignment group for this PM group, including all child groups. |
GET /api/pmgroup
Returns a paged list of Patch Management catalogue groups, optionally filtered by category and name.
Required role: pm.read
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
skip |
query | integer (int32) | No | Number of items to skip (paging). |
top |
query | integer (int32) | No | Maximum number of items to return (page size). |
category |
query | PmGroupCategory (enum: Patch, ServicePack) | No | Filter by group category: Patch or ServicePack. Omit for all. |
nameContains |
query | string | No | Only groups whose name contains this substring. |
Responses
| Status | Description | Schema |
|---|---|---|
200 |
OK | PagedResultOfPmGroup |
The response is a paged result (items, skip, top, totalCount, hasMore). Fields of each item:
A Patch Management catalogue group (PM_Groups).
| Field | Type | Required | Description |
|---|---|---|---|
id |
integer (int32) | Yes | ID of the PM group. |
name |
string | Yes | Name of the PM group. |
category |
PmGroupCategory (enum: Patch, ServicePack) | Yes | Category. |
mode |
PmGroupMode (enum: Normal, IncludeAll, ExcludeAll) | Yes | Mode. |
days |
integer (int16) | Yes | Days. |
testMinutes |
integer (int16) | Yes | Duration of the test phase in minutes. |
info |
string, nullable | Yes |
POST /api/pmgroup
Creates a Patch Management catalogue group.
Required role: pm.write
Request body (required, application/json, schema CreatePmGroupRequest)
Request body for creating a PM group. Mode is restricted to Normal — the IncludeAll/ExcludeAll backfill of approved patches lives only in the console's UpdateGroup path, so a REST-created IncludeAll group would be silently empty.
| Field | Type | Required | Description |
|---|---|---|---|
name |
string | Yes | Name of the PM group. |
category |
PmGroupCategory (enum: Patch, ServicePack) | No | Category. |
mode |
PmGroupMode (enum: Normal, IncludeAll, ExcludeAll) | No | Mode. |
days |
integer (int16) | No | Days. |
testMinutes |
integer (int16) | No | Duration of the test phase in minutes. |
info |
string, nullable | No |
Example request body (placeholder values):
{
"name": "string",
"category": "Patch",
"mode": "Normal",
"days": 0,
"testMinutes": 0,
"info": "string"
}Responses
| Status | Description | Schema |
|---|---|---|
200 |
OK | Not described in the specification |
409 |
Conflict | PmGroupCreateConflict |
GET /api/pmgroup/{id}
Returns a single Patch Management catalogue group by its id.
Required role: pm.read
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id |
path | integer (int32) | Yes | PM group ID. |
Responses
| Status | Description | Schema |
|---|---|---|
200 |
OK | PmGroup |
Response fields (PmGroup):
A Patch Management catalogue group (PM_Groups).
| Field | Type | Required | Description |
|---|---|---|---|
id |
integer (int32) | Yes | |
name |
string | Yes | |
category |
PmGroupCategory (enum: Patch, ServicePack) | Yes | Category. |
mode |
PmGroupMode (enum: Normal, IncludeAll, ExcludeAll) | Yes | Mode. |
days |
integer (int16) | Yes | Days. |
testMinutes |
integer (int16) | Yes | Duration of the test phase in minutes. |
info |
string, nullable | Yes |
GET /api/pmgroup/{id}/products
Returns a paged list of the products (patch-catalog entries) contained in the PM group.
Required role: pm.read
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id |
path | integer (int32) | Yes | PM group id. |
skip |
query | integer (int32) | No | Number of items to skip (paging). |
top |
query | integer (int32) | No | Maximum number of items to return (page size). |
Responses
| Status | Description | Schema |
|---|---|---|
200 |
OK | PagedResultOfPmGroupProduct |
The response is a paged result (items, skip, top, totalCount, hasMore). Fields of each item:
A product (patch-catalog entry) contained in a PM group, derived from its patch/service-pack link items — EMC has no products-in-group table. "Activated" in the EMC WebConsole = ItemStatus 4 (Approved) AND product IsVisible.
| Field | Type | Required | Description |
|---|---|---|---|
productId |
integer (int32) | Yes | Patch catalog product ID. |
productName |
string | Yes | Product name. |
isVisible |
boolean | Yes |
true if visible. |
totalItemCount |
integer (int32) | Yes | Total number of items. |
approvedCount |
integer (int32) | Yes | Number of approved items. |
disapprovedCount |
integer (int32) | Yes | Number of disapproved items. |
includeCount |
integer (int32) | Yes | Number of include assignments. |
excludeCount |
integer (int32) | Yes | Number of exclude assignments. |
testCount |
integer (int32) | Yes | Number of test assignments. |
POST /api/pmgroup/{id}/products
Adds a patch-catalog product to the PM group as Include or Test assignments.
, pm.approve.
Required role: pm.write
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id |
path | integer (int32) | Yes | PM group ID. |
Request body (required, application/json, schema AddProductToGroupRequest)
Request body for adding a catalog product to a PM group. Membership is resolved to the product's link items matching the group's category.
| Field | Type | Required | Description |
|---|---|---|---|
productId |
integer (int32) | Yes | Patch catalog product ID. |
groupType |
PmAssignmentType (enum: Include, Exclude, Test) | No | Group type. |
Example request body (placeholder values):
{
"productId": 0,
"groupType": "Include"
}Responses
| Status | Description | Schema |
|---|---|---|
200 |
OK | Not described in the specification |
409 |
Conflict | PmGroupProductConflict |
GET /api/pmgroup/{id}/patches
Returns a paged list of the patches in the PM group.
Required role: pm.read
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id |
path | integer (int32) | Yes | PM group id. |
skip |
query | integer (int32) | No | Number of items to skip (paging). |
top |
query | integer (int32) | No | Maximum number of items to return (page size). |
Responses
| Status | Description | Schema |
|---|---|---|
200 |
OK | PagedResultOfPmGroupPatch |
The response is a paged result (items, skip, top, totalCount, hasMore). Fields of each item:
A patch (PM_Patches grain) inside a PM group, with its assignment type (GroupType) and current approval status (ItemStatus).
| Field | Type | Required | Description |
|---|---|---|---|
patchId |
integer (int32) | Yes | Patch ID. |
patchUid |
string (uuid) | Yes | Unique patch identifier. |
patchName |
string | Yes | Patch name. |
qNumber |
string, nullable | Yes | Patch Q-number (KB article). |
productName |
string, nullable | Yes | Product name. |
groupType |
PmAssignmentType (enum: Include, Exclude, Test) | Yes | Group type. |
approvalStatus |
PmPatchStatus (enum: Available, Downloading, Downloaded, Approved, Disapproved, Deleted, Approving, DownloadFailed, Revised, Deleting) | Yes | Approval status. |
POST /api/pmgroup/{id}/patches
Adds patches to the PM group as Include or Test assignments, scoped to ONE product version (productId — the rows an EMC operator would select) or explicitly to every product version the patches are linked into (allProducts). Neither → 400 ProductScopeRequired.
Required role: pm.write
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id |
path | integer (int32) | Yes | PM group ID. |
Request body (required, application/json, schema AddPatchesToGroupRequest)
Request body for adding patches to a PM group (PBI 603407). Exactly one scope is required: ProductId (PM_Products id — only the link items of that product version, i.e. the rows an EMC operator would select) or AllProducts=true (every product version each patch is linked into — the EMC multi-select). Neither → 400 ProductScopeRequired; both → 400.
| Field | Type | Required | Description |
|---|---|---|---|
patchIds |
array of integer (int32) | Yes | Patch IDs. |
groupType |
PmAssignmentType (enum: Include, Exclude, Test) | Yes | Group type. |
productId |
integer (int32), nullable | No | Patch catalog product ID. |
allProducts |
boolean | No | Apply to all products. |
Example request body (placeholder values):
{
"patchIds": [
0
],
"groupType": "Include",
"productId": 0,
"allProducts": false
}Responses
| Status | Description | Schema |
|---|---|---|
200 |
OK | PatchMembershipResult |
Response fields (PatchMembershipResult):
Result of a group-membership change. Idempotent semantics: re-adding an existing assignment counts as AlreadyAssigned; adding with a different GroupType moves the item (MovedFromOtherType), mirroring the EMC console's upsert. ProductId = the scope of the call (null = all product versions), PatchCount = distinct patches requested, LinkItemsTotal = link items in scope (= Added + AlreadyAssigned + MovedFromOtherType).
| Field | Type | Required | Description |
|---|---|---|---|
added |
integer (int32) | Yes | Items that were added. |
alreadyAssigned |
integer (int32) | Yes |
true if the assignment already existed (no change). |
movedFromOtherType |
integer (int32) | Yes | Items moved from another assignment type. |
productId |
integer (int32), nullable | No | Patch catalog product ID. |
patchCount |
integer (int32) | No | Number of patches. |
linkItemsTotal |
integer (int32) | No | Total number of link items. |
GET /api/pmgroup/{id}/assignments
Returns a paged list of the Empirum groups (tree nodes) the PM group is assigned to.
isTestAssignment marks nodes that receive the PM group's Test-Group rollout (patches deployed there first, for the group's Days/TestMinutes window). testOnly=true narrows to the test nodes — the group's first-wave verification rings.
Required role: pm.read
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id |
path | integer (int32) | Yes | PM group id. |
skip |
query | integer (int32) | No | Number of items to skip (paging). |
top |
query | integer (int32) | No | Maximum number of items to return (page size). |
testOnly |
query | boolean | No | Only assignments with the test flag (first-wave nodes). |
Responses
| Status | Description | Schema |
|---|---|---|
200 |
OK | PagedResultOfPmGroupAssignment |
The response is a paged result (items, skip, top, totalCount, hasMore). Fields of each item:
An Empirum group-tree node a PM group is assigned to (CompConfGrPMGroups). IsTestAssignment mirrors TestFlag — the node receives the PM group's test class. PmClientGaps (assign response only, null on the GET list) warns when the PM client Scan/Fix packages are not assigned at the node or an ancestor (codes ScanPackageNotAssigned / FixPackageNotAssigned, matching the missing-patch issue) — without them the PM group's patches are never scanned for or installed on the node's devices. Heuristic: devices may still receive the packages via another group.
| Field | Type | Required | Description |
|---|---|---|---|
treeId |
string (uuid) | Yes | Group tree node ID. |
groupName |
string, nullable | Yes | Group name. |
isTestAssignment |
boolean | Yes |
true if this is a test assignment. |
pmClientGaps |
array of string, nullable | No |
POST /api/pmgroup/{id}/assignments
Assigns the PM group to an Empirum group-tree node (ComputerGroupTree or AssignmentGroupTree).
isTestAssignment marks the node as the group's test/pilot ring and requires the group to already be assigned at an ancestor node. No activation is needed — the next patch scan resolves the new configuration. Returns 409 with codes AlreadyAssigned, ConflictingTestFlag or TestRequiresParentAssignment. The 201 body carries pmClientGaps (ScanPackageNotAssigned / FixPackageNotAssigned) when the PM client Scan/Fix packages are not assigned at the node or an ancestor — without them the group's patches are never scanned for or installed. The resulting assignment list is GET /api/pmgroup/{id}/assignments.
Required role: pm.write
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id |
path | integer (int32) | Yes | PM group ID. |
Request body (required, application/json, schema AssignPmGroupRequest)
Request body for assigning a PM group to an Empirum tree node.
| Field | Type | Required | Description |
|---|---|---|---|
treeId |
string (uuid) | Yes | Group tree node ID. |
isTestAssignment |
boolean | No |
true if this is a test assignment. |
Example request body (placeholder values):
{
"treeId": "00000000-0000-0000-0000-000000000000",
"isTestAssignment": false
}Responses
| Status | Description | Schema |
|---|---|---|
200 |
OK | Not described in the specification |
409 |
Conflict | PmGroupAssignmentConflict |
DELETE /api/pmgroup/{id}/assignments
Removes the PM group's assignment from a tree node.
Required role: pm.write
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id |
path | integer (int32) | Yes | PM group ID. |
treeId |
query | string (uuid) | No | Group tree node ID. |
Responses
| Status | Description | Schema |
|---|---|---|
200 |
OK | – |
DELETE /api/pmgroup/{id}/patches/{patchId}
Removes a patch (all of its link items) from the PM group.
Required role: pm.write
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id |
path | integer (int32) | Yes | PM group ID. |
patchId |
path | integer (int32) | Yes | Patch ID. |
Responses
| Status | Description | Schema |
|---|---|---|
200 |
OK | – |
DELETE /api/pmgroup/{id}/products/{productId}
Removes all patches for a product from the PM group.
Required role: pm.write
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id |
path | integer (int32) | Yes | PM group ID. |
productId |
path | integer (int32) | Yes | Patch catalog product ID. |
Responses
| Status | Description | Schema |
|---|---|---|
200 |
OK | – |
POST /api/pmgroup/{id}/emergency-patching
Triggers emergency patch remediation for the PM group across the target computers.
Required role: pm.execute
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id |
path | integer (int32) | Yes | PM group ID. |
Request body (required, application/json, schema StartEmergencyPatchingRequest)
Request body for the emergency-patching orchestration (PBI 591780). The PM group id comes from the route (POST /api/pmgroup/{id}/emergency-patching).
| Field | Type | Required | Description |
|---|---|---|---|
computerIds |
array of integer (int32) | Yes | Computer IDs (Empirum client_id). |
Example request body (placeholder values):
{
"computerIds": [
0
]
}Responses
| Status | Description | Schema |
|---|---|---|
200 |
OK | EmergencyPatchingStarted |
404 |
Not Found | EmergencyPatchingConflict |
409 |
Conflict | EmergencyPatchingConflict |
Response fields (EmergencyPatchingStarted):
The full step ledger of one emergency-patching run: what was created, what already existed, and what failed — the caller sees exactly what exists and can re-run (idempotent) or DELETE (recoverable).
| Field | Type | Required | Description |
|---|---|---|---|
groupId |
string (uuid) | Yes | Deployment group ID (GUID). |
groupName |
string | Yes | Group name. |
groupCreated |
boolean | Yes |
true if the group was created. |
pmGroupId |
integer (int32) | Yes | PM group ID. |
pmGroupName |
string | Yes | PM group name. |
pmGroupAssignment |
EmergencyStepOutcome (enum: Created, AlreadyPresent, Failed) | Yes | PM group assignment. |
packages |
array of EmergencyPackageAssignment | Yes | Packages. |
computers |
array of EmergencyComputerOutcome | Yes | Computers. |
note |
string | Yes |
DELETE /api/pmgroup/{id}/emergency-patching
Removes the emergency assignment group for this PM group, including all child groups.
Required role: pm.execute
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id |
path | integer (int32) | Yes | PM group ID. |
Responses
| Status | Description | Schema |
|---|---|---|
200 |
OK | EmergencyPatchingRemoval |
Response fields (EmergencyPatchingRemoval):
DELETE result: the removed emergency group and how many child groups (in-flight Reinstall_* scan groups) went with it.
| Field | Type | Required | Description |
|---|---|---|---|
groupId |
string (uuid) | Yes | Deployment group ID (GUID). |
groupName |
string | Yes | Group name. |
deletedChildGroups |
integer (int32) | Yes | Deleted child groups. |
Operating System Imports
OS installation image packages and their SKUs (editions).
| Method | Path | Summary |
|---|---|---|
| GET | /api/operating-system-imports |
Returns a paged list of all OS installation image packages, each with its SKUs nested. |
| GET | /api/operating-system-imports/{id} |
Returns a single OS installation image package by its GUID, with its SKUs nested. |
| GET | /api/operating-system-imports/{id}/skus/{skuId}/groups |
Reverse lookup: returns every group with a direct assignment of this SKU (the SKU, not the package, is the assignable object). Direct assignments only — these object types are never assigned to computers, and no inheritance resolution applies. |
| POST | /api/operating-system-imports/search |
Searches OS installation image packages by name. |
GET /api/operating-system-imports
Returns a paged list of all OS installation image packages, each with its SKUs nested.
Required role: package.read
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
skip |
query | integer (int32) | No | Number of items to skip (paging). |
top |
query | integer (int32) | No | Maximum number of items to return (page size). |
Responses
| Status | Description | Schema |
|---|---|---|
200 |
OK | PagedResultOfOperatingSystemImport |
The response is a paged result (items, skip, top, totalCount, hasMore). Fields of each item:
An OS installation image package (Software.Type = "OSInstallationImage"), e.g. a Windows 10 ISO, with its SKUs (editions) nested. The package itself is never directly assignable to a group — a specific SKU is, via POST /api/group/{id}/os-image-sku. PackageName/Version/Author/Revision are deliberately omitted — live-DB verification showed PackageName always duplicates Name and the others are always NULL for this Software.Type.
| Field | Type | Required | Description |
|---|---|---|---|
id |
string (uuid) | Yes | ID of the OS image package. |
name |
string | Yes | Name of the OS image package. |
skus |
array of OperatingSystemImportSku | Yes | Available SKUs (editions). |
GET /api/operating-system-imports/{id}
Returns a single OS installation image package by its GUID, with its SKUs nested.
Required role: package.read
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id |
path | string (uuid) | Yes | OS installation image package ID (GUID). |
Responses
| Status | Description | Schema |
|---|---|---|
200 |
OK | OperatingSystemImport |
Response fields (OperatingSystemImport):
An OS installation image package (Software.Type = "OSInstallationImage"), e.g. a Windows 10 ISO, with its SKUs (editions) nested. The package itself is never directly assignable to a group — a specific SKU is, via POST /api/group/{id}/os-image-sku. PackageName/Version/Author/Revision are deliberately omitted — live-DB verification showed PackageName always duplicates Name and the others are always NULL for this Software.Type.
| Field | Type | Required | Description |
|---|---|---|---|
id |
string (uuid) | Yes | |
name |
string | Yes | |
skus |
array of OperatingSystemImportSku | Yes | Available SKUs (editions). |
GET /api/operating-system-imports/{id}/skus/{skuId}/groups
Reverse lookup: returns every group with a direct assignment of this SKU (the SKU, not the package, is the assignable object). Direct assignments only — these object types are never assigned to computers, and no inheritance resolution applies.
Required role: package.read
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id |
path | string (uuid) | Yes | OS installation image package ID (GUID). |
skuId |
path | integer (int32) | Yes | OS image SKU (edition) ID. |
skip |
query | integer (int32) | No | Number of items to skip (paging). |
top |
query | integer (int32) | No | Maximum number of items to return (page size). |
Responses
| Status | Description | Schema |
|---|---|---|
200 |
OK | PagedResultOfDeviceGroup |
The response is a paged result (items, skip, top, totalCount, hasMore). Fields of each item:
| Field | Type | Required | Description |
|---|---|---|---|
groupId |
string (uuid) | Yes | Deployment group ID (GUID). |
name |
string | Yes | Name of the group. |
assignedToTree |
string, nullable | Yes | Tree the group is assigned to. |
description |
string, nullable | Yes | Description of the group. |
POST /api/operating-system-imports/search
Searches OS installation image packages by name.
Required role: package.read
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
skip |
query | integer (int32) | No | Number of items to skip (paging). |
top |
query | integer (int32) | No | Maximum number of items to return (page size). |
Request body (required, application/json, schema OperatingSystemImportSearchFilter)
| Field | Type | Required | Description |
|---|---|---|---|
name |
string, nullable | No | Substring match on the OS installation image package display name. |
Example request body (placeholder values):
{
"name": "string"
}Responses
| Status | Description | Schema |
|---|---|---|
200 |
OK | PagedResultOfOperatingSystemImport |
The response is a paged result (items, skip, top, totalCount, hasMore). Fields of each item:
An OS installation image package (Software.Type = "OSInstallationImage"), e.g. a Windows 10 ISO, with its SKUs (editions) nested. The package itself is never directly assignable to a group — a specific SKU is, via POST /api/group/{id}/os-image-sku. PackageName/Version/Author/Revision are deliberately omitted — live-DB verification showed PackageName always duplicates Name and the others are always NULL for this Software.Type.
| Field | Type | Required | Description |
|---|---|---|---|
id |
string (uuid) | Yes | ID of the OS image package. |
name |
string | Yes | Name of the OS image package. |
skus |
array of OperatingSystemImportSku | Yes | Available SKUs (editions). |
PXE Boot Images
PXE boot images and the groups they are assigned to.
| Method | Path | Summary |
|---|---|---|
| GET | /api/pxe-bootimages |
Returns a paged list of all PXE boot images. |
| GET | /api/pxe-bootimages/{id} |
Returns a single PXE boot image by its id. |
| GET | /api/pxe-bootimages/{id}/groups |
Reverse lookup: returns every group with a direct assignment of this PXE boot image. Direct assignments only — these object types are never assigned to computers, and no inheritance resolution applies. |
| POST | /api/pxe-bootimages/search |
Searches PXE boot images by name. |
GET /api/pxe-bootimages
Returns a paged list of all PXE boot images.
Required role: package.read
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
skip |
query | integer (int32) | No | Number of items to skip (paging). |
top |
query | integer (int32) | No | Maximum number of items to return (page size). |
Responses
| Status | Description | Schema |
|---|---|---|
200 |
OK | PagedResultOfPxeBootImage |
The response is a paged result (items, skip, top, totalCount, hasMore). Fields of each item:
A PXE boot image (e.g. "StdWinPE") — the assignable object for POST /api/group/{id}/pxe-bootimage. Not a Software row; catalogued in dhcp_boot_info.
| Field | Type | Required | Description |
|---|---|---|---|
id |
integer (int32) | Yes | ID of the PXE boot image. |
name |
string | Yes | Name of the PXE boot image. |
bootFile |
string | Yes | Boot file. |
sysInfo |
integer (int32) | Yes | System information. |
archInfo |
integer (int32) | Yes | Architecture information. |
GET /api/pxe-bootimages/{id}
Returns a single PXE boot image by its id.
Required role: package.read
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id |
path | integer (int32) | Yes | PXE boot image ID. |
Responses
| Status | Description | Schema |
|---|---|---|
200 |
OK | PxeBootImage |
Response fields (PxeBootImage):
A PXE boot image (e.g. "StdWinPE") — the assignable object for POST /api/group/{id}/pxe-bootimage. Not a Software row; catalogued in dhcp_boot_info.
| Field | Type | Required | Description |
|---|---|---|---|
id |
integer (int32) | Yes | |
name |
string | Yes | |
bootFile |
string | Yes | Boot file. |
sysInfo |
integer (int32) | Yes | System information. |
archInfo |
integer (int32) | Yes | Architecture information. |
GET /api/pxe-bootimages/{id}/groups
Reverse lookup: returns every group with a direct assignment of this PXE boot image. Direct assignments only — these object types are never assigned to computers, and no inheritance resolution applies.
Required role: package.read
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id |
path | integer (int32) | Yes | PXE boot image ID. |
skip |
query | integer (int32) | No | Number of items to skip (paging). |
top |
query | integer (int32) | No | Maximum number of items to return (page size). |
Responses
| Status | Description | Schema |
|---|---|---|
200 |
OK | PagedResultOfDeviceGroup |
The response is a paged result (items, skip, top, totalCount, hasMore). Fields of each item:
| Field | Type | Required | Description |
|---|---|---|---|
groupId |
string (uuid) | Yes | Deployment group ID (GUID). |
name |
string | Yes | Name of the group. |
assignedToTree |
string, nullable | Yes | Tree the group is assigned to. |
description |
string, nullable | Yes | Description of the group. |
POST /api/pxe-bootimages/search
Searches PXE boot images by name.
Required role: package.read
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
skip |
query | integer (int32) | No | Number of items to skip (paging). |
top |
query | integer (int32) | No | Maximum number of items to return (page size). |
Request body (required, application/json, schema PxeBootImageSearchFilter)
| Field | Type | Required | Description |
|---|---|---|---|
name |
string, nullable | No | Substring match on the boot image name (e.g. "WinPE"). |
Example request body (placeholder values):
{
"name": "string"
}Responses
| Status | Description | Schema |
|---|---|---|
200 |
OK | PagedResultOfPxeBootImage |
The response is a paged result (items, skip, top, totalCount, hasMore). Fields of each item:
A PXE boot image (e.g. "StdWinPE") — the assignable object for POST /api/group/{id}/pxe-bootimage. Not a Software row; catalogued in dhcp_boot_info.
| Field | Type | Required | Description |
|---|---|---|---|
id |
integer (int32) | Yes | ID of the PXE boot image. |
name |
string | Yes | Name of the PXE boot image. |
bootFile |
string | Yes | Boot file. |
sysInfo |
integer (int32) | Yes | System information. |
archInfo |
integer (int32) | Yes | Architecture information. |
Language Pack Imports
OS Language Packs and the groups they are assigned to.
| Method | Path | Summary |
|---|---|---|
| GET | /api/language-pack-imports |
Returns a paged list of all OS Language Packs. |
| GET | /api/language-pack-imports/{id} |
Returns a single OS Language Pack by its GUID. |
| GET | /api/language-pack-imports/{id}/groups |
Reverse lookup: returns every group with a direct assignment of this OS Language Pack. Direct assignments only — these object types are never assigned to computers, and no inheritance resolution applies. |
| POST | /api/language-pack-imports/search |
Searches OS Language Packs by name. |
GET /api/language-pack-imports
Returns a paged list of all OS Language Packs.
Required role: package.read
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
skip |
query | integer (int32) | No | Number of items to skip (paging). |
top |
query | integer (int32) | No | Maximum number of items to return (page size). |
Responses
| Status | Description | Schema |
|---|---|---|
200 |
OK | PagedResultOfLanguagePackImport |
The response is a paged result (items, skip, top, totalCount, hasMore). Fields of each item:
An OS Language Pack (Software.Type = "OSLanguagePack") — the assignable object for POST /api/group/{id}/language-pack-imports. A genuine Software row, multi-assign like ordinary packages, but written to the separate CompConfGrLanguagePack table (not CompConfGrSoft) and kept off the general /packages surface. PackageName/Version/Author/Revision are deliberately omitted — live-DB verification showed PackageName always duplicates Name and the others are always NULL for this Software.Type.
| Field | Type | Required | Description |
|---|---|---|---|
id |
string (uuid) | Yes | ID of the Language Pack. |
name |
string | Yes | Name of the Language Pack. |
GET /api/language-pack-imports/{id}
Returns a single OS Language Pack by its GUID.
Required role: package.read
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id |
path | string (uuid) | Yes | Language Pack ID. |
Responses
| Status | Description | Schema |
|---|---|---|
200 |
OK | LanguagePackImport |
Response fields (LanguagePackImport):
An OS Language Pack (Software.Type = "OSLanguagePack") — the assignable object for POST /api/group/{id}/language-pack-imports. A genuine Software row, multi-assign like ordinary packages, but written to the separate CompConfGrLanguagePack table (not CompConfGrSoft) and kept off the general /packages surface. PackageName/Version/Author/Revision are deliberately omitted — live-DB verification showed PackageName always duplicates Name and the others are always NULL for this Software.Type.
| Field | Type | Required | Description |
|---|---|---|---|
id |
string (uuid) | Yes | |
name |
string | Yes |
GET /api/language-pack-imports/{id}/groups
Reverse lookup: returns every group with a direct assignment of this OS Language Pack. Direct assignments only — these object types are never assigned to computers, and no inheritance resolution applies.
Required role: package.read
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id |
path | string (uuid) | Yes | Language Pack ID. |
skip |
query | integer (int32) | No | Number of items to skip (paging). |
top |
query | integer (int32) | No | Maximum number of items to return (page size). |
Responses
| Status | Description | Schema |
|---|---|---|
200 |
OK | PagedResultOfDeviceGroup |
The response is a paged result (items, skip, top, totalCount, hasMore). Fields of each item:
| Field | Type | Required | Description |
|---|---|---|---|
groupId |
string (uuid) | Yes | Deployment group ID (GUID). |
name |
string | Yes | Name of the group. |
assignedToTree |
string, nullable | Yes | Tree the group is assigned to. |
description |
string, nullable | Yes | Description of the group. |
POST /api/language-pack-imports/search
Searches OS Language Packs by name.
Required role: package.read
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
skip |
query | integer (int32) | No | Number of items to skip (paging). |
top |
query | integer (int32) | No | Maximum number of items to return (page size). |
Request body (required, application/json, schema LanguagePackImportSearchFilter)
| Field | Type | Required | Description |
|---|---|---|---|
name |
string, nullable | No | Substring match on the OS Language Pack display name. |
Example request body (placeholder values):
{
"name": "string"
}Responses
| Status | Description | Schema |
|---|---|---|
200 |
OK | PagedResultOfLanguagePackImport |
The response is a paged result (items, skip, top, totalCount, hasMore). Fields of each item:
An OS Language Pack (Software.Type = "OSLanguagePack") — the assignable object for POST /api/group/{id}/language-pack-imports. A genuine Software row, multi-assign like ordinary packages, but written to the separate CompConfGrLanguagePack table (not CompConfGrSoft) and kept off the general /packages surface. PackageName/Version/Author/Revision are deliberately omitted — live-DB verification showed PackageName always duplicates Name and the others are always NULL for this Software.Type.
| Field | Type | Required | Description |
|---|---|---|---|
id |
string (uuid) | Yes | ID of the Language Pack. |
name |
string | Yes | Name of the Language Pack. |
Agent Templates
Agent Templates and the groups they are assigned to.
| Method | Path | Summary |
|---|---|---|
| GET | /api/agent-templates |
Returns a paged list of all Agent Templates. |
| GET | /api/agent-templates/{id} |
Returns a single Agent Template by its GUID. |
| GET | /api/agent-templates/{id}/groups |
Reverse lookup: returns every group with a direct assignment of this Agent Template. Direct assignments only — these object types are never assigned to computers, and no inheritance resolution applies. |
| POST | /api/agent-templates/search |
Searches Agent Templates by name. |
GET /api/agent-templates
Returns a paged list of all Agent Templates.
Required role: package.read
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
skip |
query | integer (int32) | No | Number of items to skip (paging). |
top |
query | integer (int32) | No | Maximum number of items to return (page size). |
Responses
| Status | Description | Schema |
|---|---|---|
200 |
OK | PagedResultOfAgentTemplate |
The response is a paged result (items, skip, top, totalCount, hasMore). Fields of each item:
An Agent Template (Software.Type = "AgentTemplate") — the assignable object for POST /api/group/{id}/agent-template. A genuine Software row, but single-assign per group (unlike ordinary multi-assign packages) and kept off the general /packages surface. PackageName/Version/Author/Revision are deliberately omitted — live-DB verification showed they are always empty for this Software.Type, unlike ordinary packages. PollingIntervalSeconds/SuppressReboot/RemindUserOnReboot* are read from the template's AdtTemplateDetails SoftwareDepot node tree (same nodes UemAgentInfoResolver resolves per-computer); null when the template has no InventoryId or the node is missing.
| Field | Type | Required | Description |
|---|---|---|---|
id |
string (uuid) | Yes | ID of the Agent Template. |
name |
string | Yes | Name of the Agent Template. |
pollingIntervalSeconds |
integer (int32), nullable | Yes | Agent polling interval in seconds. |
suppressReboot |
boolean, nullable | Yes |
true if reboots are suppressed. |
remindUserOnReboot |
boolean, nullable | Yes |
true if the user is reminded before a reboot. |
remindUserOnRebootIntervalMinutes |
integer (int32), nullable | Yes | Reminder interval in minutes. |
forceRebootAfterMinutes |
integer (int32), nullable | Yes | Minutes after which a reboot is forced. |
GET /api/agent-templates/{id}
Returns a single Agent Template by its GUID.
Required role: package.read
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id |
path | string (uuid) | Yes | Agent Template ID. |
Responses
| Status | Description | Schema |
|---|---|---|
200 |
OK | AgentTemplate |
Response fields (AgentTemplate):
An Agent Template (Software.Type = "AgentTemplate") — the assignable object for POST /api/group/{id}/agent-template. A genuine Software row, but single-assign per group (unlike ordinary multi-assign packages) and kept off the general /packages surface. PackageName/Version/Author/Revision are deliberately omitted — live-DB verification showed they are always empty for this Software.Type, unlike ordinary packages. PollingIntervalSeconds/SuppressReboot/RemindUserOnReboot* are read from the template's AdtTemplateDetails SoftwareDepot node tree (same nodes UemAgentInfoResolver resolves per-computer); null when the template has no InventoryId or the node is missing.
| Field | Type | Required | Description |
|---|---|---|---|
id |
string (uuid) | Yes | |
name |
string | Yes | |
pollingIntervalSeconds |
integer (int32), nullable | Yes | Agent polling interval in seconds. |
suppressReboot |
boolean, nullable | Yes |
true if reboots are suppressed. |
remindUserOnReboot |
boolean, nullable | Yes |
true if the user is reminded before a reboot. |
remindUserOnRebootIntervalMinutes |
integer (int32), nullable | Yes | Reminder interval in minutes. |
forceRebootAfterMinutes |
integer (int32), nullable | Yes | Minutes after which a reboot is forced. |
GET /api/agent-templates/{id}/groups
Reverse lookup: returns every group with a direct assignment of this Agent Template. Direct assignments only — these object types are never assigned to computers, and no inheritance resolution applies.
Required role: package.read
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id |
path | string (uuid) | Yes | Agent Template ID. |
skip |
query | integer (int32) | No | Number of items to skip (paging). |
top |
query | integer (int32) | No | Maximum number of items to return (page size). |
Responses
| Status | Description | Schema |
|---|---|---|
200 |
OK | PagedResultOfDeviceGroup |
The response is a paged result (items, skip, top, totalCount, hasMore). Fields of each item:
| Field | Type | Required | Description |
|---|---|---|---|
groupId |
string (uuid) | Yes | Deployment group ID (GUID). |
name |
string | Yes | Name of the group. |
assignedToTree |
string, nullable | Yes | Tree the group is assigned to. |
description |
string, nullable | Yes | Description of the group. |
POST /api/agent-templates/search
Searches Agent Templates by name.
Required role: package.read
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
skip |
query | integer (int32) | No | Number of items to skip (paging). |
top |
query | integer (int32) | No | Maximum number of items to return (page size). |
Request body (required, application/json, schema AgentTemplateSearchFilter)
| Field | Type | Required | Description |
|---|---|---|---|
name |
string, nullable | No | Substring match on the Agent Template display name. |
Example request body (placeholder values):
{
"name": "string"
}Responses
| Status | Description | Schema |
|---|---|---|
200 |
OK | PagedResultOfAgentTemplate |
The response is a paged result (items, skip, top, totalCount, hasMore). Fields of each item:
An Agent Template (Software.Type = "AgentTemplate") — the assignable object for POST /api/group/{id}/agent-template. A genuine Software row, but single-assign per group (unlike ordinary multi-assign packages) and kept off the general /packages surface. PackageName/Version/Author/Revision are deliberately omitted — live-DB verification showed they are always empty for this Software.Type, unlike ordinary packages. PollingIntervalSeconds/SuppressReboot/RemindUserOnReboot* are read from the template's AdtTemplateDetails SoftwareDepot node tree (same nodes UemAgentInfoResolver resolves per-computer); null when the template has no InventoryId or the node is missing.
| Field | Type | Required | Description |
|---|---|---|---|
id |
string (uuid) | Yes | ID of the Agent Template. |
name |
string | Yes | Name of the Agent Template. |
pollingIntervalSeconds |
integer (int32), nullable | Yes | Agent polling interval in seconds. |
suppressReboot |
boolean, nullable | Yes |
true if reboots are suppressed. |
remindUserOnReboot |
boolean, nullable | Yes |
true if the user is reminded before a reboot. |
remindUserOnRebootIntervalMinutes |
integer (int32), nullable | Yes | Reminder interval in minutes. |
forceRebootAfterMinutes |
integer (int32), nullable | Yes | Minutes after which a reboot is forced. |
Software Classes
Software Classes (bundles of software packages).
| Method | Path | Summary |
|---|---|---|
| GET | /api/softwareclasses |
Returns a paged list of all Software Classes. |
| GET | /api/softwareclasses/{id} |
Returns a single Software Class by its id. |
| POST | /api/softwareclasses/search |
Searches Software Classes by name. |
GET /api/softwareclasses
Returns a paged list of all Software Classes.
Required role: package.read
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
skip |
query | integer (int32) | No | Number of items to skip (paging). |
top |
query | integer (int32) | No | Maximum number of items to return (page size). |
Responses
| Status | Description | Schema |
|---|---|---|
200 |
OK | PagedResultOfSoftwareClass |
The response is a paged result (items, skip, top, totalCount, hasMore). Fields of each item:
A Software Class (EMC "Software Classes") — bundles multiple software packages under one assignable id, assigned to groups via CompConfGrSwClasses (ClassID → TreeID), not to be confused with an individual package assignment. A package already covered by a Software Class assigned to a group cannot also be assigned directly (see GroupWriteDbRepository.AssignPackage/AssignAgentTemplate — AssignPackageOutcome/ AssignAgentTemplateOutcome.CoveredBySoftwareClass).
| Field | Type | Required | Description |
|---|---|---|---|
id |
string (uuid) | Yes | ID of the Software Class. |
name |
string | Yes | Name of the Software Class. |
matchMode |
SoftwareClassMatchMode (enum: Or, And) | Yes | Match mode. |
packageIds |
array of string (uuid) | Yes | Software package IDs (GUIDs). |
GET /api/softwareclasses/{id}
Returns a single Software Class by its id.
Required role: package.read
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id |
path | string (uuid) | Yes | Software Class ID. |
Responses
| Status | Description | Schema |
|---|---|---|
200 |
OK | SoftwareClass |
Response fields (SoftwareClass):
A Software Class (EMC "Software Classes") — bundles multiple software packages under one assignable id, assigned to groups via CompConfGrSwClasses (ClassID → TreeID), not to be confused with an individual package assignment. A package already covered by a Software Class assigned to a group cannot also be assigned directly (see GroupWriteDbRepository.AssignPackage/AssignAgentTemplate — AssignPackageOutcome/ AssignAgentTemplateOutcome.CoveredBySoftwareClass).
| Field | Type | Required | Description |
|---|---|---|---|
id |
string (uuid) | Yes | |
name |
string | Yes | |
matchMode |
SoftwareClassMatchMode (enum: Or, And) | Yes | Match mode. |
packageIds |
array of string (uuid) | Yes | Software package IDs (GUIDs). |
POST /api/softwareclasses/search
Searches Software Classes by name.
Required role: package.read
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
skip |
query | integer (int32) | No | Number of items to skip (paging). |
top |
query | integer (int32) | No | Maximum number of items to return (page size). |
Request body (required, application/json, schema SoftwareClassSearchFilter)
| Field | Type | Required | Description |
|---|---|---|---|
name |
string, nullable | No | Substring match on the Software Class name. |
Example request body (placeholder values):
{
"name": "string"
}Responses
| Status | Description | Schema |
|---|---|---|
200 |
OK | PagedResultOfSoftwareClass |
The response is a paged result (items, skip, top, totalCount, hasMore). Fields of each item:
A Software Class (EMC "Software Classes") — bundles multiple software packages under one assignable id, assigned to groups via CompConfGrSwClasses (ClassID → TreeID), not to be confused with an individual package assignment. A package already covered by a Software Class assigned to a group cannot also be assigned directly (see GroupWriteDbRepository.AssignPackage/AssignAgentTemplate — AssignPackageOutcome/ AssignAgentTemplateOutcome.CoveredBySoftwareClass).
| Field | Type | Required | Description |
|---|---|---|---|
id |
string (uuid) | Yes | ID of the Software Class. |
name |
string | Yes | Name of the Software Class. |
matchMode |
SoftwareClassMatchMode (enum: Or, And) | Yes | Match mode. |
packageIds |
array of string (uuid) | Yes | Software package IDs (GUIDs). |
Variable Definitions
Empirum variable definitions, their children and inverse lookups of computers, groups and configurations that use a variable.
| Method | Path | Summary |
|---|---|---|
| GET | /api/variable-definitions |
Returns a paged list of all Variable Definitions. |
| GET | /api/variable-definitions/{varId} |
Returns a single Variable Definition by its VarID. |
| GET | /api/variable-definitions/{varId}/computers |
Inverse search: returns every computer with an explicit direct value set for this VarID. |
| GET | /api/variable-definitions/{varId}/groups |
Inverse search: returns every group with an explicit direct value set for this VarID. |
| GET | /api/variable-definitions/{varId}/variable-configurations |
Inverse search: returns every Variable Configuration with an explicit entry for this VarID (the stored value only takes effect once the configuration is assigned to a group). |
| GET | /api/variable-definitions/{varId}/children |
Returns every child variable definition of this VarID. |
| POST | /api/variable-definitions/search |
Searches Variable Definitions by name (matches either the raw Designation or the dotted "{parent}.{child}" form). |
GET /api/variable-definitions
Returns a paged list of all Variable Definitions.
Required role: package.read
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
skip |
query | integer (int32) | No | Number of items to skip (paging). |
top |
query | integer (int32) | No | Maximum number of items to return (page size). |
Responses
| Status | Description | Schema |
|---|---|---|
200 |
OK | PagedResultOfVariableDefinition |
The response is a paged result (items, skip, top, totalCount, hasMore). Fields of each item:
One variable definition from the DefCompPkgVar catalogue — describes what a computer/group variable is (name, default value, data type), never its resolved value (that lives in CompVariables/GroupVariables, read via /api/computer/{id}/variables and /api/group/{id}/variables). string VariableDefinition.DottedName is string VariableDefinition.Designation for a top-level variable, or "{parent}.{child}" for one nested under a parent variable (via DefCompPkgVar.ParentID; nesting is one level deep, verified against a live Empirum DB). bool VariableDefinition.IsCollection is DefCompPkgVar's own Collection flag — verified NOT to correlate with whether the variable has children via ParentID; its exact meaning is unverified against EMC source and should not be used to infer nesting. int VariableDefinition.ComboType/string? VariableDefinition.ComboTypeName are DefCompPkgVar's data/UI type (distinct from the unrelated Type column, which is the Computer/User/OS/Group scope, not exposed here) — see VariableDefinitionDbRepository.ComboTypeNames for the mapping, sourced from the EMC repo's authoritative EVarControlType enum (Library/Intern/Database/VariablesAccess/VariableDefinition.h), the C++ type backing the Administration console's variable-definition editor.
| Field | Type | Required | Description |
|---|---|---|---|
varId |
integer (int32) | Yes | Variable definition ID. |
designation |
string | Yes | Designation. |
dottedName |
string | Yes | Fully qualified (dotted) variable name. |
description |
string, nullable | Yes | Description of the variable. |
defaultValue |
string, nullable | Yes | Default value. |
isCollection |
boolean | Yes | DefCompPkgVar's own Collection flag. Does not indicate whether other variables nest under this one — check DottedName/other definitions' ParentID for that. |
comboType |
integer (int32) | Yes | The variable's raw data/UI type code from DefCompPkgVar.ComboType. See comboTypeName for its name when known. |
comboTypeName |
string, nullable | Yes | The friendly name for comboType (Text/Number/Date/Time/DateAndTime/ComboBox/Checkbox/IpAddress/Dropdown/UserDefined/DropdownExt/AdBrowse/Password/Scheduler/Timeframe), or null if comboType is a value outside this known set. |
GET /api/variable-definitions/{varId}
Returns a single Variable Definition by its VarID.
Required role: package.read
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
varId |
path | integer (int32) | Yes | Variable definition ID. |
Responses
| Status | Description | Schema |
|---|---|---|
200 |
OK | VariableDefinition |
Response fields (VariableDefinition):
One variable definition from the DefCompPkgVar catalogue — describes what a computer/group variable is (name, default value, data type), never its resolved value (that lives in CompVariables/GroupVariables, read via /api/computer/{id}/variables and /api/group/{id}/variables). string VariableDefinition.DottedName is string VariableDefinition.Designation for a top-level variable, or "{parent}.{child}" for one nested under a parent variable (via DefCompPkgVar.ParentID; nesting is one level deep, verified against a live Empirum DB). bool VariableDefinition.IsCollection is DefCompPkgVar's own Collection flag — verified NOT to correlate with whether the variable has children via ParentID; its exact meaning is unverified against EMC source and should not be used to infer nesting. int VariableDefinition.ComboType/string? VariableDefinition.ComboTypeName are DefCompPkgVar's data/UI type (distinct from the unrelated Type column, which is the Computer/User/OS/Group scope, not exposed here) — see VariableDefinitionDbRepository.ComboTypeNames for the mapping, sourced from the EMC repo's authoritative EVarControlType enum (Library/Intern/Database/VariablesAccess/VariableDefinition.h), the C++ type backing the Administration console's variable-definition editor.
| Field | Type | Required | Description |
|---|---|---|---|
varId |
integer (int32) | Yes | Variable definition ID. |
designation |
string | Yes | Designation. |
dottedName |
string | Yes | Fully qualified (dotted) variable name. |
description |
string, nullable | Yes | |
defaultValue |
string, nullable | Yes | Default value. |
isCollection |
boolean | Yes | DefCompPkgVar's own Collection flag. Does not indicate whether other variables nest under this one — check DottedName/other definitions' ParentID for that. |
comboType |
integer (int32) | Yes | The variable's raw data/UI type code from DefCompPkgVar.ComboType. See comboTypeName for its name when known. |
comboTypeName |
string, nullable | Yes | The friendly name for comboType (Text/Number/Date/Time/DateAndTime/ComboBox/Checkbox/IpAddress/Dropdown/UserDefined/DropdownExt/AdBrowse/Password/Scheduler/Timeframe), or null if comboType is a value outside this known set. |
GET /api/variable-definitions/{varId}/computers
Inverse search: returns every computer with an explicit direct value set for this VarID.
Required role: package.read
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
varId |
path | integer (int32) | Yes | Variable definition ID. |
skip |
query | integer (int32) | No | Number of items to skip (paging). |
top |
query | integer (int32) | No | Maximum number of items to return (page size). |
Responses
| Status | Description | Schema |
|---|---|---|
200 |
OK | PagedResultOfVariableDefinitionComputerAssignment |
The response is a paged result (items, skip, top, totalCount, hasMore). Fields of each item:
A computer with a direct CompVariables row for a given VarID — not an inherited or effective value, no precedence applied. Returned by GET /api/variable-definitions/{varId}/computers — the inverse-search "which computers have this variable set" query. Never values coming from an inherited/effective resolution, and never values assigned via a Variable Configuration (VaPaConfigurations — a separate, unrelated mechanism, see DOMAIN_SEMANTICS.md).
| Field | Type | Required | Description |
|---|---|---|---|
clientId |
integer (int32) | Yes | Computer ID (Empirum client_id). |
hostname |
string | Yes | Hostname of the computer. |
value |
string, nullable | Yes |
GET /api/variable-definitions/{varId}/groups
Inverse search: returns every group with an explicit direct value set for this VarID.
Required role: package.read
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
varId |
path | integer (int32) | Yes | Variable definition ID. |
skip |
query | integer (int32) | No | Number of items to skip (paging). |
top |
query | integer (int32) | No | Maximum number of items to return (page size). |
Responses
| Status | Description | Schema |
|---|---|---|
200 |
OK | PagedResultOfVariableDefinitionGroupAssignment |
The response is a paged result (items, skip, top, totalCount, hasMore). Fields of each item:
A group with a direct GroupVariables row for a given VarID — not an inherited or effective value, no ancestor precedence applied. Returned by GET /api/variable-definitions/{varId}/groups — the inverse-search "which groups have this variable set" query. Never values coming from an inherited/effective resolution, and never values assigned via a Variable Configuration (VaPaConfigurations — a separate, unrelated mechanism, see DOMAIN_SEMANTICS.md).
| Field | Type | Required | Description |
|---|---|---|---|
groupId |
string (uuid) | Yes | Deployment group ID (GUID). |
name |
string | Yes | Name of the variable. |
value |
string, nullable | Yes |
GET /api/variable-definitions/{varId}/variable-configurations
Inverse search: returns every Variable Configuration with an explicit entry for this VarID (the stored value only takes effect once the configuration is assigned to a group).
Required role: package.read
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
varId |
path | integer (int32) | Yes | Variable definition ID. |
skip |
query | integer (int32) | No | Number of items to skip (paging). |
top |
query | integer (int32) | No | Maximum number of items to return (page size). |
Responses
| Status | Description | Schema |
|---|---|---|
200 |
OK | PagedResultOfVariableDefinitionConfigurationAssignment |
The response is a paged result (items, skip, top, totalCount, hasMore). Fields of each item:
A Variable Configuration (VaPaConfigurations) with an explicit entry for a given VarID — matched via VaPaConfigurationsVariables.Key, which stores the variable's dotted "{parent}.{child}" name (or bare Designation for a top-level variable), not a VarID foreign key (live-verified — see VariableDefinitionDbRepository.GetVariableConfigurationAssignments). Returned by GET /api/variable-definitions/{varId}/variable-configurations — the inverse-search "which configurations contain this variable" query, analogous to .../computers and .../groups. The value stored here only takes effect once the configuration is assigned to a group (POST /api/group/{id}/variable-configurations) — it is never an inherited/effective value on its own.
| Field | Type | Required | Description |
|---|---|---|---|
configurationId |
integer (int32) | Yes | Variable Configuration ID. |
configGuid |
string (uuid) | Yes | Variable Configuration GUID. |
name |
string | Yes | Name of the variable. |
value |
string | Yes |
GET /api/variable-definitions/{varId}/children
Returns every child variable definition of this VarID.
Required role: package.read
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
varId |
path | integer (int32) | Yes | Variable definition ID. |
skip |
query | integer (int32) | No | Number of items to skip (paging). |
top |
query | integer (int32) | No | Maximum number of items to return (page size). |
Responses
| Status | Description | Schema |
|---|---|---|
200 |
OK | PagedResultOfVariableDefinitionChild |
The response is a paged result (items, skip, top, totalCount, hasMore). Fields of each item:
One child variable definition of a parent variable (DefCompPkgVar.ParentID pointing at the parent's VarID) — returned by GET /api/variable-definitions/{varId}/children, the answer to "what must a caller supply when creating a new collection entry via POST .../variables/{varId}/collection". Not specific to collection variables: any variable with children returns them here, since ParentID nesting exists independently of the Collection flag (see VariableDefinition.IsCollection's doc comment). bool VariableDefinitionChild.IsRequired is derived — true exactly when VariableDefinition VariableDefinitionChild.Definition's DefaultValue is null — mirroring the same rule VariableCollectionRules.Validate applies when accepting a collection-entry POST body, so what this endpoint reports can never drift from what the write path actually enforces.
| Field | Type | Required | Description |
|---|---|---|---|
definition |
VariableDefinition | Yes | Definition. |
isRequired |
boolean | Yes | True when this child has no DefaultValue and must be supplied explicitly in a POST .../collection body; false when omitting it falls back to defaultValue (an empty-string default still counts as set). |
POST /api/variable-definitions/search
Searches Variable Definitions by name (matches either the raw Designation or the dotted "{parent}.{child}" form).
Required role: package.read
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
skip |
query | integer (int32) | No | Number of items to skip (paging). |
top |
query | integer (int32) | No | Maximum number of items to return (page size). |
Request body (required, application/json, schema VariableDefinitionSearchFilter)
| Field | Type | Required | Description |
|---|---|---|---|
name |
string, nullable | No | Substring match on the variable's Designation or dotted name (e.g. "SQLINSTANCE" or "SUBDEPOT_SERVICES.SQLINSTANCE"). |
Example request body (placeholder values):
{
"name": "string"
}Responses
| Status | Description | Schema |
|---|---|---|
200 |
OK | PagedResultOfVariableDefinition |
The response is a paged result (items, skip, top, totalCount, hasMore). Fields of each item:
One variable definition from the DefCompPkgVar catalogue — describes what a computer/group variable is (name, default value, data type), never its resolved value (that lives in CompVariables/GroupVariables, read via /api/computer/{id}/variables and /api/group/{id}/variables). string VariableDefinition.DottedName is string VariableDefinition.Designation for a top-level variable, or "{parent}.{child}" for one nested under a parent variable (via DefCompPkgVar.ParentID; nesting is one level deep, verified against a live Empirum DB). bool VariableDefinition.IsCollection is DefCompPkgVar's own Collection flag — verified NOT to correlate with whether the variable has children via ParentID; its exact meaning is unverified against EMC source and should not be used to infer nesting. int VariableDefinition.ComboType/string? VariableDefinition.ComboTypeName are DefCompPkgVar's data/UI type (distinct from the unrelated Type column, which is the Computer/User/OS/Group scope, not exposed here) — see VariableDefinitionDbRepository.ComboTypeNames for the mapping, sourced from the EMC repo's authoritative EVarControlType enum (Library/Intern/Database/VariablesAccess/VariableDefinition.h), the C++ type backing the Administration console's variable-definition editor.
| Field | Type | Required | Description |
|---|---|---|---|
varId |
integer (int32) | Yes | Variable definition ID. |
designation |
string | Yes | Designation. |
dottedName |
string | Yes | Fully qualified (dotted) variable name. |
description |
string, nullable | Yes | Description of the variable. |
defaultValue |
string, nullable | Yes | Default value. |
isCollection |
boolean | Yes | DefCompPkgVar's own Collection flag. Does not indicate whether other variables nest under this one — check DottedName/other definitions' ParentID for that. |
comboType |
integer (int32) | Yes | The variable's raw data/UI type code from DefCompPkgVar.ComboType. See comboTypeName for its name when known. |
comboTypeName |
string, nullable | Yes | The friendly name for comboType (Text/Number/Date/Time/DateAndTime/ComboBox/Checkbox/IpAddress/Dropdown/UserDefined/DropdownExt/AdBrowse/Password/Scheduler/Timeframe), or null if comboType is a value outside this known set. |
Variable Configurations
Variable Configurations (named collections of variable values).
| Method | Path | Summary |
|---|---|---|
| GET | /api/variable-configurations |
Returns a paged list of all Variable Configurations. |
| GET | /api/variable-configurations/{id} |
Returns a single Variable Configuration by its id. |
| POST | /api/variable-configurations/search |
Searches Variable Configurations by name. |
GET /api/variable-configurations
Returns a paged list of all Variable Configurations.
Required role: package.read
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
skip |
query | integer (int32) | No | Number of items to skip (paging). |
top |
query | integer (int32) | No | Maximum number of items to return (page size). |
Responses
| Status | Description | Schema |
|---|---|---|
200 |
OK | PagedResultOfVariableConfigurationSummary |
The response is a paged result (items, skip, top, totalCount, hasMore). Fields of each item:
Variable Configuration without the nested Variables list — returned by the list and search endpoints, which don't need per-configuration variable detail. Fetch a single configuration by id for the full VariableConfiguration including Variables.
| Field | Type | Required | Description |
|---|---|---|---|
id |
integer (int32) | Yes | ID of the Variable Configuration. |
configGuid |
string (uuid) | Yes | Variable Configuration GUID. |
name |
string | Yes | Name of the Variable Configuration. |
description |
string, nullable | Yes | Description of the Variable Configuration. |
createdDate |
string (date-time) | Yes | Creation date. |
lastUpdated |
string (date-time) | Yes | Time of the last update (UTC). |
GET /api/variable-configurations/{id}
Returns a single Variable Configuration by its id.
Required role: package.read
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id |
path | integer (int32) | Yes | Variable Configuration ID. |
Responses
| Status | Description | Schema |
|---|---|---|
200 |
OK | VariableConfiguration |
Response fields (VariableConfiguration):
A Variable Configuration (VaPaConfigurations) — a named collection of variables that can be assigned to a group via POST /api/group/{id}/variable-configurations. Feeds into computer variable resolution (dbo.EMPfncGetVariableValueIncludingVariableConfigurations) alongside ordinary group variables. Multi-assign, like OS Language Pack.
| Field | Type | Required | Description |
|---|---|---|---|
id |
integer (int32) | Yes | |
configGuid |
string (uuid) | Yes | Variable Configuration GUID. |
name |
string | Yes | |
description |
string, nullable | Yes | |
createdDate |
string (date-time) | Yes | Creation date. |
lastUpdated |
string (date-time) | Yes | Time of the last update (UTC). |
variables |
array of VariableConfigurationVariable | Yes | Variables. |
POST /api/variable-configurations/search
Searches Variable Configurations by name.
Required role: package.read
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
skip |
query | integer (int32) | No | Number of items to skip (paging). |
top |
query | integer (int32) | No | Maximum number of items to return (page size). |
Request body (required, application/json, schema VariableConfigurationSearchFilter)
| Field | Type | Required | Description |
|---|---|---|---|
name |
string, nullable | No | Substring match on the Variable Configuration name. |
variableKey |
string, nullable | No | Matches configurations containing a variable whose key matches this pattern. '*' wildcard: "DEPLOY_*" (starts-with), "*_PATH" (ends-with), "*TARGET*" (contains). Without '*', defaults to substring match. |
Example request body (placeholder values):
{
"name": "string",
"variableKey": "string"
}Responses
| Status | Description | Schema |
|---|---|---|
200 |
OK | PagedResultOfVariableConfigurationSummary |
The response is a paged result (items, skip, top, totalCount, hasMore). Fields of each item:
Variable Configuration without the nested Variables list — returned by the list and search endpoints, which don't need per-configuration variable detail. Fetch a single configuration by id for the full VariableConfiguration including Variables.
| Field | Type | Required | Description |
|---|---|---|---|
id |
integer (int32) | Yes | ID of the Variable Configuration. |
configGuid |
string (uuid) | Yes | Variable Configuration GUID. |
name |
string | Yes | Name of the Variable Configuration. |
description |
string, nullable | Yes | Description of the Variable Configuration. |
createdDate |
string (date-time) | Yes | Creation date. |
lastUpdated |
string (date-time) | Yes | Time of the last update (UTC). |
System
Backend version information, depot servers and depot synchronization.
| Method | Path | Summary |
|---|---|---|
| GET | /api/system |
Returns Empirum database version, patch management catalog metadata, and the REST API assembly version. |
| GET | /api/system/sync-jobs |
Lists depot sync jobs with their last/next run and result, newest first (EMC DepotSync dialog, sync-jobs grid). |
| POST | /api/system/sync-jobs |
Triggers an out-of-schedule depot sync job (enqueues a StartSync command for the depot's sync component). |
| GET | /api/system/sync-jobs/depots |
Lists all depot servers with their sync-component heartbeat (online/offline/pending/unknown). |
| GET | /api/system/depot-servers |
Lists all assignable depot servers (clients with the Empirum Depot Server or Master Server role). |
GET /api/system
Returns Empirum database version, patch management catalog metadata, and the REST API assembly version.
Required role: computer.read
Responses
| Status | Description | Schema |
|---|---|---|
200 |
OK | EmpirumInfo |
Response fields (EmpirumInfo):
| Field | Type | Required | Description |
|---|---|---|---|
dbVersion |
string, nullable | Yes | Empirum database version. |
schema |
string, nullable | Yes | Database schema. |
pmLastSync |
string, nullable | Yes | Last synchronization of the patch catalog. |
pmDefinitionVersion |
string, nullable | Yes | Version of the patch definitions. |
pmDefinitionDate |
string, nullable | Yes | Date of the patch definitions. |
restApiVersion |
string, nullable | Yes | Version of the REST API. |
dbSizeMb |
integer (int64), nullable | No | Database size in MB. |
softwareDeploymentAndUemAgentLogEntries |
integer (int32) | No | Number of software deployment and UEM agent log entries. |
endpointDeviceCount |
integer (int32) | No | Number of managed endpoint devices. |
depotCount |
integer (int32) | No | Number of depot servers. |
softwarePackageCount |
integer (int32) | No | Number of software packages. |
locationUuid |
string (uuid), nullable | No | Location UUID. |
locationName |
string, nullable | No | Location name. |
GET /api/system/sync-jobs
Lists depot sync jobs with their last/next run and result, newest first (EMC DepotSync dialog, sync-jobs grid).
Required role: computer.read
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
skip |
query | integer (int32) | No | Number of items to skip (paging). |
top |
query | integer (int32) | No | Maximum number of items to return (page size). |
computer |
query | string | No | Filter by computer. |
Responses
| Status | Description | Schema |
|---|---|---|
200 |
OK | PagedResultOfSyncJobStatus |
The response is a paged result (items, skip, top, totalCount, hasMore). Fields of each item:
One depot sync job as reported by the depot's sync component (UEMDepotSyncStatusTable).
| Field | Type | Required | Description |
|---|---|---|---|
computer |
string | Yes | Computer. |
domain |
string | Yes | Domain name. |
jobName |
string | Yes | Job name. |
result |
string | Yes | error | success | pending | running | canceled |
lastStart |
string (date-time), nullable | Yes | Start of the last run (UTC). |
lastEnd |
string (date-time), nullable | Yes | End of the last run (UTC). |
nextStart |
string (date-time), nullable | Yes | Start of the next scheduled run (UTC). |
sourceServer |
string, nullable | Yes | Source server. |
sourceFolder |
string, nullable | Yes | Source folder. |
targetServer |
string, nullable | Yes | Target server. |
targetFolder |
string, nullable | Yes | Target folder. |
info |
string, nullable | Yes | |
syncComponentVersion |
string, nullable | Yes | Version of the depot sync component. |
uemAgentVersion |
string, nullable | Yes | Version of the UEM agent. |
POST /api/system/sync-jobs
Triggers an out-of-schedule depot sync job (enqueues a StartSync command for the depot's sync component).
Required role: activation.execute
Request body (required, application/json, schema SyncJobTriggerRequest)
Request body for POST /api/system/sync-jobs — identifies one sync job exactly as EMC's DepotSync dialog does.
| Field | Type | Required | Description |
|---|---|---|---|
computer |
string | Yes | Computer. |
domain |
string | Yes | Domain name. |
jobName |
string | Yes | Job name. |
Example request body (placeholder values):
{
"computer": "string",
"domain": "string",
"jobName": "string"
}Responses
| Status | Description | Schema |
|---|---|---|
202 |
Accepted | SyncJobTriggered |
409 |
Conflict | SyncJobAlreadyPending |
Response fields (SyncJobTriggered):
202 response for a successfully enqueued out-of-schedule sync job.
| Field | Type | Required | Description |
|---|---|---|---|
computer |
string | Yes | Computer. |
domain |
string | Yes | Domain name. |
jobName |
string | Yes | Job name. |
requestedAtUtc |
string (date-time) | Yes | Time of the request (UTC). |
GET /api/system/sync-jobs/depots
Lists all depot servers with their sync-component heartbeat (online/offline/pending/unknown).
Required role: computer.read
Responses
| Status | Description | Schema |
|---|---|---|
200 |
OK | array of DepotServerStatus |
Response fields (DepotServerStatus):
Heartbeat status of one depot server (Clients row with the 'Empirum Depot Server' computer role).
| Field | Type | Required | Description |
|---|---|---|---|
clientId |
integer (int32) | Yes | Computer ID (Empirum client_id). |
computer |
string | Yes | Computer. |
domain |
string | Yes | Domain name. |
status |
string | Yes | offline | online | pending | unknown ('unknown' = the depot never reported; also matches old-style depot sync installations) |
lastCheck |
string (date-time), nullable | Yes | |
info |
string, nullable | Yes | |
syncComponentVersion |
string, nullable | Yes | Version of the depot sync component. |
uemAgentVersion |
string, nullable | Yes | Version of the UEM agent. |
GET /api/system/depot-servers
Lists all assignable depot servers (clients with the Empirum Depot Server or Master Server role).
The picker for PUT /api/group/{id}/depot-servers — every entry is a valid assignment target. Includes the master server, unlike GET /api/system/sync-jobs/depots (the sync heartbeat view).
Required role: computer.read
Responses
| Status | Description | Schema |
|---|---|---|
200 |
OK | array of DepotServerCatalogEntry |
Response fields (DepotServerCatalogEntry):
One assignable depot server (GET /api/system/depot-servers) — a Clients row carrying the 'Empirum Depot Server' or 'Empirum Master Server' computer role (the same set dbo.fnc_IsDepotServer accepts, so every entry is valid for PUT /api/group/{id}/depot-servers). Unlike GET /api/system/sync-jobs/depots (sync heartbeat view), this list includes the master server. Fqdn comes from the client's FQDN variable, falling back to the catalog default.
| Field | Type | Required | Description |
|---|---|---|---|
clientId |
integer (int32) | Yes | Computer ID (Empirum client_id). |
name |
string | Yes | Name of the depot server. |
fqdn |
string, nullable | Yes | Fully qualified domain name. |
Tasks
Tracking of externally triggered deployment tasks.
| Method | Path | Summary |
|---|---|---|
| GET | /api/tasks |
Lists external tasks (EmpExtTasks tracking ledger), newest first. A task is created when a consumer starts a deployment operation (software install/uninstall, computer or software reinstall, OS install) and is closed asynchronously once the client reported a result. Status 1 = Running, 2 = Finished, 3 = Failed, 4 = Cancelled (defined but unused by current Empirum versions). Finished and failed tasks are purged automatically after a retention period (default 30 days). Timestamps are UTC. |
| GET | /api/tasks/{trackingId} |
Gets one external task by its tracking id, including the per-action breakdown (a computer reinstall consists of one OS action plus one action per assigned software package, each with its own status and properties such as ClientId and SoftwareGUID). Mirrors the legacy SOAP CoreService.GetTaskStatus poll. |
GET /api/tasks
Lists external tasks (EmpExtTasks tracking ledger), newest first. A task is created when a consumer starts a deployment operation (software install/uninstall, computer or software reinstall, OS install) and is closed asynchronously once the client reported a result. Status 1 = Running, 2 = Finished, 3 = Failed, 4 = Cancelled (defined but unused by current Empirum versions). Finished and failed tasks are purged automatically after a retention period (default 30 days). Timestamps are UTC.
Required role: computer.read
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
skip |
query | integer (int32) | No | Number of items to skip (paging). |
top |
query | integer (int32) | No | Maximum number of items to return (page size). |
Responses
| Status | Description | Schema |
|---|---|---|
200 |
OK | PagedResultOfExternalTask |
The response is a paged result (items, skip, top, totalCount, hasMore). Fields of each item:
External task tracking record (EmpExtTasks) — created when an API consumer starts a deployment operation (install/uninstall/reinstall) and polled by that consumer until the client reported a result. Finished/failed tasks are purged by a cleanup job after a TTL (default 30 days), so a formerly valid tracking id legitimately turning 404 means "processed and cleaned up".
| Field | Type | Required | Description |
|---|---|---|---|
trackingId |
string (uuid) | Yes | Public tracking GUID (EmpExtTasks.RefID) handed out by the operation that created the task. |
taskName |
string, nullable | Yes | Kind of task, e.g. InstallSoftwareOnClient, UninstallSoftwareOnClient, ReinstallClient, ReinstallSoftware, InstallOSOnClient, RestoreClient. |
status |
integer (int32) | Yes | Raw status: 1 = running, 2 = finished, 3 = failed, 4 = cancelled (defined but never written by current Empirum code). |
statusLabel |
string | Yes |
Running / Finished / Failed / Cancelled / Unknown (legacy TaskStatus contract wording). |
errorText |
string, nullable | Yes | Failure detail; may transiently hold a retry marker (Attempt N) while the automatic install retry loop is active. |
startedAt |
string (date-time) | Yes | Task creation time (UTC). |
finishedAt |
string (date-time), nullable | Yes | Set when the last action reported a terminal status (UTC). |
actions |
array of ExternalTaskAction, nullable | No | Per-action breakdown (a reinstall task = one OS action plus one action per software package). Populated on the single-task endpoint only; null in list responses. |
GET /api/tasks/{trackingId}
Gets one external task by its tracking id, including the per-action breakdown (a computer reinstall consists of one OS action plus one action per assigned software package, each with its own status and properties such as ClientId and SoftwareGUID). Mirrors the legacy SOAP CoreService.GetTaskStatus poll.
Required role: computer.read
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
trackingId |
path | string (uuid) | Yes | Tracking ID (GUID) returned by the triggering operation. |
Responses
| Status | Description | Schema |
|---|---|---|
200 |
OK | ExternalTask |
Response fields (ExternalTask):
External task tracking record (EmpExtTasks) — created when an API consumer starts a deployment operation (install/uninstall/reinstall) and polled by that consumer until the client reported a result. Finished/failed tasks are purged by a cleanup job after a TTL (default 30 days), so a formerly valid tracking id legitimately turning 404 means "processed and cleaned up".
| Field | Type | Required | Description |
|---|---|---|---|
trackingId |
string (uuid) | Yes | Public tracking GUID (EmpExtTasks.RefID) handed out by the operation that created the task. |
taskName |
string, nullable | Yes | Kind of task, e.g. InstallSoftwareOnClient, UninstallSoftwareOnClient, ReinstallClient, ReinstallSoftware, InstallOSOnClient, RestoreClient. |
status |
integer (int32) | Yes | Raw status: 1 = running, 2 = finished, 3 = failed, 4 = cancelled (defined but never written by current Empirum code). |
statusLabel |
string | Yes |
Running / Finished / Failed / Cancelled / Unknown (legacy TaskStatus contract wording). |
errorText |
string, nullable | Yes | Failure detail; may transiently hold a retry marker (Attempt N) while the automatic install retry loop is active. |
startedAt |
string (date-time) | Yes | Task creation time (UTC). |
finishedAt |
string (date-time), nullable | Yes | Set when the last action reported a terminal status (UTC). |
actions |
array of ExternalTaskAction, nullable | No | Per-action breakdown (a reinstall task = one OS action plus one action per software package). Populated on the single-task endpoint only; null in list responses. |
Queues
Backend task queues (patch download, hash creation, package import).
| Method | Path | Summary |
|---|---|---|
| GET | /api/queues |
Lists pending and running backend tasks from the BTQH (BackendTaskQueueHost) plugin queues, newest first — the REST equivalent of EMC's "Back-end Tasks → Back-end Task Queue" dialog. Each Empirum backend plugin has its own queue: PM (patch management jobs: RecreatePatchGroup, PatchDownload, CheckTestGroups), SWM (software depot jobs: ImportPackage, CreateHashes), PE (pre-boot/driver jobs), PMScan (patch scan processing), Scheduler (cyclic tasks), Server (server-side jobs, e.g. ExecuteSP), CoreTracking (watchdog jobs polling external task status); installations may add further queues (e.g. VDI). Status 1 = Queued (waiting, including retries scheduled via executionTime = not-before time), 2 = Running. The queue host deletes an entry once its job completed, so entries appear while work is pending and disappear when processed — an empty list means the backend is idle. All timestamps are UTC. |
| GET | /api/queues/names |
Lists the backend queue names available in this Empirum installation (valid values for the queue filter of GET /api/queues). |
GET /api/queues
Lists pending and running backend tasks from the BTQH (BackendTaskQueueHost) plugin queues, newest first — the REST equivalent of EMC's "Back-end Tasks → Back-end Task Queue" dialog. Each Empirum backend plugin has its own queue: PM (patch management jobs: RecreatePatchGroup, PatchDownload, CheckTestGroups), SWM (software depot jobs: ImportPackage, CreateHashes), PE (pre-boot/driver jobs), PMScan (patch scan processing), Scheduler (cyclic tasks), Server (server-side jobs, e.g. ExecuteSP), CoreTracking (watchdog jobs polling external task status); installations may add further queues (e.g. VDI). Status 1 = Queued (waiting, including retries scheduled via executionTime = not-before time), 2 = Running. The queue host deletes an entry once its job completed, so entries appear while work is pending and disappear when processed — an empty list means the backend is idle. All timestamps are UTC.
Required role: computer.read
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
skip |
query | integer (int32) | No | Number of items to skip (paging). |
top |
query | integer (int32) | No | Maximum number of items to return (page size). |
queue |
query | string | No | Optional queue name filter (e.g. PM, SWM), case-insensitive; an unknown name yields an empty page. |
Responses
| Status | Description | Schema |
|---|---|---|
200 |
OK | PagedResultOfQueueEntry |
The response is a paged result (items, skip, top, totalCount, hasMore). Fields of each item:
One pending or running backend task from a BTQH (BackendTaskQueueHost) plugin queue (ActivationQueue_* tables) — the same data EMC shows under "Back-end Tasks → Back-end Task Queue". Rows exist only while work is pending or running; the queue host deletes the row once the job completed.
| Field | Type | Required | Description |
|---|---|---|---|
queue |
string | Yes | Queue name = table suffix, e.g. PM, SWM, PE, PMScan, Scheduler, Server, CoreTracking (installs may add more, e.g. VDI). |
jobId |
integer (int32) | Yes | Identity of the queue row (unique per queue, not across queues). |
objectId |
string, nullable | Yes | Id of the affected object; meaning depends on ObjectType (client id, software GUID, ...). |
objectType |
integer (int32) | Yes | Raw ObjectType.TypeId of the affected object. |
objectTypeName |
string, nullable | Yes | Machine-readable type name from the ObjectType catalog (e.g. Computer, Software); null when the id is not in the catalog. |
objectTypeDescription |
string, nullable | Yes | Human-readable type description from the catalog. |
command |
string | Yes | Raw command the consuming plugin executes (e.g. RecreatePatchGroup, ImportPackage, CreateHashes). |
activity |
string | Yes | EMC's "Activity" display text for (ObjectType, Command) from VDI_type_command_mapping; falls back to Command when unmapped. |
status |
integer (int32) | Yes | Raw status: 1 = queued (incl. scheduled retries), 2 = running. |
statusLabel |
string | Yes |
Queued / Running / Unknown (EMC wording). |
insertedAt |
string (date-time), nullable | Yes | When the job was enqueued (UTC). |
executionTime |
string (date-time), nullable | Yes | Not-before time (UTC): the host skips the job until this time — set for scheduled/cyclic jobs and for retries after a transient failure. Null = run ASAP. |
serverId |
integer (int32), nullable | Yes | Empirum server the job is bound to; 0/null = any. |
GET /api/queues/names
Lists the backend queue names available in this Empirum installation (valid values for the queue filter of GET /api/queues).
Required role: computer.read
Responses
| Status | Description | Schema |
|---|---|---|
200 |
OK | array of string |
Service Endpoints
Service-level endpoints of the REST API host.
| Method | Path | Summary |
|---|---|---|
| GET | /health |
Returns the health status of the REST API service. Use it for monitoring and connectivity checks. |
| POST | /admin/logout |
Signs the current user out of the web-based principal management. |
GET /health
Returns the health status of the REST API service. Use it for monitoring and connectivity checks.
Required role: none (no authentication required)
Responses
| Status | Description | Schema |
|---|---|---|
200 |
OK | – |
POST /admin/logout
Signs the current user out of the web-based principal management.
Responses
| Status | Description | Schema |
|---|---|---|
200 |
OK | – |