diff --git a/.changeset/device-details-signal.md b/.changeset/device-details-signal.md new file mode 100644 index 00000000..c1d6f036 --- /dev/null +++ b/.changeset/device-details-signal.md @@ -0,0 +1,5 @@ +--- +'@fingerprint/python-sdk': minor +--- + +**events**: Add `device_details` smart signal to `Event` diff --git a/.changeset/sync-koala-v3-schema.md b/.changeset/sync-koala-v3-schema.md new file mode 100644 index 00000000..dec4e942 --- /dev/null +++ b/.changeset/sync-koala-v3-schema.md @@ -0,0 +1,5 @@ +--- +'@fingerprint/python-sdk': patch +--- + +**events**: Fix descriptions to use ID rather than Id. Clarify descriptions for Labels. diff --git a/.openapi-generator/FILES b/.openapi-generator/FILES index fe9e7dbb..161f1310 100644 --- a/.openapi-generator/FILES +++ b/.openapi-generator/FILES @@ -8,6 +8,7 @@ docs/BotResult.md docs/BrowserDetails.md docs/Canvas.md docs/DecryptionKey.md +docs/DeviceDetails.md docs/Emoji.md docs/Error.md docs/ErrorCode.md @@ -79,6 +80,7 @@ fingerprint_server_sdk/models/bot_info_identity.py fingerprint_server_sdk/models/bot_result.py fingerprint_server_sdk/models/browser_details.py fingerprint_server_sdk/models/canvas.py +fingerprint_server_sdk/models/device_details.py fingerprint_server_sdk/models/emoji.py fingerprint_server_sdk/models/error.py fingerprint_server_sdk/models/error_code.py diff --git a/.schema-version b/.schema-version index ac47b436..ea535dc5 100644 --- a/.schema-version +++ b/.schema-version @@ -1 +1 @@ -v3.7.0 \ No newline at end of file +v3.8.0 \ No newline at end of file diff --git a/README.md b/README.md index 2cd75163..6fdb372a 100644 --- a/README.md +++ b/README.md @@ -318,6 +318,7 @@ Class | Method | HTTP request | Description - [BotResult](docs/BotResult.md) - [BrowserDetails](docs/BrowserDetails.md) - [Canvas](docs/Canvas.md) + - [DeviceDetails](docs/DeviceDetails.md) - [Emoji](docs/Emoji.md) - [Error](docs/Error.md) - [ErrorCode](docs/ErrorCode.md) diff --git a/README.pypi.md b/README.pypi.md index ea4c29f9..360e1516 100644 --- a/README.pypi.md +++ b/README.pypi.md @@ -314,6 +314,7 @@ Class | Method | HTTP request | Description - [BotResult](https://github.com/fingerprintjs/python-sdk/blob/main/docs/BotResult.md) - [BrowserDetails](https://github.com/fingerprintjs/python-sdk/blob/main/docs/BrowserDetails.md) - [Canvas](https://github.com/fingerprintjs/python-sdk/blob/main/docs/Canvas.md) + - [DeviceDetails](https://github.com/fingerprintjs/python-sdk/blob/main/docs/DeviceDetails.md) - [Emoji](https://github.com/fingerprintjs/python-sdk/blob/main/docs/Emoji.md) - [Error](https://github.com/fingerprintjs/python-sdk/blob/main/docs/Error.md) - [ErrorCode](https://github.com/fingerprintjs/python-sdk/blob/main/docs/ErrorCode.md) diff --git a/docs/DeviceDetails.md b/docs/DeviceDetails.md new file mode 100644 index 00000000..b79e8631 --- /dev/null +++ b/docs/DeviceDetails.md @@ -0,0 +1,12 @@ +# DeviceDetails +Native, SDK-collected mobile device identification signals (manufacturer, model, and OS version). Structurally separate from the top-level `device`, `os`, and `os_version` fields and from `browser_details`, all of which are derived from user-agent parsing rather than native SDK signals. + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**device_manufacturer** | **str** | Raw device manufacturer string as reported by the device OS. Not normalized: casing is vendor-defined (samsung, Xiaomi, OPPO, HUAWEI). Always `Apple` on iOS. | [optional] +**device_model** | **str** | Raw device model identifier, as reported by the mobile OS. | [optional] +**os_version** | **str** | Mobile operating system version. Component count is not fixed and must not be assumed by consumers: iOS always reports `major.minor.patch` (e.g. `17.4.1`), while Android's precision varies by OS era and which raw signal resolved it — `major` only (`9`, `13`) since Android 10 dropped point releases, `major.minor` (`16.1`) from Android 16 (API 36+) reintroducing a minor component, or a genuine `major.minor.patch` (`8.1.0`) on pre-Android 10 devices that shipped real point releases. Never a fabricated/zero-padded component. | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + diff --git a/docs/Event.md b/docs/Event.md index 93434207..e1829283 100644 --- a/docs/Event.md +++ b/docs/Event.md @@ -8,16 +8,16 @@ Name | Type | Description | Notes **timestamp** | **int** | Timestamp of the event with millisecond precision in Unix time. | **source** | [**EventSource**](EventSource.md) | | [optional] **incremental_identification_status** | [**IncrementalIdentificationStatus**](IncrementalIdentificationStatus.md) | | [optional] -**linked_id** | **str** | A customer-provided id that was sent with the request. | [optional] -**environment_id** | **str** | Environment Id of the event. | [optional] -**suspect** | **bool** | Field is `true` if you have previously set the `suspect` flag for this event using the [Server API Update event endpoint](https://docs.fingerprint.com/reference/server-api-v4-update-event). | [optional] +**linked_id** | **str** | A customer-provided ID that was sent with the request. | [optional] +**environment_id** | **str** | Environment ID of the event. | [optional] +**suspect** | **bool** | Field is `true` if you have previously set the `suspect` flag for this event using the [Server API Update event endpoint](https://docs.fingerprint.com/reference/server-api-update-event). | [optional] **sdk** | [**SDK**](SDK.md) | | [optional] **replayed** | **bool** | `true` if we determined that this payload was replayed, `false` otherwise. | [optional] **identification** | [**Identification**](Identification.md) | | [optional] **supplementary_id_high_recall** | [**SupplementaryIDHighRecall**](SupplementaryIDHighRecall.md) | | [optional] **tags** | **Dict[str, object]** | A customer-provided value or an object that was sent with the identification request or updated later. | [optional] **url** | **str** | Page URL from which the request was sent. | [optional] -**bundle_id** | **str** | Bundle Id of the iOS application integrated with the Fingerprint SDK for the event. | [optional] +**bundle_id** | **str** | Bundle ID of the iOS application integrated with the Fingerprint SDK for the event. | [optional] **package_name** | **str** | Package name of the Android application integrated with the Fingerprint SDK for the event. | [optional] **ip_address** | **str** | IP address of the requesting browser or bot. | [optional] **user_agent** | **str** | User Agent of the client. | [optional] @@ -33,6 +33,7 @@ Name | Type | Description | Notes **bot_info** | [**BotInfo**](BotInfo.md) | | [optional] **cloned_app** | **bool** | Android specific cloned application detection. There are 2 values: * `true` - Presence of app cloners work detected (e.g. fully cloned application found or launch of it inside of a not main working profile detected). * `false` - No signs of cloned application detected or the client is not Android. | [optional] **developer_tools** | **bool** | `true` if the browser has DevTools open (Chrome, Firefox) or the Android/iOS device has Developer Tools enabled, `false` otherwise. | [optional] +**device_details** | [**DeviceDetails**](DeviceDetails.md) | | [optional] **emulator** | **bool** | Android specific emulator detection. There are 2 values: * `true` - Emulated environment detected (e.g. launch inside of AVD). * `false` - No signs of emulated environment detected or the client is not Android. | [optional] **factory_reset_timestamp** | **int** | The time of the most recent factory reset that happened on the **mobile device** is expressed as Unix epoch time. When a factory reset cannot be detected on the mobile device or when the request is initiated from a browser, this field will correspond to the *epoch* time (i.e 1 Jan 1970 UTC) as a value of 0. See [Factory Reset Detection](https://docs.fingerprint.com/docs/smart-signals-reference#factory-reset-detection) to learn more about this Smart Signal. | [optional] **frida** | **bool** | [Frida](https://frida.re/docs/) detection for Android and iOS devices. There are 2 values: * `true` - Frida detected * `false` - No signs of Frida or the client is not a mobile device. | [optional] diff --git a/docs/FingerprintApi.md b/docs/FingerprintApi.md index 785d4333..bbecdf4f 100644 --- a/docs/FingerprintApi.md +++ b/docs/FingerprintApi.md @@ -63,7 +63,7 @@ configuration = fingerprint_server_sdk.Configuration( # Create an instance of the API class api_instance = fingerprint_server_sdk.FingerprintApi(configuration) -visitor_id: str = 'Ibk1527CUFmcnjLwIs4A9' # The [visitor ID](https://docs.fingerprint.com/reference/js-agent-v4-get-function#visitor_id) you want to delete. +visitor_id: str = 'Ibk1527CUFmcnjLwIs4A9' # The [visitor ID](https://docs.fingerprint.com/reference/js-agent-get-function#visitor_id) you want to delete. try: # Delete a visitor ID @@ -84,7 +84,7 @@ except ApiException as e: Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- - **visitor_id** | **str**| The [visitor ID](https://docs.fingerprint.com/reference/js-agent-v4-get-function#visitor_id) you want to delete. | + **visitor_id** | **str**| The [visitor ID](https://docs.fingerprint.com/reference/js-agent-get-function#visitor_id) you want to delete. | ### Return type @@ -137,7 +137,7 @@ configuration = fingerprint_server_sdk.Configuration( # Create an instance of the API class api_instance = fingerprint_server_sdk.FingerprintApi(configuration) -event_id: str = '1708102555327.NLOjmg' # The unique [identifier](https://docs.fingerprint.com/reference/js-agent-v4-get-function#event_id) of each identification request (`requestId` can be used in its place). +event_id: str = '1708102555327.NLOjmg' # The unique [identifier](https://docs.fingerprint.com/reference/js-agent-get-function#event_id) of each identification request (`requestId` can be used in its place). ruleset_id: str = 'D6N9Kbk9HRWrIWGz' # The ID of the ruleset to evaluate against the event, producing the action to take for this event. The resulting action is returned in the `rule_action` attribute of the response. (optional) try: @@ -161,7 +161,7 @@ except ApiException as e: Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- - **event_id** | **str**| The unique [identifier](https://docs.fingerprint.com/reference/js-agent-v4-get-function#event_id) of each identification request (`requestId` can be used in its place). | + **event_id** | **str**| The unique [identifier](https://docs.fingerprint.com/reference/js-agent-get-function#event_id) of each identification request (`requestId` can be used in its place). | **ruleset_id** | **str**| The ID of the ruleset to evaluate against the event, producing the action to take for this event. The resulting action is returned in the `rule_action` attribute of the response. | [optional] ### Return type @@ -178,9 +178,9 @@ Name | Type | Description | Notes | Status code | Description | Response headers | |-------------|-------------|------------------| **200** | OK. | - | -**400** | Bad request. The event Id provided is not valid. | - | +**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. | - | +**404** | Not found. The event ID cannot be found 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. | - | @@ -252,7 +252,7 @@ api_instance = fingerprint_server_sdk.FingerprintApi(configuration) limit: int = 10 # Maximum number of events to return. Defaults to 10 when omitted. Results are selected from the time range (`start`, `end`), ordered by `reverse`, then truncated to provided `limit` size. So `reverse=true` returns the oldest N=`limit` events, otherwise the newest N=`limit` events. (optional) pagination_key: str = 'S9rgMMUb4z3X5t5pr_tSgoSZlmyF0O8X7kCV2m981-iY1LmRTjraa1rTk3L-hQExnDWCi0RA-zAIjaVSTNO2AN2eqQWgzT0RjbieMxRfSdkM-HmOhdOgdQvYfPG3vqU1DJKh4Q' # Use `pagination_key` to get the next page of results. When more results are available (e.g., you requested up to 100 results for your query using `limit`, but there are more than 100 events total matching your request), the `pagination_key` field is added to the response. The pagination key is an arbitrary string that should not be interpreted in any way and should be passed as-is. 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 100 events: `GET api-base-url/events?limit=100` 2. Use `response.pagination_key` to get the next page of results: `GET api-base-url/events?limit=100&pagination_key=S9rgMMUb4z3X5t5pr_tSgoSZlmyF0O8X7kCV2m981-iY1LmRTjraa1rTk3L-hQExnDWCi0RA-zAIjaVSTNO2AN2eqQWgzT0RjbieMxRfSdkM-HmOhdOgdQvYfPG3vqU1DJKh4Q` (optional) -visitor_id: str = 'Ibk1527CUFmcnjLwIs4A9' # 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) +visitor_id: str = 'Ibk1527CUFmcnjLwIs4A9' # Unique [visitor identifier](https://docs.fingerprint.com/reference/js-agent-get-function#visitor_id) issued by Fingerprint Identification and all active Smart Signals. Filter events by matching Visitor ID (`identification.visitor_id` property). (optional) high_recall_id: str = 'Ibk1527CUFmcnjLwIs4A9' # 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 = fingerprint_server_sdk.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) bot_info: SearchEventsBotInfo = fingerprint_server_sdk.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) @@ -263,7 +263,7 @@ bot_info_provider: List[str] = ['bot_info_provider_example'] # Filter events by bot_info_name: List[str] = ['bot_info_name_example'] # Filter events by their Bot Info Name. The name must match exactly, partial or wildcard matching is not supported. Multiple Names can be provided using the repeated keys syntax. For example, `bot_info_name=ChatGPT%20Agent&bot_info_name=Bedrock%20AgentCore`, will match events with a Bot Info Name of `ChatGPT Agent` or `Bedrock AgentCore`. Other notations like comma-separated or bracket notation are not supported. (optional) ip_address: str = '61.127.217.15' # Filter events by IP address or IP range (if CIDR notation is used). If CIDR notation is not used, a /32 for IPv4 or /128 for IPv6 is assumed. Examples of range based queries: 10.0.0.0/24, 192.168.0.1/32 (optional) asn: str = '12876' # Filter events by the ASN associated with the event's IP address. This corresponds to the `ip_info.(v4|v6).asn` property in the response. (optional) -linked_id: str = 'somelinkedId' # Filter events by your custom identifier. You can use [linked Ids](https://docs.fingerprint.com/reference/js-agent-v4-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) +linked_id: str = 'somelinkedId' # Filter events by your custom identifier. You can use [linked IDs](https://docs.fingerprint.com/reference/js-agent-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) url: str = 'https://example.com/login' # Filter events by the URL (`url` property) associated with the event. (optional) bundle_id: str = 'com.example.app' # Filter events by the Bundle ID (iOS) associated with the event. (optional) package_name: str = 'com.example.app' # Filter events by the Package Name (Android) associated with the event. (optional) @@ -326,7 +326,7 @@ Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- **limit** | **int**| Maximum number of events to return. Defaults to 10 when omitted. Results are selected from the time range (`start`, `end`), ordered by `reverse`, then truncated to provided `limit` size. So `reverse=true` returns the oldest N=`limit` events, otherwise the newest N=`limit` events. | [optional] **pagination_key** | **str**| Use `pagination_key` to get the next page of results. When more results are available (e.g., you requested up to 100 results for your query using `limit`, but there are more than 100 events total matching your request), the `pagination_key` field is added to the response. The pagination key is an arbitrary string that should not be interpreted in any way and should be passed as-is. 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 100 events: `GET api-base-url/events?limit=100` 2. Use `response.pagination_key` to get the next page of results: `GET api-base-url/events?limit=100&pagination_key=S9rgMMUb4z3X5t5pr_tSgoSZlmyF0O8X7kCV2m981-iY1LmRTjraa1rTk3L-hQExnDWCi0RA-zAIjaVSTNO2AN2eqQWgzT0RjbieMxRfSdkM-HmOhdOgdQvYfPG3vqU1DJKh4Q` | [optional] - **visitor_id** | **str**| 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] + **visitor_id** | **str**| Unique [visitor identifier](https://docs.fingerprint.com/reference/js-agent-get-function#visitor_id) issued by Fingerprint Identification and all active Smart Signals. Filter events by matching Visitor ID (`identification.visitor_id` property). | [optional] **high_recall_id** | **str**| 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**](.md)| 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] **bot_info** | [**SearchEventsBotInfo**](.md)| 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] @@ -337,7 +337,7 @@ Name | Type | Description | Notes **bot_info_name** | [**List[str]**](str.md)| Filter events by their Bot Info Name. The name must match exactly, partial or wildcard matching is not supported. Multiple Names can be provided using the repeated keys syntax. For example, `bot_info_name=ChatGPT%20Agent&bot_info_name=Bedrock%20AgentCore`, will match events with a Bot Info Name of `ChatGPT Agent` or `Bedrock AgentCore`. Other notations like comma-separated or bracket notation are not supported. | [optional] **ip_address** | **str**| Filter events by IP address or IP range (if CIDR notation is used). If CIDR notation is not used, a /32 for IPv4 or /128 for IPv6 is assumed. Examples of range based queries: 10.0.0.0/24, 192.168.0.1/32 | [optional] **asn** | **str**| Filter events by the ASN associated with the event's IP address. This corresponds to the `ip_info.(v4|v6).asn` property in the response. | [optional] - **linked_id** | **str**| Filter events by your custom identifier. You can use [linked Ids](https://docs.fingerprint.com/reference/js-agent-v4-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] + **linked_id** | **str**| Filter events by your custom identifier. You can use [linked IDs](https://docs.fingerprint.com/reference/js-agent-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] **url** | **str**| Filter events by the URL (`url` property) associated with the event. | [optional] **bundle_id** | **str**| Filter events by the Bundle ID (iOS) associated with the event. | [optional] **package_name** | **str**| Filter events by the Package Name (Android) associated with the event. | [optional] @@ -436,7 +436,7 @@ configuration = fingerprint_server_sdk.Configuration( # Create an instance of the API class api_instance = fingerprint_server_sdk.FingerprintApi(configuration) -event_id: str = '1708102555327.NLOjmg' # The unique event [identifier](https://docs.fingerprint.com/reference/js-agent-v4-get-function#event_id). +event_id: str = '1708102555327.NLOjmg' # The unique event [identifier](https://docs.fingerprint.com/reference/js-agent-get-function#event_id). event_update: EventUpdate = fingerprint_server_sdk.EventUpdate() # try: @@ -458,7 +458,7 @@ except ApiException as e: Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- - **event_id** | **str**| The unique event [identifier](https://docs.fingerprint.com/reference/js-agent-v4-get-function#event_id). | + **event_id** | **str**| The unique event [identifier](https://docs.fingerprint.com/reference/js-agent-get-function#event_id). | **event_update** | [**EventUpdate**](EventUpdate.md)| | ### Return type @@ -477,7 +477,7 @@ void (empty response body) **200** | OK. | - | **400** | Bad request. The request payload 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. | - | +**404** | Not found. The event ID cannot be found in this workspace's data. | - | **409** | Conflict. The event is not mutable yet. | - | [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) diff --git a/docs/LabelsInner.md b/docs/LabelsInner.md index c10cd3bd..3978fa9c 100644 --- a/docs/LabelsInner.md +++ b/docs/LabelsInner.md @@ -2,9 +2,9 @@ ## Properties Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- -**label** | **str** | | +**label** | **str** | Customer-facing label name defined by the customer. | **prediction** | **bool** | | [optional] -**ml_score** | **float** | | [optional] +**ml_score** | **float** | Raw model score between 0 and 1. | [optional] [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/docs/Velocity.md b/docs/Velocity.md index c56f873d..1c6cfd83 100644 --- a/docs/Velocity.md +++ b/docs/Velocity.md @@ -2,17 +2,17 @@ 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 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. +- 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 +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 diff --git a/docs/VelocityData.md b/docs/VelocityData.md index ae656ac5..99ae0a88 100644 --- a/docs/VelocityData.md +++ b/docs/VelocityData.md @@ -1,5 +1,5 @@ # VelocityData -Is absent if the velocity data could not be generated for the visitor Id. +Is absent if the velocity data could not be generated for the visitor ID. ## Properties diff --git a/fingerprint_server_sdk/__init__.py b/fingerprint_server_sdk/__init__.py index afa630bd..2ac69845 100644 --- a/fingerprint_server_sdk/__init__.py +++ b/fingerprint_server_sdk/__init__.py @@ -50,6 +50,7 @@ 'BotResult', 'BrowserDetails', 'Canvas', + 'DeviceDetails', 'Emoji', 'Error', 'ErrorCode', @@ -137,6 +138,7 @@ from fingerprint_server_sdk.models.bot_result import BotResult from fingerprint_server_sdk.models.browser_details import BrowserDetails from fingerprint_server_sdk.models.canvas import Canvas +from fingerprint_server_sdk.models.device_details import DeviceDetails from fingerprint_server_sdk.models.emoji import Emoji from fingerprint_server_sdk.models.error import Error from fingerprint_server_sdk.models.error_code import ErrorCode diff --git a/fingerprint_server_sdk/api/fingerprint_api.py b/fingerprint_server_sdk/api/fingerprint_api.py index eb22c9f2..aca258fb 100644 --- a/fingerprint_server_sdk/api/fingerprint_api.py +++ b/fingerprint_server_sdk/api/fingerprint_api.py @@ -71,7 +71,7 @@ def delete_visitor_data( visitor_id: Annotated[ StrictStr, Field( - description='The [visitor ID](https://docs.fingerprint.com/reference/js-agent-v4-get-function#visitor_id) you want to delete.' + description='The [visitor ID](https://docs.fingerprint.com/reference/js-agent-get-function#visitor_id) you want to delete.' ), ], _request_timeout: Union[ @@ -87,7 +87,7 @@ def delete_visitor_data( Use this API to request the deletion of all data associated with a specific visitor ID. Upon a request to delete data for a visitor ID, - The data collected from the corresponding browser (or device) will be deleted asynchronously, typically within a few minutes. This data will no longer be available to identify this browser (or device). When the same browser (or device) revisits, it will receive a new visitor ID. - The identification events made from this browser (or device) in the past 10 days are typically deleted within 24 hrs. - The identification events made from this browser (or device) outside of the 10 days will be purged as per your [data retention period](https://docs.fingerprint.com/docs/regions#data-retention). The following timeline illustrates which events are deleted and which remain after a DELETE API request: ``` Day 1: First visit from browser A. (Assigned visitor ID: VID1000) Day 2: Browser A revisits. (Assigned the same visitor ID: VID1000) Day 13: Browser A revisits. (Assigned the same visitor ID: VID1000) Day 14: Delete VID1000 Day 15: Browser A re-visits. (Assigned a different visitor ID: VID9999) Day 15: GET /events/day-13 (Returns 404. The event is within the 10 days of deleting VID1000 and will have been deleted) Day 16: GET /events/day-2 (Returns 200. The event is outside of the 10 days of deleting VID1000 and is still available) ``` ### Availability This API is available only for Enterprise plans **upon request**. If you are interested, please [contact our support team](https://fingerprint.com/support/). ### Rate limits and daily quota The rate limits and daily quota for this API **differ** from those for our other API. The maximum number of DELETE requests that can be made in an hour cannot exceed 30 RPH, and the maximum number that can be made in a day cannot exceed 500 RPD. You can request an increase to these limits by contacting [our support team](https://fingerprint.com/support/). - :param visitor_id: The [visitor ID](https://docs.fingerprint.com/reference/js-agent-v4-get-function#visitor_id) you want to delete. (required) + :param visitor_id: The [visitor ID](https://docs.fingerprint.com/reference/js-agent-get-function#visitor_id) you want to delete. (required) :type visitor_id: str :param _request_timeout: timeout setting for this request. If one number provided, it will be total request @@ -135,7 +135,7 @@ def delete_visitor_data_with_http_info( visitor_id: Annotated[ StrictStr, Field( - description='The [visitor ID](https://docs.fingerprint.com/reference/js-agent-v4-get-function#visitor_id) you want to delete.' + description='The [visitor ID](https://docs.fingerprint.com/reference/js-agent-get-function#visitor_id) you want to delete.' ), ], _request_timeout: Union[ @@ -151,7 +151,7 @@ def delete_visitor_data_with_http_info( Use this API to request the deletion of all data associated with a specific visitor ID. Upon a request to delete data for a visitor ID, - The data collected from the corresponding browser (or device) will be deleted asynchronously, typically within a few minutes. This data will no longer be available to identify this browser (or device). When the same browser (or device) revisits, it will receive a new visitor ID. - The identification events made from this browser (or device) in the past 10 days are typically deleted within 24 hrs. - The identification events made from this browser (or device) outside of the 10 days will be purged as per your [data retention period](https://docs.fingerprint.com/docs/regions#data-retention). The following timeline illustrates which events are deleted and which remain after a DELETE API request: ``` Day 1: First visit from browser A. (Assigned visitor ID: VID1000) Day 2: Browser A revisits. (Assigned the same visitor ID: VID1000) Day 13: Browser A revisits. (Assigned the same visitor ID: VID1000) Day 14: Delete VID1000 Day 15: Browser A re-visits. (Assigned a different visitor ID: VID9999) Day 15: GET /events/day-13 (Returns 404. The event is within the 10 days of deleting VID1000 and will have been deleted) Day 16: GET /events/day-2 (Returns 200. The event is outside of the 10 days of deleting VID1000 and is still available) ``` ### Availability This API is available only for Enterprise plans **upon request**. If you are interested, please [contact our support team](https://fingerprint.com/support/). ### Rate limits and daily quota The rate limits and daily quota for this API **differ** from those for our other API. The maximum number of DELETE requests that can be made in an hour cannot exceed 30 RPH, and the maximum number that can be made in a day cannot exceed 500 RPD. You can request an increase to these limits by contacting [our support team](https://fingerprint.com/support/). - :param visitor_id: The [visitor ID](https://docs.fingerprint.com/reference/js-agent-v4-get-function#visitor_id) you want to delete. (required) + :param visitor_id: The [visitor ID](https://docs.fingerprint.com/reference/js-agent-get-function#visitor_id) you want to delete. (required) :type visitor_id: str :param _request_timeout: timeout setting for this request. If one number provided, it will be total request @@ -199,7 +199,7 @@ def delete_visitor_data_without_preload_content( visitor_id: Annotated[ StrictStr, Field( - description='The [visitor ID](https://docs.fingerprint.com/reference/js-agent-v4-get-function#visitor_id) you want to delete.' + description='The [visitor ID](https://docs.fingerprint.com/reference/js-agent-get-function#visitor_id) you want to delete.' ), ], _request_timeout: Union[ @@ -215,7 +215,7 @@ def delete_visitor_data_without_preload_content( Use this API to request the deletion of all data associated with a specific visitor ID. Upon a request to delete data for a visitor ID, - The data collected from the corresponding browser (or device) will be deleted asynchronously, typically within a few minutes. This data will no longer be available to identify this browser (or device). When the same browser (or device) revisits, it will receive a new visitor ID. - The identification events made from this browser (or device) in the past 10 days are typically deleted within 24 hrs. - The identification events made from this browser (or device) outside of the 10 days will be purged as per your [data retention period](https://docs.fingerprint.com/docs/regions#data-retention). The following timeline illustrates which events are deleted and which remain after a DELETE API request: ``` Day 1: First visit from browser A. (Assigned visitor ID: VID1000) Day 2: Browser A revisits. (Assigned the same visitor ID: VID1000) Day 13: Browser A revisits. (Assigned the same visitor ID: VID1000) Day 14: Delete VID1000 Day 15: Browser A re-visits. (Assigned a different visitor ID: VID9999) Day 15: GET /events/day-13 (Returns 404. The event is within the 10 days of deleting VID1000 and will have been deleted) Day 16: GET /events/day-2 (Returns 200. The event is outside of the 10 days of deleting VID1000 and is still available) ``` ### Availability This API is available only for Enterprise plans **upon request**. If you are interested, please [contact our support team](https://fingerprint.com/support/). ### Rate limits and daily quota The rate limits and daily quota for this API **differ** from those for our other API. The maximum number of DELETE requests that can be made in an hour cannot exceed 30 RPH, and the maximum number that can be made in a day cannot exceed 500 RPD. You can request an increase to these limits by contacting [our support team](https://fingerprint.com/support/). - :param visitor_id: The [visitor ID](https://docs.fingerprint.com/reference/js-agent-v4-get-function#visitor_id) you want to delete. (required) + :param visitor_id: The [visitor ID](https://docs.fingerprint.com/reference/js-agent-get-function#visitor_id) you want to delete. (required) :type visitor_id: str :param _request_timeout: timeout setting for this request. If one number provided, it will be total request @@ -304,7 +304,7 @@ def get_event( event_id: Annotated[ StrictStr, Field( - description='The unique [identifier](https://docs.fingerprint.com/reference/js-agent-v4-get-function#event_id) of each identification request (`requestId` can be used in its place).' + description='The unique [identifier](https://docs.fingerprint.com/reference/js-agent-get-function#event_id) of each identification request (`requestId` can be used in its place).' ), ], ruleset_id: Annotated[ @@ -326,7 +326,7 @@ def get_event( Get a detailed analysis of an individual identification event, including Smart Signals. Use `event_id` as the URL path parameter. This API method is scoped to a request, i.e. all returned information is by `event_id`. - :param event_id: The unique [identifier](https://docs.fingerprint.com/reference/js-agent-v4-get-function#event_id) of each identification request (`requestId` can be used in its place). (required) + :param event_id: The unique [identifier](https://docs.fingerprint.com/reference/js-agent-get-function#event_id) of each identification request (`requestId` can be used in its place). (required) :type event_id: str :param ruleset_id: The ID of the ruleset to evaluate against the event, producing the action to take for this event. The resulting action is returned in the `rule_action` attribute of the response. :type ruleset_id: str @@ -379,7 +379,7 @@ def get_event_with_http_info( event_id: Annotated[ StrictStr, Field( - description='The unique [identifier](https://docs.fingerprint.com/reference/js-agent-v4-get-function#event_id) of each identification request (`requestId` can be used in its place).' + description='The unique [identifier](https://docs.fingerprint.com/reference/js-agent-get-function#event_id) of each identification request (`requestId` can be used in its place).' ), ], ruleset_id: Annotated[ @@ -401,7 +401,7 @@ def get_event_with_http_info( Get a detailed analysis of an individual identification event, including Smart Signals. Use `event_id` as the URL path parameter. This API method is scoped to a request, i.e. all returned information is by `event_id`. - :param event_id: The unique [identifier](https://docs.fingerprint.com/reference/js-agent-v4-get-function#event_id) of each identification request (`requestId` can be used in its place). (required) + :param event_id: The unique [identifier](https://docs.fingerprint.com/reference/js-agent-get-function#event_id) of each identification request (`requestId` can be used in its place). (required) :type event_id: str :param ruleset_id: The ID of the ruleset to evaluate against the event, producing the action to take for this event. The resulting action is returned in the `rule_action` attribute of the response. :type ruleset_id: str @@ -454,7 +454,7 @@ def get_event_without_preload_content( event_id: Annotated[ StrictStr, Field( - description='The unique [identifier](https://docs.fingerprint.com/reference/js-agent-v4-get-function#event_id) of each identification request (`requestId` can be used in its place).' + description='The unique [identifier](https://docs.fingerprint.com/reference/js-agent-get-function#event_id) of each identification request (`requestId` can be used in its place).' ), ], ruleset_id: Annotated[ @@ -476,7 +476,7 @@ def get_event_without_preload_content( Get a detailed analysis of an individual identification event, including Smart Signals. Use `event_id` as the URL path parameter. This API method is scoped to a request, i.e. all returned information is by `event_id`. - :param event_id: The unique [identifier](https://docs.fingerprint.com/reference/js-agent-v4-get-function#event_id) of each identification request (`requestId` can be used in its place). (required) + :param event_id: The unique [identifier](https://docs.fingerprint.com/reference/js-agent-get-function#event_id) of each identification request (`requestId` can be used in its place). (required) :type event_id: str :param ruleset_id: The ID of the ruleset to evaluate against the event, producing the action to take for this event. The resulting action is returned in the `rule_action` attribute of the response. :type ruleset_id: str @@ -587,7 +587,7 @@ def search_events( visitor_id: Annotated[ Optional[StrictStr], Field( - description='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). ' + description='Unique [visitor identifier](https://docs.fingerprint.com/reference/js-agent-get-function#visitor_id) issued by Fingerprint Identification and all active Smart Signals. Filter events by matching Visitor ID (`identification.visitor_id` property). ' ), ] = None, high_recall_id: Annotated[ @@ -653,7 +653,7 @@ def search_events( linked_id: Annotated[ Optional[StrictStr], Field( - description='Filter events by your custom identifier. You can use [linked Ids](https://docs.fingerprint.com/reference/js-agent-v4-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. ' + description='Filter events by your custom identifier. You can use [linked IDs](https://docs.fingerprint.com/reference/js-agent-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. ' ), ] = None, url: Annotated[ @@ -899,7 +899,7 @@ def search_events( :type limit: int :param pagination_key: Use `pagination_key` to get the next page of results. When more results are available (e.g., you requested up to 100 results for your query using `limit`, but there are more than 100 events total matching your request), the `pagination_key` field is added to the response. The pagination key is an arbitrary string that should not be interpreted in any way and should be passed as-is. 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 100 events: `GET api-base-url/events?limit=100` 2. Use `response.pagination_key` to get the next page of results: `GET api-base-url/events?limit=100&pagination_key=S9rgMMUb4z3X5t5pr_tSgoSZlmyF0O8X7kCV2m981-iY1LmRTjraa1rTk3L-hQExnDWCi0RA-zAIjaVSTNO2AN2eqQWgzT0RjbieMxRfSdkM-HmOhdOgdQvYfPG3vqU1DJKh4Q` :type pagination_key: str - :param visitor_id: 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). + :param visitor_id: Unique [visitor identifier](https://docs.fingerprint.com/reference/js-agent-get-function#visitor_id) issued by Fingerprint Identification and all active Smart Signals. Filter events by matching Visitor ID (`identification.visitor_id` property). :type visitor_id: str :param high_recall_id: 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). :type high_recall_id: str @@ -921,7 +921,7 @@ def search_events( :type ip_address: str :param asn: Filter events by the ASN associated with the event's IP address. This corresponds to the `ip_info.(v4|v6).asn` property in the response. :type asn: str - :param linked_id: Filter events by your custom identifier. You can use [linked Ids](https://docs.fingerprint.com/reference/js-agent-v4-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. + :param linked_id: Filter events by your custom identifier. You can use [linked IDs](https://docs.fingerprint.com/reference/js-agent-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. :type linked_id: str :param url: Filter events by the URL (`url` property) associated with the event. :type url: str @@ -1110,7 +1110,7 @@ def search_events_with_http_info( visitor_id: Annotated[ Optional[StrictStr], Field( - description='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). ' + description='Unique [visitor identifier](https://docs.fingerprint.com/reference/js-agent-get-function#visitor_id) issued by Fingerprint Identification and all active Smart Signals. Filter events by matching Visitor ID (`identification.visitor_id` property). ' ), ] = None, high_recall_id: Annotated[ @@ -1176,7 +1176,7 @@ def search_events_with_http_info( linked_id: Annotated[ Optional[StrictStr], Field( - description='Filter events by your custom identifier. You can use [linked Ids](https://docs.fingerprint.com/reference/js-agent-v4-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. ' + description='Filter events by your custom identifier. You can use [linked IDs](https://docs.fingerprint.com/reference/js-agent-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. ' ), ] = None, url: Annotated[ @@ -1422,7 +1422,7 @@ def search_events_with_http_info( :type limit: int :param pagination_key: Use `pagination_key` to get the next page of results. When more results are available (e.g., you requested up to 100 results for your query using `limit`, but there are more than 100 events total matching your request), the `pagination_key` field is added to the response. The pagination key is an arbitrary string that should not be interpreted in any way and should be passed as-is. 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 100 events: `GET api-base-url/events?limit=100` 2. Use `response.pagination_key` to get the next page of results: `GET api-base-url/events?limit=100&pagination_key=S9rgMMUb4z3X5t5pr_tSgoSZlmyF0O8X7kCV2m981-iY1LmRTjraa1rTk3L-hQExnDWCi0RA-zAIjaVSTNO2AN2eqQWgzT0RjbieMxRfSdkM-HmOhdOgdQvYfPG3vqU1DJKh4Q` :type pagination_key: str - :param visitor_id: 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). + :param visitor_id: Unique [visitor identifier](https://docs.fingerprint.com/reference/js-agent-get-function#visitor_id) issued by Fingerprint Identification and all active Smart Signals. Filter events by matching Visitor ID (`identification.visitor_id` property). :type visitor_id: str :param high_recall_id: 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). :type high_recall_id: str @@ -1444,7 +1444,7 @@ def search_events_with_http_info( :type ip_address: str :param asn: Filter events by the ASN associated with the event's IP address. This corresponds to the `ip_info.(v4|v6).asn` property in the response. :type asn: str - :param linked_id: Filter events by your custom identifier. You can use [linked Ids](https://docs.fingerprint.com/reference/js-agent-v4-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. + :param linked_id: Filter events by your custom identifier. You can use [linked IDs](https://docs.fingerprint.com/reference/js-agent-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. :type linked_id: str :param url: Filter events by the URL (`url` property) associated with the event. :type url: str @@ -1633,7 +1633,7 @@ def search_events_without_preload_content( visitor_id: Annotated[ Optional[StrictStr], Field( - description='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). ' + description='Unique [visitor identifier](https://docs.fingerprint.com/reference/js-agent-get-function#visitor_id) issued by Fingerprint Identification and all active Smart Signals. Filter events by matching Visitor ID (`identification.visitor_id` property). ' ), ] = None, high_recall_id: Annotated[ @@ -1699,7 +1699,7 @@ def search_events_without_preload_content( linked_id: Annotated[ Optional[StrictStr], Field( - description='Filter events by your custom identifier. You can use [linked Ids](https://docs.fingerprint.com/reference/js-agent-v4-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. ' + description='Filter events by your custom identifier. You can use [linked IDs](https://docs.fingerprint.com/reference/js-agent-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. ' ), ] = None, url: Annotated[ @@ -1945,7 +1945,7 @@ def search_events_without_preload_content( :type limit: int :param pagination_key: Use `pagination_key` to get the next page of results. When more results are available (e.g., you requested up to 100 results for your query using `limit`, but there are more than 100 events total matching your request), the `pagination_key` field is added to the response. The pagination key is an arbitrary string that should not be interpreted in any way and should be passed as-is. 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 100 events: `GET api-base-url/events?limit=100` 2. Use `response.pagination_key` to get the next page of results: `GET api-base-url/events?limit=100&pagination_key=S9rgMMUb4z3X5t5pr_tSgoSZlmyF0O8X7kCV2m981-iY1LmRTjraa1rTk3L-hQExnDWCi0RA-zAIjaVSTNO2AN2eqQWgzT0RjbieMxRfSdkM-HmOhdOgdQvYfPG3vqU1DJKh4Q` :type pagination_key: str - :param visitor_id: 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). + :param visitor_id: Unique [visitor identifier](https://docs.fingerprint.com/reference/js-agent-get-function#visitor_id) issued by Fingerprint Identification and all active Smart Signals. Filter events by matching Visitor ID (`identification.visitor_id` property). :type visitor_id: str :param high_recall_id: 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). :type high_recall_id: str @@ -1967,7 +1967,7 @@ def search_events_without_preload_content( :type ip_address: str :param asn: Filter events by the ASN associated with the event's IP address. This corresponds to the `ip_info.(v4|v6).asn` property in the response. :type asn: str - :param linked_id: Filter events by your custom identifier. You can use [linked Ids](https://docs.fingerprint.com/reference/js-agent-v4-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. + :param linked_id: Filter events by your custom identifier. You can use [linked IDs](https://docs.fingerprint.com/reference/js-agent-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. :type linked_id: str :param url: Filter events by the URL (`url` property) associated with the event. :type url: str @@ -2460,7 +2460,7 @@ def update_event( event_id: Annotated[ StrictStr, Field( - description='The unique event [identifier](https://docs.fingerprint.com/reference/js-agent-v4-get-function#event_id).' + description='The unique event [identifier](https://docs.fingerprint.com/reference/js-agent-get-function#event_id).' ), ], event_update: EventUpdate, @@ -2477,7 +2477,7 @@ def update_event( Change information in existing events specified by `event_id` or *flag suspicious events*. When an event is created, it can be assigned `linked_id` and `tags` submitted through the JS agent parameters. This information might not have been available on the client initially, so the Server API permits updating these attributes after the fact. **Warning** It's not possible to update events older than one month. **Warning** Trying to update an event immediately after creation may temporarily result in an error (HTTP 409 Conflict. The event is not mutable yet.) as the event is fully propagated across our systems. In such a case, simply retry the request. - :param event_id: The unique event [identifier](https://docs.fingerprint.com/reference/js-agent-v4-get-function#event_id). (required) + :param event_id: The unique event [identifier](https://docs.fingerprint.com/reference/js-agent-get-function#event_id). (required) :type event_id: str :param event_update: (required) :type event_update: EventUpdate @@ -2528,7 +2528,7 @@ def update_event_with_http_info( event_id: Annotated[ StrictStr, Field( - description='The unique event [identifier](https://docs.fingerprint.com/reference/js-agent-v4-get-function#event_id).' + description='The unique event [identifier](https://docs.fingerprint.com/reference/js-agent-get-function#event_id).' ), ], event_update: EventUpdate, @@ -2545,7 +2545,7 @@ def update_event_with_http_info( Change information in existing events specified by `event_id` or *flag suspicious events*. When an event is created, it can be assigned `linked_id` and `tags` submitted through the JS agent parameters. This information might not have been available on the client initially, so the Server API permits updating these attributes after the fact. **Warning** It's not possible to update events older than one month. **Warning** Trying to update an event immediately after creation may temporarily result in an error (HTTP 409 Conflict. The event is not mutable yet.) as the event is fully propagated across our systems. In such a case, simply retry the request. - :param event_id: The unique event [identifier](https://docs.fingerprint.com/reference/js-agent-v4-get-function#event_id). (required) + :param event_id: The unique event [identifier](https://docs.fingerprint.com/reference/js-agent-get-function#event_id). (required) :type event_id: str :param event_update: (required) :type event_update: EventUpdate @@ -2596,7 +2596,7 @@ def update_event_without_preload_content( event_id: Annotated[ StrictStr, Field( - description='The unique event [identifier](https://docs.fingerprint.com/reference/js-agent-v4-get-function#event_id).' + description='The unique event [identifier](https://docs.fingerprint.com/reference/js-agent-get-function#event_id).' ), ], event_update: EventUpdate, @@ -2613,7 +2613,7 @@ def update_event_without_preload_content( Change information in existing events specified by `event_id` or *flag suspicious events*. When an event is created, it can be assigned `linked_id` and `tags` submitted through the JS agent parameters. This information might not have been available on the client initially, so the Server API permits updating these attributes after the fact. **Warning** It's not possible to update events older than one month. **Warning** Trying to update an event immediately after creation may temporarily result in an error (HTTP 409 Conflict. The event is not mutable yet.) as the event is fully propagated across our systems. In such a case, simply retry the request. - :param event_id: The unique event [identifier](https://docs.fingerprint.com/reference/js-agent-v4-get-function#event_id). (required) + :param event_id: The unique event [identifier](https://docs.fingerprint.com/reference/js-agent-get-function#event_id). (required) :type event_id: str :param event_update: (required) :type event_update: EventUpdate diff --git a/fingerprint_server_sdk/models/__init__.py b/fingerprint_server_sdk/models/__init__.py index eba59cff..01079b84 100644 --- a/fingerprint_server_sdk/models/__init__.py +++ b/fingerprint_server_sdk/models/__init__.py @@ -20,6 +20,7 @@ from fingerprint_server_sdk.models.bot_result import BotResult from fingerprint_server_sdk.models.browser_details import BrowserDetails from fingerprint_server_sdk.models.canvas import Canvas +from fingerprint_server_sdk.models.device_details import DeviceDetails from fingerprint_server_sdk.models.emoji import Emoji from fingerprint_server_sdk.models.error import Error from fingerprint_server_sdk.models.error_code import ErrorCode diff --git a/fingerprint_server_sdk/models/device_details.py b/fingerprint_server_sdk/models/device_details.py new file mode 100644 index 00000000..34a71b99 --- /dev/null +++ b/fingerprint_server_sdk/models/device_details.py @@ -0,0 +1,98 @@ +""" +Server API +Fingerprint Server API allows you to get, search, and update Events in a server environment. It can be used for data exports, decision-making, and data analysis scenarios. +Server API is intended for server-side usage, it's not intended to be used from the client side, whether it's a browser or a mobile device. +The API also supports collection of Automation Intelligence for requests to your server in edge, pre-origin, or middleware contexts. + +The version of the OpenAPI document: 4 +Contact: support@fingerprint.com +Generated by OpenAPI Generator (https://openapi-generator.tech) + +Do not edit the class manually. +""" # noqa: E501 + +from __future__ import annotations + +import json +import pprint +import re # noqa: F401 +from typing import Any, ClassVar, Optional + +from pydantic import BaseModel, ConfigDict, Field, StrictStr +from typing_extensions import Self + + +class DeviceDetails(BaseModel): + """ + Native, SDK-collected mobile device identification signals (manufacturer, model, and OS version). Structurally separate from the top-level `device`, `os`, and `os_version` fields and from `browser_details`, all of which are derived from user-agent parsing rather than native SDK signals. + """ + + device_manufacturer: Optional[StrictStr] = Field( + default=None, + description='Raw device manufacturer string as reported by the device OS. Not normalized: casing is vendor-defined (samsung, Xiaomi, OPPO, HUAWEI). Always `Apple` on iOS.', + ) + device_model: Optional[StrictStr] = Field( + default=None, description='Raw device model identifier, as reported by the mobile OS.' + ) + os_version: Optional[StrictStr] = Field( + default=None, + description="Mobile operating system version. Component count is not fixed and must not be assumed by consumers: iOS always reports `major.minor.patch` (e.g. `17.4.1`), while Android's precision varies by OS era and which raw signal resolved it — `major` only (`9`, `13`) since Android 10 dropped point releases, `major.minor` (`16.1`) from Android 16 (API 36+) reintroducing a minor component, or a genuine `major.minor.patch` (`8.1.0`) on pre-Android 10 devices that shipped real point releases. Never a fabricated/zero-padded component.", + ) + __properties: ClassVar[list[str]] = ['device_manufacturer', 'device_model', 'os_version'] + + model_config = ConfigDict( + populate_by_name=True, + validate_assignment=True, + protected_namespaces=(), + ) + + def to_str(self) -> str: + """Returns the string representation of the model using alias""" + return pprint.pformat(self.model_dump(by_alias=True)) + + def to_json(self) -> str: + """Returns the JSON representation of the model using alias""" + # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead + return json.dumps(self.to_dict()) + + @classmethod + def from_json(cls, json_str: str) -> Optional[Self]: + """Create an instance of DeviceDetails from a JSON string""" + return cls.from_dict(json.loads(json_str)) + + def to_dict(self) -> dict[str, Any]: + """Return the dictionary representation of the model using alias. + + This has the following differences from calling pydantic's + `self.model_dump(by_alias=True)`: + + * `None` is only added to the output dict for nullable fields that + were set at model initialization. Other fields with value `None` + are ignored. + """ + excluded_fields: set[str] = set([]) + + _dict = self.model_dump( + by_alias=True, + exclude=excluded_fields, + exclude_none=True, + ) + return _dict + + @classmethod + def from_dict(cls, obj: Optional[dict[str, Any]]) -> Optional[Self]: + """Create an instance of DeviceDetails from a dict""" + if obj is None: + return None + + if not isinstance(obj, dict): + return cls.model_validate(obj) + + _obj = cls.model_validate( + { + 'device_manufacturer': obj.get('device_manufacturer'), + 'device_model': obj.get('device_model'), + 'os_version': obj.get('os_version'), + } + ) + return _obj diff --git a/fingerprint_server_sdk/models/event.py b/fingerprint_server_sdk/models/event.py index 9badf776..a9043e59 100644 --- a/fingerprint_server_sdk/models/event.py +++ b/fingerprint_server_sdk/models/event.py @@ -24,6 +24,7 @@ from fingerprint_server_sdk.models.bot_info import BotInfo from fingerprint_server_sdk.models.bot_result import BotResult from fingerprint_server_sdk.models.browser_details import BrowserDetails +from fingerprint_server_sdk.models.device_details import DeviceDetails from fingerprint_server_sdk.models.event_rule_action import EventRuleAction from fingerprint_server_sdk.models.event_source import EventSource from fingerprint_server_sdk.models.identification import Identification @@ -61,14 +62,14 @@ class Event(BaseModel): source: Optional[EventSource] = None incremental_identification_status: Optional[IncrementalIdentificationStatus] = None linked_id: Optional[StrictStr] = Field( - default=None, description='A customer-provided id that was sent with the request.' + default=None, description='A customer-provided ID that was sent with the request.' ) environment_id: Optional[StrictStr] = Field( - default=None, description='Environment Id of the event.' + default=None, description='Environment ID of the event.' ) suspect: Optional[StrictBool] = Field( default=None, - description='Field is `true` if you have previously set the `suspect` flag for this event using the [Server API Update event endpoint](https://docs.fingerprint.com/reference/server-api-v4-update-event).', + description='Field is `true` if you have previously set the `suspect` flag for this event using the [Server API Update event endpoint](https://docs.fingerprint.com/reference/server-api-update-event).', ) sdk: Optional[SDK] = None replayed: Optional[StrictBool] = Field( @@ -86,7 +87,7 @@ class Event(BaseModel): ) bundle_id: Optional[StrictStr] = Field( default=None, - description='Bundle Id of the iOS application integrated with the Fingerprint SDK for the event. ', + description='Bundle ID of the iOS application integrated with the Fingerprint SDK for the event. ', ) package_name: Optional[StrictStr] = Field( default=None, @@ -131,6 +132,7 @@ class Event(BaseModel): default=None, description='`true` if the browser has DevTools open (Chrome, Firefox) or the Android/iOS device has Developer Tools enabled, `false` otherwise. ', ) + device_details: Optional[DeviceDetails] = None emulator: Optional[StrictBool] = Field( default=None, description='Android specific emulator detection. There are 2 values: * `true` - Emulated environment detected (e.g. launch inside of AVD). * `false` - No signs of emulated environment detected or the client is not Android. ', @@ -288,6 +290,7 @@ class Event(BaseModel): 'bot_info', 'cloned_app', 'developer_tools', + 'device_details', 'emulator', 'factory_reset_timestamp', 'frida', @@ -381,6 +384,9 @@ def to_dict(self) -> dict[str, Any]: # override the default output from pydantic by calling `to_dict()` of bot_info if self.bot_info: _dict['bot_info'] = self.bot_info.to_dict() + # override the default output from pydantic by calling `to_dict()` of device_details + if self.device_details: + _dict['device_details'] = self.device_details.to_dict() # override the default output from pydantic by calling `to_dict()` of ip_blocklist if self.ip_blocklist: _dict['ip_blocklist'] = self.ip_blocklist.to_dict() @@ -466,6 +472,9 @@ def from_dict(cls, obj: Optional[dict[str, Any]]) -> Optional[Self]: else None, 'cloned_app': obj.get('cloned_app'), 'developer_tools': obj.get('developer_tools'), + 'device_details': DeviceDetails.from_dict(obj['device_details']) + if obj.get('device_details') is not None + else None, 'emulator': obj.get('emulator'), 'factory_reset_timestamp': obj.get('factory_reset_timestamp'), 'frida': obj.get('frida'), diff --git a/fingerprint_server_sdk/models/labels_inner.py b/fingerprint_server_sdk/models/labels_inner.py index ab78a903..cd47b013 100644 --- a/fingerprint_server_sdk/models/labels_inner.py +++ b/fingerprint_server_sdk/models/labels_inner.py @@ -27,14 +27,14 @@ class LabelsInner(BaseModel): LabelsInner """ - label: StrictStr + label: StrictStr = Field(description='Customer-facing label name defined by the customer.') prediction: Optional[StrictBool] = None ml_score: Optional[ Union[ Annotated[float, Field(le=1, strict=True, ge=0)], Annotated[int, Field(le=1, strict=True, ge=0)], ] - ] = None + ] = Field(default=None, description='Raw model score between 0 and 1.') __properties: ClassVar[list[str]] = ['label', 'prediction', 'ml_score'] model_config = ConfigDict( diff --git a/fingerprint_server_sdk/models/velocity.py b/fingerprint_server_sdk/models/velocity.py index ad056ea2..d2b6e686 100644 --- a/fingerprint_server_sdk/models/velocity.py +++ b/fingerprint_server_sdk/models/velocity.py @@ -26,7 +26,7 @@ class Velocity(BaseModel): """ - 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. + 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. """ distinct_ip: Optional[VelocityData] = None diff --git a/fingerprint_server_sdk/models/velocity_data.py b/fingerprint_server_sdk/models/velocity_data.py index ac74cd62..e0546de2 100644 --- a/fingerprint_server_sdk/models/velocity_data.py +++ b/fingerprint_server_sdk/models/velocity_data.py @@ -24,7 +24,7 @@ class VelocityData(BaseModel): """ - Is absent if the velocity data could not be generated for the visitor Id. + Is absent if the velocity data could not be generated for the visitor ID. """ var_5_minutes: StrictInt = Field( diff --git a/res/fingerprint-server-api.yaml b/res/fingerprint-server-api.yaml index 5e7a37ba..c71de893 100644 --- a/res/fingerprint-server-api.yaml +++ b/res/fingerprint-server-api.yaml @@ -61,7 +61,7 @@ paths: example: 1708102555327.NLOjmg description: >- The unique - [identifier](https://docs.fingerprint.com/reference/js-agent-v4-get-function#event_id) + [identifier](https://docs.fingerprint.com/reference/js-agent-get-function#event_id) of each identification request (`requestId` can be used in its place). - name: ruleset_id @@ -86,7 +86,7 @@ paths: schema: $ref: '#/components/schemas/Event' '400': - description: Bad request. The event Id provided is not valid. + description: Bad request. The event ID provided is not valid. content: application/json: schema: @@ -98,7 +98,7 @@ paths: schema: $ref: '#/components/schemas/ErrorResponse' '404': - description: Not found. The event Id cannot be found in this workspace's data. + description: Not found. The event ID cannot be found in this workspace's data. content: application/json: schema: @@ -165,7 +165,7 @@ paths: example: 1708102555327.NLOjmg description: >- The unique event - [identifier](https://docs.fingerprint.com/reference/js-agent-v4-get-function#event_id). + [identifier](https://docs.fingerprint.com/reference/js-agent-get-function#event_id). requestBody: required: true content: @@ -188,7 +188,7 @@ paths: schema: $ref: '#/components/schemas/ErrorResponse' '404': - description: Not found. The event Id cannot be found in this workspace's data. + description: Not found. The event ID cannot be found in this workspace's data. content: application/json: schema: @@ -317,7 +317,7 @@ paths: example: Ibk1527CUFmcnjLwIs4A9 description: > Unique [visitor - identifier](https://docs.fingerprint.com/reference/js-agent-v4-get-function#visitor_id) + identifier](https://docs.fingerprint.com/reference/js-agent-get-function#visitor_id) issued by Fingerprint Identification and all active Smart Signals. @@ -492,9 +492,9 @@ paths: You can use [linked - Ids](https://docs.fingerprint.com/reference/js-agent-v4-get-function#linkedid) + IDs](https://docs.fingerprint.com/reference/js-agent-get-function#linkedid) to associate identification requests with your own identifier, for - example, session Id, purchase Id, or transaction Id. You can then + 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. - name: url @@ -1110,7 +1110,7 @@ paths: example: Ibk1527CUFmcnjLwIs4A9 description: >- The [visitor - ID](https://docs.fingerprint.com/reference/js-agent-v4-get-function#visitor_id) + ID](https://docs.fingerprint.com/reference/js-agent-get-function#visitor_id) you want to delete. responses: '200': @@ -1155,7 +1155,7 @@ components: type: string examples: - somelinkedId - description: A customer-provided id that was sent with the request. + description: A customer-provided ID that was sent with the request. Tags: type: object description: >- @@ -1709,13 +1709,13 @@ components: type: string examples: - ae_47abaca3db2c7c43 - description: Environment Id of the event. + description: Environment ID of the event. Suspect: type: boolean description: >- Field is `true` if you have previously set the `suspect` flag for this event using the [Server API Update event - endpoint](https://docs.fingerprint.com/reference/server-api-v4-update-event). + endpoint](https://docs.fingerprint.com/reference/server-api-update-event). Integration: type: object required: [] @@ -1894,7 +1894,7 @@ components: examples: - com.foo.app description: > - Bundle Id of the iOS application integrated with the Fingerprint SDK for + Bundle ID of the iOS application integrated with the Fingerprint SDK for the event. PackageName: type: string @@ -2065,6 +2065,48 @@ components: description: > `true` if the browser has DevTools open (Chrome, Firefox) or the Android/iOS device has Developer Tools enabled, `false` otherwise. + DeviceDetails: + type: object + description: >- + Native, SDK-collected mobile device identification signals + (manufacturer, model, and OS version). Structurally separate from the + top-level `device`, `os`, and `os_version` fields and from + `browser_details`, all of which are derived from user-agent parsing + rather than native SDK signals. + required: [] + properties: + device_manufacturer: + type: string + examples: + - samsung + - Apple + description: >- + Raw device manufacturer string as reported by the device OS. Not + normalized: casing is vendor-defined (samsung, Xiaomi, OPPO, + HUAWEI). Always `Apple` on iOS. + device_model: + type: string + examples: + - SM-G991U + - iPhone14,5 + description: Raw device model identifier, as reported by the mobile OS. + os_version: + type: string + examples: + - '9' + - '16.1' + - 8.1.0 + - 17.4.1 + description: >- + Mobile operating system version. Component count is not fixed and + must not be assumed by consumers: iOS always reports + `major.minor.patch` (e.g. `17.4.1`), while Android's precision + varies by OS era and which raw signal resolved it — `major` only + (`9`, `13`) since Android 10 dropped point releases, `major.minor` + (`16.1`) from Android 16 (API 36+) reintroducing a minor component, + or a genuine `major.minor.patch` (`8.1.0`) on pre-Android 10 devices + that shipped real point releases. Never a fabricated/zero-padded + component. Emulator: type: boolean description: > @@ -2416,7 +2458,7 @@ components: type: object description: > Is absent if the velocity data could not be generated for the visitor - Id. + ID. required: - 5_minutes - 1_hour @@ -2451,21 +2493,21 @@ components: intervals: 5 minutes, 1 hour, and 24 hours as follows: - - Number of distinct IP addresses associated to the visitor Id. + - Number of distinct IP addresses associated to the visitor ID. - - Number of distinct linked Ids associated with the visitor Id. + - Number of distinct linked IDs associated with the visitor ID. - - Number of distinct countries 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 visitor ID. - Number of identification events associated with the detected IP address. - Number of distinct IP addresses associated with the provided linked - Id. + ID. - - Number of distinct visitor Ids 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`, @@ -2474,7 +2516,7 @@ components: `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 + if the number of `events` for the visitor ID in the last 24 hours (`events.['24_hours']`) is higher than 20.000. @@ -3066,6 +3108,7 @@ components: type: string examples: - automation_tool + description: Customer-facing label name defined by the customer. prediction: type: boolean ml_score: @@ -3075,6 +3118,7 @@ components: - 0.95 minimum: 0 maximum: 1 + description: Raw model score between 0 and 1. description: > Each label returns a prediction (true or false) for a specific use case (label field) based on a machine learning score. The machine learning @@ -3248,6 +3292,11 @@ components: - browser - android - ios + device_details: + $ref: '#/components/schemas/DeviceDetails' + x-platforms: + - android + - ios emulator: $ref: '#/components/schemas/Emulator' x-platforms: @@ -3399,6 +3448,7 @@ components: x-platforms: - android - ios + - browser vpn_methods: $ref: '#/components/schemas/VpnMethods' x-platforms: diff --git a/test/mocks/events/get_event_200.json b/test/mocks/events/get_event_200.json index 72f12f44..e3446c04 100644 --- a/test/mocks/events/get_event_200.json +++ b/test/mocks/events/get_event_200.json @@ -185,6 +185,11 @@ } }, "developer_tools": false, + "device_details": { + "device_manufacturer": "samsung", + "device_model": "SM-G991U", + "os_version": "13" + }, "mitm_attack": false, "sdk": { "platform": "js", diff --git a/test/mocks/events/get_event_200_with_unknown_field.json b/test/mocks/events/get_event_200_with_unknown_field.json index e6712e39..39bc6324 100644 --- a/test/mocks/events/get_event_200_with_unknown_field.json +++ b/test/mocks/events/get_event_200_with_unknown_field.json @@ -186,6 +186,11 @@ } }, "developer_tools": false, + "device_details": { + "device_manufacturer": "samsung", + "device_model": "SM-G991U", + "os_version": "13" + }, "mitm_attack": false, "sdk": { "platform": "js", diff --git a/test/mocks/events/get_event_ruleset_200.json b/test/mocks/events/get_event_ruleset_200.json index f775f7d9..94863ac3 100644 --- a/test/mocks/events/get_event_ruleset_200.json +++ b/test/mocks/events/get_event_ruleset_200.json @@ -185,6 +185,11 @@ } }, "developer_tools": false, + "device_details": { + "device_manufacturer": "samsung", + "device_model": "SM-G991U", + "os_version": "13" + }, "mitm_attack": false, "sdk": { "platform": "js", diff --git a/test/mocks/events/get_event_with_bot_info_200.json b/test/mocks/events/get_event_with_bot_info_200.json index 98ca7d5c..c346afff 100644 --- a/test/mocks/events/get_event_with_bot_info_200.json +++ b/test/mocks/events/get_event_with_bot_info_200.json @@ -191,6 +191,11 @@ } }, "developer_tools": false, + "device_details": { + "device_manufacturer": "samsung", + "device_model": "SM-G991U", + "os_version": "13" + }, "mitm_attack": false, "sdk": { "platform": "js", diff --git a/test/mocks/events/search/get_event_search_200.json b/test/mocks/events/search/get_event_search_200.json index 8e9dbdc8..5729c37d 100644 --- a/test/mocks/events/search/get_event_search_200.json +++ b/test/mocks/events/search/get_event_search_200.json @@ -187,6 +187,11 @@ } }, "developer_tools": false, + "device_details": { + "device_manufacturer": "samsung", + "device_model": "SM-G991U", + "os_version": "13" + }, "mitm_attack": false, "sdk": { "platform": "js",