Sample payload for BYOL

  • Release version: Zurich
  • Updated July 31, 2025
  • 4 minutes to read
  • Summarize
    Summarized using AI
    This content was generated using new OpenAI-powered functionality. Results are provided on an as is basis and are not guaranteed to be accurate or complete.

    Summary of Sample payload for BYOL

    This content explains how to construct a sample payload to populate theSoftware Installation [cmdbsamswinstall]table in ServiceNow using discovery data from the BYOL (Bring Your Own License) licensing model. It highlights the key entities and relationships required for BYOL to integrate effectively as a third-party discovery source within Software Asset Management.

    Show full answer Show less

    Key Entities and Their Required Fields

    • Cloud Service Account [cmdbcicloudserviceaccount]: Top-level entity identified by accountid.
    • AWS Datacenters [cmdbciawsdatacenter]: Requires objectid.
    • Azure Datacenters [cmdbciazuredatacenter]: Requires objectid.
    • Cloud Hosts [cmdbcicloudhost]: Needed for dedicated hosts, not shared VMs. Requires objectid, name, and platform-specific fields: cpucorecount for AWS or hosttype for Azure.
    • Virtual Machine Instances [cmdbcivminstance]: Requires objectid.
    • Computers [cmdbcicomputer]: Requires name, CPU counts (cpucount, cpucorecount, cpucorethread), and virtual set to true.
    • Software Installations [cmdbsamswinstall]: Related to Computers, includes publisher, version, displayname, cloudlicensetype (BYOL or License Included), and cloudlicensetypesource (set to thirdpartyintegration for software asset connections).

    Entity Relationships

    Entities must be related in the payload to maintain the hierarchy for BYOL:

    • Hosted on::Hosts relationship links AWS/Azure Datacenters to Cloud Service Account, Cloud Hosts, and Virtual Machine Instances.
    • Runs on::Runs relationship links Cloud Hosts to Virtual Machine Instances.
    • Virtualized by::Virtualizes relationship links Computers to Virtual Machine Instances.

    All dependent entities must be included together in the payload, even if some already exist in the instance, to ensure proper linkage.

    Example Use Case: Dedicated VM Payload

    A sample JSON payload demonstrates creating a dedicated VM on AWS:

    • Defines a Computer record with CPU details and virtual flag.
    • Includes related Software Installations for that computer.
    • Includes corresponding Virtual Machine Instance, Cloud Host, AWS Datacenter, and Cloud Service Account entities.
    • Specifies the relationships between these entities to reflect the infrastructure hierarchy.

    This structure supports sending individual REST API calls per dedicated VM, each containing all related software installations and infrastructure entities.

    Practical Implications for ServiceNow Customers

    • Properly formatted payloads enable accurate ingestion of third-party discovery data into the Software Asset Management module for BYOL licensing.
    • Maintaining entity relationships in the payload ensures data integrity and correct representation of cloud and virtual infrastructure.
    • Understanding required fields and dependencies helps avoid integration errors and supports effective license tracking.
    • The example payload can be used as a template for integrating AWS or Azure environments with ServiceNow’s BYOL software asset connection.

    A sample payload that populates the Software Installation [cmdb_sam_sw_install] table in the ServiceNow instance with discovery data collected by the BYOL licensing model.

    Certain entities need to be populated for BYOL to work with software asset connection as a third party discovery source. The relationship between these entities is crucial for BYOL to work smoothly with software asset connections. For example, some values required for populating Cloud Hosts is different for AWS and Azure. Though the object ID and the name of the host is required for both AWS and Azure, for AWS, the CPU core count is required and for Azure, the host type value is required. For details on entities and their relationships, refer to Entities for BYOL and Relationships between the entities for BYOL.

    In this example, Cloud Service Account is the topmost entity. All the other entities listed in the Entities for BYOL table are dependent entities of Cloud Service Account. If an entity is marked as a dependent entity, then the parent entity and the relationship between that entity and it's parent needs to be mentioned in the same payload. For example, if you want to create an AWS data center on Cloud Service Account, you need to include the Cloud Service Account entity in the same payload; even if Cloud Service Account already exists in your instance. Similarly, when you create software installations, you need to include all the dependent entities for software installations all through the hierarchy in the same payload.

    Entities for BYOL

    Entities Required fields
    Cloud Service Account [cmdb_ci_cloud_service_account] account_id – Unique identifier
    AWS Datacenters [cmdb_ci_aws_datacenter] object_id – Unique identifier
    Azure Datacenters [cmdb_ci_azure_datacenter] object_id – Unique identifier
    Cloud Hosts [cmdb_ci_cloud_host]
    Note:
    Not needed for shared VMs.
    • object_id – Unique identifier
    • name - name of the host
    • host_type - host type for Azure. For example, DSv3-Type1 (for Azure hosts only).
    • cpu_core-count - Total CPU core count of the host (for AWS hosts only).
    Virtual Machine Instances [cmdb_ci_vm_instance] object_id – Unique identifier
    Computers [cmdb_ci_computer]
    • name - name of the virtual machine
    • cpu_count - CPU count of the virtual machine
    • cpu_core_count - CPU core count of the virtual machine
    • cpu_core_thread - CPU core thread count of the virtual machine
    • virtual – indicates if the computer is a VM (always set to true)

    Software Installations [cmdb_sam_sw_install]

    Note:
    Software Installations [cmdb_sam_sw_install] is a related entry for Computers [cmdb_ci_computer]
    • publisher
    • version
    • display_name
    • cloud_license_type - license type of the cloud install (BYOL or License Included)
    • cloud_license_type_source - source from where cloud license type gets populated. The value is set to third_party_integration for Software asset connections.

    Relationships between the entities for BYOL

    Entity relationships Type Parent Child
    AWS/Azure Datacenters – Cloud Service Account Hosted on::Hosts AWS/Azure Datacenters Cloud Service Account
    AWS/Azure Datacenters – Cloud Hosts Hosted on::Hosts Cloud Hosts AWS/Azure Datacenters
    AWS/Azure Datacenters – Virtual Machine Instances Hosted on::Hosts Virtual Machine Instances AWS/Azure Datacenters
    Cloud Hosts - Virtual Machine Instances Runs on::Runs Virtual Machine Instances Cloud Hosts
    Computers - Virtual Machine Instances Virtualized by::Virtualizes Computers Virtual Machine Instances

    Sample payload for Computer and Installations for dedicated VM (similar for AWS and Azure)

    In this sample payload, a dedicated computer record is being passed. This computer record has a related array that contains all the software installations. A VM instance corresponds to the computer record. Cloud host is the dedicated host on which the virtual machine resides and the AWS datacenter is to be created on the Cloud Service Account. If you have multiple dedicated virtual machines, you can send one REST API for each dedicated virtual machine. For example, if you have 50 dedicated VMs, you need to send 50 REST API calls each having the same payload. All the software installations on a dedicated VM can be sent in a single payload in the related array.

    var payload = { 
    
      'items': [{ 
    
        'className': 'cmdb_ci_computer', 
    
        'values': { 
    
          'name': 'Comp - Dedicated AWS - 1', 
    
          'cpu_count': 1, 
    
          'cpu_core_count': 4, 
    
          'cpu_core_thread': 1, 
    
          'virtual': true 
    
        }, 
    
        'related': [{ 
    
          'className': 'cmdb_sam_sw_install', 
    
          'values': { 
    
            'publisher': 'Microsoft', 
    
            'display_name': 'SQL Server', 
    
            'version': '2017', 
    
            'cloud_license_type': 'BYOL', 
    
            'cloud_license_type_source': 'third_party_integration' 
    
          } 
    
        }] 
    
      }, { 
    
        'className': 'cmdb_ci_vm_instance', 
    
        'values': { 
    
          'object_id': 'sample_object_id_aws_vm_dedicated', 
    
          'name': 'VM Dedicated AWS - 1', 
    
        } 
    
      }, { 
    
        'className': 'cmdb_ci_cloud_host', 
    
        'values': { 
    
          'object_id': 'sample_object_id_aws_host', 
    
          'name': 'AWS Dedicated Host - 1', 
    
          'cpu_core_count': 32 
    
        } 
    
      }, { 
    
        'className': 'cmdb_ci_aws_datacenter', 
    
        'values': { 
    
          'object_id': 'sample_object_id_aws_dc', 
    
          'name': 'AWS DataCenter - 1' 
    
        } 
    
      }, { 
    
        'className': 'cmdb_ci_cloud_service_account', 
    
        'values': { 
    
          'account_id': 'sample_account_id_aws_service_account', 
    
          'name': 'Cloud Service Account AWS - 1' 
    
        } 
    
      }], 
    
      'relations': [{ 
    
          'type': 'Virtualized by::Virtualizes', 
    
          'parent': 0, 
    
          'child': 1 
    
        }, { 
    
          'type': 'Runs on::Runs', 
    
          'parent': 1, 
    
          'child': 2 
    
        }, 
    
        { 
    
          'type': 'Hosted on::Hosts', 
    
          'parent': 2, 
    
          'child': 3 
    
        }, { 
    
          'type': 'Hosted on::Hosts', 
    
          'parent': 3, 
    
          'child': 4 
    
        } 
    
      ] 
    
    } 
    
     
     var jsonUntil = new JSON(); 
    
    var input = jsonUntil.encode(payload); 
    
    gs.info("Input: " + input.toString()); 
    
    var options = { 
    
      "partial_payloads": false, 
    
      "deduplicate_payloads": true 
    
    }; 
    
    var output = SNC.IdentificationEngineScriptableApi.createOrUpdateCIEnhanced('ServiceNow', input, options); 
    
    gs.print("Output:" + output);