# Asset Object

Assets are stored at the client level, and only the single doc\_type value of "client\_asset" exists in the database. An asset can exist as a standalone file added for a client through the Clients module or associated with a report finding referred to as an affected asset. &#x20;

An affected asset refers to a client\_asset object with extra properties stored on the finding object. Although it doesn't have its own type or location in the database, it can still be considered a real object since it is technically distinct and exists within the finding object.

## Asset Table

The following table explains the fields and data types stored for an asset. Fields are presented in alphabetical order by object field name.

{% hint style="info" %}
The only required field when creating an asset is the asset name.
{% endhint %}

<table><thead><tr><th width="205">object field name</th><th width="217">description</th><th>data type</th></tr></thead><tbody><tr><td>asset</td><td>name of asset</td><td>string</td></tr><tr><td>assetCriticality</td><td>value capturing the asset criticality that must be one of five provided values</td><td>string: "Critical", "High", "Medium", "Low", "Information"</td></tr><tr><td>assignedTo</td><td>email of user vulnerability is assigned to</td><td>string</td></tr><tr><td>child_assets</td><td>assets identified as belonging to this asset</td><td><p>dict {asset str: UUID or CUID of asset, dict {ASSET Object}</p><pre><code>"child_assets": {
  "[ASSET id]": {ASSET Object}
}
</code></pre></td></tr><tr><td>client_id</td><td>client that the asset belongs to</td><td>integer</td></tr><tr><td>closedAt</td><td>time vulnerability was closed</td><td>integer of epoch milliseconds <code>1662588579026</code></td></tr><tr><td>created</td><td>when asset was created</td><td>null |  ISO 8601 format <code>2024-08-16T15:24:19.000Z</code></td></tr><tr><td>createdAt</td><td>when asset was created </td><td>integer of epoch milliseconds <code>1662588579026</code></td></tr><tr><td>data_owner</td><td>name of owner</td><td>string</td></tr><tr><td>description</td><td>description of asset</td><td>string</td></tr><tr><td>dns_name</td><td>name of dns</td><td>string</td></tr><tr><td>doc_type</td><td>field in database to identify object</td><td>string</td></tr><tr><td>evidence</td><td>evidence ID of vulnerability</td><td>string array of Evidence UUIDs</td></tr><tr><td>findings</td><td>list of findings that the asset is associated with and is autogenerated to record the relationship between the finding and asset</td><td>dict {int: id of finding: dict {VULNERABILITY Object}</td></tr><tr><td>host_fqdn</td><td>fully qualified domain name of host</td><td>string</td></tr><tr><td>host_rdns</td><td>reverse Domain Name System of host</td><td>string</td></tr><tr><td>hostname</td><td>hostname</td><td>string</td></tr><tr><td>instances</td><td>instances of <code>findings</code>. since report findings with the same title on different reports have the same <code>flaw_id</code>, this sub dict on a finding is the instances where that finding is found on different reports. autogenerated to record the relationship between the finding and asset</td><td>string: report id value: "report_id": int, "report_severity": str: ["Critical", "High", "Medium", "Low", "Information"], "report_status": str: ["Open", "In Process", "Closed"], "report_flaw_title": str, "createdAt": int: epoch milliseconds, "updatedAt": int: epoch milliseconds </td></tr><tr><td>id</td><td>legacy asset unique identifier. if this value is a CUID it will match the <code>cuid</code> field</td><td>string: UUID or CUID</td></tr><tr><td>knownIps</td><td>list of associated IPs</td><td>string array (has IP format validation)</td></tr><tr><td>locationUrl</td><td>url of related vulnerability </td><td>string</td></tr><tr><td>mac_address</td><td>media access control address unique identifier</td><td>string</td></tr><tr><td>netbios_name</td><td>16-byte name for a networking service or function on a machine running Microsoft Windows Server</td><td>string</td></tr><tr><td>notes</td><td>any added notes to asset</td><td>string array</td></tr><tr><td>operating_system</td><td>operating system related to asset</td><td>string array</td></tr><tr><td>parent_asset</td><td>reference data of parent asset</td><td><pre><code>"parent_asset" : {
	"id" : str ASSET id,
	"asset" : str ASSET asset
}
</code></pre></td></tr><tr><td>pci_status</td><td>PCI compliance status</td><td>string: "pass" or "fail"</td></tr><tr><td>physical_location</td><td>physical location of asset</td><td>string</td></tr><tr><td>ports</td><td>known ports</td><td><pre><code>"ports": {
  "[number]_[service]_[protocol]_[version]": {
    "number": str,
    "service": str,
    "protocol": str,
    "version": str
  }
}
</code></pre></td></tr><tr><td>reopenedAt</td><td>when vulnerability was reopened</td><td>integer | null</td></tr><tr><td>report_id</td><td>ID of report that vulnerability is associated with</td><td>integer</td></tr><tr><td>severity</td><td>severity of vulnerability that must be one of five provided values</td><td>string: "Critical", "High", "Medium", "Low", "Information"</td></tr><tr><td>status</td><td>status of vulnerability</td><td>string: "Open", "In Process", "Closed"</td></tr><tr><td>subStatus</td><td>substatus of vulnerability</td><td>string</td></tr><tr><td>system_owner</td><td>owner of system</td><td>string</td></tr><tr><td>tags</td><td>any tags associated with an asset</td><td>string array</td></tr><tr><td>title</td><td>title of vulnerability</td><td>string</td></tr><tr><td>total_cves</td><td>total CVEs score</td><td>integer</td></tr><tr><td>type</td><td>asset type that must be a specific value</td><td>string: "Server", "Workstation", "Network Device", "Application", "General"</td></tr><tr><td>updatedAt</td><td>date and time when asset was updated </td><td>integer in epoch milliseconds</td></tr><tr><td>vulnerableParameters</td><td>parameters of vulnerability</td><td>list {"id": str, "text": str}</td></tr></tbody></table>

## Client Asset Structure

Client assets are lower-level objects containing information about an asset or application. They contain some information about associated report findings in the `findings` field.

Client assets contain the data related to the specific physical machine or web application represented and relational information about which findings they are affected by.

Every client asset object has the `findings` field. For each finding affecting the client asset, an object in that field's list contains information about the finding in a specific report and additional metadata showing how the client asset relates to the finding.

Objects stored in `findings` contain additional relational metadata for vulnerability objects.

```
{
    "asset": str,
    "assetCriticality": str,
    "child_assets": Dict{str, {ASSET Object}},
    "client_id": int,
    "created": str,
    "createdAt": int,
    "data_owner": str,
    "dns_name": str,
    "doc_type": "client_asset",
    "fields" : {
		    "[key field value]" : {
		      	"cuid" : str,
		      	"key" : str,
		      	"label" : str,
		      	"value" : str,
		      	"sortOrder" : int
	    	}
  	},
    "findings": Dict{int, {VULNERABILITY Object}},
    "host_fqdn": str,
    "host_rdns": str,
    "hostname": str,
    "id": str,
    "knownIps": Array[str],
    "mac_address": str,
    "operating_system": Array[str],
    "parent_asset": {
        "id" : str,
		    "asset" : str
		},
    "pci_status": str,
    "physical_location": str,
    "ports": {
        "[number]_[service]_[protocol]_[version]": {
            "number": str,
            "service": str,
            "protocol": str,
            "version": str
        }
    },
    "system_owner": str,
    "tags": Array[str],
    "total_cves": int,
    "type": str,
    "updatedAt": int || null
}
```

## Child Asset Structure

The child asset is the same as another separate client asset.

```
"child_assets": {
  "[id field value]": {
    "asset": str,
    "client_id" : int,
    "id": str,
    "cuid": str,
    ...
    rest of client asset fields
}
```

## Affected Asset Structure

Affected assets are not objects with their own database type but a value stored in the `affected_assets` field of a finding object. It contains information about a client asset being affected and relational metadata about the finding and client asset.

An affected asset object on a finding will have an additional subset of fields compared to the client asset with the same ID. Some additional fields exist that only make sense when the finding and client asset are viewed together, such as the date the finding started affecting the client asset, the affected ports, location access to vulnerability, vulnerable parameters, and evidence of the affection.

<table data-header-hidden><thead><tr><th>object field name</th><th>description</th><th>data type</th></tr></thead><tbody><tr><td>status</td><td>status of affected asset</td><td>str</td></tr><tr><td>subStatus</td><td>substatus of affected asset</td><td>str</td></tr><tr><td>substatusCuid</td><td>CUID of substatus</td><td>str: CUID</td></tr><tr><td>evidence</td><td>​</td><td>​</td></tr><tr><td>locationUrl</td><td>location URL of affectde asset</td><td>str</td></tr><tr><td>vulnerableParameters</td><td>URL query parameters from <code>locationUrl</code></td><td>str array</td></tr><tr><td>notes</td><td>notes of affected asset. not the same as the Array[str] on the <code>notes</code> field on a client asset</td><td>str</td></tr><tr><td>ports</td><td>affected ports on the affected asset. a subset of port associated with the affected asset, not necessarily the entire list of port on the client asset</td><td><pre><code>"ports": {
  "[number]_[service]_[protocol]_[version]": {
    "number": str,
    "service": str,
    "protocol": str,
    "version": str
  }
}
</code></pre></td></tr></tbody></table>

```
{
    "asset": str,
    "client_id": int,
    "id": str,
    "cuid": str,
    ...
    rest of client asset fields
    ...
    // affected fields
    "status": str,
    "subStatus": str,
    "substatusCuid": str CUID,
    "closedAt": null | str datestamp,
    "reopenedAt": null | str datestamp,
    "evidence": Array[str CUID of EVIDENCE Objects],
    "locationUrl": str,
    "vulnerableParameters": Array[
        {
            "id": str CUID,
            "text": str
        }
    ],
    "notes": str,
    "ports": {
        "[number]_[service]_[protocol]_[version]": {
            "number": str,
            "service": str,
            "protocol": str,
            "version": str
        }
    },
}
```


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.plextrac.com/plextrac-documentation/api-documentation/object-structures/asset-object.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
