Patch Management Release 3.9 API

August 31, 2025

Before understanding the API release highlights, learn more about the API server URL to be used in your API requests by referring to the Know Your Qualys API Server URL section. For this API Release Notes, <qualys_base_url> is mentioned in the sample API requests.

Enhanced API: Get a List of Assets

New or Updated API   Updated
API Endpoint   /pm/v1/assets
Method GET
DTD or XSD changes Not Applicable

We have added new parameters: installedPatches, missingPatches, and interface.ipv6Address to the API response to enhance the Get a List of Assets API. These new fields provide the asset details such as IPv6 address, missing patches, and installed patches for the assets enabled for your Patch Management within your scope.

Sample - Get List of Linux AssetsSample - Get List of Linux Assets

API Request

 curl -X 'GET' \
  '<qualys_base_url>/pm/v1/assets?platform=Linux’ \
  -H 'accept: application/json' \
  -H 'Authorization: Bearer <<jwt token>>’ 

API Response

[
  {
    "name": "rhel8r6-vm-live",
    "id": "968fa80c-df51-4e6a-9279-b26653cec986",
    "operatingSystem": "Red Hat Enterprise Linux 8.6",
    "lastLoggedOnUser": "root",
    "assetStatus": "Failed",
    "scanStatus": "Scanned",
    "statusCode": 20212,
    "statusDateTime": 1753435366000,
    "scanDateTime": 1753425259261,
    "hardware": {
      "model": "VMware7,1",
      "manufacturer": "VMware, Inc."
    },
    "tags": [
      {
        "id": "909075bb-a86b-4bfc-8936-2644f5b66ff6"
      },
      {
        "id": "1f49f584-6881-4408-b139-01149e730bdb"
      }
    ],
    "interfaces": [
      {
        "interfaceName": "ens192",
        "macAddress": "00:50:56:aa:e0:e6",
        "ipv6Address": null,
        "address": "10.115.127.59",
        "gatewayAddress": null
      },
      {
        "interfaceName": "virbr0",
        "macAddress": "52:54:00:06:68:83",
        "ipv6Address": null,
        "address": "192.168.122.1",
        "gatewayAddress": null
      },
      {
        "interfaceName": "ens192",
        "macAddress": "00:50:56:aa:e0:e6",
        "ipv6Address": "fe80:0:0:0:250:56ff:feaa:e0e6",
        "address": null,
        "gatewayAddress": null
      }
    ],
    "installedPatches": [],
    "missingPatches": [
      {
        "id": "4a230d59-259a-3598-9ef3-0c36765683ae"
      },
      {
        "id": "3ebbbc04-8c60-387a-9bc3-d79261440ea6"
      },
      .............
      {
        "id": "864fb9d2-bffe-3da8-92c8-3a1263b39c70"
      }
    ],
    "version": "8.6",
    "architecture": "x86_64",
    "osIdentifier": "RHEL8",
    "platform": "Linux",
    "agentVersion": "007.002.000.038",
    "isolation": null,
    "activatedModules": [
      "MTG",
      "PM"
    ],
    "osNotSupportedForModules": [],
    "missingCount": 110,
    "installedCount": 0
  }
]

Enhanced API: Get a List of All Patch Management Assets

New or Updated API Updated
API Endpoint 

 /pm/v1/assets

Method POST
DTD or XSD changes Not Applicable

We have added new parameters: installedPatches, missingPatches, and interface.ipv6Address to the API response to enhance the Get List of all Patch management Assets API. These new fields provide the asset details such as IPv6 address, missing patches, and installed patches for the assets. This API fetches the list of more than ten thousand assets enabled for your Patch Management subscription.

Sample - Get a List of All Patch Management AssetsSample - Get a List of All Patch Management Assets

API Request

curl -X 'POST' \
  '<qualys_base_url>/pm/v1/assets?sortOrder=ASC&platform=Linux' \
  -H 'accept: application/json' \
  -H 'Authorization: Bearer <<jwt token>>’\
  -H 'Content-Type: application/json' \
  -d 

API Response

[{
    "interfaces": [
      {
        "ipv6Address": "fe80:0:0:0:1dcc:3a12:56d8:73f"
      },
      {
        "address": "10.0.203.124"
      }
    ],
    "scanStatus": "Scanned",
    "operatingSystem": "Red Hat Enterprise Linux Server 9.2",
    "version": "9.2",
    "platform": "Linux",
    "tags": [
      "236bdc33-a0c7-4baf-8ce3-fc89ad5302ce",
      "6d1cd4b6-378d-4c95-ad47-f459882e7c35",
      "7f14573f-b7b7-4393-8457-d1a10f058a5a",
      "1e7aaeae-62fa-4e6c-82c5-99038fc8203b",
      "ce1e4d6a-7119-4177-9bcc-0b31c39aad1b"
    ],
    "installedPatchCount": 1,
    "missingPatches": [
      {
        "id": "fb9f585c-5773-30b6-8922-274e47a80ebc"
      },
      {
        "id": "cdbdb949-5153-3511-9f54-eced744470ec"
      },
      {
        "id": "8f378f67-98d3-30a3-bcff-ff6eda730f46"
      },
      {
        "id": "5b4c8d77-f012-3494-80e2-fa4fb5c2bcd4"
      },
      {
        "id": "87c17496-7b00-3652-99b9-ef28cc4adf0d"
      }
    ],
    "osIdentifier": "RHEL9",
    "missingPatchCount": 5,
    "activatedModules": [
      "PM"
    ],
    "lastLoggedOnUser": "",
    "scanDateTime": 1752821490000,
    "statusDateTime": 1752821490000,
    "name": "PMUI_AUTOMATION_MOCK_ASSET_LINUX",
    "agentVersion": "009.002.000.000",
    "id": "9bf5e773-177e-467c-a79a-1c345546be32",
    "installedPatches": [
      "5e4ebe5d-9d46-3945-aa8b-36e123075b5a"
    ],
    "hardware": {},
    "architecture": "x86_64",
    "status": "Scanned",
    "statusCode": 20211,
    "osNotSupportedForModules": []
  }
]

Enhanced API: Get Deployment Job Details by Job ID

New or Updated API New
API Endpoint  /pm/v1/deploymentjob/{deploymentJobId} 
Method GET
DTD or XSD changes Not Applicable

With this release, we have enhanced the Get Deployment Job Details by Job ID API to include new parameters to create a default job. This API gets the details of the default  deployment job based on the specified deployment job ID.

Input ParametersInput Parameters

Parameter

Mandatory/
Optional

Data Type

Description

isDefaultJob Mandatory Boolean Specify the value as true or false.
If the values is set true, a default deployment job is created.
onAssetActivation Mandatory Boolean Specify the value as true or false.
If you set this value as true, the default job will run on the assets that are activated, and part of the tag included in the job, 
onAssetInactiveForXDays Mandatory Integer Specify the number of days for which the asset is inactive. 
Note: The value must be between 3 to 180. 

Sample - Get Default Deployment Job Details by Job IDSample - Get Default Deployment Job Details by Job ID

API Request

curl -X 'PATCH' \
  '<qualys_base_url>/pm/v1/deploymentjob/4730541c-091e-443c-95d3-c8a6f34bc4bd' \
  -H 'accept: application/json' \
  -H 'Authorization: Bearer <JWT_Token>' \
  -H 'Content-Type: application/json' \
  -d 

API Body

{
  "customerId": "160bdd9e-332a-5f68-828f-e2773358ff10",
  "id": "b288b6ff-3fad-4e8e-be05-f1778cc36022",
  "schemaVersion": "1.0",
  "name": "Copy_of_e_1754050650895",
  "description": "",
  "type": "Install",
  "status": "Disabled",
  "coAuthorUserIds": null,
  "scheduleType": "Conditional",
  "startDateTime": null,
  "recurring": false,
  "timezoneType": null,
  "timezone": null,
  "createdBy": {
    "user": {
      "id": "ce0bb83b-e158-5a18-83b4-9dfc3079fe99",
      "name": "quaysxpb1",
      "fullName": "Pratik Bhattad"
    },
    "date": 1754050653698
  },
  "updatedBy": {
    "user": null,
    "date": null
  },
  "deletedBy": {
    "user": null,
    "date": null
  },
  "assetCount": null,
  "taggedAssetCount": 0,
  "applicableAssetCount": 0,
  "totalAssetCount": null,
  "assetResultReceivedCount": null,
  "jobCategory": 3,
  "jobTriggerStatus": null,
  "completionPercent": null,
  "jobSource": 2,
  "readOnly": false,
  "subCategory": "Patch",
  "platform": "Windows",
  "assetIds": null,
  "assetTagIds": [
    "19493e14-ff9d-48ec-bf27-eb0cfbc43cd9"
  ],
  "matchAllTagIds": null,
  "exclusionTagIds": null,
  "exclusionAssetIds": null,
  "approvedPatches": null,
  "disabledPatches": null,
  "patchCount": 0,
  "recurringWeekDays": "",
  "dayOfMonth": null,
  "recurringDayOfMonth": null,
  "recurringWeekDayOfMonth": null,
  "timeout": -1,
  "timeoutUnit": "HOURS",
  "preDeployment": {
    "userMessage": "",
    "description": "",
    "deferment": {
      "count": 3,
      "interval": 1,
      "intervalUnit": "HOURS"
    }
  },
  "duringDeployment": {
    "userMessage": "",
    "description": ""
  },
  "postDeployment": {
    "suppressReboots": false,
    "rebootHonorOnUserLogin": false,
    "rebootOption": {
      "userMessage": "",
      "description": "",
      "deferment": {
        "count": 3,
        "interval": 1,
        "intervalUnit": "HOURS"
      }
    },
    "rebootCountdown": {
      "interval": 15,
      "intervalUnit": "MINUTES",
      "userMessage": "Reboot countdown started",
      "description": "The system reboot is initiated. It will reboot automatically after the timer countdown."
    },
    "onComplete": {
      "userMessage": "",
      "description": "",
      "alwaysShowCompletedPrompt": false
    }
  },
  "opportunisticDownloads": false,
  "filterType": "Any",
  "exclusionFilterType": "Any",
  "minimizeWindow": false,
  "dynamicPatchesQQL": "",
  "isDynamicPatchesQQL": false,
  "dynamicQQLType": 1,
  "assetDetectionsQQL": "",
  "continueOnPatchFailure": false,
  "preDeployActions": null,
  "postDeployActions": null,
  "monthlyRecurringType": null,
  "patchTuesdayPlusXDays": null,
  "recurringLastDayOfMonth": false,
  "notification": null,
  "linkedJobId": null,
  "linkedToJob": null,
  "linkedJobs": null,
  "jobStartCountdown": null,
  "passwordAction": null,
  "additionalDynamicQQLType": null,
  "additionalDynamicPatchesQQL": null,
  "downloadRandomizeTime": 0,
  "downloadRandomizeTimeUnit": "MINUTES",
  "customPatchURLId": null,
  "isVulnContext": false,
  "remediationQids": null,
  "isAssetImported": false,
  "enableReattemptFailedPatches": false,
  "reattemptFailedPatches": {
    "noOfReattempts": 0,
    "exponentialBackoffInterval": 0
  },
  "allowExecutionWithPendingReboot": false,
  "isDefaultJob": true,
  "defaultJobConfiguration": {
    "onAssetActivation": false,
    "onAssetInactiveForXDays": 5
  }
}

API Response

Response : 200

Enhanced API: Create a Deployment Job

New or Updated API Updated
API Endpoint  /pm/v1/deploymentjob/
Method POST
DTD or XSD changes Not Applicable

With this release, we have enhanced the Create Deployment Job API to include new parameters to create a default deployment job. This API creates a default deployment job with the defined configurations.

Input ParametersInput Parameters

Parameter

Mandatory/
Optional

Data Type

Description

isDefaultJob Mandatory Boolean Specify the value as true or false.
If the values is set true, a default deployment job is created.
onAssetActivation Mandatory Boolean Specify the value as true or false.
If you set this value as true, the default job will run on the assets that are activated, and part of the tag included in the job, 
onAssetInactiveForXDays Mandatory Integer Specify the number of days for which the asset is inactive. 
Note: The value must be between 3 to 180. 

Sample - Create Default Deployment JobSample - Create Default Deployment Job

API Request

curl -X 'POST' \
  '<qualys_base_url>/pm/v1/deploymentjob' \
  -H 'accept: application/json' \
  -H 'Authorization: Bearer <JWT_token>
  -H 'Content-Type: application/json' \
  -d

API Body

{
  "dynamicPatchesQQL": "patch.downloadMethod:Automatic ",
  "isDynamicPatchesQQL": true,
  "dynamicQQLType": "1",
  "assetCount": 0,
  "assetTagIds": ["b27dd179-be86-4c44-bba1-06654d1bf4fa"],
  "assetDetectionsQQL": "",
  "duringDeployment": {
    "userMessage": "",
    "description": ""
  },
  "name": "windows_default_job__1",
  "description": "",
  "postDeployment": {
    "suppressreboots": false,
    "rebootHonorOnUserLogin": false,
    "onComplete": {
      "userMessage": "",
      "description": "",
      "alwaysShowCompletedPrompt": false
    },
    "rebootCountdown": {
      "interval": 15,
      "intervalUnit": "MINUTES",
      "userMessage": "Reboot countdown started",
      "description": "The system reboot is initiated. It will reboot automatically after the timer countdown."
    },
    "rebootOption": {
      "deferment": {
        "count": 3,
        "interval": 1,
        "intervalUnit": "HOURS"
      },
      "userMessage": "",
      "description": ""
    }
  },
  "preDeployment": {
    "deferment": {
      "count": 3,
      "interval": 1,
      "intervalUnit": "HOURS"
    },
    "userMessage": "",
    "description": ""
  },
  "scheduleType": "Conditional",
  "schemaVersion": "1.0",
  "startDateTime": null,
  "status": "Disabled",
  "opportunisticdownloads": false,
  "minimizeWindow": false,
  "enableReattemptFailedPatches": false,
  "reattemptFailedPatches": {
    "noOfReattempts": 0,
    "exponentialBackoffInterval": 0
  },
  "allowExecutionWithPendingReboot": false,
  "customPatchURLId": null,
  "timeout": -1,
  "timeoutUnit": "HOURS",
  "downloadRandomizeTime": 0,
  "downloadRandomizeTimeUnit": "MINUTES",
  "timezone": null,
  "timezoneType": null,
  "type": "Install",
  "filterType": "Any",
  "exclusionFilterType": "Any",
  "exclusionTagIds": [],
  "matchAllTagIds": [],
  "coAuthorUserIds": [],
  "platform": "Windows",
  "jobCategory": null,
  "jobSource": 2,
  "remediationQids": [],
  "isVulnContext": false,
  "subCategory": "Patch",
  "isDefaultJob": true,
  "defaultJobConfiguration": {
    "onAssetActivation": true,
    "onAssetInactiveForXDays": 3
  }
}

API Response

API Response : 201

Enhanced API: Update Deployment Job 

New or Updated API Updated
API Endpoint  /pm/v1/deploymentjob/UPDATE/{deploymentJobId}
Method PATCH
DTD or XSD changes Not Applicable

With this release, we have enhanced the Update Deployment Job API, in which you can edit a default job to update the configurations. 
Note: You can update a default job only if it is in a disabled state.

Input ParametersInput Parameters

Parameter

Mandatory/
Optional

Data Type

Description

isDefaultJob Mandatory Boolean Specify the value as true or false.
If the values is set true, a default deployment job is created.
onAssetActivation Mandatory Boolean Specify the value as true or false.
If you set this value as true, the default job will run on the assets that are activated, and part of the tag included in the job, 
onAssetInactiveForXDays Mandatory Integer Specify the number of days for which the asset is inactive. 
Note: The value must be between 3 to 180. 

Sample - Update Default Deployment JobSample - Update Default Deployment Job

API Request

curl -X 'PATCH' \
  '<qualys_base_url>/pm/v1/deploymentjob/update/43f9b149-17eb-41b5-8590-9d9df1d85edd' \
  -H 'accept: application/json' \
  -H 'Authorization: Bearer <JWT_Token>
  -H 'Content-Type: application/json' \
  -d '

API Body

{
  "name": "windows_default_job__1",
  "description": "",
  "type": "Install",
  "status": "Disabled",
  "coAuthorUserIds": null,
  "scheduleType": "Conditional",
  "startDateTime": null,
  "recurring": null,
  "timezoneType": null,
  "timezone": null,
  "assetCount": null,
  "taggedAssetCount": 0,
  "applicableAssetCount": 0,
  "totalAssetCount": null,
  "assetResultReceivedCount": null,
  "jobCategory": 3,
  "jobTriggerStatus": null,
  "completionPercent": null,
  "jobSource": 3,
  "readOnly": false,
  "subCategory": "Patch",
  "platform": "Windows",
  "assetIds": null,
  "assetTagIds": [
    "b27dd179-be86-4c44-bba1-06654d1bf4fa"
  ],
  "matchAllTagIds": null,
  "exclusionTagIds": null,
  "exclusionAssetIds": null,
  "approvedPatches": null,
  "disabledPatches": null,
  "patchCount": 0,
  "recurringWeekDays": null,
  "dayOfMonth": null,
  "recurringDayOfMonth": null,
  "recurringWeekDayOfMonth": null,
  "timeout": -1,
  "timeoutUnit": "HOURS",
  "preDeployment": {
    "userMessage": "",
    "description": "",
    "deferment": {
      "count": 3,
      "interval": 1,
      "intervalUnit": "HOURS"
    }
  },
  "duringDeployment": {
    "userMessage": "",
    "description": ""
  },
  "postDeployment": {
    "suppressReboots": false,
    "rebootHonorOnUserLogin": false,
    "rebootOption": {
      "userMessage": "",
      "description": "",
      "deferment": {
        "count": 3,
        "interval": 1,
        "intervalUnit": "HOURS"
      }
    },
    "rebootCountdown": {
      "interval": 15,
      "intervalUnit": "MINUTES",
      "userMessage": "Reboot countdown started",
      "description": "The system reboot is initiated. It will reboot automatically after the timer countdown."
    },
    "onComplete": {
      "userMessage": "",
      "description": "",
      "alwaysShowCompletedPrompt": false
    }
  },
  "opportunisticDownloads": null,
  "filterType": "Any",
  "exclusionFilterType": "Any",
  "minimizeWindow": false,
  "dynamicPatchesQQL": "patch.downloadMethod:Automatic ",
  "isDynamicPatchesQQL": true,
  "dynamicQQLType": 1,
  "assetDetectionsQQL": "",
  "continueOnPatchFailure": false,
  "preDeployActions": null,
  "postDeployActions": null,
  "notification": null,
  "linkedJobId": null,
  "linkedToJob": null,
  "linkedJobs": null,
  "jobStartCountdown": null,
  "passwordAction": null,
  "additionalDynamicQQLType": null,
  "additionalDynamicPatchesQQL": null,
  "downloadRandomizeTime": 0,
  "downloadRandomizeTimeUnit": "MINUTES",
  "customPatchURLId": null,
  "isVulnContext": false,
  "remediationQids": null,
  "isAssetImported": false,
  "enableReattemptFailedPatches": false,
  "reattemptFailedPatches": {
    "noOfReattempts": 0,
    "exponentialBackoffInterval": 0
  },
  "allowExecutionWithPendingReboot": false,
  "isDefaultJob": true,
  "defaultJobConfiguration": {
    "onAssetActivation": true,
    "onAssetInactiveForXDays": 4
  }
}

API Body

API Response : 200

Enhanced API: Get Mitigation Job Action Result By Job ID 

New or Updated API Updated
API Endpoint  /mtg/v1/deploymentjob/{deploymentjobid}/deploymentjobresult/actions
Method POST
DTD or XSD changes Not Applicable

In this release, we have removed the pageSize and pageNumber parameters from the Get Mitigation Job Action result by Job ID API. This API will directly fetch all the job action results for the specified job ID and agent UUID.

Note: There is no change in the sample API request and response.

Enhanced APIs with New QQL Search Tokens

As a part of QQL token standardization, we have renamed common and Patch Management-specific tokens. The standardization helps reuse and customize the QQL queries across all Qualys applications, leading to a consistent user experience.  The standardized tokens make it easier to copy and reuse the search query from one application to another, eliminating the need to remember multiple token names for different applications and similar searches.

The following list presents the Patch Management APIs, where the API request must change based on the updated QQL tokens.

For the complete list of old and new token mappings, see Old and New Token Mappings.

API Name API Endpoint
Get patch details for Windows and Linux platforms  /pm/v1/patchcatalog/patches
 Get patch count  /pm/v1/patches/count
Get patches for a specific customer  /pm/v1/patches
Get a list of your patch management assets  /pm/v1/assets
Get deployment by Job Id for a specific job  /pm/v1/deploymentjob/{deploymentJobId}
Create a deployment job  /pm/v1/deploymentjob
Update Deployment Job for the given customer  /pm/v1/deploymentjob/update/{deploymentJobId}
Get a deployment job list  /pm/v1/deploymentjobs
Get a list of all deployment jobs for your subscription  /pm/v1/deploymentjobs/summary
Get deployment job summary GET/pm/v1/deploymentjob/{deploymentJobId}/deploymentjobresult/summary
Get deployment job result summary  POST/pm/v1/deploymentjob/{deploymentJobId}/deploymentjobresult/summary
Get a list of deployment jobs that can be used to fetch patches from  /pm/v1/deploymentjobs/availableToLink
Generate the asset report  /pm/v1/report/asset
Generate a deployment job progress report for the Windows and Linux platforms /pm/v1/report/jobprogress/{deploymentJobId}
Generate the patches report  /pm/v1/report/patch
Get a mitigation deployment job list  /mtg/v1/deploymentjobs
Get mitigation deployment job results summary  /mtg/v1/deploymentjob/{deploymentJobId}/deploymentjobresult/summary
Get mitigation deployment job action result for the given agent  /mtg/v1/deploymentjob/{deploymentjobid}/deploymentjobresult/actions

 

UI Release Updates

To know in detail about the UI features, enhancements and issues addressed, see Patch Management Release 3.9