diff --git a/.changeset/active-call.md b/.changeset/active-call.md new file mode 100644 index 00000000..a42007f8 --- /dev/null +++ b/.changeset/active-call.md @@ -0,0 +1,5 @@ +--- +'java-sdk': minor +--- + +**events**: Add `active_call` smart signal to `Event` diff --git a/.changeset/keyboard-layout-hash.md b/.changeset/keyboard-layout-hash.md new file mode 100644 index 00000000..b375194d --- /dev/null +++ b/.changeset/keyboard-layout-hash.md @@ -0,0 +1,5 @@ +--- +'java-sdk': minor +--- + +**events**: Add `keyboard_layout_hash` to `RawDeviceAttributes` diff --git a/.changeset/raw-device-attributes-battery-charging.md b/.changeset/raw-device-attributes-battery-charging.md new file mode 100644 index 00000000..93f0e9b4 --- /dev/null +++ b/.changeset/raw-device-attributes-battery-charging.md @@ -0,0 +1,5 @@ +--- +'java-sdk': minor +--- + +**events**: Add `battery_charging` field to `RawDeviceAttributes` diff --git a/.schema-version b/.schema-version index 5e05a378..684a941c 100644 --- a/.schema-version +++ b/.schema-version @@ -1 +1 @@ -v3.4.2 \ No newline at end of file +v3.5.1 \ No newline at end of file diff --git a/docs/Event.md b/docs/Event.md index 323aa11a..e5625501 100644 --- a/docs/Event.md +++ b/docs/Event.md @@ -2,7 +2,7 @@ # Event -Contains results from Fingerprint Identification and all active Smart Signals. +Contains results from Fingerprint Identification and all active Smart Signals. Some Smart Signals are only supported for certain device types, these fields will be omitted for events not generated from the supported devices. Consult the [Smart Signals reference](https://docs.fingerprint.com/docs/smart-signals-reference) for more details. ## Properties @@ -30,6 +30,7 @@ Contains results from Fingerprint Identification and all active Smart Signals. |**clientReferrer** | **String** | Client Referrer field corresponds to the `document.referrer` field gathered during an identification request. The value is an empty string if the user navigated to the page directly (not through a link, but, for example, by using a bookmark). | [optional] | |**browserDetails** | [**BrowserDetails**](BrowserDetails.md) | | [optional] | |**proximity** | [**Proximity**](Proximity.md) | | [optional] | +|**activeCall** | **Boolean** | Indicates whether the mobile device had an active call (cellular or VoIP) at the time of the request. Available from SDK 2.16.0+ on iOS and Android. | [optional] | |**bot** | [**BotResult**](BotResult.md) | | [optional] | |**botType** | **String** | Additional classification of the bot type if detected. | [optional] | |**botInfo** | [**BotInfo**](BotInfo.md) | | [optional] | @@ -64,7 +65,7 @@ Contains results from Fingerprint Identification and all active Smart Signals. |**vpnConfidence** | [**VpnConfidence**](VpnConfidence.md) | | [optional] | |**vpnMlScore** | **Double** | Machine learning–based VPN score, represented as a floating-point value between 0 and 1 (inclusive), with up to three decimal places of precision. A higher score means a higher confidence in the positive `vpn` detection result. This Smart Signal is currently in beta and only available to select customers. If you are interested, please [contact our support team](https://fingerprint.com/support/). | [optional] | |**vpnOriginTimezone** | **String** | Local timezone which is used in timezone_mismatch method. | [optional] | -|**vpnOriginCountry** | **String** | Country of the request (only for Android SDK version >= 2.4.0, ISO 3166 format or unknown). | [optional] | +|**vpnOriginCountry** | **String** | Country of the request (Android SDK version >= 2.4.0, iOS SDK version >= 2.9.0, JS agent >= 3.12.9 / 4.0.2), ISO 3166 format or unknown. | [optional] | |**vpnMethods** | [**VpnMethods**](VpnMethods.md) | | [optional] | |**highActivityDevice** | **Boolean** | Flag indicating if the request came from a high-activity visitor. | [optional] | |**rareDevice** | **Boolean** | `true` if the device is considered rare based on its combination of hardware and software attributes. A device is classified as rare if it falls within the top 99.9 percentile (lowest-frequency segment) of observed traffic, or if its configuration has not been previously seen (`not_seen`). > This Smart Signal is currently in beta and only available to select customers. If you are interested, please [contact our support team](https://fingerprint.com/support/). | [optional] | diff --git a/docs/FingerprintApi.md b/docs/FingerprintApi.md index 38f02c23..c58af581 100644 --- a/docs/FingerprintApi.md +++ b/docs/FingerprintApi.md @@ -202,8 +202,9 @@ Object containing optional parameters for API method. Supports a fluent interfac | **400** | Bad request. The event Id provided is not valid. | - | | **403** | Forbidden. Access to this API is denied. | - | | **404** | Not found. The event Id cannot be found in this workspace's data. | - | -| **429** | Too Many Requests. The request is throttled. | - | +| **429** | Too Many Requests. The request is throttled. To protect service stability during rare periods of extreme load, we may return HTTP 429 responses with message `too many search requests` even if you are within your assigned rate limits. | - | | **500** | Workspace error. | - | +| **504** | Gateway Timeout. Search execution exceeded the allowed timeout window. | - | ## searchEvents @@ -272,7 +273,7 @@ public class FingerprintApiExample { String visitorId = "Ibk1527CUFmcnjLwIs4A9"; // String | Unique [visitor identifier](https://docs.fingerprint.com/reference/js-agent-v4-get-function#visitor_id) issued by Fingerprint Identification and all active Smart Signals. Filter events by matching Visitor ID (`identification.visitor_id` property). String highRecallId = "Ibk1527CUFmcnjLwIs4A9"; // String | The High Recall ID is a supplementary browser identifier designed for use cases that require wider coverage over precision. Compared to the standard visitor ID, the High Recall ID strives to match incoming browsers more generously (rather than precisely) with existing browsers and thus identifies fewer browsers as new. The High Recall ID is best suited for use cases that are sensitive to browsers being identified as new and where mismatched browsers are not detrimental. Filter events by matching High Recall ID (`supplementary_id_high_recall.visitor_id` property). SearchEventsBot bot = SearchEventsBot.fromValue("all"); // SearchEventsBot | 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 `bot` property set to a valid value are returned. Events without a `bot` Smart Signal result are left out of the response. - SearchEventsBotInfo botInfo = SearchEventsBotInfo.fromValue("all"); // SearchEventsBotInfo | Filter events by their Bot Info result, specifically: - `all` - events where any kind of bot was detected. - `none` - events where no bot was detected. + SearchEventsBotInfo botInfo = SearchEventsBotInfo.fromValue("all"); // SearchEventsBotInfo | Filter events by their Bot Info result, specifically: - `all` - events where any kind of bot was detected. - `none` - events where no bot was detected, and no `bot_info` was present. List botInfoCategory = Arrays.asList(); // List | Filter events by their Bot Info Category. Multiple categories can be provided using the repeated keys syntax. For example, `bot_info_category=ai_agent&bot_info_category=ai_assistant`, will match events with a Bot Info Category of `ai_agent` or `ai_assistant`. Other notations like comma-separated or bracket notation are not supported. List botInfoIdentity = Arrays.asList(); // List | Filter events by their Bot Info Identity type. Multiple identity types can be provided using the repeated keys syntax. For example, `bot_info_identity=verified&bot_info_identity=signed`, will match events with a Bot Info Identity of `verified` or `signed`. Other notations like comma-separated or bracket notation are not supported. List botInfoConfidence = Arrays.asList(); // List | Filter events by their Bot Info Confidence. Multiple confidences can be provided using the repeated keys syntax. For example, `bot_info_confidence=high&bot_info_confidence=medium`, will match events with a Bot Info Confidence of `high` or `medium`. Other notations like comma-separated or bracket notation are not supported. @@ -286,20 +287,20 @@ public class FingerprintApiExample { String packageName = "com.example.app"; // String | Filter events by the Package Name (Android) associated with the event. String origin = "https://example.com"; // String | Filter events by the origin field of the event. This is applicable to web events only (e.g., https://example.com) Long start = 1767225600000L; // Long | Include events that happened after this point (with timestamp greater than or equal to the provided `start` Unix milliseconds value). Defaults to 7 days ago. Setting `start` does not change the default of `now` for `end`/`end_date_time` — adjust it separately if needed. - OffsetDateTime startDateTime = OffsetDateTime.parse("2026-01-01T00:00:00Z"); // OffsetDateTime | Include events that happened after this point (with timestamp greater than or equal to the provided `start_date_time` RFC3339 timestamp). Defaults to 7 days ago. Setting `start_date_time` does not the default of `now` for `end`/`end_date_time` — adjust it separately if needed. This parameter is an alias for `start`. - Long end = 1769903999000L; // Long | Include events that happened before this point (with timestamp less than or equal the provided `end` Unix milliseconds value). Defaults to now. Setting `end` does not change the default of `7 days ago` for `start`/`start_date_time` — adjust it separately if needed. - OffsetDateTime endDateTime = OffsetDateTime.parse("2026-01-31T23:59:59Z"); // OffsetDateTime | Include events that happened before this point (with timestamp less than or equal the provided `end_date_time` RFC3339 timestamp). Defaults to now. Setting `end_date_time` does not change the default of `7 days ago` for `start`/`start_date_time` — adjust it separately if needed. This parameter is an alias for `end`. + OffsetDateTime startDateTime = OffsetDateTime.parse("2026-01-01T00:00:00Z"); // OffsetDateTime | Include events that happened after this point (with timestamp greater than or equal to the provided `start_date_time` RFC3339 timestamp). Defaults to 7 days ago. Setting `start_date_time` does not change the default of `now` for `end`/`end_date_time` — adjust it separately if needed. This parameter is an alias for `start`. + Long end = 1769903999000L; // Long | Include events that happened before this point (with timestamp less than or equal to the provided `end` Unix milliseconds value). Defaults to now. Setting `end` does not change the default of `7 days ago` for `start`/`start_date_time` — adjust it separately if needed. + OffsetDateTime endDateTime = OffsetDateTime.parse("2026-01-31T23:59:59Z"); // OffsetDateTime | Include events that happened before this point (with timestamp less than or equal to the provided `end_date_time` RFC3339 timestamp). Defaults to now. Setting `end_date_time` does not change the default of `7 days ago` for `start`/`start_date_time` — adjust it separately if needed. This parameter is an alias for `end`. Boolean reverse = true; // Boolean | When `true`, sort events oldest first (ascending timestamp order). Defaults to `false` (newest first, descending timestamp order). Boolean suspect = true; // Boolean | Filter events previously tagged as suspicious via the [Update API](https://docs.fingerprint.com/reference/server-api-v4-update-event). > 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 `vpn` property set to `true` or `false` are returned. Events without a `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 `virtual_machine` property set to `true` or `false` are returned. Events without a `virtual_machine` Smart Signal result are left out of the response. - Boolean tampering = true; // Boolean | Filter events by Browser Tampering Detection result. > Note: When using this parameter, only events with the `tampering.result` property set to `true` or `false` are returned. Events without a `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 `tampering.anti_detect_browser` property set to `true` or `false` are returned. Events without a `tampering` Smart Signal result are left out of the response. + Boolean tampering = true; // Boolean | Filter events by Browser Tampering Detection result. > Note: When using this parameter, only events with the `tampering` property set to `true` or `false` are returned. Events without a `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 `tampering_details.anti_detect_browser` property set to `true` or `false` are returned. Events without a `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 `incognito` property set to `true` or `false` are returned. Events without an `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 `privacy_settings` property set to `true` or `false` are returned. Events without a `privacy_settings` 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 `jailbroken` property set to `true` or `false` are returned. Events without a `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 `frida` property set to `true` or `false` are returned. Events without a `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 a `factory_reset` time. Events without a `factory_reset` 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 a `factory_reset_timestamp` property populated are included. Events without a `factory_reset_timestamp` 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 `cloned_app` property set to `true` or `false` are returned. Events without a `cloned_app` 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 `emulator` property set to `true` or `false` are returned. Events without an `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 `root_apps` property set to `true` or `false` are returned. Events without a `root_apps` Smart Signal result are left out of the response. @@ -319,7 +320,7 @@ public class FingerprintApiExample { Boolean torNode = true; // Boolean | Filter events by Tor Node detection result. > Note: When using this parameter, only events with the `tor_node` property set to `true` or `false` are returned. Events without a `tor_node` detection result are left out of the response. SearchEventsIncrementalIdentificationStatus incrementalIdentificationStatus = SearchEventsIncrementalIdentificationStatus.fromValue("partially_completed"); // SearchEventsIncrementalIdentificationStatus | Filter events by their incremental identification status (`incremental_identification_status` property). Non incremental identification events are left out of the response. Boolean simulator = true; // Boolean | Filter events by iOS Simulator Detection result. > Note: When using this parameter, only events with the `simulator` property set to `true` or `false` are returned. Events without a `simulator` Smart Signal result are left out of the response. - List source = Arrays.asList(); // List | Selects the source of events to search. When omitted, only traditional identification events generated from devices are returned (the default behavior). When set to `edge`, only Automation Intelligence (Edge) events are returned. > Note: The Automation Intelligence API is in public preview testing phase. If you encounter any issues, please [contact](https://fingerprint.com/support/) our support team. + List source = Arrays.asList(); // List | Selects the source of events to search. When omitted, only traditional identification events generated from devices are returned (the default behavior). When set to `edge`, only Automation Intelligence (Edge) events are returned. To retrieve all events regardless of source, you must make two requests. One with the `source` parameter set to `edge`, and another with the `source` parameter omitted. > Note: The Automation Intelligence API is in public preview testing phase. If you encounter any issues, please [contact](https://fingerprint.com/support/) our support team. try { EventSearch result = api.searchEvents(new FingerprintApi.SearchEventsOptionalParams() .setLimit(limit) @@ -402,7 +403,7 @@ Object containing optional parameters for API method. Supports a fluent interfac | **visitorId** | **String**| Unique [visitor identifier](https://docs.fingerprint.com/reference/js-agent-v4-get-function#visitor_id) issued by Fingerprint Identification and all active Smart Signals. Filter events by matching Visitor ID (`identification.visitor_id` property). | [optional] | | **highRecallId** | **String**| The High Recall ID is a supplementary browser identifier designed for use cases that require wider coverage over precision. Compared to the standard visitor ID, the High Recall ID strives to match incoming browsers more generously (rather than precisely) with existing browsers and thus identifies fewer browsers as new. The High Recall ID is best suited for use cases that are sensitive to browsers being identified as new and where mismatched browsers are not detrimental. Filter events by matching High Recall ID (`supplementary_id_high_recall.visitor_id` property). | [optional] | | **bot** | **SearchEventsBot**| 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 `bot` property set to a valid value are returned. Events without a `bot` Smart Signal result are left out of the response. | [optional] [enum: all, good, bad, none] | -| **botInfo** | **SearchEventsBotInfo**| Filter events by their Bot Info result, specifically: - `all` - events where any kind of bot was detected. - `none` - events where no bot was detected. | [optional] [enum: all, none] | +| **botInfo** | **SearchEventsBotInfo**| Filter events by their Bot Info result, specifically: - `all` - events where any kind of bot was detected. - `none` - events where no bot was detected, and no `bot_info` was present. | [optional] [enum: all, none] | | **botInfoCategory** | **List<BotInfoCategory>**| Filter events by their Bot Info Category. Multiple categories can be provided using the repeated keys syntax. For example, `bot_info_category=ai_agent&bot_info_category=ai_assistant`, will match events with a Bot Info Category of `ai_agent` or `ai_assistant`. Other notations like comma-separated or bracket notation are not supported. | [optional] | | **botInfoIdentity** | **List<BotInfoIdentity>**| Filter events by their Bot Info Identity type. Multiple identity types can be provided using the repeated keys syntax. For example, `bot_info_identity=verified&bot_info_identity=signed`, will match events with a Bot Info Identity of `verified` or `signed`. Other notations like comma-separated or bracket notation are not supported. | [optional] | | **botInfoConfidence** | **List<BotInfoConfidence>**| Filter events by their Bot Info Confidence. Multiple confidences can be provided using the repeated keys syntax. For example, `bot_info_confidence=high&bot_info_confidence=medium`, will match events with a Bot Info Confidence of `high` or `medium`. Other notations like comma-separated or bracket notation are not supported. | [optional] | @@ -416,20 +417,20 @@ Object containing optional parameters for API method. Supports a fluent interfac | **packageName** | **String**| Filter events by the Package Name (Android) associated with the event. | [optional] | | **origin** | **String**| Filter events by the origin field of the event. This is applicable to web events only (e.g., https://example.com) | [optional] | | **start** | **Long**| Include events that happened after this point (with timestamp greater than or equal to the provided `start` Unix milliseconds value). Defaults to 7 days ago. Setting `start` does not change the default of `now` for `end`/`end_date_time` — adjust it separately if needed. | [optional] | -| **startDateTime** | **OffsetDateTime**| Include events that happened after this point (with timestamp greater than or equal to the provided `start_date_time` RFC3339 timestamp). Defaults to 7 days ago. Setting `start_date_time` does not the default of `now` for `end`/`end_date_time` — adjust it separately if needed. This parameter is an alias for `start`. | [optional] | -| **end** | **Long**| Include events that happened before this point (with timestamp less than or equal the provided `end` Unix milliseconds value). Defaults to now. Setting `end` does not change the default of `7 days ago` for `start`/`start_date_time` — adjust it separately if needed. | [optional] | -| **endDateTime** | **OffsetDateTime**| Include events that happened before this point (with timestamp less than or equal the provided `end_date_time` RFC3339 timestamp). Defaults to now. Setting `end_date_time` does not change the default of `7 days ago` for `start`/`start_date_time` — adjust it separately if needed. This parameter is an alias for `end`. | [optional] | +| **startDateTime** | **OffsetDateTime**| Include events that happened after this point (with timestamp greater than or equal to the provided `start_date_time` RFC3339 timestamp). Defaults to 7 days ago. Setting `start_date_time` does not change the default of `now` for `end`/`end_date_time` — adjust it separately if needed. This parameter is an alias for `start`. | [optional] | +| **end** | **Long**| Include events that happened before this point (with timestamp less than or equal to the provided `end` Unix milliseconds value). Defaults to now. Setting `end` does not change the default of `7 days ago` for `start`/`start_date_time` — adjust it separately if needed. | [optional] | +| **endDateTime** | **OffsetDateTime**| Include events that happened before this point (with timestamp less than or equal to the provided `end_date_time` RFC3339 timestamp). Defaults to now. Setting `end_date_time` does not change the default of `7 days ago` for `start`/`start_date_time` — adjust it separately if needed. This parameter is an alias for `end`. | [optional] | | **reverse** | **Boolean**| When `true`, sort events oldest first (ascending timestamp order). Defaults to `false` (newest first, descending timestamp order). | [optional] | | **suspect** | **Boolean**| Filter events previously tagged as suspicious via the [Update API](https://docs.fingerprint.com/reference/server-api-v4-update-event). > 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 `vpn` property set to `true` or `false` are returned. Events without a `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 `virtual_machine` property set to `true` or `false` are returned. Events without a `virtual_machine` Smart Signal result are left out of the response. | [optional] | -| **tampering** | **Boolean**| Filter events by Browser Tampering Detection result. > Note: When using this parameter, only events with the `tampering.result` property set to `true` or `false` are returned. Events without a `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 `tampering.anti_detect_browser` property set to `true` or `false` are returned. Events without a `tampering` Smart Signal result are left out of the response. | [optional] | +| **tampering** | **Boolean**| Filter events by Browser Tampering Detection result. > Note: When using this parameter, only events with the `tampering` property set to `true` or `false` are returned. Events without a `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 `tampering_details.anti_detect_browser` property set to `true` or `false` are returned. Events without a `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 `incognito` property set to `true` or `false` are returned. Events without an `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 `privacy_settings` property set to `true` or `false` are returned. Events without a `privacy_settings` 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 `jailbroken` property set to `true` or `false` are returned. Events without a `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 `frida` property set to `true` or `false` are returned. Events without a `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 a `factory_reset` time. Events without a `factory_reset` 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 a `factory_reset_timestamp` property populated are included. Events without a `factory_reset_timestamp` 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 `cloned_app` property set to `true` or `false` are returned. Events without a `cloned_app` 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 `emulator` property set to `true` or `false` are returned. Events without an `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 `root_apps` property set to `true` or `false` are returned. Events without a `root_apps` Smart Signal result are left out of the response. | [optional] | @@ -449,7 +450,7 @@ Object containing optional parameters for API method. Supports a fluent interfac | **torNode** | **Boolean**| Filter events by Tor Node detection result. > Note: When using this parameter, only events with the `tor_node` property set to `true` or `false` are returned. Events without a `tor_node` detection result are left out of the response. | [optional] | | **incrementalIdentificationStatus** | **SearchEventsIncrementalIdentificationStatus**| Filter events by their incremental identification status (`incremental_identification_status` property). Non incremental identification events are left out of the response. | [optional] [enum: partially_completed, completed] | | **simulator** | **Boolean**| Filter events by iOS Simulator Detection result. > Note: When using this parameter, only events with the `simulator` property set to `true` or `false` are returned. Events without a `simulator` Smart Signal result are left out of the response. | [optional] | -| **source** | **List<SearchEventsSource>**| Selects the source of events to search. When omitted, only traditional identification events generated from devices are returned (the default behavior). When set to `edge`, only Automation Intelligence (Edge) events are returned. > Note: The Automation Intelligence API is in public preview testing phase. If you encounter any issues, please [contact](https://fingerprint.com/support/) our support team. | [optional] | +| **source** | **List<SearchEventsSource>**| Selects the source of events to search. When omitted, only traditional identification events generated from devices are returned (the default behavior). When set to `edge`, only Automation Intelligence (Edge) events are returned. To retrieve all events regardless of source, you must make two requests. One with the `source` parameter set to `edge`, and another with the `source` parameter omitted. > Note: The Automation Intelligence API is in public preview testing phase. If you encounter any issues, please [contact](https://fingerprint.com/support/) our support team. | [optional] | ### Return type @@ -471,7 +472,9 @@ Object containing optional parameters for API method. Supports a fluent interfac | **400** | Bad request. One or more supplied search parameters are invalid, or a required parameter is missing. | - | | **403** | Forbidden. Access to this API is denied. | - | | **404** | Not found. The requested visitor does not exist in this workspace's data. | - | +| **429** | Too Many Requests. The request is throttled. To protect service stability during rare periods of extreme load, we may return HTTP 429 responses with message `too many search requests` even if you are within your assigned rate limits. | - | | **500** | Workspace error. | - | +| **504** | Gateway Timeout. Search execution exceeded the allowed timeout window. | - | ## updateEvent diff --git a/docs/RawDeviceAttributes.md b/docs/RawDeviceAttributes.md index c86bc136..b3c99e2b 100644 --- a/docs/RawDeviceAttributes.md +++ b/docs/RawDeviceAttributes.md @@ -11,7 +11,7 @@ A curated subset of raw browser/device attributes that the API surface exposes. |**fontPreferences** | [**FontPreferences**](FontPreferences.md) | | [optional] | |**emoji** | [**Emoji**](Emoji.md) | | [optional] | |**fonts** | **List<String>** | List of fonts detected on the device. | [optional] | -|**deviceMemory** | **Integer** | Rounded amount of RAM in gigabytes. | [optional] | +|**deviceMemory** | **Integer** | Rounded amount of RAM in gigabytes. Available for browsers, Android, and iOS devices. | [optional] | |**timezone** | **String** | Timezone identifier detected on the client. | [optional] | |**canvas** | [**Canvas**](Canvas.md) | | [optional] | |**languages** | **List<List<String>>** | Navigator languages reported by the agent including fallbacks. Each inner array represents ordered language preferences reported by different APIs. Available for browsers, iOS, and Android devices. | [optional] | @@ -37,8 +37,10 @@ A curated subset of raw browser/device attributes that the API surface exposes. |**deviceManufacturer** | **String** | Device manufacturer string. Available only for Android and iOS devices. | [optional] | |**fontHash** | **String** | Unique identifier for the user’s installed fonts. | [optional] | |**timezoneOffset** | **String** | UTC offset in \"±HH:MM\" format derived from the detected IANA timezone. | [optional] | -|**batteryLevel** | **Integer** | Battery charge level as a percentage (0-100). Available only for Android and iOS devices. | [optional] | +|**batteryLevel** | **Integer** | Battery charge level as a percentage (0-100). Available for Android, iOS, and web devices. On web, only available in Chromium-based browsers. | [optional] | +|**batteryCharging** | **Boolean** | When `true`, the device is currently charging. Available only for web devices on Chromium-based browsers. | [optional] | |**batteryLowPowerMode** | **Boolean** | Whether the device's low power mode is enabled. Available only for Android and iOS devices. | [optional] | +|**keyboardLayoutHash** | **String** | Unique identifier for the user's keyboard layout. | [optional] | diff --git a/docs/SearchEventsBotInfo.md b/docs/SearchEventsBotInfo.md index f1982b44..10003ac4 100644 --- a/docs/SearchEventsBotInfo.md +++ b/docs/SearchEventsBotInfo.md @@ -3,7 +3,7 @@ # SearchEventsBotInfo Filter events by their Bot Info result, specifically: - `all` - events where any kind of bot was detected. - - `none` - events where no bot was detected. + - `none` - events where no bot was detected, and no `bot_info` was present. ## Enum diff --git a/docs/Velocity.md b/docs/Velocity.md index d9abf189..b2f0df00 100644 --- a/docs/Velocity.md +++ b/docs/Velocity.md @@ -2,7 +2,7 @@ # Velocity -Sums key data points for a specific `visitor_id`, `ip_address` and `linked_id` at three distinct time intervals: 5 minutes, 1 hour, and 24 hours as follows: - Number of distinct IP addresses associated to the visitor Id. - Number of distinct linked Ids associated with the visitor Id. - Number of distinct countries associated with the visitor Id. - Number of identification events associated with the visitor Id. - Number of identification events associated with the detected IP address. - Number of distinct IP addresses associated with the provided linked Id. - Number of distinct visitor Ids associated with the provided linked Id. The `24h` interval of `distinct_ip`, `distinct_linked_id`, `distinct_country`, `distinct_ip_by_linked_id` and `distinct_visitor_id_by_linked_id` will be omitted if the number of `events` for the visitor Id in the last 24 hours (`events.['24h']`) is higher than 20.000. All will not necessarily be returned in a response, some may be omitted if the associated event does not have the required data, such as a linked_id. +Sums key data points for a specific `visitor_id`, `ip_address` and `linked_id` at three distinct time intervals: 5 minutes, 1 hour, and 24 hours as follows: - Number of distinct IP addresses associated to the visitor Id. - Number of distinct linked Ids associated with the visitor Id. - Number of distinct countries associated with the visitor Id. - Number of identification events associated with the visitor Id. - Number of identification events associated with the detected IP address. - Number of distinct IP addresses associated with the provided linked Id. - Number of distinct visitor Ids associated with the provided linked Id. The `24_hours` interval of `distinct_ip`, `distinct_linked_id`, `distinct_country`, `distinct_ip_by_linked_id` and `distinct_visitor_id_by_linked_id` will be omitted if the number of `events` for the visitor Id in the last 24 hours (`events.['24_hours']`) is higher than 20.000. All will not necessarily be returned in a response, some may be omitted if the associated event does not have the required data, such as a linked_id. ## Properties diff --git a/docs/VelocityData.md b/docs/VelocityData.md index df631770..7e7636a5 100644 --- a/docs/VelocityData.md +++ b/docs/VelocityData.md @@ -10,7 +10,7 @@ Is absent if the velocity data could not be generated for the visitor Id. |------------ | ------------- | ------------- | -------------| |**_5minutes** | **Integer** | Count for the last 5 minutes of velocity data, from the time of the event. | | |**_1hour** | **Integer** | Count for the last 1 hour of velocity data, from the time of the event. | | -|**_24hours** | **Integer** | The `24_hours` interval of `distinct_ip`, `distinct_linked_id`, `distinct_country`, `distinct_ip_by_linked_id` and `distinct_visitor_id_by_linked_id` will be omitted if the number of `events` for the visitor Id in the last 24 hours (`events.['24_hours']`) is higher than 20.000. | [optional] | +|**_24hours** | **Integer** | Count for the last 24 hours of velocity data, from the time of the event. | [optional] | diff --git a/res/fingerprint-server-api.yaml b/res/fingerprint-server-api.yaml index 68ffc32a..93b259db 100644 --- a/res/fingerprint-server-api.yaml +++ b/res/fingerprint-server-api.yaml @@ -104,7 +104,12 @@ paths: schema: $ref: '#/components/schemas/ErrorResponse' '429': - description: Too Many Requests. The request is throttled. + description: > + Too Many Requests. The request is throttled. + + To protect service stability during rare periods of extreme load, we + may return HTTP 429 responses with message `too many search + requests` even if you are within your assigned rate limits. content: application/json: schema: @@ -115,6 +120,14 @@ paths: application/json: schema: $ref: '#/components/schemas/ErrorResponse' + '504': + description: >- + Gateway Timeout. Search execution exceeded the allowed timeout + window. + content: + application/json: + schema: + $ref: '#/components/schemas/ErrorResponse' patch: tags: - Fingerprint @@ -350,7 +363,7 @@ paths: description: | Filter events by their Bot Info result, specifically: - `all` - events where any kind of bot was detected. - - `none` - events where no bot was detected. + - `none` - events where no bot was detected, and no `bot_info` was present. - name: bot_info_category in: query style: form @@ -543,8 +556,8 @@ paths: Include events that happened after this point (with timestamp greater than or equal to the provided `start_date_time` RFC3339 timestamp). Defaults to 7 days ago. Setting `start_date_time` does - not the default of `now` for `end`/`end_date_time` — adjust it - separately if needed. This parameter is an alias for `start`. + not change the default of `now` for `end`/`end_date_time` — adjust + it separately if needed. This parameter is an alias for `start`. schema: examples: - '2026-01-01T00:00:00Z' @@ -556,9 +569,10 @@ paths: in: query description: >- Include events that happened before this point (with timestamp less - than or equal the provided `end` Unix milliseconds value). Defaults - to now. Setting `end` does not change the default of `7 days ago` - for `start`/`start_date_time` — adjust it separately if needed. + than or equal to the provided `end` Unix milliseconds value). + Defaults to now. Setting `end` does not change the default of `7 + days ago` for `start`/`start_date_time` — adjust it separately if + needed. schema: examples: - 1769903999000 @@ -570,7 +584,7 @@ paths: in: query description: >- Include events that happened before this point (with timestamp less - than or equal the provided `end_date_time` RFC3339 timestamp). + than or equal to the provided `end_date_time` RFC3339 timestamp). Defaults to now. Setting `end_date_time` does not change the default of `7 days ago` for `start`/`start_date_time` — adjust it separately if needed. This parameter is an alias for `end`. @@ -627,10 +641,9 @@ paths: description: > Filter events by Browser Tampering Detection result. - > Note: When using this parameter, only events with the - `tampering.result` property set to `true` or `false` are returned. - Events without a `tampering` Smart Signal result are left out of the - response. + > Note: When using this parameter, only events with the `tampering` + property set to `true` or `false` are returned. Events without a + `tampering` Smart Signal result are left out of the response. - name: anti_detect_browser in: query schema: @@ -639,9 +652,9 @@ paths: Filter events by Anti-detect Browser Detection result. > Note: When using this parameter, only events with the - `tampering.anti_detect_browser` property set to `true` or `false` - are returned. Events without a `tampering` Smart Signal result are - left out of the response. + `tampering_details.anti_detect_browser` property set to `true` or + `false` are returned. Events without a `tampering` Smart Signal + result are left out of the response. - name: incognito in: query schema: @@ -691,8 +704,9 @@ paths: Filter events by Factory Reset Detection result. > Note: When using this parameter, only events with a - `factory_reset` time. Events without a `factory_reset` Smart Signal - result are left out of the response. + `factory_reset_timestamp` property populated are included. Events + without a `factory_reset_timestamp` Smart Signal result are left out + of the response. - name: cloned_app in: query schema: @@ -955,6 +969,11 @@ paths: Intelligence (Edge) events are returned. + To retrieve all events regardless of source, you must make two + requests. One with the `source` parameter set to `edge`, and another + with the `source` parameter omitted. + + > Note: The Automation Intelligence API is in public preview testing phase. If you encounter any issues, please [contact](https://fingerprint.com/support/) our support team. @@ -987,12 +1006,31 @@ paths: application/json: schema: $ref: '#/components/schemas/ErrorResponse' + '429': + description: > + Too Many Requests. The request is throttled. + + To protect service stability during rare periods of extreme load, we + may return HTTP 429 responses with message `too many search + requests` even if you are within your assigned rate limits. + content: + application/json: + schema: + $ref: '#/components/schemas/ErrorResponse' '500': description: Workspace error. content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' + '504': + description: >- + Gateway Timeout. Search execution exceeded the allowed timeout + window. + content: + application/json: + schema: + $ref: '#/components/schemas/ErrorResponse' /visitors/{visitor_id}: delete: tags: @@ -1211,7 +1249,7 @@ components: provider_url: type: string examples: - - https://fingerprint.com + - https://chatgpt.com description: The URL of the bot provider's website. name: type: string @@ -1977,6 +2015,12 @@ components: true device location lies within the mapped proximity zone. * Scores closer to `1` indicate high confidence that the location is inside the mapped proximity zone. * Scores closer to `0` indicate lower confidence, suggesting the true location may fall in an adjacent zone. + ActiveCall: + type: boolean + description: > + Indicates whether the mobile device had an active call (cellular or + VoIP) at the time of the request. Available from SDK 2.16.0+ on iOS and + Android. BotResult: type: string enum: @@ -1991,7 +2035,7 @@ components: BotType: type: string examples: - - fingerprint_agent + - chatgpt_agent description: | Additional classification of the bot type if detected. ClonedApp: @@ -2385,11 +2429,8 @@ components: examples: - 5 description: > - The `24_hours` interval of `distinct_ip`, `distinct_linked_id`, - `distinct_country`, `distinct_ip_by_linked_id` and - `distinct_visitor_id_by_linked_id` will be omitted if the number of - `events` for the visitor Id in the last 24 hours - (`events.['24_hours']`) is higher than 20.000. + Count for the last 24 hours of velocity data, from the time of the + event. Velocity: type: object description: > @@ -2416,7 +2457,7 @@ components: - Number of distinct visitor Ids associated with the provided linked Id. - The `24h` interval of `distinct_ip`, `distinct_linked_id`, + The `24_hours` interval of `distinct_ip`, `distinct_linked_id`, `distinct_country`, `distinct_ip_by_linked_id` and `distinct_visitor_id_by_linked_id` will @@ -2424,7 +2465,7 @@ components: if the number of `events` for the visitor Id in the last 24 - hours (`events.['24h']`) is higher than 20.000. + hours (`events.['24_hours']`) is higher than 20.000. All will not necessarily be returned in a response, some may be omitted @@ -2492,8 +2533,8 @@ components: examples: - DE description: > - Country of the request (only for Android SDK version >= 2.4.0, ISO 3166 - format or unknown). + Country of the request (Android SDK version >= 2.4.0, iOS SDK version >= + 2.9.0, JS agent >= 3.12.9 / 4.0.2), ISO 3166 format or unknown. HighActivity: type: boolean description: Flag indicating if the request came from a high-activity visitor. @@ -2636,7 +2677,9 @@ components: minimum: 0 examples: - 8 - description: Rounded amount of RAM in gigabytes. + description: >- + Rounded amount of RAM in gigabytes. Available for browsers, Android, and + iOS devices. Timezone: type: string examples: @@ -2898,13 +2941,23 @@ components: examples: - 75 description: >- - Battery charge level as a percentage (0-100). Available only for Android - and iOS devices. + Battery charge level as a percentage (0-100). Available for Android, + iOS, and web devices. On web, only available in Chromium-based browsers. + BatteryCharging: + type: boolean + description: >- + When `true`, the device is currently charging. Available only for web + devices on Chromium-based browsers. BatteryLowPowerMode: type: boolean description: >- Whether the device's low power mode is enabled. Available only for Android and iOS devices. + KeyboardLayoutHash: + type: string + examples: + - 3f33b68235d36b8821147349f1161379 + description: Unique identifier for the user's keyboard layout. RawDeviceAttributes: type: object description: > @@ -2973,8 +3026,12 @@ components: $ref: '#/components/schemas/TimezoneOffset' battery_level: $ref: '#/components/schemas/BatteryLevel' + battery_charging: + $ref: '#/components/schemas/BatteryCharging' battery_low_power_mode: $ref: '#/components/schemas/BatteryLowPowerMode' + keyboard_layout_hash: + $ref: '#/components/schemas/KeyboardLayoutHash' Labels: type: array items: @@ -3006,7 +3063,11 @@ components: type: object description: >- Contains results from Fingerprint Identification and all active Smart - Signals. + Signals. Some Smart Signals are only supported for certain device types, + these fields will be omitted for events not generated from the supported + devices. Consult the [Smart Signals + reference](https://docs.fingerprint.com/docs/smart-signals-reference) + for more details. required: - event_id - timestamp @@ -3131,6 +3192,11 @@ components: - android - ios - browser + active_call: + $ref: '#/components/schemas/ActiveCall' + x-platforms: + - android + - ios bot: $ref: '#/components/schemas/BotResult' x-platforms: @@ -3409,7 +3475,7 @@ components: description: | Filter events by their Bot Info result, specifically: - `all` - events where any kind of bot was detected. - - `none` - events where no bot was detected. + - `none` - events where no bot was detected, and no `bot_info` was present. SearchEventsVpnConfidence: type: string enum: diff --git a/sdk/src/main/java/com/fingerprint/v4/api/FingerprintApi.java b/sdk/src/main/java/com/fingerprint/v4/api/FingerprintApi.java index 48ce9b01..1e2d6cd3 100644 --- a/sdk/src/main/java/com/fingerprint/v4/api/FingerprintApi.java +++ b/sdk/src/main/java/com/fingerprint/v4/api/FingerprintApi.java @@ -177,8 +177,9 @@ public GetEventOptionalParams setRulesetId(String rulesetId) { * 400 Bad request. The event Id provided is not valid. - * 403 Forbidden. Access to this API is denied. - * 404 Not found. The event Id cannot be found in this workspace's data. - - * 429 Too Many Requests. The request is throttled. - + * 429 Too Many Requests. The request is throttled. To protect service stability during rare periods of extreme load, we may return HTTP 429 responses with message `too many search requests` even if you are within your assigned rate limits. - * 500 Workspace error. - + * 504 Gateway Timeout. Search execution exceeded the allowed timeout window. - * */ public Event getEvent(String eventId) throws ApiException { @@ -199,8 +200,9 @@ public Event getEvent(String eventId) throws ApiException { * 400 Bad request. The event Id provided is not valid. - * 403 Forbidden. Access to this API is denied. - * 404 Not found. The event Id cannot be found in this workspace's data. - - * 429 Too Many Requests. The request is throttled. - + * 429 Too Many Requests. The request is throttled. To protect service stability during rare periods of extreme load, we may return HTTP 429 responses with message `too many search requests` even if you are within your assigned rate limits. - * 500 Workspace error. - + * 504 Gateway Timeout. Search execution exceeded the allowed timeout window. - * */ public Event getEvent(String eventId, GetEventOptionalParams getEventOptionalParams) @@ -222,8 +224,9 @@ public Event getEvent(String eventId, GetEventOptionalParams getEventOptionalPar * 400 Bad request. The event Id provided is not valid. - * 403 Forbidden. Access to this API is denied. - * 404 Not found. The event Id cannot be found in this workspace's data. - - * 429 Too Many Requests. The request is throttled. - + * 429 Too Many Requests. The request is throttled. To protect service stability during rare periods of extreme load, we may return HTTP 429 responses with message `too many search requests` even if you are within your assigned rate limits. - * 500 Workspace error. - + * 504 Gateway Timeout. Search execution exceeded the allowed timeout window. - * */ public ApiResponse getEventWithHttpInfo( @@ -405,14 +408,14 @@ public SearchEventsOptionalParams setBot(SearchEventsBot bot) { } /** - * getter for botInfo - Filter events by their Bot Info result, specifically: - `all` - events where any kind of bot was detected. - `none` - events where no bot was detected. + * getter for botInfo - Filter events by their Bot Info result, specifically: - `all` - events where any kind of bot was detected. - `none` - events where no bot was detected, and no `bot_info` was present. */ public SearchEventsBotInfo getBotInfo() { return botInfo; } /** - * setter for botInfo - Filter events by their Bot Info result, specifically: - `all` - events where any kind of bot was detected. - `none` - events where no bot was detected. + * setter for botInfo - Filter events by their Bot Info result, specifically: - `all` - events where any kind of bot was detected. - `none` - events where no bot was detected, and no `bot_info` was present. */ public SearchEventsOptionalParams setBotInfo(SearchEventsBotInfo botInfo) { this.botInfo = botInfo; @@ -623,7 +626,7 @@ public SearchEventsOptionalParams setStart(Long start) { } /** - * getter for startDateTime - Include events that happened after this point (with timestamp greater than or equal to the provided `start_date_time` RFC3339 timestamp). Defaults to 7 days ago. Setting `start_date_time` does not the default of `now` for `end`/`end_date_time` — adjust it separately if needed. This parameter is an alias for `start`. + * getter for startDateTime - Include events that happened after this point (with timestamp greater than or equal to the provided `start_date_time` RFC3339 timestamp). Defaults to 7 days ago. Setting `start_date_time` does not change the default of `now` for `end`/`end_date_time` — adjust it separately if needed. This parameter is an alias for `start`. * * @see {@link #getStart} */ @@ -632,7 +635,7 @@ public OffsetDateTime getStartDateTime() { } /** - * setter for startDateTime - Include events that happened after this point (with timestamp greater than or equal to the provided `start_date_time` RFC3339 timestamp). Defaults to 7 days ago. Setting `start_date_time` does not the default of `now` for `end`/`end_date_time` — adjust it separately if needed. This parameter is an alias for `start`. + * setter for startDateTime - Include events that happened after this point (with timestamp greater than or equal to the provided `start_date_time` RFC3339 timestamp). Defaults to 7 days ago. Setting `start_date_time` does not change the default of `now` for `end`/`end_date_time` — adjust it separately if needed. This parameter is an alias for `start`. * * startDateTime is an alias for start. Invoking {@link #setStartDateTime} will also set `start` to `null` to clear an existing `start` parameter value. * @@ -645,7 +648,7 @@ public SearchEventsOptionalParams setStartDateTime(OffsetDateTime startDateTime) } /** - * getter for end - Include events that happened before this point (with timestamp less than or equal the provided `end` Unix milliseconds value). Defaults to now. Setting `end` does not change the default of `7 days ago` for `start`/`start_date_time` — adjust it separately if needed. + * getter for end - Include events that happened before this point (with timestamp less than or equal to the provided `end` Unix milliseconds value). Defaults to now. Setting `end` does not change the default of `7 days ago` for `start`/`start_date_time` — adjust it separately if needed. * * @see {@link #getEndDateTime} */ @@ -654,7 +657,7 @@ public Long getEnd() { } /** - * setter for end - Include events that happened before this point (with timestamp less than or equal the provided `end` Unix milliseconds value). Defaults to now. Setting `end` does not change the default of `7 days ago` for `start`/`start_date_time` — adjust it separately if needed. + * setter for end - Include events that happened before this point (with timestamp less than or equal to the provided `end` Unix milliseconds value). Defaults to now. Setting `end` does not change the default of `7 days ago` for `start`/`start_date_time` — adjust it separately if needed. * * end is an alias for endDateTime. Invoking {@link #setEnd} will also set `endDateTime` to `null` to clear an existing `endDateTime` parameter value. * @@ -667,7 +670,7 @@ public SearchEventsOptionalParams setEnd(Long end) { } /** - * getter for endDateTime - Include events that happened before this point (with timestamp less than or equal the provided `end_date_time` RFC3339 timestamp). Defaults to now. Setting `end_date_time` does not change the default of `7 days ago` for `start`/`start_date_time` — adjust it separately if needed. This parameter is an alias for `end`. + * getter for endDateTime - Include events that happened before this point (with timestamp less than or equal to the provided `end_date_time` RFC3339 timestamp). Defaults to now. Setting `end_date_time` does not change the default of `7 days ago` for `start`/`start_date_time` — adjust it separately if needed. This parameter is an alias for `end`. * * @see {@link #getEnd} */ @@ -676,7 +679,7 @@ public OffsetDateTime getEndDateTime() { } /** - * setter for endDateTime - Include events that happened before this point (with timestamp less than or equal the provided `end_date_time` RFC3339 timestamp). Defaults to now. Setting `end_date_time` does not change the default of `7 days ago` for `start`/`start_date_time` — adjust it separately if needed. This parameter is an alias for `end`. + * setter for endDateTime - Include events that happened before this point (with timestamp less than or equal to the provided `end_date_time` RFC3339 timestamp). Defaults to now. Setting `end_date_time` does not change the default of `7 days ago` for `start`/`start_date_time` — adjust it separately if needed. This parameter is an alias for `end`. * * endDateTime is an alias for end. Invoking {@link #setEndDateTime} will also set `end` to `null` to clear an existing `end` parameter value. * @@ -749,14 +752,14 @@ public SearchEventsOptionalParams setVirtualMachine(Boolean virtualMachine) { } /** - * getter for tampering - Filter events by Browser Tampering Detection result. > Note: When using this parameter, only events with the `tampering.result` property set to `true` or `false` are returned. Events without a `tampering` Smart Signal result are left out of the response. + * getter for tampering - Filter events by Browser Tampering Detection result. > Note: When using this parameter, only events with the `tampering` property set to `true` or `false` are returned. Events without a `tampering` Smart Signal result are left out of the response. */ public Boolean getTampering() { return tampering; } /** - * setter for tampering - Filter events by Browser Tampering Detection result. > Note: When using this parameter, only events with the `tampering.result` property set to `true` or `false` are returned. Events without a `tampering` Smart Signal result are left out of the response. + * setter for tampering - Filter events by Browser Tampering Detection result. > Note: When using this parameter, only events with the `tampering` property set to `true` or `false` are returned. Events without a `tampering` Smart Signal result are left out of the response. */ public SearchEventsOptionalParams setTampering(Boolean tampering) { this.tampering = tampering; @@ -764,14 +767,14 @@ public SearchEventsOptionalParams setTampering(Boolean tampering) { } /** - * getter for antiDetectBrowser - Filter events by Anti-detect Browser Detection result. > Note: When using this parameter, only events with the `tampering.anti_detect_browser` property set to `true` or `false` are returned. Events without a `tampering` Smart Signal result are left out of the response. + * getter for antiDetectBrowser - Filter events by Anti-detect Browser Detection result. > Note: When using this parameter, only events with the `tampering_details.anti_detect_browser` property set to `true` or `false` are returned. Events without a `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 `tampering.anti_detect_browser` property set to `true` or `false` are returned. Events without a `tampering` Smart Signal result are left out of the response. + * setter for antiDetectBrowser - Filter events by Anti-detect Browser Detection result. > Note: When using this parameter, only events with the `tampering_details.anti_detect_browser` property set to `true` or `false` are returned. Events without a `tampering` Smart Signal result are left out of the response. */ public SearchEventsOptionalParams setAntiDetectBrowser(Boolean antiDetectBrowser) { this.antiDetectBrowser = antiDetectBrowser; @@ -839,14 +842,14 @@ public SearchEventsOptionalParams setFrida(Boolean frida) { } /** - * getter for factoryReset - Filter events by Factory Reset Detection result. > Note: When using this parameter, only events with a `factory_reset` time. Events without a `factory_reset` Smart Signal result are left out of the response. + * getter for factoryReset - Filter events by Factory Reset Detection result. > Note: When using this parameter, only events with a `factory_reset_timestamp` property populated are included. Events without a `factory_reset_timestamp` 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 a `factory_reset` time. Events without a `factory_reset` Smart Signal result are left out of the response. + * setter for factoryReset - Filter events by Factory Reset Detection result. > Note: When using this parameter, only events with a `factory_reset_timestamp` property populated are included. Events without a `factory_reset_timestamp` Smart Signal result are left out of the response. */ public SearchEventsOptionalParams setFactoryReset(Boolean factoryReset) { this.factoryReset = factoryReset; @@ -1141,14 +1144,14 @@ public SearchEventsOptionalParams setSimulator(Boolean simulator) { } /** - * getter for source - Selects the source of events to search. When omitted, only traditional identification events generated from devices are returned (the default behavior). When set to `edge`, only Automation Intelligence (Edge) events are returned. > Note: The Automation Intelligence API is in public preview testing phase. If you encounter any issues, please [contact](https://fingerprint.com/support/) our support team. + * getter for source - Selects the source of events to search. When omitted, only traditional identification events generated from devices are returned (the default behavior). When set to `edge`, only Automation Intelligence (Edge) events are returned. To retrieve all events regardless of source, you must make two requests. One with the `source` parameter set to `edge`, and another with the `source` parameter omitted. > Note: The Automation Intelligence API is in public preview testing phase. If you encounter any issues, please [contact](https://fingerprint.com/support/) our support team. */ public List getSource() { return source; } /** - * setter for source - Selects the source of events to search. When omitted, only traditional identification events generated from devices are returned (the default behavior). When set to `edge`, only Automation Intelligence (Edge) events are returned. > Note: The Automation Intelligence API is in public preview testing phase. If you encounter any issues, please [contact](https://fingerprint.com/support/) our support team. + * setter for source - Selects the source of events to search. When omitted, only traditional identification events generated from devices are returned (the default behavior). When set to `edge`, only Automation Intelligence (Edge) events are returned. To retrieve all events regardless of source, you must make two requests. One with the `source` parameter set to `edge`, and another with the `source` parameter omitted. > Note: The Automation Intelligence API is in public preview testing phase. If you encounter any issues, please [contact](https://fingerprint.com/support/) our support team. */ public SearchEventsOptionalParams setSource(List source) { this.source = source; @@ -1169,7 +1172,9 @@ public SearchEventsOptionalParams setSource(List source) { * 400 Bad request. One or more supplied search parameters are invalid, or a required parameter is missing. - * 403 Forbidden. Access to this API is denied. - * 404 Not found. The requested visitor does not exist in this workspace's data. - + * 429 Too Many Requests. The request is throttled. To protect service stability during rare periods of extreme load, we may return HTTP 429 responses with message `too many search requests` even if you are within your assigned rate limits. - * 500 Workspace error. - + * 504 Gateway Timeout. Search execution exceeded the allowed timeout window. - * */ public EventSearch searchEvents(SearchEventsOptionalParams searchEventsOptionalParams) @@ -1190,7 +1195,9 @@ public EventSearch searchEvents(SearchEventsOptionalParams searchEventsOptionalP * 400 Bad request. One or more supplied search parameters are invalid, or a required parameter is missing. - * 403 Forbidden. Access to this API is denied. - * 404 Not found. The requested visitor does not exist in this workspace's data. - + * 429 Too Many Requests. The request is throttled. To protect service stability during rare periods of extreme load, we may return HTTP 429 responses with message `too many search requests` even if you are within your assigned rate limits. - * 500 Workspace error. - + * 504 Gateway Timeout. Search execution exceeded the allowed timeout window. - * */ public ApiResponse searchEventsWithHttpInfo( diff --git a/sdk/src/main/java/com/fingerprint/v4/model/Event.java b/sdk/src/main/java/com/fingerprint/v4/model/Event.java index d6aa7b45..e1aa0c5d 100644 --- a/sdk/src/main/java/com/fingerprint/v4/model/Event.java +++ b/sdk/src/main/java/com/fingerprint/v4/model/Event.java @@ -22,7 +22,7 @@ import java.util.Objects; /** - * Contains results from Fingerprint Identification and all active Smart Signals. + * Contains results from Fingerprint Identification and all active Smart Signals. Some Smart Signals are only supported for certain device types, these fields will be omitted for events not generated from the supported devices. Consult the [Smart Signals reference](https://docs.fingerprint.com/docs/smart-signals-reference) for more details. */ @JsonPropertyOrder({ Event.JSON_PROPERTY_EVENT_ID, @@ -47,6 +47,7 @@ Event.JSON_PROPERTY_CLIENT_REFERRER, Event.JSON_PROPERTY_BROWSER_DETAILS, Event.JSON_PROPERTY_PROXIMITY, + Event.JSON_PROPERTY_ACTIVE_CALL, Event.JSON_PROPERTY_BOT, Event.JSON_PROPERTY_BOT_TYPE, Event.JSON_PROPERTY_BOT_INFO, @@ -163,6 +164,9 @@ public class Event { public static final String JSON_PROPERTY_PROXIMITY = "proximity"; @jakarta.annotation.Nullable private Proximity proximity; + public static final String JSON_PROPERTY_ACTIVE_CALL = "active_call"; + @jakarta.annotation.Nullable private Boolean activeCall; + public static final String JSON_PROPERTY_BOT = "bot"; @jakarta.annotation.Nullable private BotResult bot; @@ -787,6 +791,28 @@ public void setProximity(@jakarta.annotation.Nullable Proximity proximity) { this.proximity = proximity; } + public Event activeCall(@jakarta.annotation.Nullable Boolean activeCall) { + this.activeCall = activeCall; + return this; + } + + /** + * Indicates whether the mobile device had an active call (cellular or VoIP) at the time of the request. Available from SDK 2.16.0+ on iOS and Android. + * @return activeCall + */ + @jakarta.annotation.Nullable + @JsonProperty(value = JSON_PROPERTY_ACTIVE_CALL, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public Boolean getActiveCall() { + return activeCall; + } + + @JsonProperty(value = JSON_PROPERTY_ACTIVE_CALL, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setActiveCall(@jakarta.annotation.Nullable Boolean activeCall) { + this.activeCall = activeCall; + } + public Event bot(@jakarta.annotation.Nullable BotResult bot) { this.bot = bot; return this; @@ -1551,7 +1577,7 @@ public Event vpnOriginCountry(@jakarta.annotation.Nullable String vpnOriginCount } /** - * Country of the request (only for Android SDK version >= 2.4.0, ISO 3166 format or unknown). + * Country of the request (Android SDK version >= 2.4.0, iOS SDK version >= 2.9.0, JS agent >= 3.12.9 / 4.0.2), ISO 3166 format or unknown. * @return vpnOriginCountry */ @jakarta.annotation.Nullable @@ -1746,6 +1772,7 @@ public boolean equals(Object o) { && Objects.equals(this.clientReferrer, event.clientReferrer) && Objects.equals(this.browserDetails, event.browserDetails) && Objects.equals(this.proximity, event.proximity) + && Objects.equals(this.activeCall, event.activeCall) && Objects.equals(this.bot, event.bot) && Objects.equals(this.botType, event.botType) && Objects.equals(this.botInfo, event.botInfo) @@ -1814,6 +1841,7 @@ public int hashCode() { clientReferrer, browserDetails, proximity, + activeCall, bot, botType, botInfo, @@ -1887,6 +1915,7 @@ public String toString() { sb.append(" clientReferrer: ").append(toIndentedString(clientReferrer)).append("\n"); sb.append(" browserDetails: ").append(toIndentedString(browserDetails)).append("\n"); sb.append(" proximity: ").append(toIndentedString(proximity)).append("\n"); + sb.append(" activeCall: ").append(toIndentedString(activeCall)).append("\n"); sb.append(" bot: ").append(toIndentedString(bot)).append("\n"); sb.append(" botType: ").append(toIndentedString(botType)).append("\n"); sb.append(" botInfo: ").append(toIndentedString(botInfo)).append("\n"); diff --git a/sdk/src/main/java/com/fingerprint/v4/model/RawDeviceAttributes.java b/sdk/src/main/java/com/fingerprint/v4/model/RawDeviceAttributes.java index f570446f..d51c133f 100644 --- a/sdk/src/main/java/com/fingerprint/v4/model/RawDeviceAttributes.java +++ b/sdk/src/main/java/com/fingerprint/v4/model/RawDeviceAttributes.java @@ -53,7 +53,9 @@ RawDeviceAttributes.JSON_PROPERTY_FONT_HASH, RawDeviceAttributes.JSON_PROPERTY_TIMEZONE_OFFSET, RawDeviceAttributes.JSON_PROPERTY_BATTERY_LEVEL, - RawDeviceAttributes.JSON_PROPERTY_BATTERY_LOW_POWER_MODE + RawDeviceAttributes.JSON_PROPERTY_BATTERY_CHARGING, + RawDeviceAttributes.JSON_PROPERTY_BATTERY_LOW_POWER_MODE, + RawDeviceAttributes.JSON_PROPERTY_KEYBOARD_LAYOUT_HASH }) @jakarta.annotation.Generated( value = "org.openapitools.codegen.languages.JavaClientCodegen", @@ -149,9 +151,15 @@ public class RawDeviceAttributes { public static final String JSON_PROPERTY_BATTERY_LEVEL = "battery_level"; @jakarta.annotation.Nullable private Integer batteryLevel; + public static final String JSON_PROPERTY_BATTERY_CHARGING = "battery_charging"; + @jakarta.annotation.Nullable private Boolean batteryCharging; + public static final String JSON_PROPERTY_BATTERY_LOW_POWER_MODE = "battery_low_power_mode"; @jakarta.annotation.Nullable private Boolean batteryLowPowerMode; + public static final String JSON_PROPERTY_KEYBOARD_LAYOUT_HASH = "keyboard_layout_hash"; + @jakarta.annotation.Nullable private String keyboardLayoutHash; + public RawDeviceAttributes() {} public RawDeviceAttributes fontPreferences( @@ -235,7 +243,7 @@ public RawDeviceAttributes deviceMemory(@jakarta.annotation.Nullable Integer dev } /** - * Rounded amount of RAM in gigabytes. + * Rounded amount of RAM in gigabytes. Available for browsers, Android, and iOS devices. * minimum: 0 * @return deviceMemory */ @@ -836,7 +844,7 @@ public RawDeviceAttributes batteryLevel(@jakarta.annotation.Nullable Integer bat } /** - * Battery charge level as a percentage (0-100). Available only for Android and iOS devices. + * Battery charge level as a percentage (0-100). Available for Android, iOS, and web devices. On web, only available in Chromium-based browsers. * minimum: 0 * maximum: 100 * @return batteryLevel @@ -854,6 +862,28 @@ public void setBatteryLevel(@jakarta.annotation.Nullable Integer batteryLevel) { this.batteryLevel = batteryLevel; } + public RawDeviceAttributes batteryCharging(@jakarta.annotation.Nullable Boolean batteryCharging) { + this.batteryCharging = batteryCharging; + return this; + } + + /** + * When `true`, the device is currently charging. Available only for web devices on Chromium-based browsers. + * @return batteryCharging + */ + @jakarta.annotation.Nullable + @JsonProperty(value = JSON_PROPERTY_BATTERY_CHARGING, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public Boolean getBatteryCharging() { + return batteryCharging; + } + + @JsonProperty(value = JSON_PROPERTY_BATTERY_CHARGING, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setBatteryCharging(@jakarta.annotation.Nullable Boolean batteryCharging) { + this.batteryCharging = batteryCharging; + } + public RawDeviceAttributes batteryLowPowerMode( @jakarta.annotation.Nullable Boolean batteryLowPowerMode) { this.batteryLowPowerMode = batteryLowPowerMode; @@ -877,6 +907,29 @@ public void setBatteryLowPowerMode(@jakarta.annotation.Nullable Boolean batteryL this.batteryLowPowerMode = batteryLowPowerMode; } + public RawDeviceAttributes keyboardLayoutHash( + @jakarta.annotation.Nullable String keyboardLayoutHash) { + this.keyboardLayoutHash = keyboardLayoutHash; + return this; + } + + /** + * Unique identifier for the user's keyboard layout. + * @return keyboardLayoutHash + */ + @jakarta.annotation.Nullable + @JsonProperty(value = JSON_PROPERTY_KEYBOARD_LAYOUT_HASH, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public String getKeyboardLayoutHash() { + return keyboardLayoutHash; + } + + @JsonProperty(value = JSON_PROPERTY_KEYBOARD_LAYOUT_HASH, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setKeyboardLayoutHash(@jakarta.annotation.Nullable String keyboardLayoutHash) { + this.keyboardLayoutHash = keyboardLayoutHash; + } + /** * Return true if this RawDeviceAttributes object is equal to o. */ @@ -919,7 +972,9 @@ public boolean equals(Object o) { && Objects.equals(this.fontHash, rawDeviceAttributes.fontHash) && Objects.equals(this.timezoneOffset, rawDeviceAttributes.timezoneOffset) && Objects.equals(this.batteryLevel, rawDeviceAttributes.batteryLevel) - && Objects.equals(this.batteryLowPowerMode, rawDeviceAttributes.batteryLowPowerMode); + && Objects.equals(this.batteryCharging, rawDeviceAttributes.batteryCharging) + && Objects.equals(this.batteryLowPowerMode, rawDeviceAttributes.batteryLowPowerMode) + && Objects.equals(this.keyboardLayoutHash, rawDeviceAttributes.keyboardLayoutHash); } @Override @@ -955,7 +1010,9 @@ public int hashCode() { fontHash, timezoneOffset, batteryLevel, - batteryLowPowerMode); + batteryCharging, + batteryLowPowerMode, + keyboardLayoutHash); } @Override @@ -994,9 +1051,11 @@ public String toString() { sb.append(" fontHash: ").append(toIndentedString(fontHash)).append("\n"); sb.append(" timezoneOffset: ").append(toIndentedString(timezoneOffset)).append("\n"); sb.append(" batteryLevel: ").append(toIndentedString(batteryLevel)).append("\n"); + sb.append(" batteryCharging: ").append(toIndentedString(batteryCharging)).append("\n"); sb.append(" batteryLowPowerMode: ") .append(toIndentedString(batteryLowPowerMode)) .append("\n"); + sb.append(" keyboardLayoutHash: ").append(toIndentedString(keyboardLayoutHash)).append("\n"); sb.append("}"); return sb.toString(); } diff --git a/sdk/src/main/java/com/fingerprint/v4/model/SearchEventsBotInfo.java b/sdk/src/main/java/com/fingerprint/v4/model/SearchEventsBotInfo.java index e8242ff4..bdb2f801 100644 --- a/sdk/src/main/java/com/fingerprint/v4/model/SearchEventsBotInfo.java +++ b/sdk/src/main/java/com/fingerprint/v4/model/SearchEventsBotInfo.java @@ -16,7 +16,7 @@ import com.fasterxml.jackson.annotation.JsonValue; /** - * Filter events by their Bot Info result, specifically: - `all` - events where any kind of bot was detected. - `none` - events where no bot was detected. + * Filter events by their Bot Info result, specifically: - `all` - events where any kind of bot was detected. - `none` - events where no bot was detected, and no `bot_info` was present. */ public enum SearchEventsBotInfo { ALL("all"), diff --git a/sdk/src/main/java/com/fingerprint/v4/model/Velocity.java b/sdk/src/main/java/com/fingerprint/v4/model/Velocity.java index 494c5f78..d4c670fd 100644 --- a/sdk/src/main/java/com/fingerprint/v4/model/Velocity.java +++ b/sdk/src/main/java/com/fingerprint/v4/model/Velocity.java @@ -18,7 +18,7 @@ import java.util.Objects; /** - * Sums key data points for a specific `visitor_id`, `ip_address` and `linked_id` at three distinct time intervals: 5 minutes, 1 hour, and 24 hours as follows: - Number of distinct IP addresses associated to the visitor Id. - Number of distinct linked Ids associated with the visitor Id. - Number of distinct countries associated with the visitor Id. - Number of identification events associated with the visitor Id. - Number of identification events associated with the detected IP address. - Number of distinct IP addresses associated with the provided linked Id. - Number of distinct visitor Ids associated with the provided linked Id. The `24h` interval of `distinct_ip`, `distinct_linked_id`, `distinct_country`, `distinct_ip_by_linked_id` and `distinct_visitor_id_by_linked_id` will be omitted if the number of `events` for the visitor Id in the last 24 hours (`events.['24h']`) is higher than 20.000. All will not necessarily be returned in a response, some may be omitted if the associated event does not have the required data, such as a linked_id. + * Sums key data points for a specific `visitor_id`, `ip_address` and `linked_id` at three distinct time intervals: 5 minutes, 1 hour, and 24 hours as follows: - Number of distinct IP addresses associated to the visitor Id. - Number of distinct linked Ids associated with the visitor Id. - Number of distinct countries associated with the visitor Id. - Number of identification events associated with the visitor Id. - Number of identification events associated with the detected IP address. - Number of distinct IP addresses associated with the provided linked Id. - Number of distinct visitor Ids associated with the provided linked Id. The `24_hours` interval of `distinct_ip`, `distinct_linked_id`, `distinct_country`, `distinct_ip_by_linked_id` and `distinct_visitor_id_by_linked_id` will be omitted if the number of `events` for the visitor Id in the last 24 hours (`events.['24_hours']`) is higher than 20.000. All will not necessarily be returned in a response, some may be omitted if the associated event does not have the required data, such as a linked_id. */ @JsonPropertyOrder({ Velocity.JSON_PROPERTY_DISTINCT_IP, diff --git a/sdk/src/main/java/com/fingerprint/v4/model/VelocityData.java b/sdk/src/main/java/com/fingerprint/v4/model/VelocityData.java index 949a1122..36096f7d 100644 --- a/sdk/src/main/java/com/fingerprint/v4/model/VelocityData.java +++ b/sdk/src/main/java/com/fingerprint/v4/model/VelocityData.java @@ -90,7 +90,7 @@ public VelocityData _24hours(@jakarta.annotation.Nullable Integer _24hours) { } /** - * The `24_hours` interval of `distinct_ip`, `distinct_linked_id`, `distinct_country`, `distinct_ip_by_linked_id` and `distinct_visitor_id_by_linked_id` will be omitted if the number of `events` for the visitor Id in the last 24 hours (`events.['24_hours']`) is higher than 20.000. + * Count for the last 24 hours of velocity data, from the time of the event. * @return _24hours */ @jakarta.annotation.Nullable diff --git a/sdk/src/test/resources/mocks/errors/413_payload_too_large.json b/sdk/src/test/resources/mocks/errors/413_payload_too_large.json index 96fec77e..00a1c6f9 100644 --- a/sdk/src/test/resources/mocks/errors/413_payload_too_large.json +++ b/sdk/src/test/resources/mocks/errors/413_payload_too_large.json @@ -1,6 +1,6 @@ { "error": { - "code": "request_cannot_be_parsed", + "code": "payload_too_large", "message": "payload too large" } } diff --git a/sdk/src/test/resources/mocks/events/get_event_200.json b/sdk/src/test/resources/mocks/events/get_event_200.json index d2922970..8c40bcd6 100644 --- a/sdk/src/test/resources/mocks/events/get_event_200.json +++ b/sdk/src/test/resources/mocks/events/get_event_200.json @@ -152,6 +152,11 @@ "1_hour": 1, "24_hours": 1 }, + "distinct_linked_id": { + "5_minutes": 1, + "1_hour": 5, + "24_hours": 5 + }, "distinct_country": { "5_minutes": 1, "1_hour": 2, @@ -200,103 +205,112 @@ "math": "5f030fa7d2e5f9f757bfaf81642eb1a6", "vendor": "Google Inc.", "plugins": [ - { - "description": "Portable Document Format", - "mimeTypes": [ - { - "suffixes": "pdf", - "type": "application/pdf" - }, - { - "suffixes": "pdf", - "type": "text/pdf" - } - ], - "name": "PDF Viewer" - } + { + "description": "Portable Document Format", + "mimeTypes": [ + { + "suffixes": "pdf", + "type": "application/pdf" + }, + { + "suffixes": "pdf", + "type": "text/pdf" + } + ], + "name": "PDF Viewer" + } ], "webgl_extensions": { - "context_attributes": "6b1ed336830d2bc96442a9d76373252a", - "extension_parameters": "86a8abb36f0cb30b5946dec0c761d042", - "extensions": "57233d7b10f89fcd1ff95e3837ccd72d", - "parameters": "ea118c48e308bc4b0677118bbb3019ec", - "shader_precisions": "f223dfbcd580cf142da156d93790eb83", - "unsupported_extensions": [] + "context_attributes": "6b1ed336830d2bc96442a9d76373252a", + "extension_parameters": "86a8abb36f0cb30b5946dec0c761d042", + "extensions": "57233d7b10f89fcd1ff95e3837ccd72d", + "parameters": "ea118c48e308bc4b0677118bbb3019ec", + "shader_precisions": "f223dfbcd580cf142da156d93790eb83", + "unsupported_extensions": [] }, "cookies_enabled": true, "webgl_basics": { - "renderer": "WebKit WebGL", - "renderer_unmasked": "ANGLE (Apple, ANGLE Metal Renderer: Apple M4, Unspecified Version)", - "shading_language_version": "WebGL GLSL ES 1.0 (OpenGL ES GLSL ES 1.0 Chromium)", - "vendor": "WebKit", - "vendor_unmasked": "Google Inc. (Apple)", - "version": "WebGL 1.0 (OpenGL ES 2.0 Chromium)" + "renderer": "WebKit WebGL", + "renderer_unmasked": "ANGLE (Apple, ANGLE Metal Renderer: Apple M4, Unspecified Version)", + "shading_language_version": "WebGL GLSL ES 1.0 (OpenGL ES GLSL ES 1.0 Chromium)", + "vendor": "WebKit", + "vendor_unmasked": "Google Inc. (Apple)", + "version": "WebGL 1.0 (OpenGL ES 2.0 Chromium)" }, "canvas": { - "geometry": "db3c1462576a399a03ae93d0ab9eb5c4", - "text": "70c3d3f7eb4408dc37a6bf8af1c51029", - "winding": true + "geometry": "db3c1462576a399a03ae93d0ab9eb5c4", + "text": "70c3d3f7eb4408dc37a6bf8af1c51029", + "winding": true }, "hardware_concurrency": 10, "languages": [ - [ - "en-US" - ] + [ + "en-US" + ] ], "color_depth": 24, "fonts": [ - "Arial Unicode MS", - "Gill Sans", - "Helvetica Neue", - "Menlo" + "Arial Unicode MS", + "Gill Sans", + "Helvetica Neue", + "Menlo" ], "indexed_db": true, "touch_support": { - "max_touch_points": 0, - "touch_event": false, - "touch_start": false + "max_touch_points": 0, + "touch_event": false, + "touch_start": false }, "device_memory": 8, "oscpu": "Windows NT 6.1; Win64; x64", "architecture": 127, "screen_resolution": [ - 1920, - 1080 + 1920, + 1080 ], "timezone": "America/Sao_Paulo", "emoji": { - "bottom": 32, - "font": "Times", - "height": 18, - "left": 8, - "right": 1608, - "top": 14, - "width": 1600, - "x": 8, - "y": 14 + "bottom": 32, + "font": "Times", + "height": 18, + "left": 8, + "right": 1608, + "top": 14, + "width": 1600, + "x": 8, + "y": 14 }, "font_preferences": { - "apple": 147.5625, - "default": 147.5625, - "min": 9.234375, - "mono": 133.0625, - "sans": 144.015625, - "serif": 147.5625, - "system": 146.09375 + "apple": 147.5625, + "default": 147.5625, + "min": 9.234375, + "mono": 133.0625, + "sans": 144.015625, + "serif": 147.5625, + "system": 146.09375 }, "platform": "MacIntel", "local_storage": true, "session_storage": true, "date_time_locale": "en-US", - "audio": 124.04347745512496 + "audio": 124.04347745512496, + "keyboard_layout_hash": "691e3845c85c202a1514b6fd7ef17065", + "battery_charging": true, + "battery_level": 80, + "battery_low_power_mode": true, + "timezone_offset": "-03:00", + "font_hash": "bb4d842593877975d45017c603ff5994", + "device_manufacturer": "samsung", + "device_model": "SM-S921U" }, "rare_device": false, "rare_device_percentile_bucket": "