diff --git a/.changeset/fuzzy-pumas-end.md b/.changeset/fuzzy-pumas-end.md new file mode 100644 index 0000000..e05c47f --- /dev/null +++ b/.changeset/fuzzy-pumas-end.md @@ -0,0 +1,5 @@ +--- +'fingerprint-pro-server-api-java-sdk': minor +--- + +**events-search**: Event search now supports a new set of filter parameters: `vpn`, `virtual_machine`, `tampering`, `anti_detect_browser`, `incognito`, `privacy_settings`, `jailbroken`, `frida`, `factory_reset`, `cloned_app`, `emulator`, `root_apps`, `vpn_confidence`, `min_suspect_score`. diff --git a/.changeset/pre.json b/.changeset/pre.json new file mode 100644 index 0000000..048329d --- /dev/null +++ b/.changeset/pre.json @@ -0,0 +1,8 @@ +{ + "mode": "pre", + "tag": "develop", + "initialVersions": { + "fingerprint-pro-server-api-java-sdk": "7.4.0" + }, + "changesets": [] +} diff --git a/.changeset/sharp-chicken-yawn.md b/.changeset/sharp-chicken-yawn.md new file mode 100644 index 0000000..0bd479f --- /dev/null +++ b/.changeset/sharp-chicken-yawn.md @@ -0,0 +1,5 @@ +--- +'fingerprint-pro-server-api-java-sdk': patch +--- + +**events**: Update Tampering descriptions to reflect Android support. \ No newline at end of file diff --git a/.changeset/thick-clouds-ring.md b/.changeset/thick-clouds-ring.md new file mode 100644 index 0000000..843ae00 --- /dev/null +++ b/.changeset/thick-clouds-ring.md @@ -0,0 +1,5 @@ +--- +"fingerprint-pro-server-api-java-sdk": patch +--- + +**webhook**: Add `environmentId` property diff --git a/.schema-version b/.schema-version index 02b6b4f..d80b4a8 100644 --- a/.schema-version +++ b/.schema-version @@ -1 +1 @@ -v2.4.1 \ No newline at end of file +v2.5.0 \ No newline at end of file diff --git a/docs/FingerprintApi.md b/docs/FingerprintApi.md index 9bc12d2..0e0c09b 100644 --- a/docs/FingerprintApi.md +++ b/docs/FingerprintApi.md @@ -27,7 +27,7 @@ Request deleting all data associated with the specified visitor ID. This API is #### Browser (or device) properties - Represents the data that Fingerprint collected from this specific browser (or device) and everything inferred and derived from it. -- Upon request to delete, this data is deleted asynchronously (typically within a few minutes) and it will no longer be used to identify this browser (or device) for your [Fingerprint Application](https://dev.fingerprint.com/docs/glossary#fingerprint-application). +- Upon request to delete, this data is deleted asynchronously (typically within a few minutes) and it will no longer be used to identify this browser (or device) for your [Fingerprint Workspace](https://dev.fingerprint.com/docs/glossary#fingerprint-workspace). #### Identification requests made from this browser (or device) - Fingerprint stores the identification requests made from a browser (or device) for up to 30 (or 90) days depending on your plan. To learn more, see [Data Retention](https://dev.fingerprint.com/docs/regions#data-retention). @@ -420,13 +420,27 @@ public class FingerprintApiExample { Integer limit = 10; // Integer | Limit the number of events returned. String paginationKey = "paginationKey_example"; // String | Use `pagination_key` to get the next page of results. When more results are available (e.g., you requested up to 200 results for your search using `limit`, but there are more than 200 events total matching your request), the `paginationKey` top-level attribute is added to the response. The key corresponds to the `timestamp` of the last returned event. In the following request, use that value in the `pagination_key` parameter to get the next page of results: 1. First request, returning most recent 200 events: `GET api-base-url/events/search?limit=200` 2. Use `response.paginationKey` to get the next page of results: `GET api-base-url/events/search?limit=200&pagination_key=1740815825085` String visitorId = "visitorId_example"; // String | Unique [visitor identifier](https://dev.fingerprint.com/reference/get-function#visitorid) issued by Fingerprint Pro. Filter for events matching this `visitor_id`. - String bot = "all"; // String | Filter events by the bot detection result, specifically: `all` - events where any kind of bot was detected. `good` - events where a good bot was detected. `bad` - events where a bad bot was detected. `none` - events where no bot was detected. + String bot = "all"; // String | Filter events by the Bot Detection result, specifically: `all` - events where any kind of bot was detected. `good` - events where a good bot was detected. `bad` - events where a bad bot was detected. `none` - events where no bot was detected. > Note: When using this parameter, only events with the `products.botd.data.bot.result` property set to a valid value are returned. Events without a `products.botd` Smart Signal result are left out of the response. String ipAddress = "ipAddress_example"; // String | Filter events by IP address range. The range can be as specific as a single IP (/32 for IPv4 or /128 for IPv6) All ip_address filters must use CIDR notation, for example, 10.0.0.0/24, 192.168.0.1/32 String linkedId = "linkedId_example"; // String | Filter events by your custom identifier. You can use [linked IDs](https://dev.fingerprint.com/reference/get-function#linkedid) to associate identification requests with your own identifier, for example, session ID, purchase ID, or transaction ID. You can then use this `linked_id` parameter to retrieve all events associated with your custom identifier. Long start = 56L; // Long | Filter events with a timestamp greater than the start time, in Unix time (milliseconds). Long end = 56L; // Long | Filter events with a timestamp smaller than the end time, in Unix time (milliseconds). Boolean reverse = true; // Boolean | Sort events in reverse timestamp order. Boolean suspect = true; // Boolean | Filter events previously tagged as suspicious via the [Update API](https://dev.fingerprint.com/reference/updateevent). > Note: When using this parameter, only events with the `suspect` property explicitly set to `true` or `false` are returned. Events with undefined `suspect` property are left out of the response. + Boolean vpn = true; // Boolean | Filter events by VPN Detection result. > Note: When using this parameter, only events with the `products.vpn.data.result` property set to `true` or `false` are returned. Events without a `products.vpn` Smart Signal result are left out of the response. + Boolean virtualMachine = true; // Boolean | Filter events by Virtual Machine Detection result. > Note: When using this parameter, only events with the `products.virtualMachine.data.result` property set to `true` or `false` are returned. Events without a `products.virtualMachine` Smart Signal result are left out of the response. + Boolean tampering = true; // Boolean | Filter events by Tampering Detection result. > Note: When using this parameter, only events with the `products.tampering.data.result` property set to `true` or `false` are returned. Events without a `products.tampering` Smart Signal result are left out of the response. + Boolean antiDetectBrowser = true; // Boolean | Filter events by Anti-detect Browser Detection result. > Note: When using this parameter, only events with the `products.tampering.data.antiDetectBrowser` property set to `true` or `false` are returned. Events without a `products.tampering` Smart Signal result are left out of the response. + Boolean incognito = true; // Boolean | Filter events by Browser Incognito Detection result. > Note: When using this parameter, only events with the `products.incognito.data.result` property set to `true` or `false` are returned. Events without a `products.incognito` Smart Signal result are left out of the response. + Boolean privacySettings = true; // Boolean | Filter events by Privacy Settings Detection result. > Note: When using this parameter, only events with the `products.privacySettings.data.result` property set to `true` or `false` are returned. Events without a `products.privacySettings` Smart Signal result are left out of the response. + Boolean jailbroken = true; // Boolean | Filter events by Jailbroken Device Detection result. > Note: When using this parameter, only events with the `products.jailbroken.data.result` property set to `true` or `false` are returned. Events without a `products.jailbroken` Smart Signal result are left out of the response. + Boolean frida = true; // Boolean | Filter events by Frida Detection result. > Note: When using this parameter, only events with the `products.frida.data.result` property set to `true` or `false` are returned. Events without a `products.frida` Smart Signal result are left out of the response. + Boolean factoryReset = true; // Boolean | Filter events by Factory Reset Detection result. > Note: When using this parameter, only events with the `products.factoryReset.data.result` property set to `true` or `false` are returned. Events without a `products.factoryReset` Smart Signal result are left out of the response. + Boolean clonedApp = true; // Boolean | Filter events by Cloned App Detection result. > Note: When using this parameter, only events with the `products.clonedApp.data.result` property set to `true` or `false` are returned. Events without a `products.clonedApp` Smart Signal result are left out of the response. + Boolean emulator = true; // Boolean | Filter events by Android Emulator Detection result. > Note: When using this parameter, only events with the `products.emulator.data.result` property set to `true` or `false` are returned. Events without a `products.emulator` Smart Signal result are left out of the response. + Boolean rootApps = true; // Boolean | Filter events by Rooted Device Detection result. > Note: When using this parameter, only events with the `products.rootApps.data.result` property set to `true` or `false` are returned. Events without a `products.rootApps` Smart Signal result are left out of the response. + String vpnConfidence = "high,"; // String | Filter events by VPN Detection result confidence level. `high` - events with high VPN Detection confidence. `medium` - events with medium VPN Detection confidence. `low` - events with low VPN Detection confidence. > Note: When using this parameter, only events with the `products.vpn.data.confidence` property set to a valid value are returned. Events without a `products.vpn` Smart Signal result are left out of the response. + Float minSuspectScore = 3.4F; // Float | Filter events with Suspect Score result above a provided minimum threshold. > Note: When using this parameter, only events where the `products.suspectScore.data.result` property set to a value exceeding your threshold are returned. Events without a `products.suspectScore` Smart Signal result are left out of the response. try { SearchEventsResponse result = api.searchEvents(limit, new FingerprintApi.SearchEventsOptionalParams() .setPaginationKey(paginationKey) @@ -437,7 +451,21 @@ public class FingerprintApiExample { .setStart(start) .setEnd(end) .setReverse(reverse) - .setSuspect(suspect)); + .setSuspect(suspect) + .setVpn(vpn) + .setVirtualMachine(virtualMachine) + .setTampering(tampering) + .setAntiDetectBrowser(antiDetectBrowser) + .setIncognito(incognito) + .setPrivacySettings(privacySettings) + .setJailbroken(jailbroken) + .setFrida(frida) + .setFactoryReset(factoryReset) + .setClonedApp(clonedApp) + .setEmulator(emulator) + .setRootApps(rootApps) + .setVpnConfidence(vpnConfidence) + .setMinSuspectScore(minSuspectScore)); System.out.println(result); } catch (ApiException e) { System.err.println("Exception when calling FingerprintApi.searchEvents:" + e.getMessage()); @@ -463,13 +491,27 @@ Object containing optional parameters for API method. Supports a fluent interfac |------------- | ------------- | ------------- | -------------| | **paginationKey** | **String**| Use `pagination_key` to get the next page of results. When more results are available (e.g., you requested up to 200 results for your search using `limit`, but there are more than 200 events total matching your request), the `paginationKey` top-level attribute is added to the response. The key corresponds to the `timestamp` of the last returned event. In the following request, use that value in the `pagination_key` parameter to get the next page of results: 1. First request, returning most recent 200 events: `GET api-base-url/events/search?limit=200` 2. Use `response.paginationKey` to get the next page of results: `GET api-base-url/events/search?limit=200&pagination_key=1740815825085` | [optional] | | **visitorId** | **String**| Unique [visitor identifier](https://dev.fingerprint.com/reference/get-function#visitorid) issued by Fingerprint Pro. Filter for events matching this `visitor_id`. | [optional] | -| **bot** | **String**| Filter events by the bot detection result, specifically: `all` - events where any kind of bot was detected. `good` - events where a good bot was detected. `bad` - events where a bad bot was detected. `none` - events where no bot was detected. | [optional] [enum: all, good, bad, none] | +| **bot** | **String**| Filter events by the Bot Detection result, specifically: `all` - events where any kind of bot was detected. `good` - events where a good bot was detected. `bad` - events where a bad bot was detected. `none` - events where no bot was detected. > Note: When using this parameter, only events with the `products.botd.data.bot.result` property set to a valid value are returned. Events without a `products.botd` Smart Signal result are left out of the response. | [optional] [enum: all, good, bad, none] | | **ipAddress** | **String**| Filter events by IP address range. The range can be as specific as a single IP (/32 for IPv4 or /128 for IPv6) All ip_address filters must use CIDR notation, for example, 10.0.0.0/24, 192.168.0.1/32 | [optional] | | **linkedId** | **String**| Filter events by your custom identifier. You can use [linked IDs](https://dev.fingerprint.com/reference/get-function#linkedid) to associate identification requests with your own identifier, for example, session ID, purchase ID, or transaction ID. You can then use this `linked_id` parameter to retrieve all events associated with your custom identifier. | [optional] | | **start** | **Long**| Filter events with a timestamp greater than the start time, in Unix time (milliseconds). | [optional] | | **end** | **Long**| Filter events with a timestamp smaller than the end time, in Unix time (milliseconds). | [optional] | | **reverse** | **Boolean**| Sort events in reverse timestamp order. | [optional] | | **suspect** | **Boolean**| Filter events previously tagged as suspicious via the [Update API](https://dev.fingerprint.com/reference/updateevent). > Note: When using this parameter, only events with the `suspect` property explicitly set to `true` or `false` are returned. Events with undefined `suspect` property are left out of the response. | [optional] | +| **vpn** | **Boolean**| Filter events by VPN Detection result. > Note: When using this parameter, only events with the `products.vpn.data.result` property set to `true` or `false` are returned. Events without a `products.vpn` Smart Signal result are left out of the response. | [optional] | +| **virtualMachine** | **Boolean**| Filter events by Virtual Machine Detection result. > Note: When using this parameter, only events with the `products.virtualMachine.data.result` property set to `true` or `false` are returned. Events without a `products.virtualMachine` Smart Signal result are left out of the response. | [optional] | +| **tampering** | **Boolean**| Filter events by Tampering Detection result. > Note: When using this parameter, only events with the `products.tampering.data.result` property set to `true` or `false` are returned. Events without a `products.tampering` Smart Signal result are left out of the response. | [optional] | +| **antiDetectBrowser** | **Boolean**| Filter events by Anti-detect Browser Detection result. > Note: When using this parameter, only events with the `products.tampering.data.antiDetectBrowser` property set to `true` or `false` are returned. Events without a `products.tampering` Smart Signal result are left out of the response. | [optional] | +| **incognito** | **Boolean**| Filter events by Browser Incognito Detection result. > Note: When using this parameter, only events with the `products.incognito.data.result` property set to `true` or `false` are returned. Events without a `products.incognito` Smart Signal result are left out of the response. | [optional] | +| **privacySettings** | **Boolean**| Filter events by Privacy Settings Detection result. > Note: When using this parameter, only events with the `products.privacySettings.data.result` property set to `true` or `false` are returned. Events without a `products.privacySettings` Smart Signal result are left out of the response. | [optional] | +| **jailbroken** | **Boolean**| Filter events by Jailbroken Device Detection result. > Note: When using this parameter, only events with the `products.jailbroken.data.result` property set to `true` or `false` are returned. Events without a `products.jailbroken` Smart Signal result are left out of the response. | [optional] | +| **frida** | **Boolean**| Filter events by Frida Detection result. > Note: When using this parameter, only events with the `products.frida.data.result` property set to `true` or `false` are returned. Events without a `products.frida` Smart Signal result are left out of the response. | [optional] | +| **factoryReset** | **Boolean**| Filter events by Factory Reset Detection result. > Note: When using this parameter, only events with the `products.factoryReset.data.result` property set to `true` or `false` are returned. Events without a `products.factoryReset` Smart Signal result are left out of the response. | [optional] | +| **clonedApp** | **Boolean**| Filter events by Cloned App Detection result. > Note: When using this parameter, only events with the `products.clonedApp.data.result` property set to `true` or `false` are returned. Events without a `products.clonedApp` Smart Signal result are left out of the response. | [optional] | +| **emulator** | **Boolean**| Filter events by Android Emulator Detection result. > Note: When using this parameter, only events with the `products.emulator.data.result` property set to `true` or `false` are returned. Events without a `products.emulator` Smart Signal result are left out of the response. | [optional] | +| **rootApps** | **Boolean**| Filter events by Rooted Device Detection result. > Note: When using this parameter, only events with the `products.rootApps.data.result` property set to `true` or `false` are returned. Events without a `products.rootApps` Smart Signal result are left out of the response. | [optional] | +| **vpnConfidence** | **String**| Filter events by VPN Detection result confidence level. `high` - events with high VPN Detection confidence. `medium` - events with medium VPN Detection confidence. `low` - events with low VPN Detection confidence. > Note: When using this parameter, only events with the `products.vpn.data.confidence` property set to a valid value are returned. Events without a `products.vpn` Smart Signal result are left out of the response. | [optional] [enum: high,, medium, low] | +| **minSuspectScore** | **Float**| Filter events with Suspect Score result above a provided minimum threshold. > Note: When using this parameter, only events where the `products.suspectScore.data.result` property set to a value exceeding your threshold are returned. Events without a `products.suspectScore` Smart Signal result are left out of the response. | [optional] | ### Return type diff --git a/docs/Tampering.md b/docs/Tampering.md index efed1fb..5cf2e09 100644 --- a/docs/Tampering.md +++ b/docs/Tampering.md @@ -7,9 +7,9 @@ | Name | Type | Description | Notes | |------------ | ------------- | ------------- | -------------| -|**result** | **Boolean** | Flag indicating browser tampering was detected. This happens when either of these conditions is true: * There are inconsistencies in the browser configuration that cross our internal tampering thresholds (indicated by `anomalyScore`). * The browser signature resembles one of \"anti-detect\" browsers specifically designed to evade identification and fingerprinting, for example, Incognition (indicated by `antiDetectBrowser`). | | -|**anomalyScore** | **Double** | Confidence score (`0.0 - 1.0`) for tampering detection: * Values above `0.5` indicate that there was a tampering attempt. * Values below `0.5` indicate genuine browsers. | | -|**antiDetectBrowser** | **Boolean** | Is `true` if the identified browser resembles one of \"anti-detect\" browsers, for example, Incognition. Anti-detect browsers try to evade identification by masking or manipulating their fingerprint to imitate legitimate browser configurations. | | +|**result** | **Boolean** | Indicates if an identification request from a browser or an Android SDK has been tampered with. Not supported in the iOS SDK, is always `false` for iOS requests. * `true` - If the request meets either of the following conditions: * Contains anomalous browser or device attributes that could not have been legitimately produced by the JavaScript agent or the Android SDK (see `anomalyScore`). * Originated from an anti-detect browser like Incognition (see `antiDetectBrowser`). * `false` - If the request is considered genuine or was generated by the iOS SDK. | | +|**anomalyScore** | **Double** | A score that indicates the extent of anomalous data in the request. This field applies to requests originating from **both** browsers and Android SDKs. * Values above `0.5` indicate that the request has been tampered with. * Values below `0.5` indicate that the request is genuine. | | +|**antiDetectBrowser** | **Boolean** | Anti-detect browsers try to evade identification by masking or manipulating their fingerprint to imitate legitimate browser configurations. This field does not apply to requests originating from mobile SDKs. * `true` - The browser resembles a known anti-detect browser, for example, Incognition. * `false` - The browser does not resemble an anti-detect browser or the request originates from a mobile SDK. | | diff --git a/docs/Webhook.md b/docs/Webhook.md index b61d645..ab16ddf 100644 --- a/docs/Webhook.md +++ b/docs/Webhook.md @@ -10,6 +10,7 @@ |**requestId** | **String** | Unique identifier of the user's request. | | |**url** | **String** | Page URL from which the request was sent. | | |**ip** | **String** | IP address of the requesting browser or bot. | | +|**environmentId** | **String** | Environment ID of the event. | [optional] | |**tag** | **Map<String, Object>** | A customer-provided value or an object that was sent with identification request. | [optional] | |**time** | **OffsetDateTime** | Time expressed according to ISO 8601 in UTC format, when the request from the JS agent was made. We recommend to treat requests that are older than 2 minutes as malicious. Otherwise, request replay attacks are possible. | | |**timestamp** | **Long** | Timestamp of the event with millisecond precision in Unix time. | | diff --git a/docs/WebhookTampering.md b/docs/WebhookTampering.md index 008564d..26794b1 100644 --- a/docs/WebhookTampering.md +++ b/docs/WebhookTampering.md @@ -7,9 +7,9 @@ | Name | Type | Description | Notes | |------------ | ------------- | ------------- | -------------| -|**result** | **Boolean** | Flag indicating browser tampering was detected. This happens when either of these conditions is true: * There are inconsistencies in the browser configuration that cross our internal tampering thresholds (indicated by `anomalyScore`). * The browser signature resembles one of \"anti-detect\" browsers specifically designed to evade identification and fingerprinting, for example, Incognition (indicated by `antiDetectBrowser`). | [optional] | -|**anomalyScore** | **Double** | Confidence score (`0.0 - 1.0`) for tampering detection: * Values above `0.5` indicate that there was a tampering attempt * Values below `0.5` indicate genuine browsers. | [optional] | -|**antiDetectBrowser** | **Boolean** | Is `true` if the identified browser resembles one of \"anti-detect\" browsers, for example, Incognition. Anti-detect browsers try to evade identification by masking or manipulating their fingerprint to imitate legitimate browser configurations. | [optional] | +|**result** | **Boolean** | Indicates if an identification request from a browser or an Android SDK has been tampered with. Not supported in the iOS SDK, is always `false` for iOS requests. * `true` - If the request meets either of the following conditions: * Contains anomalous browser or device attributes that could not have been legitimately produced by the JavaScript agent or the Android SDK (see `anomalyScore`). * Originated from an anti-detect browser like Incognition (see `antiDetectBrowser`). * `false` - If the request is considered genuine or was generated by the iOS SDK. | [optional] | +|**anomalyScore** | **Double** | A score that indicates the extent of anomalous data in the request. This field applies to requests originating from **both** browsers and Android SDKs. * Values above `0.5` indicate that the request has been tampered with. * Values below `0.5` indicate that the request is genuine. | [optional] | +|**antiDetectBrowser** | **Boolean** | Anti-detect browsers try to evade identification by masking or manipulating their fingerprint to imitate legitimate browser configurations. This field does not apply to requests originating from mobile SDKs. * `true` - The browser resembles a known anti-detect browser, for example, Incognition. * `false` - The browser does not resemble an anti-detect browser or the request originates from a mobile SDK. | [optional] | diff --git a/res/fingerprint-server-api.yaml b/res/fingerprint-server-api.yaml index 84d791c..3122979 100644 --- a/res/fingerprint-server-api.yaml +++ b/res/fingerprint-server-api.yaml @@ -210,12 +210,16 @@ paths: - good - bad - none - description: | - Filter events by the bot detection result, specifically: + description: > + Filter events by the Bot Detection result, specifically: `all` - events where any kind of bot was detected. `good` - events where a good bot was detected. `bad` - events where a bad bot was detected. `none` - events where no bot was detected. + > Note: When using this parameter, only events with the + `products.botd.data.bot.result` property set to a valid value are + returned. Events without a `products.botd` Smart Signal result are + left out of the response. - name: ip_address in: query schema: @@ -273,6 +277,173 @@ paths: > Note: When using this parameter, only events with the `suspect` property explicitly set to `true` or `false` are returned. Events with undefined `suspect` property are left out of the response. + - name: vpn + in: query + schema: + type: boolean + description: > + Filter events by VPN Detection result. + + > Note: When using this parameter, only events with the + `products.vpn.data.result` property set to `true` or `false` are + returned. Events without a `products.vpn` Smart Signal result are + left out of the response. + - name: virtual_machine + in: query + schema: + type: boolean + description: > + Filter events by Virtual Machine Detection result. + + > Note: When using this parameter, only events with the + `products.virtualMachine.data.result` property set to `true` or + `false` are returned. Events without a `products.virtualMachine` + Smart Signal result are left out of the response. + - name: tampering + in: query + schema: + type: boolean + description: > + Filter events by Tampering Detection result. + + > Note: When using this parameter, only events with the + `products.tampering.data.result` property set to `true` or `false` + are returned. Events without a `products.tampering` Smart Signal + result are left out of the response. + - name: anti_detect_browser + in: query + schema: + type: boolean + description: > + Filter events by Anti-detect Browser Detection result. + + > Note: When using this parameter, only events with the + `products.tampering.data.antiDetectBrowser` property set to `true` + or `false` are returned. Events without a `products.tampering` Smart + Signal result are left out of the response. + - name: incognito + in: query + schema: + type: boolean + description: > + Filter events by Browser Incognito Detection result. + + > Note: When using this parameter, only events with the + `products.incognito.data.result` property set to `true` or `false` + are returned. Events without a `products.incognito` Smart Signal + result are left out of the response. + - name: privacy_settings + in: query + schema: + type: boolean + description: > + Filter events by Privacy Settings Detection result. + + > Note: When using this parameter, only events with the + `products.privacySettings.data.result` property set to `true` or + `false` are returned. Events without a `products.privacySettings` + Smart Signal result are left out of the response. + - name: jailbroken + in: query + schema: + type: boolean + description: > + Filter events by Jailbroken Device Detection result. + + > Note: When using this parameter, only events with the + `products.jailbroken.data.result` property set to `true` or `false` + are returned. Events without a `products.jailbroken` Smart Signal + result are left out of the response. + - name: frida + in: query + schema: + type: boolean + description: > + Filter events by Frida Detection result. + + > Note: When using this parameter, only events with the + `products.frida.data.result` property set to `true` or `false` are + returned. Events without a `products.frida` Smart Signal result are + left out of the response. + - name: factory_reset + in: query + schema: + type: boolean + description: > + Filter events by Factory Reset Detection result. + + > Note: When using this parameter, only events with the + `products.factoryReset.data.result` property set to `true` or + `false` are returned. Events without a `products.factoryReset` Smart + Signal result are left out of the response. + - name: cloned_app + in: query + schema: + type: boolean + description: > + Filter events by Cloned App Detection result. + + > Note: When using this parameter, only events with the + `products.clonedApp.data.result` property set to `true` or `false` + are returned. Events without a `products.clonedApp` Smart Signal + result are left out of the response. + - name: emulator + in: query + schema: + type: boolean + description: > + Filter events by Android Emulator Detection result. + + > Note: When using this parameter, only events with the + `products.emulator.data.result` property set to `true` or `false` + are returned. Events without a `products.emulator` Smart Signal + result are left out of the response. + - name: root_apps + in: query + schema: + type: boolean + description: > + Filter events by Rooted Device Detection result. + + > Note: When using this parameter, only events with the + `products.rootApps.data.result` property set to `true` or `false` + are returned. Events without a `products.rootApps` Smart Signal + result are left out of the response. + - name: vpn_confidence + in: query + schema: + type: string + enum: + - high, + - medium + - low + description: > + Filter events by VPN Detection result confidence level. + + `high` - events with high VPN Detection confidence. + + `medium` - events with medium VPN Detection confidence. + + `low` - events with low VPN Detection confidence. + + > Note: When using this parameter, only events with the + `products.vpn.data.confidence` property set to a valid value are + returned. Events without a `products.vpn` Smart Signal result are + left out of the response. + - name: min_suspect_score + in: query + schema: + type: number + format: float + description: > + Filter events with Suspect Score result above a provided minimum + threshold. + + > Note: When using this parameter, only events where the + `products.suspectScore.data.result` property set to a value + exceeding your threshold are returned. Events without a + `products.suspectScore` Smart Signal result are left out of the + response. responses: '200': description: Events matching the filter(s). @@ -474,7 +645,7 @@ paths: - Upon request to delete, this data is deleted asynchronously (typically within a few minutes) and it will no longer be used to identify this browser (or device) for your [Fingerprint - Application](https://dev.fingerprint.com/docs/glossary#fingerprint-application). + Workspace](https://dev.fingerprint.com/docs/glossary#fingerprint-workspace). #### Identification requests made from this browser (or device) @@ -1579,26 +1750,33 @@ components: result: type: boolean description: > - Flag indicating browser tampering was detected. This happens when - either of these conditions is true: - * There are inconsistencies in the browser configuration that cross our internal tampering thresholds (indicated by `anomalyScore`). - * The browser signature resembles one of "anti-detect" browsers specifically designed to evade identification and fingerprinting, for example, Incognition (indicated by `antiDetectBrowser`). + Indicates if an identification request from a browser or an Android + SDK has been tampered with. Not supported in the iOS SDK, is always + `false` for iOS requests. + * `true` - If the request meets either of the following conditions: + * Contains anomalous browser or device attributes that could not have been legitimately produced by the JavaScript agent or the Android SDK (see `anomalyScore`). + * Originated from an anti-detect browser like Incognition (see `antiDetectBrowser`). + * `false` - If the request is considered genuine or was generated by the iOS SDK. anomalyScore: type: number format: double minimum: 0 maximum: 1 - description: | - Confidence score (`0.0 - 1.0`) for tampering detection: - * Values above `0.5` indicate that there was a tampering attempt. - * Values below `0.5` indicate genuine browsers. + description: > + A score that indicates the extent of anomalous data in the request. + This field applies to requests originating from **both** browsers + and Android SDKs. + * Values above `0.5` indicate that the request has been tampered with. + * Values below `0.5` indicate that the request is genuine. antiDetectBrowser: type: boolean - description: >- - Is `true` if the identified browser resembles one of "anti-detect" - browsers, for example, Incognition. Anti-detect browsers try to - evade identification by masking or manipulating their fingerprint to - imitate legitimate browser configurations. + description: > + Anti-detect browsers try to evade identification by masking or + manipulating their fingerprint to imitate legitimate browser + configurations. This field does not apply to requests originating + from mobile SDKs. + * `true` - The browser resembles a known anti-detect browser, for example, Incognition. + * `false` - The browser does not resemble an anti-detect browser or the request originates from a mobile SDK. ProductTampering: type: object additionalProperties: false @@ -2293,26 +2471,33 @@ components: result: type: boolean description: > - Flag indicating browser tampering was detected. This happens when - either of these conditions is true: - * There are inconsistencies in the browser configuration that cross our internal tampering thresholds (indicated by `anomalyScore`). - * The browser signature resembles one of "anti-detect" browsers specifically designed to evade identification and fingerprinting, for example, Incognition (indicated by `antiDetectBrowser`). + Indicates if an identification request from a browser or an Android + SDK has been tampered with. Not supported in the iOS SDK, is always + `false` for iOS requests. + * `true` - If the request meets either of the following conditions: + * Contains anomalous browser or device attributes that could not have been legitimately produced by the JavaScript agent or the Android SDK (see `anomalyScore`). + * Originated from an anti-detect browser like Incognition (see `antiDetectBrowser`). + * `false` - If the request is considered genuine or was generated by the iOS SDK. anomalyScore: type: number format: double minimum: 0 maximum: 1 - description: | - Confidence score (`0.0 - 1.0`) for tampering detection: - * Values above `0.5` indicate that there was a tampering attempt - * Values below `0.5` indicate genuine browsers. + description: > + A score that indicates the extent of anomalous data in the request. + This field applies to requests originating from **both** browsers + and Android SDKs. + * Values above `0.5` indicate that the request has been tampered with. + * Values below `0.5` indicate that the request is genuine. antiDetectBrowser: type: boolean - description: >- - Is `true` if the identified browser resembles one of "anti-detect" - browsers, for example, Incognition. Anti-detect browsers try to - evade identification by masking or manipulating their fingerprint to - imitate legitimate browser configurations. + description: > + Anti-detect browsers try to evade identification by masking or + manipulating their fingerprint to imitate legitimate browser + configurations. This field does not apply to requests originating + from mobile SDKs. + * `true` - The browser resembles a known anti-detect browser, for example, Incognition. + * `false` - The browser does not resemble an anti-detect browser or the request originates from a mobile SDK. WebhookClonedApp: type: object additionalProperties: false @@ -2544,6 +2729,9 @@ components: ip: type: string description: IP address of the requesting browser or bot. + environmentId: + type: string + description: Environment ID of the event. tag: $ref: '#/components/schemas/Tag' time: diff --git a/sdk/src/main/java/com/fingerprint/api/FingerprintApi.java b/sdk/src/main/java/com/fingerprint/api/FingerprintApi.java index ba9f462..948cc16 100644 --- a/sdk/src/main/java/com/fingerprint/api/FingerprintApi.java +++ b/sdk/src/main/java/com/fingerprint/api/FingerprintApi.java @@ -64,7 +64,7 @@ public void setApiClient(ApiClient apiClient) { /** * Delete data by visitor ID - * Request deleting all data associated with the specified visitor ID. This API is useful for compliance with privacy regulations. ### Which data is deleted? - Browser (or device) properties - Identification requests made from this browser (or device) #### Browser (or device) properties - Represents the data that Fingerprint collected from this specific browser (or device) and everything inferred and derived from it. - Upon request to delete, this data is deleted asynchronously (typically within a few minutes) and it will no longer be used to identify this browser (or device) for your [Fingerprint Application](https://dev.fingerprint.com/docs/glossary#fingerprint-application). #### Identification requests made from this browser (or device) - Fingerprint stores the identification requests made from a browser (or device) for up to 30 (or 90) days depending on your plan. To learn more, see [Data Retention](https://dev.fingerprint.com/docs/regions#data-retention). - Upon request to delete, the identification requests that were made by this browser - Within the past 10 days are deleted within 24 hrs. - Outside of 10 days are allowed to purge as per your data retention period. ### Corollary After requesting to delete a visitor ID, - If the same browser (or device) requests to identify, it will receive a different visitor ID. - If you request [`/events` API](https://dev.fingerprint.com/reference/getevent) with a `request_id` that was made outside of the 10 days, you will still receive a valid response. - If you request [`/visitors` API](https://dev.fingerprint.com/reference/getvisits) for the deleted visitor ID, the response will include identification requests that were made outside of those 10 days. ### Interested? Please [contact our support team](https://fingerprint.com/support/) to enable it for you. Otherwise, you will receive a 403. + * Request deleting all data associated with the specified visitor ID. This API is useful for compliance with privacy regulations. ### Which data is deleted? - Browser (or device) properties - Identification requests made from this browser (or device) #### Browser (or device) properties - Represents the data that Fingerprint collected from this specific browser (or device) and everything inferred and derived from it. - Upon request to delete, this data is deleted asynchronously (typically within a few minutes) and it will no longer be used to identify this browser (or device) for your [Fingerprint Workspace](https://dev.fingerprint.com/docs/glossary#fingerprint-workspace). #### Identification requests made from this browser (or device) - Fingerprint stores the identification requests made from a browser (or device) for up to 30 (or 90) days depending on your plan. To learn more, see [Data Retention](https://dev.fingerprint.com/docs/regions#data-retention). - Upon request to delete, the identification requests that were made by this browser - Within the past 10 days are deleted within 24 hrs. - Outside of 10 days are allowed to purge as per your data retention period. ### Corollary After requesting to delete a visitor ID, - If the same browser (or device) requests to identify, it will receive a different visitor ID. - If you request [`/events` API](https://dev.fingerprint.com/reference/getevent) with a `request_id` that was made outside of the 10 days, you will still receive a valid response. - If you request [`/visitors` API](https://dev.fingerprint.com/reference/getvisits) for the deleted visitor ID, the response will include identification requests that were made outside of those 10 days. ### Interested? Please [contact our support team](https://fingerprint.com/support/) to enable it for you. Otherwise, you will receive a 403. * @param visitorId The [visitor ID](https://dev.fingerprint.com/reference/get-function#visitorid) you want to delete. (required) * @throws ApiException if fails to make API call * @http.response.details @@ -83,7 +83,7 @@ public void deleteVisitorData(String visitorId) throws ApiException { /** * Delete data by visitor ID - * Request deleting all data associated with the specified visitor ID. This API is useful for compliance with privacy regulations. ### Which data is deleted? - Browser (or device) properties - Identification requests made from this browser (or device) #### Browser (or device) properties - Represents the data that Fingerprint collected from this specific browser (or device) and everything inferred and derived from it. - Upon request to delete, this data is deleted asynchronously (typically within a few minutes) and it will no longer be used to identify this browser (or device) for your [Fingerprint Application](https://dev.fingerprint.com/docs/glossary#fingerprint-application). #### Identification requests made from this browser (or device) - Fingerprint stores the identification requests made from a browser (or device) for up to 30 (or 90) days depending on your plan. To learn more, see [Data Retention](https://dev.fingerprint.com/docs/regions#data-retention). - Upon request to delete, the identification requests that were made by this browser - Within the past 10 days are deleted within 24 hrs. - Outside of 10 days are allowed to purge as per your data retention period. ### Corollary After requesting to delete a visitor ID, - If the same browser (or device) requests to identify, it will receive a different visitor ID. - If you request [`/events` API](https://dev.fingerprint.com/reference/getevent) with a `request_id` that was made outside of the 10 days, you will still receive a valid response. - If you request [`/visitors` API](https://dev.fingerprint.com/reference/getvisits) for the deleted visitor ID, the response will include identification requests that were made outside of those 10 days. ### Interested? Please [contact our support team](https://fingerprint.com/support/) to enable it for you. Otherwise, you will receive a 403. + * Request deleting all data associated with the specified visitor ID. This API is useful for compliance with privacy regulations. ### Which data is deleted? - Browser (or device) properties - Identification requests made from this browser (or device) #### Browser (or device) properties - Represents the data that Fingerprint collected from this specific browser (or device) and everything inferred and derived from it. - Upon request to delete, this data is deleted asynchronously (typically within a few minutes) and it will no longer be used to identify this browser (or device) for your [Fingerprint Workspace](https://dev.fingerprint.com/docs/glossary#fingerprint-workspace). #### Identification requests made from this browser (or device) - Fingerprint stores the identification requests made from a browser (or device) for up to 30 (or 90) days depending on your plan. To learn more, see [Data Retention](https://dev.fingerprint.com/docs/regions#data-retention). - Upon request to delete, the identification requests that were made by this browser - Within the past 10 days are deleted within 24 hrs. - Outside of 10 days are allowed to purge as per your data retention period. ### Corollary After requesting to delete a visitor ID, - If the same browser (or device) requests to identify, it will receive a different visitor ID. - If you request [`/events` API](https://dev.fingerprint.com/reference/getevent) with a `request_id` that was made outside of the 10 days, you will still receive a valid response. - If you request [`/visitors` API](https://dev.fingerprint.com/reference/getvisits) for the deleted visitor ID, the response will include identification requests that were made outside of those 10 days. ### Interested? Please [contact our support team](https://fingerprint.com/support/) to enable it for you. Otherwise, you will receive a 403. * @param visitorId The [visitor ID](https://dev.fingerprint.com/reference/get-function#visitorid) you want to delete. (required) * @return ApiResponse * @throws ApiException if fails to make API call @@ -391,6 +391,20 @@ public static class SearchEventsOptionalParams { private Long end; private Boolean reverse; private Boolean suspect; + private Boolean vpn; + private Boolean virtualMachine; + private Boolean tampering; + private Boolean antiDetectBrowser; + private Boolean incognito; + private Boolean privacySettings; + private Boolean jailbroken; + private Boolean frida; + private Boolean factoryReset; + private Boolean clonedApp; + private Boolean emulator; + private Boolean rootApps; + private String vpnConfidence; + private Float minSuspectScore; /** * getter for paginationKey - Use `pagination_key` to get the next page of results. When more results are available (e.g., you requested up to 200 results for your search using `limit`, but there are more than 200 events total matching your request), the `paginationKey` top-level attribute is added to the response. The key corresponds to the `timestamp` of the last returned event. In the following request, use that value in the `pagination_key` parameter to get the next page of results: 1. First request, returning most recent 200 events: `GET api-base-url/events/search?limit=200` 2. Use `response.paginationKey` to get the next page of results: `GET api-base-url/events/search?limit=200&pagination_key=1740815825085` @@ -423,14 +437,14 @@ public SearchEventsOptionalParams setVisitorId(String visitorId) { } /** - * getter for bot - Filter events by the bot detection result, specifically: `all` - events where any kind of bot was detected. `good` - events where a good bot was detected. `bad` - events where a bad bot was detected. `none` - events where no bot was detected. + * getter for bot - Filter events by the Bot Detection result, specifically: `all` - events where any kind of bot was detected. `good` - events where a good bot was detected. `bad` - events where a bad bot was detected. `none` - events where no bot was detected. > Note: When using this parameter, only events with the `products.botd.data.bot.result` property set to a valid value are returned. Events without a `products.botd` Smart Signal result are left out of the response. */ public String getBot() { return bot; } /** - * setter for bot - Filter events by the bot detection result, specifically: `all` - events where any kind of bot was detected. `good` - events where a good bot was detected. `bad` - events where a bad bot was detected. `none` - events where no bot was detected. + * setter for bot - Filter events by the Bot Detection result, specifically: `all` - events where any kind of bot was detected. `good` - events where a good bot was detected. `bad` - events where a bad bot was detected. `none` - events where no bot was detected. > Note: When using this parameter, only events with the `products.botd.data.bot.result` property set to a valid value are returned. Events without a `products.botd` Smart Signal result are left out of the response. */ public SearchEventsOptionalParams setBot(String bot) { this.bot = bot; @@ -527,6 +541,216 @@ public SearchEventsOptionalParams setSuspect(Boolean suspect) { return this; } + /** + * getter for vpn - Filter events by VPN Detection result. > Note: When using this parameter, only events with the `products.vpn.data.result` property set to `true` or `false` are returned. Events without a `products.vpn` Smart Signal result are left out of the response. + */ + public Boolean getVpn() { + return vpn; + } + + /** + * setter for vpn - Filter events by VPN Detection result. > Note: When using this parameter, only events with the `products.vpn.data.result` property set to `true` or `false` are returned. Events without a `products.vpn` Smart Signal result are left out of the response. + */ + public SearchEventsOptionalParams setVpn(Boolean vpn) { + this.vpn = vpn; + return this; + } + + /** + * getter for virtualMachine - Filter events by Virtual Machine Detection result. > Note: When using this parameter, only events with the `products.virtualMachine.data.result` property set to `true` or `false` are returned. Events without a `products.virtualMachine` Smart Signal result are left out of the response. + */ + public Boolean getVirtualMachine() { + return virtualMachine; + } + + /** + * setter for virtualMachine - Filter events by Virtual Machine Detection result. > Note: When using this parameter, only events with the `products.virtualMachine.data.result` property set to `true` or `false` are returned. Events without a `products.virtualMachine` Smart Signal result are left out of the response. + */ + public SearchEventsOptionalParams setVirtualMachine(Boolean virtualMachine) { + this.virtualMachine = virtualMachine; + return this; + } + + /** + * getter for tampering - Filter events by Tampering Detection result. > Note: When using this parameter, only events with the `products.tampering.data.result` property set to `true` or `false` are returned. Events without a `products.tampering` Smart Signal result are left out of the response. + */ + public Boolean getTampering() { + return tampering; + } + + /** + * setter for tampering - Filter events by Tampering Detection result. > Note: When using this parameter, only events with the `products.tampering.data.result` property set to `true` or `false` are returned. Events without a `products.tampering` Smart Signal result are left out of the response. + */ + public SearchEventsOptionalParams setTampering(Boolean tampering) { + this.tampering = tampering; + return this; + } + + /** + * getter for antiDetectBrowser - Filter events by Anti-detect Browser Detection result. > Note: When using this parameter, only events with the `products.tampering.data.antiDetectBrowser` property set to `true` or `false` are returned. Events without a `products.tampering` Smart Signal result are left out of the response. + */ + public Boolean getAntiDetectBrowser() { + return antiDetectBrowser; + } + + /** + * setter for antiDetectBrowser - Filter events by Anti-detect Browser Detection result. > Note: When using this parameter, only events with the `products.tampering.data.antiDetectBrowser` property set to `true` or `false` are returned. Events without a `products.tampering` Smart Signal result are left out of the response. + */ + public SearchEventsOptionalParams setAntiDetectBrowser(Boolean antiDetectBrowser) { + this.antiDetectBrowser = antiDetectBrowser; + return this; + } + + /** + * getter for incognito - Filter events by Browser Incognito Detection result. > Note: When using this parameter, only events with the `products.incognito.data.result` property set to `true` or `false` are returned. Events without a `products.incognito` Smart Signal result are left out of the response. + */ + public Boolean getIncognito() { + return incognito; + } + + /** + * setter for incognito - Filter events by Browser Incognito Detection result. > Note: When using this parameter, only events with the `products.incognito.data.result` property set to `true` or `false` are returned. Events without a `products.incognito` Smart Signal result are left out of the response. + */ + public SearchEventsOptionalParams setIncognito(Boolean incognito) { + this.incognito = incognito; + return this; + } + + /** + * getter for privacySettings - Filter events by Privacy Settings Detection result. > Note: When using this parameter, only events with the `products.privacySettings.data.result` property set to `true` or `false` are returned. Events without a `products.privacySettings` Smart Signal result are left out of the response. + */ + public Boolean getPrivacySettings() { + return privacySettings; + } + + /** + * setter for privacySettings - Filter events by Privacy Settings Detection result. > Note: When using this parameter, only events with the `products.privacySettings.data.result` property set to `true` or `false` are returned. Events without a `products.privacySettings` Smart Signal result are left out of the response. + */ + public SearchEventsOptionalParams setPrivacySettings(Boolean privacySettings) { + this.privacySettings = privacySettings; + return this; + } + + /** + * getter for jailbroken - Filter events by Jailbroken Device Detection result. > Note: When using this parameter, only events with the `products.jailbroken.data.result` property set to `true` or `false` are returned. Events without a `products.jailbroken` Smart Signal result are left out of the response. + */ + public Boolean getJailbroken() { + return jailbroken; + } + + /** + * setter for jailbroken - Filter events by Jailbroken Device Detection result. > Note: When using this parameter, only events with the `products.jailbroken.data.result` property set to `true` or `false` are returned. Events without a `products.jailbroken` Smart Signal result are left out of the response. + */ + public SearchEventsOptionalParams setJailbroken(Boolean jailbroken) { + this.jailbroken = jailbroken; + return this; + } + + /** + * getter for frida - Filter events by Frida Detection result. > Note: When using this parameter, only events with the `products.frida.data.result` property set to `true` or `false` are returned. Events without a `products.frida` Smart Signal result are left out of the response. + */ + public Boolean getFrida() { + return frida; + } + + /** + * setter for frida - Filter events by Frida Detection result. > Note: When using this parameter, only events with the `products.frida.data.result` property set to `true` or `false` are returned. Events without a `products.frida` Smart Signal result are left out of the response. + */ + public SearchEventsOptionalParams setFrida(Boolean frida) { + this.frida = frida; + return this; + } + + /** + * getter for factoryReset - Filter events by Factory Reset Detection result. > Note: When using this parameter, only events with the `products.factoryReset.data.result` property set to `true` or `false` are returned. Events without a `products.factoryReset` Smart Signal result are left out of the response. + */ + public Boolean getFactoryReset() { + return factoryReset; + } + + /** + * setter for factoryReset - Filter events by Factory Reset Detection result. > Note: When using this parameter, only events with the `products.factoryReset.data.result` property set to `true` or `false` are returned. Events without a `products.factoryReset` Smart Signal result are left out of the response. + */ + public SearchEventsOptionalParams setFactoryReset(Boolean factoryReset) { + this.factoryReset = factoryReset; + return this; + } + + /** + * getter for clonedApp - Filter events by Cloned App Detection result. > Note: When using this parameter, only events with the `products.clonedApp.data.result` property set to `true` or `false` are returned. Events without a `products.clonedApp` Smart Signal result are left out of the response. + */ + public Boolean getClonedApp() { + return clonedApp; + } + + /** + * setter for clonedApp - Filter events by Cloned App Detection result. > Note: When using this parameter, only events with the `products.clonedApp.data.result` property set to `true` or `false` are returned. Events without a `products.clonedApp` Smart Signal result are left out of the response. + */ + public SearchEventsOptionalParams setClonedApp(Boolean clonedApp) { + this.clonedApp = clonedApp; + return this; + } + + /** + * getter for emulator - Filter events by Android Emulator Detection result. > Note: When using this parameter, only events with the `products.emulator.data.result` property set to `true` or `false` are returned. Events without a `products.emulator` Smart Signal result are left out of the response. + */ + public Boolean getEmulator() { + return emulator; + } + + /** + * setter for emulator - Filter events by Android Emulator Detection result. > Note: When using this parameter, only events with the `products.emulator.data.result` property set to `true` or `false` are returned. Events without a `products.emulator` Smart Signal result are left out of the response. + */ + public SearchEventsOptionalParams setEmulator(Boolean emulator) { + this.emulator = emulator; + return this; + } + + /** + * getter for rootApps - Filter events by Rooted Device Detection result. > Note: When using this parameter, only events with the `products.rootApps.data.result` property set to `true` or `false` are returned. Events without a `products.rootApps` Smart Signal result are left out of the response. + */ + public Boolean getRootApps() { + return rootApps; + } + + /** + * setter for rootApps - Filter events by Rooted Device Detection result. > Note: When using this parameter, only events with the `products.rootApps.data.result` property set to `true` or `false` are returned. Events without a `products.rootApps` Smart Signal result are left out of the response. + */ + public SearchEventsOptionalParams setRootApps(Boolean rootApps) { + this.rootApps = rootApps; + return this; + } + + /** + * getter for vpnConfidence - Filter events by VPN Detection result confidence level. `high` - events with high VPN Detection confidence. `medium` - events with medium VPN Detection confidence. `low` - events with low VPN Detection confidence. > Note: When using this parameter, only events with the `products.vpn.data.confidence` property set to a valid value are returned. Events without a `products.vpn` Smart Signal result are left out of the response. + */ + public String getVpnConfidence() { + return vpnConfidence; + } + + /** + * setter for vpnConfidence - Filter events by VPN Detection result confidence level. `high` - events with high VPN Detection confidence. `medium` - events with medium VPN Detection confidence. `low` - events with low VPN Detection confidence. > Note: When using this parameter, only events with the `products.vpn.data.confidence` property set to a valid value are returned. Events without a `products.vpn` Smart Signal result are left out of the response. + */ + public SearchEventsOptionalParams setVpnConfidence(String vpnConfidence) { + this.vpnConfidence = vpnConfidence; + return this; + } + + /** + * getter for minSuspectScore - Filter events with Suspect Score result above a provided minimum threshold. > Note: When using this parameter, only events where the `products.suspectScore.data.result` property set to a value exceeding your threshold are returned. Events without a `products.suspectScore` Smart Signal result are left out of the response. + */ + public Float getMinSuspectScore() { + return minSuspectScore; + } + + /** + * setter for minSuspectScore - Filter events with Suspect Score result above a provided minimum threshold. > Note: When using this parameter, only events where the `products.suspectScore.data.result` property set to a value exceeding your threshold are returned. Events without a `products.suspectScore` Smart Signal result are left out of the response. + */ + public SearchEventsOptionalParams setMinSuspectScore(Float minSuspectScore) { + this.minSuspectScore = minSuspectScore; + return this; + } + } /** * Get events via search @@ -592,6 +816,20 @@ public ApiResponse searchEventsWithHttpInfo(Integer limit, localVarQueryParams.addAll(apiClient.parameterToPairs("", "end", searchEventsOptionalParams.getEnd())); localVarQueryParams.addAll(apiClient.parameterToPairs("", "reverse", searchEventsOptionalParams.getReverse())); localVarQueryParams.addAll(apiClient.parameterToPairs("", "suspect", searchEventsOptionalParams.getSuspect())); + localVarQueryParams.addAll(apiClient.parameterToPairs("", "vpn", searchEventsOptionalParams.getVpn())); + localVarQueryParams.addAll(apiClient.parameterToPairs("", "virtual_machine", searchEventsOptionalParams.getVirtualMachine())); + localVarQueryParams.addAll(apiClient.parameterToPairs("", "tampering", searchEventsOptionalParams.getTampering())); + localVarQueryParams.addAll(apiClient.parameterToPairs("", "anti_detect_browser", searchEventsOptionalParams.getAntiDetectBrowser())); + localVarQueryParams.addAll(apiClient.parameterToPairs("", "incognito", searchEventsOptionalParams.getIncognito())); + localVarQueryParams.addAll(apiClient.parameterToPairs("", "privacy_settings", searchEventsOptionalParams.getPrivacySettings())); + localVarQueryParams.addAll(apiClient.parameterToPairs("", "jailbroken", searchEventsOptionalParams.getJailbroken())); + localVarQueryParams.addAll(apiClient.parameterToPairs("", "frida", searchEventsOptionalParams.getFrida())); + localVarQueryParams.addAll(apiClient.parameterToPairs("", "factory_reset", searchEventsOptionalParams.getFactoryReset())); + localVarQueryParams.addAll(apiClient.parameterToPairs("", "cloned_app", searchEventsOptionalParams.getClonedApp())); + localVarQueryParams.addAll(apiClient.parameterToPairs("", "emulator", searchEventsOptionalParams.getEmulator())); + localVarQueryParams.addAll(apiClient.parameterToPairs("", "root_apps", searchEventsOptionalParams.getRootApps())); + localVarQueryParams.addAll(apiClient.parameterToPairs("", "vpn_confidence", searchEventsOptionalParams.getVpnConfidence())); + localVarQueryParams.addAll(apiClient.parameterToPairs("", "min_suspect_score", searchEventsOptionalParams.getMinSuspectScore())); } diff --git a/sdk/src/main/java/com/fingerprint/model/Tampering.java b/sdk/src/main/java/com/fingerprint/model/Tampering.java index 3536ca5..27b8749 100644 --- a/sdk/src/main/java/com/fingerprint/model/Tampering.java +++ b/sdk/src/main/java/com/fingerprint/model/Tampering.java @@ -41,11 +41,11 @@ public Tampering result(Boolean result) { } /** - * Flag indicating browser tampering was detected. This happens when either of these conditions is true: * There are inconsistencies in the browser configuration that cross our internal tampering thresholds (indicated by `anomalyScore`). * The browser signature resembles one of \"anti-detect\" browsers specifically designed to evade identification and fingerprinting, for example, Incognition (indicated by `antiDetectBrowser`). + * Indicates if an identification request from a browser or an Android SDK has been tampered with. Not supported in the iOS SDK, is always `false` for iOS requests. * `true` - If the request meets either of the following conditions: * Contains anomalous browser or device attributes that could not have been legitimately produced by the JavaScript agent or the Android SDK (see `anomalyScore`). * Originated from an anti-detect browser like Incognition (see `antiDetectBrowser`). * `false` - If the request is considered genuine or was generated by the iOS SDK. * @return result **/ @jakarta.annotation.Nonnull - @Schema(required = true, description = "Flag indicating browser tampering was detected. This happens when either of these conditions is true: * There are inconsistencies in the browser configuration that cross our internal tampering thresholds (indicated by `anomalyScore`). * The browser signature resembles one of \"anti-detect\" browsers specifically designed to evade identification and fingerprinting, for example, Incognition (indicated by `antiDetectBrowser`). ") + @Schema(required = true, description = "Indicates if an identification request from a browser or an Android SDK has been tampered with. Not supported in the iOS SDK, is always `false` for iOS requests. * `true` - If the request meets either of the following conditions: * Contains anomalous browser or device attributes that could not have been legitimately produced by the JavaScript agent or the Android SDK (see `anomalyScore`). * Originated from an anti-detect browser like Incognition (see `antiDetectBrowser`). * `false` - If the request is considered genuine or was generated by the iOS SDK. ") @JsonProperty(JSON_PROPERTY_RESULT) @JsonInclude(value = JsonInclude.Include.ALWAYS) @@ -67,13 +67,13 @@ public Tampering anomalyScore(Double anomalyScore) { } /** - * Confidence score (`0.0 - 1.0`) for tampering detection: * Values above `0.5` indicate that there was a tampering attempt. * Values below `0.5` indicate genuine browsers. + * A score that indicates the extent of anomalous data in the request. This field applies to requests originating from **both** browsers and Android SDKs. * Values above `0.5` indicate that the request has been tampered with. * Values below `0.5` indicate that the request is genuine. * minimum: 0 * maximum: 1 * @return anomalyScore **/ @jakarta.annotation.Nonnull - @Schema(required = true, description = "Confidence score (`0.0 - 1.0`) for tampering detection: * Values above `0.5` indicate that there was a tampering attempt. * Values below `0.5` indicate genuine browsers. ") + @Schema(required = true, description = "A score that indicates the extent of anomalous data in the request. This field applies to requests originating from **both** browsers and Android SDKs. * Values above `0.5` indicate that the request has been tampered with. * Values below `0.5` indicate that the request is genuine. ") @JsonProperty(JSON_PROPERTY_ANOMALY_SCORE) @JsonInclude(value = JsonInclude.Include.ALWAYS) @@ -95,11 +95,11 @@ public Tampering antiDetectBrowser(Boolean antiDetectBrowser) { } /** - * Is `true` if the identified browser resembles one of \"anti-detect\" browsers, for example, Incognition. Anti-detect browsers try to evade identification by masking or manipulating their fingerprint to imitate legitimate browser configurations. + * Anti-detect browsers try to evade identification by masking or manipulating their fingerprint to imitate legitimate browser configurations. This field does not apply to requests originating from mobile SDKs. * `true` - The browser resembles a known anti-detect browser, for example, Incognition. * `false` - The browser does not resemble an anti-detect browser or the request originates from a mobile SDK. * @return antiDetectBrowser **/ @jakarta.annotation.Nonnull - @Schema(required = true, description = "Is `true` if the identified browser resembles one of \"anti-detect\" browsers, for example, Incognition. Anti-detect browsers try to evade identification by masking or manipulating their fingerprint to imitate legitimate browser configurations.") + @Schema(required = true, description = "Anti-detect browsers try to evade identification by masking or manipulating their fingerprint to imitate legitimate browser configurations. This field does not apply to requests originating from mobile SDKs. * `true` - The browser resembles a known anti-detect browser, for example, Incognition. * `false` - The browser does not resemble an anti-detect browser or the request originates from a mobile SDK. ") @JsonProperty(JSON_PROPERTY_ANTI_DETECT_BROWSER) @JsonInclude(value = JsonInclude.Include.ALWAYS) diff --git a/sdk/src/main/java/com/fingerprint/model/Webhook.java b/sdk/src/main/java/com/fingerprint/model/Webhook.java index 9e55bbd..2ab46bd 100644 --- a/sdk/src/main/java/com/fingerprint/model/Webhook.java +++ b/sdk/src/main/java/com/fingerprint/model/Webhook.java @@ -50,6 +50,7 @@ Webhook.JSON_PROPERTY_REQUEST_ID, Webhook.JSON_PROPERTY_URL, Webhook.JSON_PROPERTY_IP, + Webhook.JSON_PROPERTY_ENVIRONMENT_ID, Webhook.JSON_PROPERTY_TAG, Webhook.JSON_PROPERTY_TIME, Webhook.JSON_PROPERTY_TIMESTAMP, @@ -100,6 +101,9 @@ public class Webhook { public static final String JSON_PROPERTY_IP = "ip"; private String ip; + public static final String JSON_PROPERTY_ENVIRONMENT_ID = "environmentId"; + private String environmentId; + public static final String JSON_PROPERTY_TAG = "tag"; private Map tag = null; @@ -295,6 +299,32 @@ public void setIp(String ip) { } + public Webhook environmentId(String environmentId) { + this.environmentId = environmentId; + return this; + } + + /** + * Environment ID of the event. + * @return environmentId + **/ + @jakarta.annotation.Nullable + @Schema(description = "Environment ID of the event.") + @JsonProperty(JSON_PROPERTY_ENVIRONMENT_ID) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + + public String getEnvironmentId() { + return environmentId; + } + + + @JsonProperty(JSON_PROPERTY_ENVIRONMENT_ID) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setEnvironmentId(String environmentId) { + this.environmentId = environmentId; + } + + public Webhook tag(Map tag) { this.tag = tag; return this; @@ -1324,6 +1354,7 @@ public boolean equals(Object o) { return Objects.equals(this.requestId, webhook.requestId) && Objects.equals(this.url, webhook.url) && Objects.equals(this.ip, webhook.ip) && + Objects.equals(this.environmentId, webhook.environmentId) && Objects.equals(this.tag, webhook.tag) && Objects.equals(this.time, webhook.time) && Objects.equals(this.timestamp, webhook.timestamp) && @@ -1366,7 +1397,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return Objects.hash(requestId, url, ip, tag, time, timestamp, ipLocation, linkedId, visitorId, visitorFound, confidence, firstSeenAt, lastSeenAt, browserDetails, incognito, clientReferrer, components, bot, userAgent, rootApps, emulator, ipInfo, ipBlocklist, tor, vpn, proxy, tampering, clonedApp, factoryReset, jailbroken, frida, privacySettings, virtualMachine, rawDeviceAttributes, highActivity, locationSpoofing, suspectScore, remoteControl, velocity, developerTools, mitmAttack); + return Objects.hash(requestId, url, ip, environmentId, tag, time, timestamp, ipLocation, linkedId, visitorId, visitorFound, confidence, firstSeenAt, lastSeenAt, browserDetails, incognito, clientReferrer, components, bot, userAgent, rootApps, emulator, ipInfo, ipBlocklist, tor, vpn, proxy, tampering, clonedApp, factoryReset, jailbroken, frida, privacySettings, virtualMachine, rawDeviceAttributes, highActivity, locationSpoofing, suspectScore, remoteControl, velocity, developerTools, mitmAttack); } @Override @@ -1376,6 +1407,7 @@ public String toString() { sb.append(" requestId: ").append(toIndentedString(requestId)).append("\n"); sb.append(" url: ").append(toIndentedString(url)).append("\n"); sb.append(" ip: ").append(toIndentedString(ip)).append("\n"); + sb.append(" environmentId: ").append(toIndentedString(environmentId)).append("\n"); sb.append(" tag: ").append(toIndentedString(tag)).append("\n"); sb.append(" time: ").append(toIndentedString(time)).append("\n"); sb.append(" timestamp: ").append(toIndentedString(timestamp)).append("\n"); diff --git a/sdk/src/main/java/com/fingerprint/model/WebhookTampering.java b/sdk/src/main/java/com/fingerprint/model/WebhookTampering.java index 3b14f05..5e08948 100644 --- a/sdk/src/main/java/com/fingerprint/model/WebhookTampering.java +++ b/sdk/src/main/java/com/fingerprint/model/WebhookTampering.java @@ -41,11 +41,11 @@ public WebhookTampering result(Boolean result) { } /** - * Flag indicating browser tampering was detected. This happens when either of these conditions is true: * There are inconsistencies in the browser configuration that cross our internal tampering thresholds (indicated by `anomalyScore`). * The browser signature resembles one of \"anti-detect\" browsers specifically designed to evade identification and fingerprinting, for example, Incognition (indicated by `antiDetectBrowser`). + * Indicates if an identification request from a browser or an Android SDK has been tampered with. Not supported in the iOS SDK, is always `false` for iOS requests. * `true` - If the request meets either of the following conditions: * Contains anomalous browser or device attributes that could not have been legitimately produced by the JavaScript agent or the Android SDK (see `anomalyScore`). * Originated from an anti-detect browser like Incognition (see `antiDetectBrowser`). * `false` - If the request is considered genuine or was generated by the iOS SDK. * @return result **/ @jakarta.annotation.Nullable - @Schema(description = "Flag indicating browser tampering was detected. This happens when either of these conditions is true: * There are inconsistencies in the browser configuration that cross our internal tampering thresholds (indicated by `anomalyScore`). * The browser signature resembles one of \"anti-detect\" browsers specifically designed to evade identification and fingerprinting, for example, Incognition (indicated by `antiDetectBrowser`). ") + @Schema(description = "Indicates if an identification request from a browser or an Android SDK has been tampered with. Not supported in the iOS SDK, is always `false` for iOS requests. * `true` - If the request meets either of the following conditions: * Contains anomalous browser or device attributes that could not have been legitimately produced by the JavaScript agent or the Android SDK (see `anomalyScore`). * Originated from an anti-detect browser like Incognition (see `antiDetectBrowser`). * `false` - If the request is considered genuine or was generated by the iOS SDK. ") @JsonProperty(JSON_PROPERTY_RESULT) @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) @@ -67,13 +67,13 @@ public WebhookTampering anomalyScore(Double anomalyScore) { } /** - * Confidence score (`0.0 - 1.0`) for tampering detection: * Values above `0.5` indicate that there was a tampering attempt * Values below `0.5` indicate genuine browsers. + * A score that indicates the extent of anomalous data in the request. This field applies to requests originating from **both** browsers and Android SDKs. * Values above `0.5` indicate that the request has been tampered with. * Values below `0.5` indicate that the request is genuine. * minimum: 0 * maximum: 1 * @return anomalyScore **/ @jakarta.annotation.Nullable - @Schema(description = "Confidence score (`0.0 - 1.0`) for tampering detection: * Values above `0.5` indicate that there was a tampering attempt * Values below `0.5` indicate genuine browsers. ") + @Schema(description = "A score that indicates the extent of anomalous data in the request. This field applies to requests originating from **both** browsers and Android SDKs. * Values above `0.5` indicate that the request has been tampered with. * Values below `0.5` indicate that the request is genuine. ") @JsonProperty(JSON_PROPERTY_ANOMALY_SCORE) @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) @@ -95,11 +95,11 @@ public WebhookTampering antiDetectBrowser(Boolean antiDetectBrowser) { } /** - * Is `true` if the identified browser resembles one of \"anti-detect\" browsers, for example, Incognition. Anti-detect browsers try to evade identification by masking or manipulating their fingerprint to imitate legitimate browser configurations. + * Anti-detect browsers try to evade identification by masking or manipulating their fingerprint to imitate legitimate browser configurations. This field does not apply to requests originating from mobile SDKs. * `true` - The browser resembles a known anti-detect browser, for example, Incognition. * `false` - The browser does not resemble an anti-detect browser or the request originates from a mobile SDK. * @return antiDetectBrowser **/ @jakarta.annotation.Nullable - @Schema(description = "Is `true` if the identified browser resembles one of \"anti-detect\" browsers, for example, Incognition. Anti-detect browsers try to evade identification by masking or manipulating their fingerprint to imitate legitimate browser configurations.") + @Schema(description = "Anti-detect browsers try to evade identification by masking or manipulating their fingerprint to imitate legitimate browser configurations. This field does not apply to requests originating from mobile SDKs. * `true` - The browser resembles a known anti-detect browser, for example, Incognition. * `false` - The browser does not resemble an anti-detect browser or the request originates from a mobile SDK. ") @JsonProperty(JSON_PROPERTY_ANTI_DETECT_BROWSER) @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) diff --git a/sdk/src/test/java/com/fingerprint/api/FingerprintApiTest.java b/sdk/src/test/java/com/fingerprint/api/FingerprintApiTest.java index 4dd183d..128168b 100644 --- a/sdk/src/test/java/com/fingerprint/api/FingerprintApiTest.java +++ b/sdk/src/test/java/com/fingerprint/api/FingerprintApiTest.java @@ -566,20 +566,54 @@ public void searchEventsMaximumParamsTest() throws ApiException { final Long END = 1582299576513L; final Boolean REVERSE = true; final Boolean SUSPECT = false; + final Boolean ANTI_DETECT_BROWSER = true; + final Boolean CLONED_APP = true; + final Boolean FACTORY_RESET = true; + final Boolean FRIDA = true; + final Boolean JAILBROKEN = true; + final Float MIN_SUSPECT_SCORE = 0.5f; + final Boolean PRIVACY_SETTINGS = true; + final Boolean ROOT_APPS = true; + final Boolean TAMPERING = true; + final Boolean VIRTUAL_MACHINE = true; + final Boolean VPN = true; + final String VPN_CONFIDENCE = "medium"; + final Boolean EMULATOR = true; + final Boolean INCOGNITO = true; + + Map expectedQueryParams = new HashMap<>(); + expectedQueryParams.put("limit", String.valueOf(LIMIT)); + expectedQueryParams.put("pagination_key", PAGINATION_KEY); + expectedQueryParams.put("visitor_id", MOCK_VISITOR_ID); + expectedQueryParams.put("bot", BOT); + expectedQueryParams.put("ip_address", IP_ADDRESS); + expectedQueryParams.put("linked_id", LINKED_ID); + expectedQueryParams.put("start", START.toString()); + expectedQueryParams.put("end", END.toString()); + expectedQueryParams.put("reverse", String.valueOf(REVERSE)); + expectedQueryParams.put("suspect", String.valueOf(SUSPECT)); + expectedQueryParams.put("anti_detect_browser", String.valueOf(ANTI_DETECT_BROWSER)); + expectedQueryParams.put("cloned_app", String.valueOf(CLONED_APP)); + expectedQueryParams.put("factory_reset", String.valueOf(FACTORY_RESET)); + expectedQueryParams.put("frida", String.valueOf(FRIDA)); + expectedQueryParams.put("jailbroken", String.valueOf(JAILBROKEN)); + expectedQueryParams.put("min_suspect_score", MIN_SUSPECT_SCORE.toString()); + expectedQueryParams.put("privacy_settings", String.valueOf(PRIVACY_SETTINGS)); + expectedQueryParams.put("root_apps", String.valueOf(ROOT_APPS)); + expectedQueryParams.put("tampering", String.valueOf(TAMPERING)); + expectedQueryParams.put("virtual_machine", String.valueOf(VIRTUAL_MACHINE)); + expectedQueryParams.put("vpn", String.valueOf(VPN)); + expectedQueryParams.put("vpn_confidence", VPN_CONFIDENCE); + expectedQueryParams.put("emulator", String.valueOf(EMULATOR)); + expectedQueryParams.put("incognito", String.valueOf(INCOGNITO)); addMock("searchEvents", null, invocation -> { List queryParams = invocation.getArgument(3); - assertEquals(11, queryParams.size()); - assertTrue(listContainsPair(queryParams, "limit", String.valueOf(LIMIT))); - assertTrue(listContainsPair(queryParams, "pagination_key", PAGINATION_KEY)); - assertTrue(listContainsPair(queryParams, "visitor_id", MOCK_VISITOR_ID)); - assertTrue(listContainsPair(queryParams, "bot", BOT)); - assertTrue(listContainsPair(queryParams, "ip_address", IP_ADDRESS)); - assertTrue(listContainsPair(queryParams, "linked_id", LINKED_ID)); - assertTrue(listContainsPair(queryParams, "start", String.valueOf(START))); - assertTrue(listContainsPair(queryParams, "end", String.valueOf(END))); - assertTrue(listContainsPair(queryParams, "reverse", String.valueOf(REVERSE))); - assertTrue(listContainsPair(queryParams, "suspect", String.valueOf(SUSPECT))); + // Added +1 because the `ii` query parameter is always included + assertEquals(expectedQueryParams.size() + 1, queryParams.size()); + for (Map.Entry expected : expectedQueryParams.entrySet()) { + assertTrue(listContainsPair(queryParams, expected.getKey(), expected.getValue())); + } return mockFileToResponse(200, invocation, "mocks/get_event_search_200.json"); }); @@ -590,7 +624,21 @@ public void searchEventsMaximumParamsTest() throws ApiException { .setBot(BOT).setIpAddress(IP_ADDRESS) .setLinkedId(LINKED_ID).setStart(START) .setEnd(END).setReverse(REVERSE) - .setSuspect(SUSPECT)); + .setSuspect(SUSPECT) + .setAntiDetectBrowser(ANTI_DETECT_BROWSER) + .setClonedApp(CLONED_APP) + .setFactoryReset(FACTORY_RESET) + .setFrida(FRIDA) + .setJailbroken(JAILBROKEN) + .setMinSuspectScore(MIN_SUSPECT_SCORE) + .setPrivacySettings(PRIVACY_SETTINGS) + .setRootApps(ROOT_APPS) + .setTampering(TAMPERING) + .setVirtualMachine(VIRTUAL_MACHINE) + .setVpn(VPN) + .setVpnConfidence(VPN_CONFIDENCE) + .setEmulator(EMULATOR) + .setIncognito(INCOGNITO)); List events = response.getEvents(); assertEquals(events.size(), 1); } diff --git a/sdk/src/test/resources/mocks/get_event_200.json b/sdk/src/test/resources/mocks/get_event_200.json index 60013c0..e88b560 100644 --- a/sdk/src/test/resources/mocks/get_event_200.json +++ b/sdk/src/test/resources/mocks/get_event_200.json @@ -332,6 +332,11 @@ "data": { "result": false } + }, + "mitmAttack": { + "data": { + "result": false + } } } } diff --git a/sdk/src/test/resources/mocks/get_event_200_all_errors.json b/sdk/src/test/resources/mocks/get_event_200_all_errors.json index ddc55fa..e4876e1 100644 --- a/sdk/src/test/resources/mocks/get_event_200_all_errors.json +++ b/sdk/src/test/resources/mocks/get_event_200_all_errors.json @@ -153,6 +153,12 @@ "code": "Failed", "message": "internal server error" } + }, + "mitmAttack": { + "error": { + "code": "Failed", + "message": "internal server error" + } } } } diff --git a/sdk/src/test/resources/mocks/get_event_200_with_broken_format.json b/sdk/src/test/resources/mocks/get_event_200_with_broken_format.json index 4ac8b6f..1c4a211 100644 --- a/sdk/src/test/resources/mocks/get_event_200_with_broken_format.json +++ b/sdk/src/test/resources/mocks/get_event_200_with_broken_format.json @@ -278,6 +278,11 @@ "data": { "result": false } + }, + "mitmAttack": { + "data": { + "result": false + } } } } diff --git a/sdk/src/test/resources/mocks/get_event_200_with_unknown_field.json b/sdk/src/test/resources/mocks/get_event_200_with_unknown_field.json index eba63e0..39111b3 100644 --- a/sdk/src/test/resources/mocks/get_event_200_with_unknown_field.json +++ b/sdk/src/test/resources/mocks/get_event_200_with_unknown_field.json @@ -280,6 +280,11 @@ "data": { "result": false } + }, + "mitmAttack": { + "data": { + "result": false + } } } } diff --git a/sdk/src/test/resources/mocks/get_event_search_200.json b/sdk/src/test/resources/mocks/get_event_search_200.json index 9d237eb..b90f62c 100644 --- a/sdk/src/test/resources/mocks/get_event_search_200.json +++ b/sdk/src/test/resources/mocks/get_event_search_200.json @@ -334,6 +334,11 @@ "data": { "result": false } + }, + "mitmAttack": { + "data": { + "result": false + } } }} ], diff --git a/sdk/src/test/resources/mocks/webhook.json b/sdk/src/test/resources/mocks/webhook.json index 748d252..24c5b52 100644 --- a/sdk/src/test/resources/mocks/webhook.json +++ b/sdk/src/test/resources/mocks/webhook.json @@ -242,5 +242,8 @@ }, "developerTools": { "result": false + }, + "mitmAttack": { + "result": false } }