XTD SIEM API Integration Guide
Overview
This section provides a guide to integrating the XTD SIEM endpoint API with your security infrastructure. It covers authentication, data ingestion, formatting requirements, use cases, and best practices to ensure smooth and secure API interaction.
The SIEM API provides a direct way to ingest XTD analytics information into a 3rd party infrastructure in a streaming fashion, getting access to all the relevant data in near real-time.

In addition, the API provides basic filtering of events to narrow the scope of the information retrieved from the API.
Ingest into 3rd Party SIEM Systems
In order to use the data retrieved from the SIEM API, you usually have to configure and/or write custom data processing modules using SIEM specific integration code. This could involve a simple HTTP retriever plugin or a custom, daemon like process to perform the pulling of the data and doing a subsequent push to the SIEM in question. This API provides the means to pull the data from the SIEM API but does not integrate directly into any SIEM vendor specific ingest system.
Data Retention
The API provides a 24 hour, rolling window view of the data available to the customer. This means, that at any given point, a request to the API has at most 24 hours of data available to it. A subsequent request will mean that the rolling window has moved, and the data at the back of that window will no longer be available.

The fact that the data is available in a rolling window manner means that any access to the data must take this into consideration. If a continuous set of data is required, the caller must ensure that data is polled at regular intervals.
API versions
2 API versions are provided:
- V2 provides regular data
- V3 provides detailed data
V2 API
Data Description
The data available in the response:
| Property | Format | Description |
|---|---|---|
| id | string | Unique identifier for the detection record. Can be used for uniqueness filtering of the record |
| riskLevel | LOW | SUSPICIOUS | HIGH | |
| spuid | See VUIT in XTD SDK | Customer assigned identifier to the application instance |
| detectedType | RootingDetected | HookingDetected | DebuggerDetected | MITMDetected | TamperingDetected | OverlayDetected | BootloaderUnlockDetected | AccessibilityMalwareDetected | EmulatorDetected | ProxyDetected | VPNDetected | SideloadingDetected | DNSConsensusInconsistencyDetected | PuddlViolationDetected | C2MalwarePreDetected | DomainWhitelistViolationDetected | BrowserUnauthorizedDomainDetected | VideoContentLeakDetected | |
| createdAt | ISO 8601 formatted date | Event creation date |
| appId | Application package id | The package/bundle of the application that raised the threat |
| aiid | UUID | Identifier identifying the application instance |
| os | ANDROID | IOS | IPADOS | TVOS | |
| model | string | Model information about the device the application is running on |
| geoip | object | Structure describing a location |
| ip | IP address | Masked IP address of remote application instance. The last octet is always 0 |
| pagination | Opaque data a pointer to a pagination cursor | Used to poll data incrementally over time. Cursor into the position last retrieved |
JSON response
{
"status": "Ok",
"pagination": {
"last": "<cursor-value>"
},
"detections": [
{
"id": "<detection id>",
"riskLevel": "HIGH",
"spuid": "SP::acme-vuit",
"detectedType": "OverlayDetected",
"createdAt": "2024-05-21T16:33:16.504Z",
"appId": "com.acme.application",
"aiid": "726F93C5-EAB8-AEF8-293B-CD8BB388A81E",
"os": "ANDROID",
"model": "pixel 6",
"geoip": {
"city": "San Diego",
"continentName": "North America",
"countryCode": "US",
"countryName": "United States",
"regionCode": "US-CA",
"lat": 32.7157,
"lng": 117.1611
},
"ip": "127.0.0.0"
}
]
}Pagination
The JSON response will contain a pagination.last property if there are more records available at the backend. To retrieve them, this value must be used in a new request as a cursor query parameter:
GET /[v2|v3]/siem/detections?cursor=<cursor-value>
Accept: application/json
...
{
// Response body
}Comma Separated Values (CSV)
id,riskLevel,detectedType,createdAt,appId,aiid,spuid,os,model,geoip,ip
<detection id>,HIGH,HookingDetected,2024-05-21T16:33:16.504Z,com.acme.application,726F93C5-EAB8-AEF8-293B-CD8BB388A81E,SP::acme-vuit,ANDROID,pixel 6,San Diego North America US United States 32.7157 117.1611" +V3 API
Data Description
Main data available in the response:
| Property | Format | Description |
|---|---|---|
| id | string | Unique identifier for the detection record. Can be used for uniqueness filtering of the record |
| riskLevel | LOW | SUSPICIOUS | HIGH | |
| spuid | See VUIT in XTD SDK | Customer assigned identifier to the application instance |
| detectedType | RootingDetected | HookingDetected | DebuggerDetected | MITMDetected | TamperingDetected | OverlayDetected | BootloaderUnlockDetected | AccessibilityMalwareDetected | EmulatorDetected | ProxyDetected | VPNDetected | SideloadingDetected | DNSConsensusInconsistencyDetected | PuddlViolationDetected | C2MalwarePreDetected | DomainWhitelistViolationDetected | BrowserUnauthorizedDomainDetected | VideoContentLeakDetected | |
| createdAt | ISO 8601 formatted date | Event creation date |
| appId | Application package id | The package/bundle of the application that raised the threat |
| aiid | UUID | Identifier identifying the application instance |
| origin | device | Event origin |
| deviceInformation | object | Optional structure describing device information. See deviceInformation |
| protectionInformation | object | Optional structure describing protection information. See protectionInformation |
| detectionDetails | object | Optional structure describing detection details. See detectionDetails |
| locationInformation | object | Structure describing location information. See locationInformation |
| references | object | Structure describing references. See references |
| pagination | Opaque data a pointer to a pagination cursor | Used to poll data incrementally over time. Cursor into the position last retrieved |
deviceInformation data available in the response:
| Property | Format | Description |
|---|---|---|
| os | ANDROID | IOS | IPADOS | TVOS | |
| osVersion | string | |
| apiLevel | number | |
| manufacturer | string | |
| architecture | string | |
| kernelVersion | string | |
| model | string | |
| devicePatchLevel | string | |
| vendorPatchLevel | string | |
| memory | number | |
| systemTimezone | string | |
| typeAllocationCode | string | |
| developerModeEnabled | boolean | |
| networkType | NONE | CELLULAR | WIFI | ETHERNET | |
| networkOperator | string | |
| operatorCountry | string |
protectionInformation data available in the response:
| Property | Format | Description |
|---|---|---|
| analyticsAgentVersion | string | |
| applicationVersion | string | |
| defenderVersion | string | |
| protectedBuildId | UUID |
detectionDetails data available in the response:
RootingDetails
| Property | Format | Description |
|---|---|---|
| indicators | [Files | DirectoryPermissions | SystemProperties | Executables | SuspiciousApplications | AddressSpaceValidation | MemoryChecks | GoogleSafetyNetChecks | SystemPropertiesReport | SystemIntegrityCheck | BootloaderIntegrityCheck | InvalidSecureBootState | Cydia | xCon | APT | Rootless | Liberty | TSProtector | Checkra1n | MiscJBSigns | Electra | Sileo | Unc0ver | ABypass] |
VPNDetails
| Property | Format | Description |
|---|---|---|
| enabled | boolean | |
| source | LOCAL | REMOTE | |
| dnsServers | string array |
MITMDetectionDetailsV2
| Property | Format | Description |
|---|---|---|
| hostname | string | |
| expectedHash | string | |
| resolvedIPs | IP address array | |
| certificateChain | string array | |
| actualHashes | string array |
DNSConsensusInconsistencyDetectionDetails
| Property | Format | Description |
|---|---|---|
| hostname | string | |
| resolverType | UNKNOWN | UDP | SYSTEM | |
| ips | IP address array | |
| trustedIps | IP address array |
PuddleReportDetails
| Property | Format | Description |
|---|---|---|
| hostname | string | |
| txtRecord | string | |
| signatureError | boolean | |
| formatError | boolean | |
| fortuneFormatError | boolean | |
| requestOutsideOfValidity | boolean | |
| noResponse | boolean | |
| timestamp | number |
CounterspyDetails
| Property | Format | Description |
|---|---|---|
| datetimeClient | ISO 8601 formatted date | |
| datetimeReveal | ISO 8601 formatted date | |
| videoTitle | string | |
| videoManifestUrl | uri |
locationInformation data available in the response:
| Property | Format | Description |
|---|---|---|
| ip | IP address | Masked IP address of remote application instance. The last octet is always 0 |
| geoip | object | Structure describing a location |
references data available in the response:
| Property | Format | Description |
|---|---|---|
| management | uri | AIID management URL |
| instance | uri | AIID instance URL |
| detections | uri | AIID detections URL |
| detection | uri | Detection URL |
JSON response
{
"status": "Ok",
"pagination": {
"last": "<cursor-value>"
},
"detections": [
{
"id": "YTk4NWQzNzItMGMxZS00MGQxLTllZGUtNjlmZWNjYTNiNWM4OjqLc7SP9qhP2akosvq3w60_CFitP-J4tRRmWMblZT6qtw",
"riskLevel": "SUSPICIOUS",
"detectedType": "RootingDetected",
"createdAt": "2026-05-07T16:55:59.103Z",
"appId": "com.verimatrix.arc.integrationtest.siem.detections",
"aiid": "a985d372-0c1e-40d1-9ede-69fecca3b5c8",
"spuid": "SP::abcde",
"origin": "device",
"protectionInformation": {
"analyticsAgentVersion": "1.0.0-ARC",
"applicationVersion": "1.0/1",
"protectedBuildId": "ece094ff-01ed-49e1-b469-786fdf39fa5c"
},
"deviceInformation": {
"os": "ANDROID",
"osVersion": "11",
"model": "aosp on flame",
"manufacturer": "google",
"architecture": "arm64-v8a",
"kernelVersion": "4.14.212",
"apiLevel": 30,
"devicePatchLevel": "2021-06-05",
"vendorPatchLevel": "2021-06-05",
"memory": 5731123200,
"systemTimezone": "America/New_York",
"typeAllocationCode": "35293110",
"developerModeEnabled": true
},
"locationInformation": {
"ip": "72.239.229.0",
"geoip": {
"city": "Merritt Island",
"continentName": "North America",
"countryCode": "US",
"countryName": "United States",
"regionCode": "US-FL",
"lat": 28.3888,
"lng": -80.7301
}
},
"detectionDetails": {
"indicators": [
"Files"
]
},
"references": {
"management": "https://apis.protectmyapp.com/v3/air/a985d372-0c1e-40d1-9ede-69fecca3b5c8/manage",
"instance": "https://apis.protectmyapp.com/v2/air/a985d372-0c1e-40d1-9ede-69fecca3b5c8",
"detections": "https://apis.protectmyapp.com/v2/air/a985d372-0c1e-40d1-9ede-69fecca3b5c8/detections",
"detection": "https://apis.protectmyapp.com/v2/air/a985d372-0c1e-40d1-9ede-69fecca3b5c8/detections/YTk4NWQzNzItMGMxZS00MGQxLTllZGUtNjlmZWNjYTNiNWM4OjqLc7SP9qhP2akosvq3w60_CFitP-J4tRRmWMblZT6qtw"
}
}
]
}Comma Separated Values (CSV)
id,riskLevel,detectedType,createdAt,appId,aiid,spuid,origin,protectionInformation,deviceInformation,locationInformation,detectionDetails,references
<detection id>,LOW,DNSConsensusInconsistencyDetected,2026-05-08T14:56:55.734Z,com.verimatrix.arc.integrationtest.siem.detections,a985d372-0c1e-40d1-9ede-69fecca3b5c8,SP::abcde,device,1.0.0-ARC 1.0/1 ece094ff-01ed-49e1-b469-786fdf39fa5c,ANDROID 11 aosp on flame google arm64-v8a 4.14.212 30 2021-06-05 2021-06-05 5731123200 America/New_York 35293110 true ,72.239.229.0 [object Object],www.microsoft.com SYSTEM 23.200.189.225 23.200.189.225,https://apis.protectmyapp.com/v3/air/a985d372-0c1e-40d1-9ede-69fecca3b5c8/manage https://apis.protectmyapp.com/v2/air/a985d372-0c1e-40d1-9ede-69fecca3b5c8 https://apis.protectmyapp.com/v2/air/a985d372-0c1e-40d1-9ede-69fecca3b5c8/detections https://apis.protectmyapp.com/v2/air/a985d372-0c1e-40d1-9ede-69fecca3b5c8/detections/<detection id>" +V2 / V3 API Pagination Header
To maintain a valid CSV format of the returned payload, CSV response will in addition contain a special header, x-pagination-last-event, that signals the pagination last event. This is the same as pagination.last property of the JSON response.
API Usage
Authentication
Authentication of the API endpoint is secured using API keys. These API keys can be generated in the portal, under Settings → API Key Manager.
The API keys are exchanged for a short-lived access token, which in turn is used when calling the XTD SIEM API.
More details on how to create and use API keys can be found at .
Using Access Tokens
Once an access token has been obtained, it is passed to the APIs using an ‘Authorization’ header, with the value being the access token in question.
GET /[v2|v3]/siem/detections
...
Authorization: <access token>Basic Request
Basic requests are made to the SIEM API URL using a GET request. The request should be made to:
https://apis.protectmyapp.com/[v2|v3]/siem/detectionsThe accept header indicates which response format is requested
GET /[v2|v3]/siem/detections
Accept: application/json
...
{
// Response body
}Filtering
The API provides filtering capabilities to reduce the response data returned to the caller. All parameters are currently passed to the API as query parameters (on the URL).
| Parameter | Format | Usage |
|---|---|---|
| riskLevel | LOW | SUSPICIOUS | HIGH | Filters all detections by the risk level associated with them. |
| limit | positive integers between 10 and 1000 | Limits the number of records returned from the API |
| from | positive integer indicating a valid timestamp, milliseconds since the epoch | Include only records created after the specified data |
| to | positive integer indicating a valid timestamp, milliseconds since the epoch | Include only records created before the specified data |
| cursor | A valid string as received in a previous response | Reference cursor for making multiple requests |
Filtering Example
The following example filters out the results to include only detections which have been deemed high risk.
GET /[v2|v3]/siem/detections?riskLevel=HIGH
Accept: application/json
...
{
// Response body
}Data Polling
To ensure timely consumption of SIEM data, customer must call the SIEM API in a polling fashion.
In addition to polling the data regularly, with set to/from filtering, the API may at time return more data than can fit in the response (more than the limit specified or the max limit allowed by the API). In those cases, the API will return ‘pagination’ information, allowing the caller to retrieve all the data for that interval.

Data De-duplication
There is a chance that the data retrieval has overlaps in the data set returned and that some de-duplication may be necessary. The identifier of the detection can be used for this as it's a unique property of the detection.
Rate Limits
Rate limits exist on the API and will be enforced if significant amounts of requests are deemed to break those limits. The typical usage of the API however is a low-rate, long-running polls, which should not typically impact the overall rate limiting.
API Documentation
OpenAPI specifications for the APIs are available in the integration documentation bundle. The latest version of this can always be retrieved using an authenticated GET request to:
https://apis.protectmyapp.com/v2/openapiThe request should be made to the
GET /v2/openapi
...
{
// OpenAPI documentation
}