ESET Online Help

Search
Select the category
Select the topic

POST Import device batch

Relative path: /v1/devices:batchImport

Import batch of devices into device management. Imported devices cannot be managed until properly enrolled.

Size of batch is limited to 1000 devices. If this limit is exceeded, OUT_OF_RANGE (gRPC) | 400 Bad Request (HTTP) is returned.

Warning:
Only devices imported with is mobile flag == true are suitable for MDM scenarios.

The method can fail atomically with:
- PERMISSION_DENIED (gRPC) | 403 Forbidden (HTTP) if the caller does not have rights for specified group.
- INVALID_ARGUMENT (gRPC) | 400 Bad Request (HTTP) if provided device display names are not mutually unique within request.
- DEADLINE_EXCEEDED (gRPC) | 504 Gateway Timeout (HTTP) if the batch cannot be processed within time-limit of one call.

The method can fail partially. In such case, OK (gRPC) | 200 OK (HTTP) is returned and the response contains a list of errors for every device where an error occurred during enrollment.
- INVALID_ARGUMENT (gRPC) if attributes of enrolled device are not valid. Also, this error is raised for every imported device where parent group attribute is not empty and does not match the parent group from the request.
Failed devices are identified by display names from the request (they do not have other unique identifiers yet).

Errors are accompanied by an error message in plain English.

Note:
Method parameters follow semantics of BatchCreate

Request body

Display Schema instead of an Example or vice-versa

Type

Required

Example

Schema

application/json

No

{
  "devices": [
    {
      "deployedComponents": [
        {
          "displayName": "string",
          "version": {
            "id": "string",
            "major": 0,
            "minor": 0,
            "name": "string",
            "patch": 0
          },
          "id": 0,
          "name": "string"
        }
      ],
      "description": "string",
      "deviceToken": "string",
      "displayName": "string",
      "enrollmentStatus": "DEVICE_ENROLLMENT_STATUS_UNSPECIFIED",
      "functionalityProblemCount": 0,
      "functionalityStatus": "DEVICE_FUNCTIONALITY_STATUS_UNSPECIFIED",
      "hardwareProfiles": [
        {
          "bios": {
            "manufacturer": "string",
            "serialNumber": "string",
            "uuid": "string"
          },
          "hardDrives": [
            {
              "malformedData": "string",
              "serialNumber": "string"
            }
          ],
          "malformedData": "string",
          "manufacturer": "string",
          "model": "string",
          "networkAdapters": [
            {
              "caption": "string",
              "macAddress": "string",
              "malformedData": "string"
            }
          ],
          "processors": [
            {
              "architecture": "CPU_ARCHITECTURE_UNSPECIFIED",
              "caption": "string",
              "id": "string",
              "malformedData": "string",
              "manufacturer": "string"
            }
          ],
          "resettableIdentifier": "string",
          "salt": "string"
        }
      ],
      "isMobile": true,
      "isMuted": true,
      "lastSyncTime": "string",
      "managementDomain": "string",
      "operatingSystem": {
        "bitness": 0,
        "displayName": "string",
        "editionId": 0,
        "familyId": 0,
        "version": {
          "id": "string",
          "major": 0,
          "minor": 0,
          "name": "string",
          "patch": 0
        }
      },
      "originalDisplayName": "string",
      "parentGroupUuid": "string",
      "primaryLocalIpAddress": "string",
      "publicIpAddress": "string",
      "tags": [
        "string"
      ],
      "uuid": "string"
    }
  ],
  "parentGroupUuid": "string"
}
{
  "$ref": "v1ImportDeviceBatchRequest",
  "devices": [
    {
      "$ref": "v1Device",
      "description": {
        "type": "string",
        "description": "Device description."
      },
      "deployedComponents": [
        {
          "$ref": "v1PlatformComponent",
          "description": "Descriptor of platform component with version. Info: Should we track modules, they will be here.",
          "displayName": {
            "type": "string",
            "description": "Human readable name of the component. Derived from package display_name.",
            "readOnly": true
          },
          "version": {
            "$ref": "v1Version",
            "description": "Version descriptor. Both values are required to completely reconstruct version information.",
            "id": {
              "type": "string",
              "description": "[Version id] determines whether one version is more recent than another. More recent versions have higher numbers. Can be processed by machine. If human readable version_name meets certain criteria, it can be converted to version_id automatically. The cases are: A.B.C.D => VersionId = (A & 0xffff) << 48 | (B & 0xffff) << 32 | (C & 0xffff) << 16 | (D & 0xffff) A.B.C => VersionId = (A & 0xffff ) << 48 | (B & 0xffff) << 32 | (C & 0xffff) <<16 Major.Minor.Patch => VersionId = (Major & 0xffff ) << 48 | (Minor & 0xffff) << 32 | (Patch & 0xffff) <<16 Eula.VersionId = Eula.MajorVersion << 48 | Eula.MinorVersion << 32 | EulaPatch << 16 Windows.VersionId = MajorVersion << 48 | MinorVersion << 32 | ServicePackMajor << 24 | ServicePackMinor << 16 | CurrentBuildNumber WindowsPhone.VersionId = A << 48 | B << 32 | C << 12 | D openSUSE Tumbleweed.VersionId = YYYY << 48 | MM << 64 | DD < 32 | 0x0000 Amazon Linux.VersionId = YYYY << 48 | MM << 64 | 0x00000000",
              "format": "uint64"
            },
            "major": {
              "type": "integer",
              "description": "Major version if version.name adheres to semantic versioning. Empty otherwise.",
              "format": "int64"
            },
            "minor": {
              "type": "integer",
              "description": "Minor version if version.name adheres to semantic versioning. Empty otherwise.",
              "format": "int64"
            },
            "name": {
              "type": "string",
              "description": "Human readable name of the version. E.g. '10.2.3.145'"
            },
            "patch": {
              "type": "integer",
              "description": "Patch if version.name adheres to semantic versioning. Empty otherwise.",
              "format": "int64"
            }
          },
          "id": {
            "type": "integer",
            "description": "Identifier of governed resource. Can be seen as a value of item in enumerated type. It can be derived from name by some algorithm such as CRC32.",
            "format": "int64"
          },
          "name": {
            "type": "string",
            "description": "Name of the governed item. Can be seen as a name of enumeration item, with id being its numerical value. Note: Not to be confused with display_name, which is purposed for UI."
          }
        }
      ],
      "deviceToken": {
        "title": "Identity token for device",
        "type": "string",
        "readOnly": true
      },
      "displayName": {
        "title": "Name given by user to identify device",
        "type": "string"
      },
      "enrollmentStatus": {
        "$ref": "v1DeviceEnrollmentStatus",
        "type": "string",
        "description": "Devices are enrolled in a process with managed devices being fully enrolled. DEVICE_ENROLLMENT_STATUS_UNSPECIFIED: Status is unknown. DEVICE_ENROLLMENT_STATUS_PENDING: The device is not enrolled yet. This status is typical for: - placeholder devices created for the enrollment links to be generated later on - devices just imported from other device managements - rogue devices discovered in the network - DEVICE_ENROLLMENT_STATUS_FINISHED: Enrollment is finished and device can be managed. - DEVICE_ENROLLMENT_STATUS_FAILED: Enrollment process started, but failed.",
        "default": "DEVICE_ENROLLMENT_STATUS_UNSPECIFIED",
        "enum": [
          "DEVICE_ENROLLMENT_STATUS_UNSPECIFIED",
          "DEVICE_ENROLLMENT_STATUS_PENDING",
          "DEVICE_ENROLLMENT_STATUS_FINISHED",
          "DEVICE_ENROLLMENT_STATUS_FAILED"
        ]
      },
      "functionalityProblemCount": {
        "type": "integer",
        "description": "Aggregated count of functionality problems or issues on the device, regardless of their security risk.",
        "format": "int64",
        "readOnly": true
      },
      "functionalityStatus": {
        "$ref": "v1DeviceFunctionalityStatus",
        "type": "string",
        "description": "The functionality status is determined by the severity of the worst issue currently occurring on the device. DEVICE_FUNCTIONALITY_STATUS_UNSPECIFIED: fallback DEVICE_FUNCTIONALITY_STATUS_OK: The device is functioning normally, with no issues that require attention. DEVICE_FUNCTIONALITY_STATUS_ATTENTION_RECOMMENDED: There are issues that may not be critical (e.g., medium security risks), but they should be addressed to avoid potential future problems. DEVICE_FUNCTIONALITY_STATUS_ATTENTION_REQUIRED: Critical issues exist (e.g., severe security risks), and immediate action is necessary to maintain system integrity or security.",
        "default": "DEVICE_FUNCTIONALITY_STATUS_UNSPECIFIED",
        "enum": [
          "DEVICE_FUNCTIONALITY_STATUS_UNSPECIFIED",
          "DEVICE_FUNCTIONALITY_STATUS_OK",
          "DEVICE_FUNCTIONALITY_STATUS_ATTENTION_RECOMMENDED",
          "DEVICE_FUNCTIONALITY_STATUS_ATTENTION_REQUIRED"
        ]
      },
      "hardwareProfiles": [
        {
          "$ref": "v1Hardware",
          "description": "It can also be used to uniquely identify the device within pool of all devices seen by ESET. Warning: For fingerprint use-case the values must be anonymized by using [SHA-256] hash and passed as 7-bit ASCII strings (containing only hexadecimal numbers and dashes possibly). This is GDPR requirement.",
          "bios": {
            "$ref": "v1Bios",
            "description": "Information about BIOS (or UEFI in later systems).",
            "manufacturer": {
              "title": "BIOS manufacturer",
              "type": "string",
              "description": "e.g. value LENOVO obtained by calling: wmic path win32_computersystemproduct get vendor"
            },
            "serialNumber": {
              "title": "BIOS serial number",
              "type": "string",
              "description": "e.g. value MP10DQAF obtained by calling: wmic path win32_computersystemproduct get IdentifyingNumber"
            },
            "uuid": {
              "title": "UUID of BIOS",
              "type": "string",
              "description": "e.g. value 99AAEECC-2C47-12CC-F85C-A0080C7BDC23 obtained by calling: wmic path win32_computersystemproduct get uuid"
            }
          },
          "hardDrives": [
            {
              "$ref": "v1HardDrive",
              "description": "Descriptor of hard drive.",
              "malformedData": {
                "type": "string",
                "description": "List of singular attributes where reading failed or returned strange value. For more info about FiledMask usage see https://protobuf.dev/reference/protobuf/google.protobuf/#field-mask"
              },
              "serialNumber": {
                "title": "Drive serial number",
                "type": "string",
                "description": "e.g. value 0025_3865_6AE0_AF38 obtained by calling: wmic diskdrive get SerialNumber"
              }
            }
          ],
          "malformedData": {
            "type": "string",
            "description": "List of singular attributes where reading failed or returned strange value. Info: FieldMask cannot address array members, so it must be present in every nested repeated field. In case of this message: hard_drives, network_adapters and processors have their nested masks too. For more information about FieldMask usage, refer to https://developers.google.com/protocol-buffers/docs/reference/google.protobuf#fieldmask"
          },
          "manufacturer": {
            "title": "Vendor of the hardware",
            "type": "string"
          },
          "model": {
            "title": "Model identifier of the hardware",
            "type": "string"
          },
          "networkAdapters": [
            {
              "$ref": "v1NetworkAdapter",
              "description": "Descriptor of network adapter. It can also be a virtual adapter (e.g. VPN).",
              "caption": {
                "title": "Name of adapter",
                "type": "string",
                "description": "e.g. value Intel(R) Dual Band Wireless-AC 8260 obtained by calling: wmic nic get Caption"
              },
              "macAddress": {
                "title": "MAC address - can be changed manually",
                "type": "string",
                "description": "e.g. value 24:3A:21:52:41:53 obtained by calling: wmic nic get MACAddress"
              },
              "malformedData": {
                "type": "string",
                "description": "List of singular attributes where reading failed or returned strange value. For more info about FiledMask usage see https://developers.google.com/protocol-buffers/docs/reference/google.protobuf#fieldmask"
              }
            }
          ],
          "processors": [
            {
              "$ref": "v1Processor",
              "description": "Descriptor of CPU.",
              "architecture": {
                "$ref": "v1CpuArchitecture",
                "title": "Processor architecture",
                "type": "string",
                "description": "Note: Cannot be named ProcessorArchitecture because of conflict with Windows SDK, winnt.h, BUILD Version 0072. Series of macros prefixed PROCESSOR_ARCHITECTURE at line 12703 partially eclipse proto definition. Moreover UKNOWN value is of value 0xffff what makes it incompatible with proto requirement to have it 0x0000. CPU_ARCHITECTURE_UNSPECIFIED: fallback CPU_ARCHITECTURE_X86: 32-bit x86 architecture CPU_ARCHITECTURE_X64: 64-bit x86 architecture CPU_ARCHITECTURE_ARM32: 32-bit ARM architecture CPU_ARCHITECTURE_ARM64: 64-bit ARM architecture",
                "default": "CPU_ARCHITECTURE_UNSPECIFIED",
                "enum": [
                  "CPU_ARCHITECTURE_UNSPECIFIED",
                  "CPU_ARCHITECTURE_X86",
                  "CPU_ARCHITECTURE_X64",
                  "CPU_ARCHITECTURE_ARM32",
                  "CPU_ARCHITECTURE_ARM64"
                ]
              },
              "caption": {
                "title": "CPU/GPU name",
                "type": "string",
                "description": "e.g. value Intel(R) Core(TM) i5-6300U CPU @ 2.40GHz obtained by calling: wmic cpu get Name"
              },
              "id": {
                "title": "wmic cpu get ProcessorId",
                "type": "string",
                "description": "https://stackoverflow.com/questions/1101772/win32-processoris-processorid-unique-for-all-computers"
              },
              "malformedData": {
                "type": "string",
                "description": "List of singular attributes where reading failed or returned strange value. Info: FieldMask cannot address array members, so it must be present in every nested repeated field. For more info about FieldMask usage see https://developers.google.com/protocol-buffers/docs/reference/google.protobuf#fieldmask"
              },
              "manufacturer": {
                "title": "CPU/GPU vendor",
                "type": "string",
                "description": "e.g. value GenuineIntel obtained by calling: wmic cpu get manufacturer"
              }
            }
          ],
          "resettableIdentifier": {
            "type": "string",
            "description": "Resettable hardware identifier (for example might not survive factory reset). Some operating systems do not provide access to non-resettable hardware identifiers at all or they do in restricted manner. For more info see: https://developer.android.com/training/articles/user-data-ids#best-practices-android-identifiers or: https://developer.apple.com/documentation/uikit/uidevice/1620059-identifierforvendor"
          },
          "salt": {
            "title": "Salt used for unreliable hardware to make it visible among other unreliable hardware",
            "pattern": "^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$",
            "type": "string",
            "format": "byte"
          }
        }
      ],
      "isMobile": {
        "type": "boolean",
        "description": "The device is marked as mobile. Mobile device is a portable handheld computer, small enough to be carried easily, which can function without being physically connected to a network and power source."
      },
      "isMuted": {
        "type": "boolean",
        "description": "It defines whether device is Muted or not. Muted devices are purposed to not attract user's attention, even if they reach noteworthy state (e.g. they report a functionality problem). In practice that means they might get excluded from dashboards or lists. Default value: false - means device is not muted",
        "readOnly": true
      },
      "lastSyncTime": {
        "type": "string",
        "description": "When the device was synchronized for the last time. For remote management this time also means LastSeenTime, LastActiveTime, LastConnectTime etc.",
        "format": "date-time",
        "readOnly": true
      },
      "managementDomain": {
        "title": "Management domain reference (might help to resolve conflicts) - ESMC, ERA, EPC, ECA, ... use hash of master seat id here - Windows domain might go here",
        "type": "string",
        "description": "Note: Domain does not scope uniqueness of hardware identifiers. They are still globally unique. Domain helps clustering algorithm to better determine right identity by limiting the scope of possibilities. Feedback commands ([i-ecp] Report Hardware Idenity Crisis and [i-ecp] Report Hardware Identity Collision) improve detection within domain."
      },
      "operatingSystem": {
        "$ref": "v1OperatingSystem",
        "description": "Descriptor of operating system present on the device.",
        "bitness": {
          "type": "integer",
          "description": "Bitness of the operating system. e.g. - 32 - 64",
          "format": "int64"
        },
        "displayName": {
          "type": "string",
          "description": "Human readable name of the operating system. e.g. - Mac OS X 10.8 Mountain Lion - Microsoft Windows 10 Enterprise 2015 LTSB"
        },
        "editionId": {
          "type": "integer",
          "description": "Server or Desktop? That's the question. Id comes from [os_catalog]. Well known values are: 0 = unspecified (fallback) 1 = Server edition of operating system, e.g. Red Hat Enterprise Linux Server 2 = Client edition of operating system, e.g. Windows 11 3 = Mobile edition of operating system, e.g. Android or iOS 4 = Core edition without GUI, e.g. Microsoft Server Core",
          "format": "int64"
        },
        "familyId": {
          "type": "integer",
          "description": "Family of operating system from [os_catalog]. Info: Modeled after https://en.wikipedia.org/wiki/Category:Operating_system_families. Well known values are: 0 = unspecified (fallback) 1 = Windows family of operating systems 2 = Linux family of operating systems 3 = Apple family of operating systems, e.g. OS X or iOS 4 = Android family of operating systems 5 = Windows mobile family 6 = Symbian family 7 = UNIX, including FreeBSD",
          "format": "int64"
        },
        "version": {
          "$ref": "v1Version",
          "description": "Version descriptor. Both values are required to completely reconstruct version information.",
          "id": {
            "type": "string",
            "description": "[Version id] determines whether one version is more recent than another. More recent versions have higher numbers. Can be processed by machine. If human readable version_name meets certain criteria, it can be converted to version_id automatically. The cases are: A.B.C.D => VersionId = (A & 0xffff) << 48 | (B & 0xffff) << 32 | (C & 0xffff) << 16 | (D & 0xffff) A.B.C => VersionId = (A & 0xffff ) << 48 | (B & 0xffff) << 32 | (C & 0xffff) <<16 Major.Minor.Patch => VersionId = (Major & 0xffff ) << 48 | (Minor & 0xffff) << 32 | (Patch & 0xffff) <<16 Eula.VersionId = Eula.MajorVersion << 48 | Eula.MinorVersion << 32 | EulaPatch << 16 Windows.VersionId = MajorVersion << 48 | MinorVersion << 32 | ServicePackMajor << 24 | ServicePackMinor << 16 | CurrentBuildNumber WindowsPhone.VersionId = A << 48 | B << 32 | C << 12 | D openSUSE Tumbleweed.VersionId = YYYY << 48 | MM << 64 | DD < 32 | 0x0000 Amazon Linux.VersionId = YYYY << 48 | MM << 64 | 0x00000000",
            "format": "uint64"
          },
          "major": {
            "type": "integer",
            "description": "Major version if version.name adheres to semantic versioning. Empty otherwise.",
            "format": "int64"
          },
          "minor": {
            "type": "integer",
            "description": "Minor version if version.name adheres to semantic versioning. Empty otherwise.",
            "format": "int64"
          },
          "name": {
            "type": "string",
            "description": "Human readable name of the version. E.g. '10.2.3.145'"
          },
          "patch": {
            "type": "integer",
            "description": "Patch if version.name adheres to semantic versioning. Empty otherwise.",
            "format": "int64"
          }
        }
      },
      "originalDisplayName": {
        "type": "string",
        "description": "Original display name shows the name of the device as it was originally retrieved from the source (e.g. operating system). This name is likely used in device directory (e.g. Active Directory) and it is useful in support scenarios. Example: 'BTS9955454' (such a name would likely get renamed by an user to something more friendly).",
        "readOnly": true
      },
      "parentGroupUuid": {
        "type": "string",
        "description": "Reference to the parent [device group] that exclusively contains the device. type: DeviceGroup"
      },
      "primaryLocalIpAddress": {
        "type": "string",
        "description": "Primary IP address of the endpoint retrieved from all available Ethernet interfaces on the device. The process for determining this IP address differs based on the operating system in two steps: enumeration of all Ethernet interfaces and their associated IP addresses by using: - Android: NetworkInterface.getNetworkInterfaces() method from the Android API. - Apple macOS: IOServiceMatching function provided by the macOS I/O Kit framework. - Linux: getifaddrs() system call. - Microsoft Windows: GetAdaptersInfo() function from the IP Helper API. The Ethernet interfaces and their associated IP addresses are ordered based on the operating system's internal logic. selection of the primary local IP address from the list of Ethernet interfaces: - among all Ethernet interfaces, IPv4 addresses are prioritized. The first IPv4 address encountered across all Ethernet interfaces is selected as the primary_local_ip_address. - if no Ethernet interface has an IPv4 address, the first available IPv6 address from the list is selected instead. Info: For Apple iOS the primary_local_ip_address is not available. This attribute serves as the primary local IP address that represents the endpoint within its local network."
      },
      "publicIpAddress": {
        "type": "string",
        "description": "The public_ip_address represents the public-facing IP address of the endpoint, as resolved and identified by the server communicating with the endpoint. This address reflects the endpoint's presence on the wider internet and is often the IP address assigned by the network's NAT (Network Address Translation) or gateway device. This attribute is used to uniquely identify the endpoint from the perspective of external servers or services, providing the public IP address that is visible outside the local network."
      },
      "tags": [
        {
          "type": "string"
        }
      ],
      "uuid": {
        "type": "string",
        "description": "Unique identifier of the entity. Must be collision free - two identifiers created anywhere in the world must not collide within entity parent scope. Unless a member of aggregate, the entity scope is always global. Although most of the times compliant with RFC 4122: A Universally Unique IDentifier (UUID) URN Namespace, do not rely on it being a RFC UUID. Treat it as an opaque identifier. RFC UUID can be recognized by being formatted according to template xxxxxxxx-xxxx-Mxxx-Nxxx-xxxxxxxxxxxx, as explained on wikipedia. UUID is used for referencing an entity, even across domains. Example: '123e4567-e89b-12d3-a456-426614174000'"
      }
    }
  ],
  "parentGroupUuid": {
    "type": "string",
    "description": "Reference to the parent [device group] that will exclusively contain the imported devices. This parent group will be set to every imported device. If the parent group is set, the parent group attributes of imported devices must be either empty or match this field. type: DeviceGroup"
  }
}


Responses

Display Schema instead of an Example or vice-versa

Code

Description

Example

Schema

200

Successful response.

{
  "devices": [
    {
      "deployedComponents": [
        {
          "displayName": "string",
          "version": {
            "id": "string",
            "major": 0,
            "minor": 0,
            "name": "string",
            "patch": 0
          },
          "id": 0,
          "name": "string"
        }
      ],
      "description": "string",
      "deviceToken": "string",
      "displayName": "string",
      "enrollmentStatus": "DEVICE_ENROLLMENT_STATUS_UNSPECIFIED",
      "functionalityProblemCount": 0,
      "functionalityStatus": "DEVICE_FUNCTIONALITY_STATUS_UNSPECIFIED",
      "hardwareProfiles": [
        {
          "bios": {
            "manufacturer": "string",
            "serialNumber": "string",
            "uuid": "string"
          },
          "hardDrives": [
            {
              "malformedData": "string",
              "serialNumber": "string"
            }
          ],
          "malformedData": "string",
          "manufacturer": "string",
          "model": "string",
          "networkAdapters": [
            {
              "caption": "string",
              "macAddress": "string",
              "malformedData": "string"
            }
          ],
          "processors": [
            {
              "architecture": "CPU_ARCHITECTURE_UNSPECIFIED",
              "caption": "string",
              "id": "string",
              "malformedData": "string",
              "manufacturer": "string"
            }
          ],
          "resettableIdentifier": "string",
          "salt": "string"
        }
      ],
      "isMobile": true,
      "isMuted": true,
      "lastSyncTime": "string",
      "managementDomain": "string",
      "operatingSystem": {
        "bitness": 0,
        "displayName": "string",
        "editionId": 0,
        "familyId": 0,
        "version": {
          "id": "string",
          "major": 0,
          "minor": 0,
          "name": "string",
          "patch": 0
        }
      },
      "originalDisplayName": "string",
      "parentGroupUuid": "string",
      "primaryLocalIpAddress": "string",
      "publicIpAddress": "string",
      "tags": [
        "string"
      ],
      "uuid": "string"
    }
  ],
  "errors": {}
}
{
  "$ref": "v1ImportDeviceBatchResponse",
  "devices": [
    {
      "$ref": "v1Device",
      "description": {
        "type": "string",
        "description": "Device description."
      },
      "deployedComponents": [
        {
          "$ref": "v1PlatformComponent",
          "description": "Descriptor of platform component with version. Info: Should we track modules, they will be here.",
          "displayName": {
            "type": "string",
            "description": "Human readable name of the component. Derived from package display_name.",
            "readOnly": true
          },
          "version": {
            "$ref": "v1Version",
            "description": "Version descriptor. Both values are required to completely reconstruct version information.",
            "id": {
              "type": "string",
              "description": "[Version id] determines whether one version is more recent than another. More recent versions have higher numbers. Can be processed by machine. If human readable version_name meets certain criteria, it can be converted to version_id automatically. The cases are: A.B.C.D => VersionId = (A & 0xffff) << 48 | (B & 0xffff) << 32 | (C & 0xffff) << 16 | (D & 0xffff) A.B.C => VersionId = (A & 0xffff ) << 48 | (B & 0xffff) << 32 | (C & 0xffff) <<16 Major.Minor.Patch => VersionId = (Major & 0xffff ) << 48 | (Minor & 0xffff) << 32 | (Patch & 0xffff) <<16 Eula.VersionId = Eula.MajorVersion << 48 | Eula.MinorVersion << 32 | EulaPatch << 16 Windows.VersionId = MajorVersion << 48 | MinorVersion << 32 | ServicePackMajor << 24 | ServicePackMinor << 16 | CurrentBuildNumber WindowsPhone.VersionId = A << 48 | B << 32 | C << 12 | D openSUSE Tumbleweed.VersionId = YYYY << 48 | MM << 64 | DD < 32 | 0x0000 Amazon Linux.VersionId = YYYY << 48 | MM << 64 | 0x00000000",
              "format": "uint64"
            },
            "major": {
              "type": "integer",
              "description": "Major version if version.name adheres to semantic versioning. Empty otherwise.",
              "format": "int64"
            },
            "minor": {
              "type": "integer",
              "description": "Minor version if version.name adheres to semantic versioning. Empty otherwise.",
              "format": "int64"
            },
            "name": {
              "type": "string",
              "description": "Human readable name of the version. E.g. '10.2.3.145'"
            },
            "patch": {
              "type": "integer",
              "description": "Patch if version.name adheres to semantic versioning. Empty otherwise.",
              "format": "int64"
            }
          },
          "id": {
            "type": "integer",
            "description": "Identifier of governed resource. Can be seen as a value of item in enumerated type. It can be derived from name by some algorithm such as CRC32.",
            "format": "int64"
          },
          "name": {
            "type": "string",
            "description": "Name of the governed item. Can be seen as a name of enumeration item, with id being its numerical value. Note: Not to be confused with display_name, which is purposed for UI."
          }
        }
      ],
      "deviceToken": {
        "title": "Identity token for device",
        "type": "string",
        "readOnly": true
      },
      "displayName": {
        "title": "Name given by user to identify device",
        "type": "string"
      },
      "enrollmentStatus": {
        "$ref": "v1DeviceEnrollmentStatus",
        "type": "string",
        "description": "Devices are enrolled in a process with managed devices being fully enrolled. DEVICE_ENROLLMENT_STATUS_UNSPECIFIED: Status is unknown. DEVICE_ENROLLMENT_STATUS_PENDING: The device is not enrolled yet. This status is typical for: - placeholder devices created for the enrollment links to be generated later on - devices just imported from other device managements - rogue devices discovered in the network - DEVICE_ENROLLMENT_STATUS_FINISHED: Enrollment is finished and device can be managed. - DEVICE_ENROLLMENT_STATUS_FAILED: Enrollment process started, but failed.",
        "default": "DEVICE_ENROLLMENT_STATUS_UNSPECIFIED",
        "enum": [
          "DEVICE_ENROLLMENT_STATUS_UNSPECIFIED",
          "DEVICE_ENROLLMENT_STATUS_PENDING",
          "DEVICE_ENROLLMENT_STATUS_FINISHED",
          "DEVICE_ENROLLMENT_STATUS_FAILED"
        ]
      },
      "functionalityProblemCount": {
        "type": "integer",
        "description": "Aggregated count of functionality problems or issues on the device, regardless of their security risk.",
        "format": "int64",
        "readOnly": true
      },
      "functionalityStatus": {
        "$ref": "v1DeviceFunctionalityStatus",
        "type": "string",
        "description": "The functionality status is determined by the severity of the worst issue currently occurring on the device. DEVICE_FUNCTIONALITY_STATUS_UNSPECIFIED: fallback DEVICE_FUNCTIONALITY_STATUS_OK: The device is functioning normally, with no issues that require attention. DEVICE_FUNCTIONALITY_STATUS_ATTENTION_RECOMMENDED: There are issues that may not be critical (e.g., medium security risks), but they should be addressed to avoid potential future problems. DEVICE_FUNCTIONALITY_STATUS_ATTENTION_REQUIRED: Critical issues exist (e.g., severe security risks), and immediate action is necessary to maintain system integrity or security.",
        "default": "DEVICE_FUNCTIONALITY_STATUS_UNSPECIFIED",
        "enum": [
          "DEVICE_FUNCTIONALITY_STATUS_UNSPECIFIED",
          "DEVICE_FUNCTIONALITY_STATUS_OK",
          "DEVICE_FUNCTIONALITY_STATUS_ATTENTION_RECOMMENDED",
          "DEVICE_FUNCTIONALITY_STATUS_ATTENTION_REQUIRED"
        ]
      },
      "hardwareProfiles": [
        {
          "$ref": "v1Hardware",
          "description": "It can also be used to uniquely identify the device within pool of all devices seen by ESET. Warning: For fingerprint use-case the values must be anonymized by using [SHA-256] hash and passed as 7-bit ASCII strings (containing only hexadecimal numbers and dashes possibly). This is GDPR requirement.",
          "bios": {
            "$ref": "v1Bios",
            "description": "Information about BIOS (or UEFI in later systems).",
            "manufacturer": {
              "title": "BIOS manufacturer",
              "type": "string",
              "description": "e.g. value LENOVO obtained by calling: wmic path win32_computersystemproduct get vendor"
            },
            "serialNumber": {
              "title": "BIOS serial number",
              "type": "string",
              "description": "e.g. value MP10DQAF obtained by calling: wmic path win32_computersystemproduct get IdentifyingNumber"
            },
            "uuid": {
              "title": "UUID of BIOS",
              "type": "string",
              "description": "e.g. value 99AAEECC-2C47-12CC-F85C-A0080C7BDC23 obtained by calling: wmic path win32_computersystemproduct get uuid"
            }
          },
          "hardDrives": [
            {
              "$ref": "v1HardDrive",
              "description": "Descriptor of hard drive.",
              "malformedData": {
                "type": "string",
                "description": "List of singular attributes where reading failed or returned strange value. For more info about FiledMask usage see https://protobuf.dev/reference/protobuf/google.protobuf/#field-mask"
              },
              "serialNumber": {
                "title": "Drive serial number",
                "type": "string",
                "description": "e.g. value 0025_3865_6AE0_AF38 obtained by calling: wmic diskdrive get SerialNumber"
              }
            }
          ],
          "malformedData": {
            "type": "string",
            "description": "List of singular attributes where reading failed or returned strange value. Info: FieldMask cannot address array members, so it must be present in every nested repeated field. In case of this message: hard_drives, network_adapters and processors have their nested masks too. For more information about FieldMask usage, refer to https://developers.google.com/protocol-buffers/docs/reference/google.protobuf#fieldmask"
          },
          "manufacturer": {
            "title": "Vendor of the hardware",
            "type": "string"
          },
          "model": {
            "title": "Model identifier of the hardware",
            "type": "string"
          },
          "networkAdapters": [
            {
              "$ref": "v1NetworkAdapter",
              "description": "Descriptor of network adapter. It can also be a virtual adapter (e.g. VPN).",
              "caption": {
                "title": "Name of adapter",
                "type": "string",
                "description": "e.g. value Intel(R) Dual Band Wireless-AC 8260 obtained by calling: wmic nic get Caption"
              },
              "macAddress": {
                "title": "MAC address - can be changed manually",
                "type": "string",
                "description": "e.g. value 24:3A:21:52:41:53 obtained by calling: wmic nic get MACAddress"
              },
              "malformedData": {
                "type": "string",
                "description": "List of singular attributes where reading failed or returned strange value. For more info about FiledMask usage see https://developers.google.com/protocol-buffers/docs/reference/google.protobuf#fieldmask"
              }
            }
          ],
          "processors": [
            {
              "$ref": "v1Processor",
              "description": "Descriptor of CPU.",
              "architecture": {
                "$ref": "v1CpuArchitecture",
                "title": "Processor architecture",
                "type": "string",
                "description": "Note: Cannot be named ProcessorArchitecture because of conflict with Windows SDK, winnt.h, BUILD Version 0072. Series of macros prefixed PROCESSOR_ARCHITECTURE at line 12703 partially eclipse proto definition. Moreover UKNOWN value is of value 0xffff what makes it incompatible with proto requirement to have it 0x0000. CPU_ARCHITECTURE_UNSPECIFIED: fallback CPU_ARCHITECTURE_X86: 32-bit x86 architecture CPU_ARCHITECTURE_X64: 64-bit x86 architecture CPU_ARCHITECTURE_ARM32: 32-bit ARM architecture CPU_ARCHITECTURE_ARM64: 64-bit ARM architecture",
                "default": "CPU_ARCHITECTURE_UNSPECIFIED",
                "enum": [
                  "CPU_ARCHITECTURE_UNSPECIFIED",
                  "CPU_ARCHITECTURE_X86",
                  "CPU_ARCHITECTURE_X64",
                  "CPU_ARCHITECTURE_ARM32",
                  "CPU_ARCHITECTURE_ARM64"
                ]
              },
              "caption": {
                "title": "CPU/GPU name",
                "type": "string",
                "description": "e.g. value Intel(R) Core(TM) i5-6300U CPU @ 2.40GHz obtained by calling: wmic cpu get Name"
              },
              "id": {
                "title": "wmic cpu get ProcessorId",
                "type": "string",
                "description": "https://stackoverflow.com/questions/1101772/win32-processoris-processorid-unique-for-all-computers"
              },
              "malformedData": {
                "type": "string",
                "description": "List of singular attributes where reading failed or returned strange value. Info: FieldMask cannot address array members, so it must be present in every nested repeated field. For more info about FieldMask usage see https://developers.google.com/protocol-buffers/docs/reference/google.protobuf#fieldmask"
              },
              "manufacturer": {
                "title": "CPU/GPU vendor",
                "type": "string",
                "description": "e.g. value GenuineIntel obtained by calling: wmic cpu get manufacturer"
              }
            }
          ],
          "resettableIdentifier": {
            "type": "string",
            "description": "Resettable hardware identifier (for example might not survive factory reset). Some operating systems do not provide access to non-resettable hardware identifiers at all or they do in restricted manner. For more info see: https://developer.android.com/training/articles/user-data-ids#best-practices-android-identifiers or: https://developer.apple.com/documentation/uikit/uidevice/1620059-identifierforvendor"
          },
          "salt": {
            "title": "Salt used for unreliable hardware to make it visible among other unreliable hardware",
            "pattern": "^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$",
            "type": "string",
            "format": "byte"
          }
        }
      ],
      "isMobile": {
        "type": "boolean",
        "description": "The device is marked as mobile. Mobile device is a portable handheld computer, small enough to be carried easily, which can function without being physically connected to a network and power source."
      },
      "isMuted": {
        "type": "boolean",
        "description": "It defines whether device is Muted or not. Muted devices are purposed to not attract user's attention, even if they reach noteworthy state (e.g. they report a functionality problem). In practice that means they might get excluded from dashboards or lists. Default value: false - means device is not muted",
        "readOnly": true
      },
      "lastSyncTime": {
        "type": "string",
        "description": "When the device was synchronized for the last time. For remote management this time also means LastSeenTime, LastActiveTime, LastConnectTime etc.",
        "format": "date-time",
        "readOnly": true
      },
      "managementDomain": {
        "title": "Management domain reference (might help to resolve conflicts) - ESMC, ERA, EPC, ECA, ... use hash of master seat id here - Windows domain might go here",
        "type": "string",
        "description": "Note: Domain does not scope uniqueness of hardware identifiers. They are still globally unique. Domain helps clustering algorithm to better determine right identity by limiting the scope of possibilities. Feedback commands ([i-ecp] Report Hardware Idenity Crisis and [i-ecp] Report Hardware Identity Collision) improve detection within domain."
      },
      "operatingSystem": {
        "$ref": "v1OperatingSystem",
        "description": "Descriptor of operating system present on the device.",
        "bitness": {
          "type": "integer",
          "description": "Bitness of the operating system. e.g. - 32 - 64",
          "format": "int64"
        },
        "displayName": {
          "type": "string",
          "description": "Human readable name of the operating system. e.g. - Mac OS X 10.8 Mountain Lion - Microsoft Windows 10 Enterprise 2015 LTSB"
        },
        "editionId": {
          "type": "integer",
          "description": "Server or Desktop? That's the question. Id comes from [os_catalog]. Well known values are: 0 = unspecified (fallback) 1 = Server edition of operating system, e.g. Red Hat Enterprise Linux Server 2 = Client edition of operating system, e.g. Windows 11 3 = Mobile edition of operating system, e.g. Android or iOS 4 = Core edition without GUI, e.g. Microsoft Server Core",
          "format": "int64"
        },
        "familyId": {
          "type": "integer",
          "description": "Family of operating system from [os_catalog]. Info: Modeled after https://en.wikipedia.org/wiki/Category:Operating_system_families. Well known values are: 0 = unspecified (fallback) 1 = Windows family of operating systems 2 = Linux family of operating systems 3 = Apple family of operating systems, e.g. OS X or iOS 4 = Android family of operating systems 5 = Windows mobile family 6 = Symbian family 7 = UNIX, including FreeBSD",
          "format": "int64"
        },
        "version": {
          "$ref": "v1Version",
          "description": "Version descriptor. Both values are required to completely reconstruct version information.",
          "id": {
            "type": "string",
            "description": "[Version id] determines whether one version is more recent than another. More recent versions have higher numbers. Can be processed by machine. If human readable version_name meets certain criteria, it can be converted to version_id automatically. The cases are: A.B.C.D => VersionId = (A & 0xffff) << 48 | (B & 0xffff) << 32 | (C & 0xffff) << 16 | (D & 0xffff) A.B.C => VersionId = (A & 0xffff ) << 48 | (B & 0xffff) << 32 | (C & 0xffff) <<16 Major.Minor.Patch => VersionId = (Major & 0xffff ) << 48 | (Minor & 0xffff) << 32 | (Patch & 0xffff) <<16 Eula.VersionId = Eula.MajorVersion << 48 | Eula.MinorVersion << 32 | EulaPatch << 16 Windows.VersionId = MajorVersion << 48 | MinorVersion << 32 | ServicePackMajor << 24 | ServicePackMinor << 16 | CurrentBuildNumber WindowsPhone.VersionId = A << 48 | B << 32 | C << 12 | D openSUSE Tumbleweed.VersionId = YYYY << 48 | MM << 64 | DD < 32 | 0x0000 Amazon Linux.VersionId = YYYY << 48 | MM << 64 | 0x00000000",
            "format": "uint64"
          },
          "major": {
            "type": "integer",
            "description": "Major version if version.name adheres to semantic versioning. Empty otherwise.",
            "format": "int64"
          },
          "minor": {
            "type": "integer",
            "description": "Minor version if version.name adheres to semantic versioning. Empty otherwise.",
            "format": "int64"
          },
          "name": {
            "type": "string",
            "description": "Human readable name of the version. E.g. '10.2.3.145'"
          },
          "patch": {
            "type": "integer",
            "description": "Patch if version.name adheres to semantic versioning. Empty otherwise.",
            "format": "int64"
          }
        }
      },
      "originalDisplayName": {
        "type": "string",
        "description": "Original display name shows the name of the device as it was originally retrieved from the source (e.g. operating system). This name is likely used in device directory (e.g. Active Directory) and it is useful in support scenarios. Example: 'BTS9955454' (such a name would likely get renamed by an user to something more friendly).",
        "readOnly": true
      },
      "parentGroupUuid": {
        "type": "string",
        "description": "Reference to the parent [device group] that exclusively contains the device. type: DeviceGroup"
      },
      "primaryLocalIpAddress": {
        "type": "string",
        "description": "Primary IP address of the endpoint retrieved from all available Ethernet interfaces on the device. The process for determining this IP address differs based on the operating system in two steps: enumeration of all Ethernet interfaces and their associated IP addresses by using: - Android: NetworkInterface.getNetworkInterfaces() method from the Android API. - Apple macOS: IOServiceMatching function provided by the macOS I/O Kit framework. - Linux: getifaddrs() system call. - Microsoft Windows: GetAdaptersInfo() function from the IP Helper API. The Ethernet interfaces and their associated IP addresses are ordered based on the operating system's internal logic. selection of the primary local IP address from the list of Ethernet interfaces: - among all Ethernet interfaces, IPv4 addresses are prioritized. The first IPv4 address encountered across all Ethernet interfaces is selected as the primary_local_ip_address. - if no Ethernet interface has an IPv4 address, the first available IPv6 address from the list is selected instead. Info: For Apple iOS the primary_local_ip_address is not available. This attribute serves as the primary local IP address that represents the endpoint within its local network."
      },
      "publicIpAddress": {
        "type": "string",
        "description": "The public_ip_address represents the public-facing IP address of the endpoint, as resolved and identified by the server communicating with the endpoint. This address reflects the endpoint's presence on the wider internet and is often the IP address assigned by the network's NAT (Network Address Translation) or gateway device. This attribute is used to uniquely identify the endpoint from the perspective of external servers or services, providing the public IP address that is visible outside the local network."
      },
      "tags": [
        {
          "type": "string"
        }
      ],
      "uuid": {
        "type": "string",
        "description": "Unique identifier of the entity. Must be collision free - two identifiers created anywhere in the world must not collide within entity parent scope. Unless a member of aggregate, the entity scope is always global. Although most of the times compliant with RFC 4122: A Universally Unique IDentifier (UUID) URN Namespace, do not rely on it being a RFC UUID. Treat it as an opaque identifier. RFC UUID can be recognized by being formatted according to template xxxxxxxx-xxxx-Mxxx-Nxxx-xxxxxxxxxxxx, as explained on wikipedia. UUID is used for referencing an entity, even across domains. Example: '123e4567-e89b-12d3-a456-426614174000'"
      }
    }
  ],
  "errors": {
    "type": "object",
    "additionalProperties": {
      "$ref": "rpcStatus",
      "type": "object",
      "properties": {
        "code": {
          "type": "integer",
          "description": "The status code, which should be an enum value of [google.rpc.Code][google.rpc.Code].",
          "format": "int32"
        },
        "message": {
          "type": "string",
          "description": "A developer-facing error message, which should be in English. Any user-facing error message should be localized and sent in the [google.rpc.Status.details][google.rpc.Status.details] field, or localized by the client."
        },
        "details": {
          "type": "array",
          "description": "A list of messages that carry the error details. There is a common set of message types for APIs to use.",
          "items": {
            "$ref": "protobufAny",
            "type": "object",
            "properties": {
              "@type": {
                "type": "string",
                "description": "A URL/resource name that uniquely identifies the type of the serialized protocol buffer message. This string must contain at least one '/' character. The last segment of the URL's path must represent the fully qualified name of the type (as in path/google.protobuf.Duration). The name should be in a canonical form (e.g., leading '.' is not accepted). In practice, teams usually precompile into the binary all types that they expect it to use in the context of Any. However, for URLs which use the scheme http, https, or no scheme, one can optionally set up a type server that maps type URLs to message definitions as follows: If no scheme is provided, https is assumed. An HTTP GET on the URL must yield a [google.protobuf.Type][] value in binary format, or produce an error. Applications are allowed to cache lookup results based on the URL, or have them precompiled into a binary to avoid any lookup. Therefore, binary compatibility needs to be preserved on changes to types. (Use versioned type names to manage breaking changes.) Note: this functionality is not currently available in the official protobuf release, and it is not used for type URLs beginning with type.googleapis.com. As of May 2023, there are no widely used type server implementations and no plans to implement one. Schemes other than http, https (or the empty scheme) might be used with implementation specific semantics."
              }
            },
            "additionalProperties": {
              "type": "object"
            },
            "description": "Any contains an arbitrary serialized protocol buffer message along with a URL that describes the type of the serialized message. Protobuf library provides support to pack/unpack Any values in the form of utility functions or additional generated methods of the Any type. Example 1: Pack and unpack a message in C++. Foo foo = ...; Any any; any.PackFrom(foo); ... if (any.UnpackTo(&foo)) { ... } Example 2: Pack and unpack a message in Java. Foo foo = ...; Any any = Any.pack(foo); ... if (any.is(Foo.class)) { foo = any.unpack(Foo.class); } // or ... if (any.isSameTypeAs(Foo.getDefaultInstance())) { foo = any.unpack(Foo.getDefaultInstance()); } Example 3: Pack and unpack a message in Python. foo = Foo(...) any = Any() any.Pack(foo) ... if any.Is(Foo.DESCRIPTOR): any.Unpack(foo) ... Example 4: Pack and unpack a message in Go foo := &pb.Foo{...} any, err := anypb.New(foo) if err != nil { ... } ... foo := &pb.Foo{} if err := any.UnmarshalTo(foo); err != nil { ... } The pack methods provided by protobuf library will by default use 'type.googleapis.com/full.type.name' as the type URL and the unpack methods only use the fully qualified type name after the last '/' in the type URL, for example 'foo.bar.com/x/y.z' will yield type name 'y.z'. JSON The JSON representation of an Any value uses the regular representation of the deserialized, embedded message, with an additional field @type which contains the type URL. Example: package google.profile; message Person { string first_name = 1; string last_name = 2; } { '@type': 'type.googleapis.com/google.profile.Person', 'firstName': <string>, 'lastName': <string> } If the embedded message type is well-known and has a custom JSON representation, that representation will be embedded adding a field value which holds the custom JSON in addition to the @type field. Example (for message [google.protobuf.Duration][]): { '@type': 'type.googleapis.com/google.protobuf.Duration', 'value': '1.212s' }"
          }
        }
      },
      "description": "The Status type defines a logical error model that is suitable for different programming environments, including REST APIs and RPC APIs. It is used by gRPC. Each Status message contains three pieces of data: error code, error message, and error details. You can find out more about this error model and how to work with it in the API Design Guide."
    },
    "description": "List of errors for each device where an error occurred during enrollment. Devices are identified by the display name provided on the input. Note: In case of failure the device identity in form of globally unique identifier is not yet known. Therefore, its display name is used."
  }
}

202

Response took too long; request cached. Response can be retrieved later using the response-id header.

null
[]

400

One of the errors: 1. Bad or missing authorization. 2. Validation error. Invalid argument provided.

null
[]

401

Token has expired or is invalid.

null
[]

403

Access denied. Check permissions.

null
[]

404

Requested resource not found.

null
[]

429

Rate limit reached. Try again later.

null
[]

500

Internal server failure. Try again later.

null
[]

502

Internal server failure. Try again later.

null
[]

503

Environment under maintenance. Try again later.

null
[]

504

Action took too long; timeout reached

null
[]