PCI Compliance Release 1.7 API

March 24, 2026

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 these API Release Notes, <qualys_base_url> is mentioned in the sample API requests.

New APIs for Scheduling PCI Scans

We have introduced the following new API endpoints to create and manage PCI scan schedules. With these new APIs you can:

  • Schedule one-time PCI scan
  • Schedule recurring PCI scans
  • Configure PCI scan schedule parameters
  • Generate PCI scan Schedule ID for tracking

New API: Create PCI Scan Schedule API

New or Update API New
API Endpoint /pci/scan/schedule
Method POST
DTD or XSD Changes NA

Use this API to create a one-time or recurring PCI scan schedule. Creating scan schedule ensure the automatic scan execution at predefined time. Using the recurring PCI scans can help execute periodic PCI scans.

Input ParameterInput Parameter

The following are the input parameters to create PCI scan schedule.

Input Parameter Mandatory/Optional Data Type Description
title Mandatory String Use this parameter to specify the name for PCI scan schedule. The title lenght should be between 1 to 50 characters.
scanType Mandatory String Specify the asset type for scans.
Valid values: IP|DNS
badnwidth Optional String Specify the scan bandwidth/scan speed.
Valid values: Low, Medium, High, Medium - low HTTP impact, Lowest
targetAll Optional Boolean Set this parameter to true to scan all assets for a merchant account.
Valid values: true|false
Default value: false
targetIps Optional
(Conditional)
String Enter a comma-separated list of target IPs. This parameter is mandatory if the scanType=IP AND targetAll=false.
targetDns Optional
(Conditional)
String Enter a comma-separated list of target DNS. This parameter is mandatory if the scanType=DNS AND targetAll=false.
splitTarget Optional Boolean Set this parameter to true to scan each DNS host individually. 
Valid values: true|false
Default value: false
launchDate Mandatory String Use this parameter to specify the future date for scan execution. The future date must be within one year from current date. This parameter also supports local time without a timezone.
Time format: yyyy-mm-ddThh:mm:ssZ
gmtShift Mandatory Integert Select the timezone by specifying the offset from the GMT timezone. This parameter is used to convert local time to UTC when no timezone is specified.
Valid range: -12 to +12
recurrance Optional
Object Use this object to schedule a recurring scan. This object uses the following parameters:
pattern (String)- Defines the scan frequency in days or weeks.
interval (Integer)- Defines the scan interval in specified scan pattern.
Valid values for days: 1-31
Valid values for weeks: 1-13
You must specify both the parameters to schedule a recurring scan.
scanWindow Optional Object Use this parameter to resume or pause the scan. This object uses the following parameter:
pauseAfterHours (Integer) - Define time interval in hours to pause the scan. Range: 1-24.
resumeInDays (Integer) - Specify the time in days to resume the scan. Range: 1-9. Must be greater than pauseAfterHours + 1 days.

 

Sample: Create One-time PCI Scan ScheduleSample: Create One-time PCI Scan Schedule

The following sample demonstrate using Update PCI Scan API to updated the scan schedules.

API Request


POST /pci/scan/schedule HTTP/1.1
Host: api.example.com
Authorization: Bearer <toke_value>
Content-Type: application/json

API Request Body


{
  "title": "Monthly PCI IP Scan",
  "scanType": "IP",
  "bandwidth": "Medium",
  "targetAll": "true",
  "launchDate": "2026-03-15T02:00:00Z",
  "gmtShift": -5
}

API Response


 {
  "responseApiVersion": "v1",
  "data": {
    "scheduleId": 10234,
    "title": "Monthly PCI IP Scan",
    "launchDate": "2026-03-15T02:00:00Z",
    "status": "waiting",
    "isRecurring": false
  }
}

New API: Update PCI Scan Schedule API

New or Update API New
API Endpoint /pci/scan/schedule/{sched_scan_id}/update
Method PUT
DTD or XSD Changes NA

Use this API to update the PCI scan schedules. This helps you adjust the scan schedule to best suit the system availability and prevent any disruptions to normal operations of critical assets.

Input ParameterInput Parameter

The following are the input parameters for update PCI Scan Schedule API.

Input Parameter Mandatory/Optional Data Type Description
title Mandatory String Use this parameter to specify the name for PCI scan schedule. The title lenght should be between 1 to 50 characters.
scanType Mandatory String Specify the asset type for scans.
Valid values: IP|DNS
badnwidth Optional String Specify the scan bandwidth/scan speed.
Valid values: Low, Medium, High, Medium - low HTTP impact, Lowest
targetAll Optional Boolean Set this parameter to true to scan all assets for a merchant account.
Valid values: true|false
Default value: false
targetIps Optional
(Conditional)
String Enter a comma-separated list of target IPs. This parameter is mandatory if the scanType=IP AND targetAll=false.
targetDns Optional
(Conditional)
String Enter a comma-separated list of target DNS. This parameter is mandatory if the scanType=DNS AND targetAll=false.
splitTarget Optional Boolean Set this parameter to true to scan each DNS host individually. 
Valid values: true|false
Default value: false
launchDate Mandatory String Use this parameter to specify the future date for scan execution. The future date must be within one year from current date. This parameter also supports local time without a timezone.
Time format: yyyy-mm-ddThh:mm:ssZ
gmtShift Mandatory Integert Select the timezone by specifying the offset from the GMT timezone. This parameter is used to convert local time to UTC when no timezone is specified.
Valid range: -12 to +12
recurrance Optional
Object Use this object to schedule a recurring scan. This object uses the following parameters:
pattern (String)- Defines the scan frequency in days or weeks.
interval (Integer)- Defines the scan interval in specified scan pattern.
Valid values for days: 1-31
Valid values for weeks: 1-13
You must specify both the parameters to schedule a recurring scan.
scanWindow Optional Object Use this parameter to resume or pause the scan. This object uses the following parameter:
pauseAfterHours (Integer) - Define time interval in hours to pause the scan. Range: 1-24.
resumeInDays (Integer) - Specify the time in days to resume the scan. Range: 1-9. Must be greater than pauseAfterHours + 1 days.
deactivate Optional Boolean Use this parameter to deactivate a scan schedule.
Valid value: true|false
Default value: false

Sample: Update PCI Scan Launch Date and Title ScheduleSample: Update PCI Scan Launch Date and Title Schedule

The following sample demonstrate using Update PCI Scan API to updated the scan schedules.

API Request


  curl -X PUT "https://api.example.com/pci/scan/schedule/10234/update" \
  -H "Authorization: Bearer <your-jwt-token>" \
  -H "Content-Type: application/json" \
  
    

API Request Body


 -d '{
    "title": "Updated Monthly PCI Scan",
    "launchDate": "2026-04-15T02:00:00Z"
  }'
    

API Response


{
  "responseApiVersion": "v1",
  "data": {
    "scheduleId": 10234,
    "title": "Updated Monthly PCI Scan",
    "launchDate": "2026-04-15T02:00:00Z",
    "status": "waiting",
    "isRecurring": false,
    "message": "Schedule scan 10234 has been successfully updated."
  }
}    
    

New APIs for PCI Scan Results

We have introduced the following new API endpoints to generate PCI scan result, check scan status, and download PDF reports.

  • Generate PCI Scan Results Report API
  • Check PCI Scan Result Report Generation Status API
  • Download PCI Scan Result Report API

Generate Scan Report API

New or Updated API New
API Endpoint /pci/scan/{scanId}/report
Method POST
DTD or XSD Changes Not Applicable

This API facilitates the generation of PCI scan report. You can use the PCI scan reports to validate the compliance of your assets with PCI standards.

Input ParameterInput Parameter

The following input parameters are required for generating the PCI Scan report.

Input Parameter Mandatory/Optional Data Type Description
scanId Mandatory String Provide the scan ID to retrive the report for respective PCI Scan.

Sample: Generate PCI Report using scan IDSample: Generate PCI Report using scan ID

The following sample illustrates using the Generate Scan Report API to initiate the report generation.

API Request

 
    curl.exe -i -u "mjaisinghani@pci:{password}" -X POST "<qualys_base_url>/pci/scan/14251/report" \
    -H "apiVersion: V1" \
    -H "Content-Type: application/" \
    -H "X-Requested-With: Test"
    

API Response

 
    {
       "responseApiVersion": "V1",
       "data": {
         "status": "Report generation initiated"
         }
    }
    

Check Scan Report Generation Status API

New or Updated API New
API Endpoint /pci/scan/{scanId}/report/status
Method GET
DTD or XSD Changes Not Applicable

Use this API endpoint to know the PCI scan report generation status. The following are the different report generation statuses:

Not Started: No previous scan reports are available for the specified scan ID and the report generation has not started yet.

Launched: PCI scan report generation is initiated.

In Progress: PCI scan report generation has started and not completed.

Finished: PCI scan report generation is completed and available for download in PDF format.

Input ParameterInput Parameter

The following input parameters are required to check the PCI Scan report status.

Input Parameter Mandatory/Optional Data Type Description
scanId Mandatory String Provide the scan ID to retrive the report for respective PCI Scan.

Sample: Check the scan report generation status using scan IDSample: Check the scan report generation status using scan ID

The following sample illustrates checking PCI Scan Report generation status.

API Request

 
    curl.exe -i -u "mjaisinghani@pci:{password}" -X GET "<qualys_base_url>/pci/scan/14251/report/status" \
    -H "apiVersion: V1" \
    -H "Content-Type: application/" \
    -H "X-Requested-With: Test"
    

API Response

 
    { 
       "responseApiVersion": "V1",
       "data": {
          "status": "Finished"
       }
    }
    

Download Scan Report API

New or Updated API New
API Endpoint /pci/scan/{scanId}/report/download
Method GET
DTD or XSD Changes Not Applicable

Use this API to download the PCI scan report in PDF format. If no report is available for the download, the API returns an error. When multiple scan reports are available for specified scan ID, only the latest report can be downloaded.

Input ParameterInput Parameter

The following input parameters are required for downloading the PCI Scan report.

Input Parameter Mandatory/Optional Data Type Description
scanId Mandatory String Provide the scan ID to retrive the report for respective PCI Scan.

Sample: Download PCI Scan Report using scan IDSample: Download PCI Scan Report using scan ID

The following sample illustrates downloading PCI Scan Report.

API Request

 
    curl.exe -i -u "mjaisinghani@pci:{password}" -X GET "<qualys_base_url>/pci/scan/14251/report/download" \
    -H "apiVersion: V1" \
    -H "X-Requested-With: Test" \
    --output "PCIScanReport-14251.pdf"
    

API Response

 
    HTTP/1.1 200
    Content-Disposition: attachment; filename=PCIScanReport14251-20260213.pdf
    Content-Type: application/pdf
    

Configure OIDC Authentication with API External ID

The PCI Compliance APIs support IdP-based authentication using OpenID Connect (OIDC). We have optimized this authentication process.

With this release of PCI Merchant, we are introducing a new parameter, API External ID. The API External ID is a unique identifier used for API access. Also, you can enable the OIDC authentication independently, without enabling the SAML-based authentication.

 Only the Super Admin user can enable the API External ID for a merchant or bank user, and only Point of Contact users can edit it.

To learn more about configuring OIDC authentication, refer to the Token-based Authentication using IdP.

The Prerequisites section of the Token-based Authentication using IdP mention External ID as the prerequisites. For PCI Merchant, you can provide API External ID.

Sample: Generate Authentication Token for API AccessSample: Generate Authentication Token for API Access

API Request


    curl --location '<<token generation url>>' JWT Token
    --header 'Content-Type: application/x-www-form-urlencoded' JWT Token
    --data-urlencode 'grant_type=password' JWT Token
    --data-urlencode 'username=<<Qualys_okta_sandbox_user_id>>' JWT Token
    --data-urlencode 'password=<<Qualys_okta_sandbox_password>>' \
    --data-urlencode 'client_id=<<Qualys_okta_sandbox_application_client_id>>' \
    --data-urlencode 'scope=openid profile'
    

The token generation URL may vary based on the IdP application you are using.The sample below illustrates the request and response for Okta.

API Response


    {
        "token_type": "Bearer",
        "expires_in": 3600,
        "access_token": "<JWT token value",
        "scope": "profile openid",
        "id_token": "<JWT token value>"
     }
     

Sample: Access PCI Merchant API using JWT TokenSample: Access PCI Merchant API using JWT Token

API Request

 
      curl --location --globoff '<qualys_base_url>/pci/scan/list?limit=10' \
      --header 'Content-Type: application/json' \
      --header 'X-Requested-With: test' \
      --header 'Authorization: Bearer eyJraWQiOiJnbGhramRmc2F.......OqUA_r4hhg'
      

API Response

 
    {
       "responseApiVersion": "LATEST",
       "data":
          {
              "totalCount": 1267,
              "fetchRange": "1-10",
              "scanInfoList":
              [  {
                  "scanId": 9094,
                  "title": "a",
                  "status": "Failed",
                  "date": "December 18, 2020 at 07:54 AM GMT",
                  "scanType": "DNS",
                  "compliance": "Fail"
                  },
                 {
                  "scanId": 9093,
                  "title": "a",
                  "status": "Running",
                  "date": "December 18, 2020 at 07:54 AM GMT",
                  "scanType": "DNS",
                  "compliance": "Fail"
                 },
                 {
                  "scanId": 9092,
                  "title": "a",
                  "status": "Failed",
                  "date": "December 18, 2020 at 07:50 AM GMT",
                  "scanType": "DNS",
                  "compliance": "Fail"
                 },
                 {
                  "scanId": 9091,
                  "title": "a",
                  "status": "Failed",
                  "date": "December 18, 2020 at 07:50 AM GMT",
                  "scanType": "IP",
                  "compliance": "Fail"
                 },
                 {
                  "scanId": 9090,
                  "title": "a",
                  "status": "Launch Requested",
                  "date": "December 18, 2020 at 07:44 AM GMT",
                  "scanType": "DNS",
                  "compliance": "Fail"
                 }
              ]
            }
          }