Skip to content

Software Inventory

Software Inventory gives you a centralized view of every application installed across your fleet. It combines three interconnected systems: a software catalog that defines the applications your organization manages, software deployments that push install, update, and uninstall actions to devices, and a per-device inventory that records what is actually installed on each endpoint.

Together, these systems let you answer questions like “which devices are running an outdated version of Chrome?”, “who installed Zoom on that Mac?”, and “can I silently uninstall 7-Zip from every Windows endpoint in the Seattle site?” — all from a single API surface.


The software catalog is a registry of applications your organization tracks. Each catalog entry describes a piece of software with its vendor, category, platform support, license type, and versioning information. Catalog items are scoped to an organization.

Field Type Description
id string Unique identifier (auto-generated).
name string Application name. Max 200 characters.
vendor string Software vendor or publisher. Max 200 characters.
category enum One of: browser, utility, compression, productivity, communication, developer, media, security.
description string Short description of the software. Max 1000 characters.
platforms array Supported platforms: windows, macos, linux. At least one required.
latestVersion string The most recent version string. Automatically updated when a new version is added.
homepage string URL to the software’s website. Must be a valid URL.
licenseType enum One of: free, commercial, open-source.
tags array Optional string tags for search and filtering. Each tag max 50 characters.
deprecated boolean Whether the software is deprecated. Defaults to false.
createdAt timestamp When the catalog entry was created.
updatedAt timestamp When the catalog entry was last modified.

The category field uses a fixed set of values that determine how the software is classified in the UI and in search results:

  • browser – Web browsers (Chrome, Firefox, Edge)
  • utility – General-purpose utilities
  • compression – Archive and compression tools (7-Zip, WinRAR)
  • productivity – Office and productivity applications
  • communication – Messaging, video, and collaboration tools (Slack, Zoom)
  • developer – Development tools and editors (VS Code, JetBrains IDEs)
  • media – Media players and editors (VLC)
  • security – Antivirus, endpoint protection, and security tools

POST /software/catalog

{
"name": "Google Chrome",
"vendor": "Google",
"category": "browser",
"description": "Enterprise-ready browser with centralized policy support.",
"platforms": ["windows", "macos", "linux"],
"latestVersion": "121.0.6167.161",
"homepage": "https://www.google.com/chrome/",
"licenseType": "free",
"tags": ["browser", "google", "chromium", "managed"],
"deprecated": false
}

Returns the created item with a 201 status code. All create, update, and delete operations on the catalog are audit-logged with the software.catalog.create, software.catalog.update, and software.catalog.delete action types respectively.

GET /software/catalog

Returns a paginated list of catalog items. Supports the following query parameters:

Parameter Type Description
search or q string Full-text search across name, vendor, description, category, and tags.
category string Filter by category (e.g., browser, developer).
platform string Filter by platform support (windows, macos, linux).
page string Page number (default: 1).
limit string Results per page (default: 50, max: 100).

The response includes pagination metadata:

{
"data": [ ... ],
"pagination": { "page": 1, "limit": 50, "total": 7 }
}

A dedicated search endpoint is also available:

GET /software/catalog/search?q=chrome&category=browser

Returns matching items with a total count. The q parameter is required and must be at least one character.

GET /software/catalog/:id

Returns the catalog item along with a versionCount field indicating how many versions are registered for that software.

PATCH /software/catalog/:id

Accepts a partial update payload. Only the fields you include will be modified. The updatedAt timestamp is set automatically. The audit log records which fields were changed.

{
"latestVersion": "122.0.6261.57",
"description": "Updated description with new enterprise features."
}

DELETE /software/catalog/:id

Removes the catalog item and all of its associated versions. Returns { "success": true, "id": "..." }.


Each catalog item can have multiple version records. Versions track release metadata, download URLs, checksums, and silent install/uninstall arguments that the agent uses for automated deployment.

The database schema stores the following fields for each version:

Field Type Description
id UUID Unique identifier.
catalogId UUID Reference to the parent catalog item.
version string Version string (e.g., 121.0.6167.161). Max 100 characters.
releaseDate timestamp When this version was released.
releaseNotes text Optional release notes or changelog.
downloadUrl string URL to the installer package. Must be a valid URL.
checksum string SHA-256 hash of the installer file. 64 hex characters.
fileSize bigint File size in bytes.
supportedOs JSON Array or object describing supported operating systems.
architecture string Target architecture (e.g., x64, arm64). Max 20 characters.
silentInstallArgs text Command-line arguments for silent/unattended installation.
silentUninstallArgs text Command-line arguments for silent/unattended uninstallation.
preInstallScript text Script to execute before installation begins.
postInstallScript text Script to execute after installation completes.
isLatest boolean Whether this is the latest version for its catalog item.

GET /software/catalog/:id/versions

Returns all versions for a catalog item, sorted by release date in descending order (newest first).

POST /software/catalog/:id/versions

{
"version": "122.0.6261.57",
"releaseDate": "2024-03-15T00:00:00.000Z",
"notes": "Security fixes and performance improvements.",
"downloadUrl": "https://dl.google.com/chrome/install/enterprise/chrome_122.msi",
"sha256": "a1b2c3d4e5f60718293a4b5c6d7e8f9012a3b4c5d6e7f8091a2b3c4d5e6f70b",
"sizeMB": 110,
"supportedPlatforms": ["windows", "macos", "linux"]
}

When a new version is added, the parent catalog item’s latestVersion field is automatically updated to match the new version string, and its updatedAt timestamp is refreshed. The operation is audit-logged with the software.catalog.version.create action.


Deployments represent actions taken against devices: installing new software, updating existing software, or uninstalling software. Each deployment targets one or more devices and tracks its lifecycle from request through completion.

Action Description
install Install the specified software version on the target devices.
update Update existing software to a new version on the target devices.
uninstall Remove the software from the target devices.

The deployment status progresses through these states:

Status Description
pending The deployment has been created and is waiting for execution (immediate deployments).
queued The deployment is scheduled for a future time (when scheduleAt is specified).
running The deployment is actively executing on one or more devices.
completed All target devices have finished processing.
failed The deployment failed on one or more devices.
cancelled The deployment was cancelled by an operator before completion.

The database-level deployment_status enum includes additional states used by the broader deployment system: draft, paused, downloading, installing, and rollback.

Deployments support two scheduling modes:

  • Immediate: When no scheduleAt field is provided, the deployment enters pending status and begins execution as soon as targeted devices check in.
  • Scheduled: When scheduleAt is set to an ISO 8601 datetime string, the deployment enters queued status and waits until the scheduled time.

The database schema also supports associating a deployment with a maintenance window via the maintenanceWindowId field on the softwareDeployments table. This ties the deployment to an existing maintenance window so that commands are only dispatched during the approved time range.

Field Type Description
id UUID Unique identifier.
orgId UUID Organization that owns this deployment.
name string Descriptive name for the deployment. Max 255 characters.
softwareVersionId UUID The specific software version being deployed.
deploymentType string The action type (install, uninstall, update). Max 20 characters.
targetType string How targets are specified (e.g., device list, group, filter). Max 50 characters.
targetIds JSON Array of target identifiers based on targetType.
scheduleType string Scheduling mode (immediate, scheduled, maintenance_window). Max 30 characters.
scheduledAt timestamp When the deployment should execute (for scheduled deployments).
maintenanceWindowId UUID Optional reference to a maintenance window.
options JSON Additional deployment options.
createdBy UUID The user who created the deployment.
createdAt timestamp When the deployment was created.

POST /software/deployments

{
"softwareId": "sw-001",
"action": "update",
"version": "121.0.6167.161",
"deviceIds": [
"a3f1c7d2-5b3c-4fa8-b7e9-1b2a3c4d5e6f",
"b4e2d8f3-6c4d-4b9e-9f10-2a3b4c5d6e7f"
],
"requestedBy": "ops@breeze.local",
"reason": "Security update rollout",
"scheduleAt": "2024-03-10T02:00:00.000Z"
}
Field Required Description
softwareId Yes ID of the catalog item to deploy.
action Yes One of install, uninstall, update.
version No Target version string. Defaults to the catalog item’s latestVersion if omitted.
deviceIds Yes Array of device UUIDs. At least one required.
requestedBy Yes Identifier of the user requesting the deployment. Max 200 characters.
reason No Optional reason for the deployment. Max 500 characters.
scheduleAt No ISO 8601 datetime. If omitted, the deployment starts immediately.

When scheduleAt is provided, the deployment status is set to queued. Otherwise, it starts as pending. A deployment result record is automatically created for each target device.

The operation is audit-logged with the software.deployment.create action, including the software ID, action type, and number of target devices.

GET /software/deployments

Returns a paginated list of deployments with the following filters:

Parameter Type Description
status string Filter by deployment status (pending, queued, running, completed, failed, cancelled).
action string Filter by action type (install, uninstall, update).
softwareId string Filter by catalog item ID.
deviceId UUID Filter to deployments that target a specific device.
requestedBy string Filter by the requesting user.
page string Page number (default: 1).
limit string Results per page (default: 50, max: 100).

GET /software/deployments/:id

Returns the full deployment object including all fields.

POST /software/deployments/:id/cancel

{
"reason": "Superseded by newer version rollout."
}

Cancellation is only allowed when the deployment status is pending or queued. Attempting to cancel a deployment in any other state returns a 409 Conflict response. When cancelled:

  • The deployment status changes to cancelled.
  • The cancelReason and completedAt fields are populated.
  • All associated deployment results that have not yet completed are also set to cancelled.

The operation is audit-logged with the software.deployment.cancel action.


Every deployment creates one result record per target device. Results track the execution lifecycle on each individual endpoint.

Field Type Description
id UUID Unique identifier.
deploymentId UUID Parent deployment.
deviceId UUID Target device.
status enum Current status: pending, running, completed, failed, cancelled.
startedAt timestamp When execution began on the device.
completedAt timestamp When execution finished (success or failure).
exitCode integer Process exit code from the installer/uninstaller.
output text Stdout/stderr output captured during execution.
errorMessage text Error description if the deployment failed on this device.
retryCount integer Number of retry attempts. Defaults to 0.

GET /software/deployments/:id/results

Returns all per-device results for a given deployment. Use this to understand which devices succeeded, which are still running, and which failed.

{
"data": [
{
"deploymentId": "dep-001",
"deviceId": "a3f1c7d2-5b3c-4fa8-b7e9-1b2a3c4d5e6f",
"status": "completed",
"message": "Updated successfully.",
"startedAt": "2024-03-01T09:02:00.000Z",
"completedAt": "2024-03-01T09:08:00.000Z"
},
{
"deploymentId": "dep-001",
"deviceId": "b4e2d8f3-6c4d-4b9e-9f10-2a3b4c5d6e7f",
"status": "completed",
"message": "Updated successfully.",
"startedAt": "2024-03-01T09:10:00.000Z",
"completedAt": "2024-03-01T09:40:00.000Z"
}
]
}

The device software inventory records what is actually installed on each endpoint. This data is reported by the Breeze agent during periodic scans and is stored in the software_inventory database table.

Field Type Description
id UUID Unique identifier.
deviceId UUID The device this record belongs to.
catalogId UUID Optional reference to a catalog item (for managed software).
name string Name of the installed software as reported by the OS. Max 500 characters.
version string Installed version string. Max 100 characters.
vendor string Publisher/vendor as reported by the OS. Max 200 characters.
installDate date When the software was installed.
installLocation text File system path where the software is installed.
uninstallString text The uninstall command or registry key for removing the software.
isManaged boolean Whether the software is managed through the Breeze catalog. Defaults to false.
lastSeen timestamp When the agent last reported this software as installed.

Each inventory item includes a source field indicating how the software was detected:

Source Description
deployment Installed through a Breeze software deployment.
baseline Present on the device when it was first enrolled (discovered during initial scan).
user Installed manually by a user outside of Breeze management.

GET /software/inventory

Returns inventory records across all devices in the organization. Supports the following filters:

Parameter Type Description
deviceId UUID Filter to a specific device.
softwareId string Filter to devices that have a specific catalog item installed.
search string Search by device name or software name.

GET /software/inventory/:deviceId

Returns the full inventory for a single device, including the device name, OS, last scan timestamp, and a list of installed software items.

{
"data": {
"deviceId": "a3f1c7d2-5b3c-4fa8-b7e9-1b2a3c4d5e6f",
"deviceName": "WIN-SEA-01",
"os": "windows",
"lastScannedAt": "2024-03-04T08:10:00.000Z",
"items": [
{
"softwareId": "sw-001",
"name": "Google Chrome",
"version": "121.0.6167.161",
"installedAt": "2024-03-01T09:08:00.000Z",
"source": "deployment"
},
{
"softwareId": "sw-003",
"name": "7-Zip",
"version": "23.01",
"installedAt": "2024-02-02T11:00:00.000Z",
"source": "baseline"
}
]
}
}

GET /devices/:id/software

An alternative endpoint mounted under the devices route that queries the software_inventory database table directly. This endpoint supports pagination and search:

Parameter Type Description
page string Page number (default: 1).
limit string Results per page (default: 1000).
search string Filter by software name (partial match).

Results are sorted alphabetically by software name.


You can queue an uninstall directly from a device’s inventory without needing to manually create a deployment. This is useful for one-off removals of unwanted software discovered during inventory scans.

POST /software/inventory/:deviceId/:softwareId/uninstall

{
"requestedBy": "it@breeze.local",
"reason": "Unauthorized application — not on approved list.",
"scheduleAt": "2024-03-10T02:00:00.000Z"
}
Field Required Description
requestedBy Yes Identifier of the requesting user. Max 200 characters.
reason No Explanation for the uninstall. Max 500 characters.
scheduleAt No ISO 8601 datetime to schedule the uninstall. If omitted, queued immediately.

This endpoint performs the following steps:

  1. Validates that the device inventory exists and the specified software is installed on the device.

  2. Verifies the software ID corresponds to a valid catalog item within the organization.

  3. Sets pendingUninstall: true on the inventory item, marking it as awaiting removal.

  4. Creates a new deployment record with action: "uninstall" targeting only the specified device.

  5. Creates a corresponding deployment result record for tracking.

The response returns the created deployment with a 202 Accepted status code. The uninstall is audit-logged with the software.uninstall.queue action, recording both the device ID and software ID.


All software endpoints require authentication and are scoped to organization, partner, or system access levels.

Method Path Description
GET /software/catalog List catalog items with search, category, and platform filters. Paginated.
POST /software/catalog Create a new catalog item.
GET /software/catalog/search Search catalog items by keyword. Requires q parameter.
GET /software/catalog/:id Get a single catalog item with version count.
PATCH /software/catalog/:id Update a catalog item (partial update).
DELETE /software/catalog/:id Delete a catalog item and all its versions.
GET /software/catalog/:id/versions List all versions for a catalog item, newest first.
POST /software/catalog/:id/versions Add a new version to a catalog item.
Method Path Description
GET /software/deployments List deployments with status, action, software, device, and requester filters. Paginated.
POST /software/deployments Create a new deployment (install, uninstall, or update).
GET /software/deployments/:id Get deployment details.
POST /software/deployments/:id/cancel Cancel a pending or queued deployment.
GET /software/deployments/:id/results Get per-device deployment results.
Method Path Description
GET /software/inventory List all device inventory records. Supports device, software, and search filters.
GET /software/inventory/:deviceId Get full software inventory for a specific device.
POST /software/inventory/:deviceId/:softwareId/uninstall Queue an uninstall for a specific software on a specific device.
GET /devices/:id/software Get installed software list for a device (paginated, from database).

On Windows devices, the Breeze agent can use the Windows Package Manager (winget) as a software provider for installations, updates, and uninstalls. Winget operations run through the user helper IPC channel because winget requires a user session context — it cannot run directly from a Windows service (Session 0).

  1. A software deployment targeting a Windows device specifies a winget package ID (e.g., Google.Chrome).

  2. The agent service sends the operation to the user helper process via IPC.

  3. The user helper executes winget install, winget upgrade, or winget uninstall in the user’s session.

  4. Output and exit codes are relayed back through IPC to the agent, which reports the result to the API.


Catalog search returns no results even though the item exists. The search matches against name, vendor, description, category, and tags. Verify that your search term appears in at least one of these fields. Search is case-insensitive. Also confirm that you are querying within the correct organization scope – catalog items are org-scoped, so a partner-level token must resolve to the correct orgId.

“orgId is required for this scope” error on every request. All software endpoints require an organization context. If you are authenticating with a partner-scoped token that has access to multiple organizations, the API cannot automatically determine which organization to query. Either use an organization-scoped token or ensure your partner token has access to exactly one organization.

Cannot cancel a deployment – receiving 409 Conflict. Only deployments with status pending or queued can be cancelled. If the deployment has already moved to running, completed, or failed, cancellation is not permitted. Check the deployment status with GET /software/deployments/:id first.

Device inventory shows software as installed but the uninstall deployment completed. The inventory record remains until the agent performs its next scan and confirms the software is no longer present. The pendingUninstall flag will be set to true while the removal is in progress. If the flag persists after the deployment shows completed, the agent may not have performed a fresh scan yet.

Deployment result stuck in “pending” status. The device has not yet checked in to receive the deployment command. Verify the device is online and the agent is running. For scheduled deployments, confirm the scheduledAt time has passed.

Version checksum validation fails during deployment. Ensure the sha256 value provided when creating the version matches the actual SHA-256 hash of the installer file at the downloadUrl. The hash must be exactly 64 hexadecimal characters. Re-download the file and compute the hash with sha256sum (Linux/macOS) or Get-FileHash (Windows PowerShell) to verify.

Device-specific software endpoint (/devices/:id/software) returns different data than /software/inventory/:deviceId. These two endpoints currently use different data sources. See the caution note at the top of the Device Software Inventory section for details.