Release Notes REST API
Empirum REST API Release Notes
Table of Contents
Empirum REST API v1.0.4 – Release Notes
This release summarizes all changes since v1.0.6.0. It adds 99 new endpoints covering computer inventory with 46 detail views, effective assignment lookups, Agent Template management, computer roles, group search, depot topology and tags, depot synchronization, package import, backend queue and task monitoring, custom field configuration, and several group management operations. Existing endpoints were extended with new parameters and response fields, and the API description now contains parameter and field descriptions throughout.
Updating Pre-Release Versions
This release also contains breaking changes coming from the pre-release versions. Please review the section "Breaking Changes" before updating existing integrations.
Breaking Changes
Removed Endpoints
The following endpoints are no longer available. Five of them were moved to the new inventory path and behave the same way under their new address.
| Removed Endpoint | Replacement |
|---|---|
GET /api/computer/{id}/batteries |
GET /api/computer/{id}/inventory/batteries |
GET /api/computer/{id}/disks |
GET /api/computer/{id}/inventory/disks |
GET /api/computer/{id}/installed-software |
GET /api/computer/{id}/inventory/installed-software |
GET /api/computer/{id}/network-adapters |
GET /api/computer/{id}/inventory/network-adapters |
GET /api/computer/{id}/services |
GET /api/computer/{id}/inventory/services |
POST /api/patches/products/{productId}/approval |
None. Approve individual patches with POST /api/patches/{patchId}/approval and the productId parameter. |
POST /api/pmgroup/{id}/products |
None. Add patches to a PM group with POST /api/pmgroup/{id}/patches and the productId field. |
GET /health |
No longer part of the published API description. |
Patch Operations Require a Product Scope
A patch is only unique by the combination of patchId and productId. Operations that previously acted on all product versions of a patch now work on one product version:
-
POST /api/patches/{patchId}/approvalrequires the new query parameterproductId. If it is missing, the API returns400withProductScopeRequiredand lists the available product versions. -
POST /api/pmgroup/{id}/patchesrequires the new request fieldproductId. A missing value returns the same400response. -
DELETE /api/patches/{patchId}/approvalaccepts an optionalproductId. Without it, every link item of the patch is reverted.
Use the new endpoint GET /api/patches/{patchId}/products to list the product versions a patch is linked into. The response field productId was also added to the patch items returned by the missing-patch, patch detail, and patch status endpoints, so the value can be taken directly from those results.
Other Behavior Changes
-
POST /api/auth/tokencan now respond with429 Too Many Requests. Client code should wait and retry instead of repeating the request immediately. -
DELETE /api/admin/principals/{id}andDELETE /api/admin/local-principals/{id}accept a new query parameterforce. It is required to delete a principal that has the new propertyprotectedset.
New Endpoints
Computer Inventory
Detailed hardware and software inventory from the last Empirum scan, following the structure of the inventory tree in the Empirum Management Console. All endpoints require the role computer.read.
GET /api/computer/{id}/inventory returns the aggregated inventory of one computer in a single call: core record, system info, BIOS, computer system, disks, network adapters, batteries, printers, video controllers, mainboard, memory modules, physical disks, TPM, and more. List sections are not paged and are capped at 500 rows each. Installed software and services are not included.
The following detail endpoints are available below /api/computer/{id}/inventory/:
| Area | Endpoints |
|---|---|
| Core hardware |
bios, computer-system, processors, video-controllers, monitors, printers
|
| Relocated from the previous paths |
batteries, disks, network-adapters, installed-software, services
|
| Mainboard and memory |
mainboard, memory-modules, memory-controllers, caches, slots, port-connectors, tpm
|
| DMI/SMBIOS |
dmi-bios, dmi-processors, dmi-system
|
| Storage and controllers |
physical-disks, cdrom-drives, floppy-controllers, ide-controllers, scsi-controllers
|
| Peripherals and ports |
keyboards, pointing-devices, sound-devices, modems, infrared-devices, serial-ports, usb-controllers, usb-hubs, pcmcia-controllers
|
| Users and network |
user-accounts, user-profiles, user-autostart, user-links, shares, network-connections
|
| Software and custom data |
files, middleware, custom-wmi, user-defined
|
memory-modules hides empty memory banks unless includeEmpty=true is set. The result of files can be large, so use paging.
Agent Templates
Agent Templates can now be created, changed, and deleted through the API. All three operations require the role package.write.
| Method | Path | Description |
|---|---|---|
| POST | /api/agent-templates |
Creates an Agent Template, like File > New in the Agent Configurator. Without copyFromId the template starts with the default settings of the Management Console. With copyFromId the whole configuration of that template is copied. Settings groups in the body such as reboot and polling are applied on top. The first template of a database becomes the default template. |
| PATCH | /api/agent-templates/{id} |
Changes the name and the reboot and polling settings of a template (JSON merge-patch, omitted members keep their stored value). Settings are validated against the resulting state, and nothing is written when anything is invalid. |
| DELETE | /api/agent-templates/{id} |
Deletes a template. The template is marked for deletion and removed by the AgentPush service shortly afterwards, together with its group assignments. |
Deleting returns 409 for the default template, for a template that is assigned to groups unless force=true is set, and for a template that a boot configuration uses.
The Agent Template responses now contain the full configuration: description, isDefault, reboot, polling, bandwidth, cache, localCache, server, serverSelection, protocols, timeframes, installation, agentUi, azure, xenApp, and prebootAuthentication. When a single template is read, warnings lists inconsistencies the Management Console would report. The template search accepts the new filters description and isDefault.
Computer Roles
| Method | Path | Description | Requires Role |
|---|---|---|---|
| GET | /api/computer/roles |
Lists the assignable computer roles. | computer.read |
| GET | /api/computer/{id}/roles |
Lists the roles assigned to a computer. The result is an empty array if none are assigned and matches management.computerRoles of GET /api/computer/{id}/system-info. |
computer.read |
| POST | /api/computer/{id}/roles |
Adds a role to a computer. Idempotent: an already assigned role returns 200. The roles Empirum Master Server and Computer Template are refused with 400. | computer.write |
| DELETE | /api/computer/{id}/roles/{roleId} |
Removes a role from a computer. Idempotent: an unassigned role returns 204. Removing the role Empirum Depot Server is refused with 409 for the default depot and in other cases described in the OpenAPI document. | computer.write |
Effective Assignments and Reverse Lookups
These endpoints show which objects a computer or group actually receives, and where a given object is assigned. Effective values are resolved through the computer's own group and its ancestor groups, using the same resolver as the Empirum Management Console, and include the group that provides the winning assignment.
| Method | Path | Description | Requires Role |
|---|---|---|---|
| GET | /api/computer/{id}/agent-template |
Effective Agent Template of the computer. | computer.read |
| GET | /api/computer/{id}/language-packs |
Effective OS Language Packs (multi-assign, one winner per pack). | computer.read |
| GET | /api/computer/{id}/os-image-sku |
Effective OS image SKU. | computer.read |
| GET | /api/computer/{id}/pxe-bootimage |
Effective PXE boot image. | computer.read |
| GET | /api/computer/{id}/os-deployment-readiness |
Effective OS image SKU and PXE boot image in one call, including what is missing. ready=true means nothing needs to be assigned before activating the computer with pxe=true for an OS reinstall. |
computer.read |
| GET | /api/group/{id}/os-image-sku |
OS image SKU currently assigned to the group (at most one). | group.read |
| GET | /api/group/{id}/pxe-bootimage |
PXE boot image currently assigned to the group (at most one). | group.read |
| GET | /api/packages/{id}/groups |
Every group with a direct assignment of this package. | package.read |
| GET | /api/agent-templates/{id}/groups |
Every group with a direct assignment of this Agent Template. | package.read |
| GET | /api/language-pack-imports/{id}/groups |
Every group with a direct assignment of this OS Language Pack. | package.read |
| GET | /api/operating-system-imports/{id}/skus/{skuId}/groups |
Every group with a direct assignment of this SKU. | package.read |
| GET | /api/pxe-bootimages/{id}/groups |
Every group with a direct assignment of this PXE boot image. | package.read |
Reverse lookups return direct assignments only. No inheritance resolution applies, and these object types are never assigned to computers directly.
Software Deployment and Group Management
| Method | Path | Description | Requires Role |
|---|---|---|---|
| POST | /api/computer/{id}/software-uninstall |
Triggers the uninstallation of an installed, assigned package, with the same semantics as the Empirum Management Console. The distribution mode of the package's nearest assignment is set to Uninstall and the computer is activated. The assignment is kept. | activation.execute |
| POST | /api/group/package-replacement |
Replaces a package with another one, typically a newer version, in every group where it is directly assigned (the "Replace Software" action). Distribution options are copied by default. One transaction per group. | group.write |
| PUT | /api/group/{id}/distribution-options |
Sets the distribution options of a group, or with packageId of one package assignment. This is a full replace: omitted optional fields clear the stored values. Changes take effect at the next activation of the members. |
group.write |
| POST | /api/group/search |
Searches deployment groups by name and description. The character * is the wildcard, with the same semantics as the computer hostname search. |
group.read |
| PATCH | /api/group/{id} |
Updates the name and/or description of a group. Omitted fields keep their stored value, and an empty description clears it. | group.write |
| GET | /api/group/{id}/depot-servers |
Directly assigned depot server failover list of the group, ordered by priority. | group.read |
| PUT | /api/group/{id}/depot-servers |
Replaces the complete ordered depot server list of the group. The first entry is the primary depot server. | group.write |
Setting the distribution mode Uninstall on a group makes every member computer of the group and its subgroups uninstall the affected package at its next activation. The same applies to software-uninstall, which sets the flag on the whole assignment group.
Tags and Depot Topology
Tags connect packages to depot servers. Package tags require Empirum 26.2 or later.
| Method | Path | Description | Requires Role |
|---|---|---|---|
| GET | /api/tags |
Paged list of all tags. | package.read |
| POST | /api/tags |
Creates a tag. | package.write |
| GET | /api/tags/{id} |
Returns one tag. | package.read |
| PATCH | /api/tags/{id} |
Renames and/or re-describes a tag. Read-only tags such as "Global" cannot be changed. | package.write |
| DELETE | /api/tags/{id} |
Deletes a tag and removes its package and depot assignments. Read-only tags cannot be deleted. | package.write |
| GET | /api/tags/packages |
Returns the packages assigned to a tag. Identify the tag by exactly one of tagId or tag. |
package.read |
| GET | /api/packages/{id}/tags |
Returns the tags assigned to a package. | package.read |
| PUT | /api/packages/{id}/tags |
Replaces the tag assignment of a package. This is a full replace, not an incremental change. | package.write |
| GET | /api/depots/{clientId}/tags |
Returns the tags assigned to a depot. | package.read |
| POST | /api/depots/{clientId}/tags |
Assigns a tag to a depot. Assigning an already assigned tag returns 200 instead of creating a duplicate. | package.write |
| DELETE | /api/depots/{clientId}/tags/{tagId} |
Removes a tag from a depot. | package.write |
| GET | /api/system/depot-topology-setting |
Returns whether the Depot Topology / Tags feature is active. | package.read |
| PUT | /api/system/depot-topology-setting |
Switches the Depot Topology / Tags feature on or off. While inactive, the Management Console hides the Topology and Tags tabs and tag ids are no longer written into the package properties. | package.write |
Depot Servers and Synchronization
| Method | Path | Description | Requires Role |
|---|---|---|---|
| GET | /api/system/depot-servers |
Lists all assignable depot servers (clients with the Empirum Depot Server or Master Server role). Every entry is a valid value for PUT /api/group/{id}/depot-servers. |
computer.read |
| GET | /api/system/sync-jobs |
Lists depot sync jobs with last and next run and result, newest first. | computer.read |
| POST | /api/system/sync-jobs |
Triggers an out-of-schedule depot sync job. | activation.execute |
| GET | /api/system/sync-jobs/depots |
Lists all depot servers with the heartbeat of their sync component (online, offline, pending, unknown). | computer.read |
Package Import
| Method | Path | Description | Requires Role |
|---|---|---|---|
| POST | /api/packages/import |
Imports a package from the PackageStore folder and generates its hash. The import runs as a background job. | package.write |
| GET | /api/packages/import/{trackingId} |
Returns the status of an import job: Pending, Running, Success, or Failed. | package.read |
Backend Queues and Tasks
Monitoring endpoints that make long-running Empirum operations visible to API consumers. All endpoints require the role computer.read.
| Method | Path | Description |
|---|---|---|
| GET | /api/queues |
Lists pending and running backend tasks from the backend plugin queues, newest first. This is the REST equivalent of the Back-end Task Queue dialog in the Management Console. Entries disappear once the job is completed, so an empty list means nothing is pending. |
| GET | /api/queues/names |
Lists the queue names available in the installation, which are the valid values for the queue filter of GET /api/queues. |
| GET | /api/tasks |
Lists external tasks, newest first. A task is created when a deployment operation is started (software install or uninstall, computer or software reinstall, OS install) and is closed once the client reported a result. Finished and failed tasks are purged after a retention period, 30 days by default. |
| GET | /api/tasks/{trackingId} |
Returns one task including the breakdown per action. |
Custom Field Configuration and Patch Products
| Method | Path | Description | Requires Role |
|---|---|---|---|
| GET | /api/custom-field-configuration |
Returns all 30 custom field slots, active and inactive, with designation, active flag, and position in the Management Console. The list is not paged. | computer.read |
| PATCH | /api/custom-field-configuration/{slot} |
Renames and/or activates or deactivates one slot. This is a global setting. Deactivating a slot hides it but keeps the stored computer values. The designation is limited to 50 characters and must be unique across all slots (409 on conflict). | computer.write |
| GET | /api/patches/{patchId}/products |
Lists the product versions a patch is linked into, with the number of link items per product. | pm.read |
| GET | /admin/logout |
Signs out of the Permission Management web UI. | None |
Custom field values of a computer are written with PATCH /api/computer/{id} and the new custom field. Only active slots can be written. Activate and name a slot first with PATCH /api/custom-field-configuration/{slot}.
Changes to Existing Endpoints
-
Computer custom fields:
PATCH /api/computer/{id}accepts the new optional fieldcustom, a map of slot names (Custom01toCustom30) to values. Only the slots that are sent change, and a null or empty value clears the slot. Values are limited to 50 characters, and only active slots can be written (otherwise the API returns400). A later inventory scan may overwrite these values. Use the new endpoints under/api/custom-field-configurationto see which slots are active. -
Distribution history:
GET /api/computer/{id}/distribution-historyand the distribution history search accept the new parametertype. The valuesoftwareis the default,patchreturns patch history, andallreturns every archived entry including agent status events. -
Issue thresholds:
GET /api/computer/issues/overviewaccepts the new query parametersminFreePercent,minFreeGb,maxHealthPercent,minHoursStale,maxHoursStale,minHoursPending, andmaxDaysPending. They override the thresholds of the low-disk, battery-wear, stale-agent, and stale-deployment checks. Omitting them reproduces the previous behavior. -
Inherited assignments: The requests to assign an Agent Template, OS image SKU, or PXE boot image to a group accept the new field
skipIfInherited(default false). The responses reportalreadyEffectiveandinheritedFromGroupId, so clients can tell when an assignment already applies through a parent group. -
Computer activation: The activation request accepts the new field
wolNow. -
Package search: The package search filter accepts
tagandtagId. -
Variable schedules: Variable values and the request to set a variable value support the new field
schedule. -
Group details:
GET /api/group/{id}returns the new fieldsfullPathandparentName. They are empty in list results. -
New response fields:
inventoryIdandisDomainon computers;isDomain,osLogin, andtempDirSizeMbin system info;driveTypeNameanddiskTypeon disk drives;dhcpIpAddressanddhcpSubnetMaskon network adapters;captionon batteries;sizeByteson patch catalog items;productIdon patch items;linkItemsTotal,patchCount, andproductIdin the patch approval result. - Input validation: Several string filter parameters now document a maximum length of 255 characters.
Administration and Security
- Principals and local principals have a new property
protected. A protected principal can only be deleted withforce=true. - The admin features response contains the new fields
localAdminEnabledandoidcLoginProviders, which describe the available sign-in methods for the Permission Management web UI. - The token endpoint is rate limited and returns
429 Too Many Requestswhen the limit is exceeded.
Documentation
The OpenAPI document now contains descriptions for most parameters and response fields, for example the allowed range of skip and top. The new Tags, DepotTags, Queues, Tasks, CustomFieldConfiguration, and ComputerRoles groups appear as folders in Scalar, and as folders in Postman when the import setting Folder organization is set to Tags.
Upgrade Notes
Before updating, check whether your integration uses one of the removed endpoints listed under "Breaking Changes", or approves patches and adds patches to PM groups without a productId. These calls fail after the update.
Re-import the OpenAPI document (/openapi/v1.json) in Scalar or Postman to pick up the new endpoints. In Postman, re-apply the collection-level authorization and the post-response script as described in the Postman guide.