From 8cd8c32e8c17127ef2aa8e0ea319ac28f184a344 Mon Sep 17 00:00:00 2001 From: "fingerprint-dx-team-actions-runner[bot]" <197604345+fingerprint-dx-team-actions-runner[bot]@users.noreply.github.com> Date: Thu, 24 Sep 2026 16:33:49 +0000 Subject: [PATCH 1/4] feat: sync OpenAPI schema to v3.8.0 --- .changeset/device-details-signal.md | 5 + .changeset/sync-koala-v3-schema.md | 5 + .schema-version | 2 +- README.md | 1 + docs/DeviceDetails.md | 16 ++ docs/Event.md | 9 +- docs/FingerprintApi.md | 26 +-- docs/LabelsInner.md | 4 +- docs/Velocity.md | 2 +- docs/VelocityData.md | 2 +- res/fingerprint-server-api.yaml | 92 ++++++++--- .../fingerprint/v4/api/FingerprintApi.java | 38 ++--- .../fingerprint/v4/model/DeviceDetails.java | 152 ++++++++++++++++++ .../java/com/fingerprint/v4/model/Event.java | 37 ++++- .../com/fingerprint/v4/model/LabelsInner.java | 4 +- .../com/fingerprint/v4/model/Velocity.java | 2 +- .../fingerprint/v4/model/VelocityData.java | 2 +- .../resources/mocks/events/get_event_200.json | 5 + .../get_event_200_with_unknown_field.json | 5 + .../mocks/events/get_event_ruleset_200.json | 5 + .../events/get_event_with_bot_info_200.json | 5 + .../events/search/get_event_search_200.json | 5 + 22 files changed, 354 insertions(+), 70 deletions(-) create mode 100644 .changeset/device-details-signal.md create mode 100644 .changeset/sync-koala-v3-schema.md create mode 100644 docs/DeviceDetails.md create mode 100644 sdk/src/main/java/com/fingerprint/v4/model/DeviceDetails.java diff --git a/.changeset/device-details-signal.md b/.changeset/device-details-signal.md new file mode 100644 index 00000000..695eae32 --- /dev/null +++ b/.changeset/device-details-signal.md @@ -0,0 +1,5 @@ +--- +'java-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..789447fa --- /dev/null +++ b/.changeset/sync-koala-v3-schema.md @@ -0,0 +1,5 @@ +--- +'java-sdk': patch +--- + +Update API v3 error responses, timestamp formats, proxy metadata, and visitor endpoint documentation. Require `Labels.label`, set the default value of `reverse` to `false`, and limit `VisitorsGetResponse.visits` to one item. 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 6aeddef4..4855cf9d 100644 --- a/README.md +++ b/README.md @@ -336,6 +336,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/docs/DeviceDetails.md b/docs/DeviceDetails.md new file mode 100644 index 00000000..60ca525c --- /dev/null +++ b/docs/DeviceDetails.md @@ -0,0 +1,16 @@ + + +# 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 | +|------------ | ------------- | ------------- | -------------| +|**deviceManufacturer** | **String** | 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] | +|**deviceModel** | **String** | Raw device model identifier, as reported by the mobile OS. | [optional] | +|**osVersion** | **String** | 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] | + + + diff --git a/docs/Event.md b/docs/Event.md index e0416218..87e44134 100644 --- a/docs/Event.md +++ b/docs/Event.md @@ -12,16 +12,16 @@ Contains results from Fingerprint Identification and all active Smart Signals. S |**timestamp** | **Long** | Timestamp of the event with millisecond precision in Unix time. | | |**source** | [**EventSource**](EventSource.md) | | [optional] | |**incrementalIdentificationStatus** | [**IncrementalIdentificationStatus**](IncrementalIdentificationStatus.md) | | [optional] | -|**linkedId** | **String** | A customer-provided id that was sent with the request. | [optional] | -|**environmentId** | **String** | Environment Id of the event. | [optional] | -|**suspect** | **Boolean** | 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] | +|**linkedId** | **String** | A customer-provided ID that was sent with the request. | [optional] | +|**environmentId** | **String** | Environment ID of the event. | [optional] | +|**suspect** | **Boolean** | 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** | **Boolean** | `true` if we determined that this payload was replayed, `false` otherwise. | [optional] | |**identification** | [**Identification**](Identification.md) | | [optional] | |**supplementaryIdHighRecall** | [**SupplementaryIDHighRecall**](SupplementaryIDHighRecall.md) | | [optional] | |**tags** | **Map<String, Object>** | A customer-provided value or an object that was sent with the identification request or updated later. | [optional] | |**url** | **String** | Page URL from which the request was sent. | [optional] | -|**bundleId** | **String** | Bundle Id of the iOS application integrated with the Fingerprint SDK for the event. | [optional] | +|**bundleId** | **String** | Bundle ID of the iOS application integrated with the Fingerprint SDK for the event. | [optional] | |**packageName** | **String** | Package name of the Android application integrated with the Fingerprint SDK for the event. | [optional] | |**ipAddress** | **String** | IP address of the requesting browser or bot. | [optional] | |**userAgent** | **String** | User Agent of the client. | [optional] | @@ -37,6 +37,7 @@ Contains results from Fingerprint Identification and all active Smart Signals. S |**botInfo** | [**BotInfo**](BotInfo.md) | | [optional] | |**clonedApp** | **Boolean** | 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] | |**developerTools** | **Boolean** | `true` if the browser has DevTools open (Chrome, Firefox) or the Android/iOS device has Developer Tools enabled, `false` otherwise. | [optional] | +|**deviceDetails** | [**DeviceDetails**](DeviceDetails.md) | | [optional] | |**emulator** | **Boolean** | 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] | |**factoryResetTimestamp** | **Long** | 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** | **Boolean** | [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 325b6950..18374693 100644 --- a/docs/FingerprintApi.md +++ b/docs/FingerprintApi.md @@ -73,7 +73,7 @@ public class FingerprintApiExample { Region.ASIA */ FingerprintApi api = new FingerprintApi(FPJS_API_SECRET, Region.EUROPE); - String visitorId = "Ibk1527CUFmcnjLwIs4A9"; // String | The [visitor ID](https://docs.fingerprint.com/reference/js-agent-v4-get-function#visitor_id) you want to delete. + String visitorId = "Ibk1527CUFmcnjLwIs4A9"; // String | The [visitor ID](https://docs.fingerprint.com/reference/js-agent-get-function#visitor_id) you want to delete. try { api.deleteVisitorData(visitorId); } catch (ApiException e) { @@ -89,7 +89,7 @@ public class FingerprintApiExample { | Name | Type | Description | Notes | |------------- | ------------- | ------------- | -------------| -| **visitorId** | **String**| The [visitor ID](https://docs.fingerprint.com/reference/js-agent-v4-get-function#visitor_id) you want to delete. A value that is not a valid identifier is rejected before a request is sent. | | +| **visitorId** | **String**| The [visitor ID](https://docs.fingerprint.com/reference/js-agent-get-function#visitor_id) you want to delete. A value that is not a valid identifier is rejected before a request is sent. | | ### Return type @@ -152,7 +152,7 @@ public class FingerprintApiExample { Region.ASIA */ FingerprintApi api = new FingerprintApi(FPJS_API_SECRET, Region.EUROPE); - String eventId = "1708102555327.NLOjmg"; // String | 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). + String eventId = "1708102555327.NLOjmg"; // String | 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). String rulesetId = "D6N9Kbk9HRWrIWGz"; // String | 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. try { Event result = api.getEvent(eventId, new FingerprintApi.GetEventOptionalParams() @@ -171,7 +171,7 @@ public class FingerprintApiExample { | Name | Type | Description | Notes | |------------- | ------------- | ------------- | -------------| -| **eventId** | **String**| 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). A value that is not a valid identifier is rejected before a request is sent. | | +| **eventId** | **String**| 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). A value that is not a valid identifier is rejected before a request is sent. | | | **getEventOptionalParams** | [**FingerprintApi.GetEventOptionalParams**](#fingerprintapigeteventoptionalparams) | | [optional] | #### FingerprintApi.GetEventOptionalParams @@ -199,9 +199,9 @@ Object containing optional parameters for API method. Supports a fluent interfac | 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. | - | @@ -270,7 +270,7 @@ public class FingerprintApiExample { FingerprintApi api = new FingerprintApi(FPJS_API_SECRET, Region.EUROPE); Integer limit = 10; // Integer | 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. String paginationKey = "S9rgMMUb4z3X5t5pr_tSgoSZlmyF0O8X7kCV2m981-iY1LmRTjraa1rTk3L-hQExnDWCi0RA-zAIjaVSTNO2AN2eqQWgzT0RjbieMxRfSdkM-HmOhdOgdQvYfPG3vqU1DJKh4Q"; // String | 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` - 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 visitorId = "Ibk1527CUFmcnjLwIs4A9"; // String | 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). 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, and no `bot_info` was present. @@ -281,7 +281,7 @@ public class FingerprintApiExample { List botInfoName = Arrays.asList(); // List | 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. String ipAddress = "61.127.217.15"; // String | 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 String asn = "12876"; // String | 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. - String linkedId = "somelinkedId"; // String | 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. + String linkedId = "somelinkedId"; // String | 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. String url = "https://example.com/login"; // String | Filter events by the URL (`url` property) associated with the event. String bundleId = "com.example.app"; // String | Filter events by the Bundle ID (iOS) associated with the event. String packageName = "com.example.app"; // String | Filter events by the Package Name (Android) associated with the event. @@ -402,7 +402,7 @@ Object containing optional parameters for API method. Supports a fluent interfac |------------- | ------------- | ------------- | -------------| | **limit** | **Integer**| 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] | | **paginationKey** | **String**| 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] | -| **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] | +| **visitorId** | **String**| 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] | | **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, and no `bot_info` was present. | [optional] [enum: all, none] | @@ -413,7 +413,7 @@ Object containing optional parameters for API method. Supports a fluent interfac | **botInfoName** | **List<String>**| 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] | | **ipAddress** | **String**| 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** | **String**| 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] | -| **linkedId** | **String**| 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] | +| **linkedId** | **String**| 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** | **String**| Filter events by the URL (`url` property) associated with the event. | [optional] | | **bundleId** | **String**| Filter events by the Bundle ID (iOS) associated with the event. | [optional] | | **packageName** | **String**| Filter events by the Package Name (Android) associated with the event. | [optional] | @@ -524,7 +524,7 @@ public class FingerprintApiExample { Region.ASIA */ FingerprintApi api = new FingerprintApi(FPJS_API_SECRET, Region.EUROPE); - String eventId = "1708102555327.NLOjmg"; // String | The unique event [identifier](https://docs.fingerprint.com/reference/js-agent-v4-get-function#event_id). + String eventId = "1708102555327.NLOjmg"; // String | The unique event [identifier](https://docs.fingerprint.com/reference/js-agent-get-function#event_id). EventUpdate eventUpdate = new EventUpdate(); // EventUpdate | try { api.updateEvent(eventId, eventUpdate); @@ -541,7 +541,7 @@ public class FingerprintApiExample { | Name | Type | Description | Notes | |------------- | ------------- | ------------- | -------------| -| **eventId** | **String**| The unique event [identifier](https://docs.fingerprint.com/reference/js-agent-v4-get-function#event_id). A value that is not a valid identifier is rejected before a request is sent. | | +| **eventId** | **String**| The unique event [identifier](https://docs.fingerprint.com/reference/js-agent-get-function#event_id). A value that is not a valid identifier is rejected before a request is sent. | | | **eventUpdate** | [**EventUpdate**](EventUpdate.md)| | | ### Return type @@ -563,6 +563,6 @@ null (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. | - | diff --git a/docs/LabelsInner.md b/docs/LabelsInner.md index 6130f36b..f40da88c 100644 --- a/docs/LabelsInner.md +++ b/docs/LabelsInner.md @@ -7,9 +7,9 @@ | Name | Type | Description | Notes | |------------ | ------------- | ------------- | -------------| -|**label** | **String** | | | +|**label** | **String** | Customer-facing label name defined by the customer. | | |**prediction** | **Boolean** | | [optional] | -|**mlScore** | **Double** | | [optional] | +|**mlScore** | **Double** | Raw model score between 0 and 1. | [optional] | diff --git a/docs/Velocity.md b/docs/Velocity.md index b2f0df00..5c059b4d 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 `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. ## Properties diff --git a/docs/VelocityData.md b/docs/VelocityData.md index 7e7636a5..4dd69638 100644 --- a/docs/VelocityData.md +++ b/docs/VelocityData.md @@ -2,7 +2,7 @@ # 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/res/fingerprint-server-api.yaml b/res/fingerprint-server-api.yaml index 842bfbb9..ca054e6d 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 @@ -1124,7 +1124,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': @@ -1169,7 +1169,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: >- @@ -1723,13 +1723,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: [] @@ -1908,7 +1908,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 @@ -2079,6 +2079,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: > @@ -2430,7 +2472,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 @@ -2465,21 +2507,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`, @@ -2488,7 +2530,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. @@ -3080,6 +3122,7 @@ components: type: string examples: - automation_tool + description: Customer-facing label name defined by the customer. prediction: type: boolean ml_score: @@ -3089,6 +3132,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 @@ -3262,6 +3306,11 @@ components: - browser - android - ios + device_details: + $ref: '#/components/schemas/DeviceDetails' + x-platforms: + - android + - ios emulator: $ref: '#/components/schemas/Emulator' x-platforms: @@ -3413,6 +3462,7 @@ components: x-platforms: - android - ios + - browser vpn_methods: $ref: '#/components/schemas/VpnMethods' x-platforms: 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 8a01c3b1..9632c594 100644 --- a/sdk/src/main/java/com/fingerprint/v4/api/FingerprintApi.java +++ b/sdk/src/main/java/com/fingerprint/v4/api/FingerprintApi.java @@ -70,7 +70,7 @@ public void setApiClient(ApiClient apiClient) { /** * Delete a visitor ID * 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 visitorId The [visitor ID](https://docs.fingerprint.com/reference/js-agent-v4-get-function#visitor_id) you want to delete. (required) A value that is not a valid identifier is rejected with an {@link ApiException} before a request is sent. + * @param visitorId The [visitor ID](https://docs.fingerprint.com/reference/js-agent-get-function#visitor_id) you want to delete. (required) A value that is not a valid identifier is rejected with an {@link ApiException} before a request is sent. * @throws ApiException if fails to make API call * @http.response.details * @@ -89,7 +89,7 @@ public void deleteVisitorData(String visitorId) throws ApiException { /** * Delete a visitor ID * 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 visitorId The [visitor ID](https://docs.fingerprint.com/reference/js-agent-v4-get-function#visitor_id) you want to delete. (required) A value that is not a valid identifier is rejected with an {@link ApiException} before a request is sent. + * @param visitorId The [visitor ID](https://docs.fingerprint.com/reference/js-agent-get-function#visitor_id) you want to delete. (required) A value that is not a valid identifier is rejected with an {@link ApiException} before a request is sent. * @return ApiResponse * @throws ApiException if fails to make API call * @http.response.details @@ -173,16 +173,16 @@ public GetEventOptionalParams setRulesetId(String rulesetId) { /** * Get an event by event ID * 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 eventId 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) A value that is not a valid identifier is rejected with an {@link ApiException} before a request is sent. + * @param eventId 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) A value that is not a valid identifier is rejected with an {@link ApiException} before a request is sent. * @return Event * @throws ApiException if fails to make API call * @http.response.details *
* * - * + * * - * + * * * * @@ -195,7 +195,7 @@ public Event getEvent(String eventId) throws ApiException { /** * Get an event by event ID * 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 eventId 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) A value that is not a valid identifier is rejected with an {@link ApiException} before a request is sent. + * @param eventId 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) A value that is not a valid identifier is rejected with an {@link ApiException} before a request is sent. * @param getEventOptionalParams Object containing optional parameters for API method. (optional) * @return Event * @throws ApiException if fails to make API call @@ -203,9 +203,9 @@ public Event getEvent(String eventId) throws ApiException { *
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. -
* * - * + * * - * + * * * * @@ -219,7 +219,7 @@ public Event getEvent(String eventId, GetEventOptionalParams getEventOptionalPar /** * Get an event by event ID * 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 eventId 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) A value that is not a valid identifier is rejected with an {@link ApiException} before a request is sent. + * @param eventId 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) A value that is not a valid identifier is rejected with an {@link ApiException} before a request is sent. * @param getEventOptionalParams Object containing optional parameters for API method. (optional) * @return ApiResponse * @throws ApiException if fails to make API call @@ -227,9 +227,9 @@ public Event getEvent(String eventId, GetEventOptionalParams getEventOptionalPar *
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. -
* * - * + * * - * + * * * * @@ -375,14 +375,14 @@ public SearchEventsOptionalParams setPaginationKey(String paginationKey) { } /** - * getter for visitorId - 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). + * getter for visitorId - 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). */ public String getVisitorId() { return visitorId; } /** - * setter for visitorId - 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). + * setter for visitorId - 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). */ public SearchEventsOptionalParams setVisitorId(String visitorId) { this.visitorId = visitorId; @@ -541,14 +541,14 @@ public SearchEventsOptionalParams setAsn(String asn) { } /** - * getter for linkedId - 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. + * getter for linkedId - 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. */ public String getLinkedId() { return linkedId; } /** - * setter for linkedId - 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. + * setter for linkedId - 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. */ public SearchEventsOptionalParams setLinkedId(String linkedId) { this.linkedId = linkedId; @@ -1406,7 +1406,7 @@ public ApiResponse searchEventsWithHttpInfo( /** * Update an 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 eventId The unique event [identifier](https://docs.fingerprint.com/reference/js-agent-v4-get-function#event_id). (required) A value that is not a valid identifier is rejected with an {@link ApiException} before a request is sent. + * @param eventId The unique event [identifier](https://docs.fingerprint.com/reference/js-agent-get-function#event_id). (required) A value that is not a valid identifier is rejected with an {@link ApiException} before a request is sent. * @param eventUpdate (required) * @throws ApiException if fails to make API call * @http.response.details @@ -1415,7 +1415,7 @@ public ApiResponse searchEventsWithHttpInfo( * * * - * + * * *
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. -
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. -
*/ @@ -1426,7 +1426,7 @@ public void updateEvent(String eventId, EventUpdate eventUpdate) throws ApiExcep /** * Update an 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 eventId The unique event [identifier](https://docs.fingerprint.com/reference/js-agent-v4-get-function#event_id). (required) A value that is not a valid identifier is rejected with an {@link ApiException} before a request is sent. + * @param eventId The unique event [identifier](https://docs.fingerprint.com/reference/js-agent-get-function#event_id). (required) A value that is not a valid identifier is rejected with an {@link ApiException} before a request is sent. * @param eventUpdate (required) * @return ApiResponse * @throws ApiException if fails to make API call @@ -1436,7 +1436,7 @@ public void updateEvent(String eventId, EventUpdate eventUpdate) throws ApiExcep * 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. - * */ diff --git a/sdk/src/main/java/com/fingerprint/v4/model/DeviceDetails.java b/sdk/src/main/java/com/fingerprint/v4/model/DeviceDetails.java new file mode 100644 index 00000000..6ea5ca76 --- /dev/null +++ b/sdk/src/main/java/com/fingerprint/v4/model/DeviceDetails.java @@ -0,0 +1,152 @@ +/* + * 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 + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +package com.fingerprint.v4.model; + +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; +import java.util.Objects; + +/** + * 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. + */ +@JsonPropertyOrder({ + DeviceDetails.JSON_PROPERTY_DEVICE_MANUFACTURER, + DeviceDetails.JSON_PROPERTY_DEVICE_MODEL, + DeviceDetails.JSON_PROPERTY_OS_VERSION +}) +@jakarta.annotation.Generated( + value = "org.openapitools.codegen.languages.JavaClientCodegen", + comments = "Generator version: 7.24.0") +public class DeviceDetails { + public static final String JSON_PROPERTY_DEVICE_MANUFACTURER = "device_manufacturer"; + @jakarta.annotation.Nullable private String deviceManufacturer; + + public static final String JSON_PROPERTY_DEVICE_MODEL = "device_model"; + @jakarta.annotation.Nullable private String deviceModel; + + public static final String JSON_PROPERTY_OS_VERSION = "os_version"; + @jakarta.annotation.Nullable private String osVersion; + + public DeviceDetails() {} + + public DeviceDetails deviceManufacturer(@jakarta.annotation.Nullable String deviceManufacturer) { + this.deviceManufacturer = deviceManufacturer; + return this; + } + + /** + * Raw device manufacturer string as reported by the device OS. Not normalized: casing is vendor-defined (samsung, Xiaomi, OPPO, HUAWEI). Always `Apple` on iOS. + * @return deviceManufacturer + */ + @jakarta.annotation.Nullable + @JsonProperty(value = JSON_PROPERTY_DEVICE_MANUFACTURER, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public String getDeviceManufacturer() { + return deviceManufacturer; + } + + @JsonProperty(value = JSON_PROPERTY_DEVICE_MANUFACTURER, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setDeviceManufacturer(@jakarta.annotation.Nullable String deviceManufacturer) { + this.deviceManufacturer = deviceManufacturer; + } + + public DeviceDetails deviceModel(@jakarta.annotation.Nullable String deviceModel) { + this.deviceModel = deviceModel; + return this; + } + + /** + * Raw device model identifier, as reported by the mobile OS. + * @return deviceModel + */ + @jakarta.annotation.Nullable + @JsonProperty(value = JSON_PROPERTY_DEVICE_MODEL, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public String getDeviceModel() { + return deviceModel; + } + + @JsonProperty(value = JSON_PROPERTY_DEVICE_MODEL, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setDeviceModel(@jakarta.annotation.Nullable String deviceModel) { + this.deviceModel = deviceModel; + } + + public DeviceDetails osVersion(@jakarta.annotation.Nullable String osVersion) { + this.osVersion = osVersion; + return this; + } + + /** + * 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. + * @return osVersion + */ + @jakarta.annotation.Nullable + @JsonProperty(value = JSON_PROPERTY_OS_VERSION, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public String getOsVersion() { + return osVersion; + } + + @JsonProperty(value = JSON_PROPERTY_OS_VERSION, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setOsVersion(@jakarta.annotation.Nullable String osVersion) { + this.osVersion = osVersion; + } + + /** + * Return true if this DeviceDetails object is equal to o. + */ + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + DeviceDetails deviceDetails = (DeviceDetails) o; + return Objects.equals(this.deviceManufacturer, deviceDetails.deviceManufacturer) + && Objects.equals(this.deviceModel, deviceDetails.deviceModel) + && Objects.equals(this.osVersion, deviceDetails.osVersion); + } + + @Override + public int hashCode() { + return Objects.hash(deviceManufacturer, deviceModel, osVersion); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class DeviceDetails {\n"); + sb.append(" deviceManufacturer: ").append(toIndentedString(deviceManufacturer)).append("\n"); + sb.append(" deviceModel: ").append(toIndentedString(deviceModel)).append("\n"); + sb.append(" osVersion: ").append(toIndentedString(osVersion)).append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces + * (except the first line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } +} 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 923ef8b6..b49f2041 100644 --- a/sdk/src/main/java/com/fingerprint/v4/model/Event.java +++ b/sdk/src/main/java/com/fingerprint/v4/model/Event.java @@ -54,6 +54,7 @@ Event.JSON_PROPERTY_BOT_INFO, Event.JSON_PROPERTY_CLONED_APP, Event.JSON_PROPERTY_DEVELOPER_TOOLS, + Event.JSON_PROPERTY_DEVICE_DETAILS, Event.JSON_PROPERTY_EMULATOR, Event.JSON_PROPERTY_FACTORY_RESET_TIMESTAMP, Event.JSON_PROPERTY_FRIDA, @@ -186,6 +187,9 @@ public class Event { public static final String JSON_PROPERTY_DEVELOPER_TOOLS = "developer_tools"; @jakarta.annotation.Nullable private Boolean developerTools; + public static final String JSON_PROPERTY_DEVICE_DETAILS = "device_details"; + @jakarta.annotation.Nullable private DeviceDetails deviceDetails; + public static final String JSON_PROPERTY_EMULATOR = "emulator"; @jakarta.annotation.Nullable private Boolean emulator; @@ -395,7 +399,7 @@ public Event linkedId(@jakarta.annotation.Nullable String linkedId) { } /** - * A customer-provided id that was sent with the request. + * A customer-provided ID that was sent with the request. * @return linkedId */ @jakarta.annotation.Nullable @@ -417,7 +421,7 @@ public Event environmentId(@jakarta.annotation.Nullable String environmentId) { } /** - * Environment Id of the event. + * Environment ID of the event. * @return environmentId */ @jakarta.annotation.Nullable @@ -439,7 +443,7 @@ public Event suspect(@jakarta.annotation.Nullable Boolean suspect) { } /** - * 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). + * 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). * @return suspect */ @jakarta.annotation.Nullable @@ -603,7 +607,7 @@ public Event bundleId(@jakarta.annotation.Nullable String bundleId) { } /** - * Bundle Id of the iOS application integrated with the Fingerprint SDK for the event. + * Bundle ID of the iOS application integrated with the Fingerprint SDK for the event. * @return bundleId */ @jakarta.annotation.Nullable @@ -949,6 +953,28 @@ public void setDeveloperTools(@jakarta.annotation.Nullable Boolean developerTool this.developerTools = developerTools; } + public Event deviceDetails(@jakarta.annotation.Nullable DeviceDetails deviceDetails) { + this.deviceDetails = deviceDetails; + return this; + } + + /** + * Get deviceDetails + * @return deviceDetails + */ + @jakarta.annotation.Nullable + @JsonProperty(value = JSON_PROPERTY_DEVICE_DETAILS, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public DeviceDetails getDeviceDetails() { + return deviceDetails; + } + + @JsonProperty(value = JSON_PROPERTY_DEVICE_DETAILS, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setDeviceDetails(@jakarta.annotation.Nullable DeviceDetails deviceDetails) { + this.deviceDetails = deviceDetails; + } + public Event emulator(@jakarta.annotation.Nullable Boolean emulator) { this.emulator = emulator; return this; @@ -1805,6 +1831,7 @@ public boolean equals(Object o) { && Objects.equals(this.botInfo, event.botInfo) && Objects.equals(this.clonedApp, event.clonedApp) && Objects.equals(this.developerTools, event.developerTools) + && Objects.equals(this.deviceDetails, event.deviceDetails) && Objects.equals(this.emulator, event.emulator) && Objects.equals(this.factoryResetTimestamp, event.factoryResetTimestamp) && Objects.equals(this.frida, event.frida) @@ -1875,6 +1902,7 @@ public int hashCode() { botInfo, clonedApp, developerTools, + deviceDetails, emulator, factoryResetTimestamp, frida, @@ -1950,6 +1978,7 @@ public String toString() { sb.append(" botInfo: ").append(toIndentedString(botInfo)).append("\n"); sb.append(" clonedApp: ").append(toIndentedString(clonedApp)).append("\n"); sb.append(" developerTools: ").append(toIndentedString(developerTools)).append("\n"); + sb.append(" deviceDetails: ").append(toIndentedString(deviceDetails)).append("\n"); sb.append(" emulator: ").append(toIndentedString(emulator)).append("\n"); sb.append(" factoryResetTimestamp: ") .append(toIndentedString(factoryResetTimestamp)) diff --git a/sdk/src/main/java/com/fingerprint/v4/model/LabelsInner.java b/sdk/src/main/java/com/fingerprint/v4/model/LabelsInner.java index c3da6b74..aad4fd58 100644 --- a/sdk/src/main/java/com/fingerprint/v4/model/LabelsInner.java +++ b/sdk/src/main/java/com/fingerprint/v4/model/LabelsInner.java @@ -48,7 +48,7 @@ public LabelsInner label(@jakarta.annotation.Nonnull String label) { } /** - * Get label + * Customer-facing label name defined by the customer. * @return label */ @jakarta.annotation.Nonnull @@ -92,7 +92,7 @@ public LabelsInner mlScore(@jakarta.annotation.Nullable Double mlScore) { } /** - * Get mlScore + * Raw model score between 0 and 1. * minimum: 0 * maximum: 1 * @return mlScore 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 b8ab5984..65c43fe3 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 `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. */ @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 aaa3970e..31c35f8d 100644 --- a/sdk/src/main/java/com/fingerprint/v4/model/VelocityData.java +++ b/sdk/src/main/java/com/fingerprint/v4/model/VelocityData.java @@ -18,7 +18,7 @@ import java.util.Objects; /** - * 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. */ @JsonPropertyOrder({ VelocityData.JSON_PROPERTY_5MINUTES, 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 72f12f44..e3446c04 100644 --- a/sdk/src/test/resources/mocks/events/get_event_200.json +++ b/sdk/src/test/resources/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/sdk/src/test/resources/mocks/events/get_event_200_with_unknown_field.json b/sdk/src/test/resources/mocks/events/get_event_200_with_unknown_field.json index e6712e39..39bc6324 100644 --- a/sdk/src/test/resources/mocks/events/get_event_200_with_unknown_field.json +++ b/sdk/src/test/resources/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/sdk/src/test/resources/mocks/events/get_event_ruleset_200.json b/sdk/src/test/resources/mocks/events/get_event_ruleset_200.json index f775f7d9..94863ac3 100644 --- a/sdk/src/test/resources/mocks/events/get_event_ruleset_200.json +++ b/sdk/src/test/resources/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/sdk/src/test/resources/mocks/events/get_event_with_bot_info_200.json b/sdk/src/test/resources/mocks/events/get_event_with_bot_info_200.json index 98ca7d5c..c346afff 100644 --- a/sdk/src/test/resources/mocks/events/get_event_with_bot_info_200.json +++ b/sdk/src/test/resources/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/sdk/src/test/resources/mocks/events/search/get_event_search_200.json b/sdk/src/test/resources/mocks/events/search/get_event_search_200.json index 8e9dbdc8..5729c37d 100644 --- a/sdk/src/test/resources/mocks/events/search/get_event_search_200.json +++ b/sdk/src/test/resources/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", From e707b827a8351c09b9f2dfdf56984cd5be9fa78f Mon Sep 17 00:00:00 2001 From: Dan McNulty Date: Thu, 24 Sep 2026 11:56:42 -0500 Subject: [PATCH 2/4] chore: improve changeset description --- .changeset/sync-koala-v3-schema.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.changeset/sync-koala-v3-schema.md b/.changeset/sync-koala-v3-schema.md index 789447fa..f4f65d1a 100644 --- a/.changeset/sync-koala-v3-schema.md +++ b/.changeset/sync-koala-v3-schema.md @@ -2,4 +2,4 @@ 'java-sdk': patch --- -Update API v3 error responses, timestamp formats, proxy metadata, and visitor endpoint documentation. Require `Labels.label`, set the default value of `reverse` to `false`, and limit `VisitorsGetResponse.visits` to one item. +Fix descriptions to use ID rather than Id. Clarify descriptions for Labels . From 034b5fda10a4ee8222d3f3542da133e60be39b6b Mon Sep 17 00:00:00 2001 From: Dan McNulty Date: Thu, 24 Sep 2026 11:58:32 -0500 Subject: [PATCH 3/4] chore: add scope to changeset --- .changeset/sync-koala-v3-schema.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.changeset/sync-koala-v3-schema.md b/.changeset/sync-koala-v3-schema.md index f4f65d1a..2dd2a59f 100644 --- a/.changeset/sync-koala-v3-schema.md +++ b/.changeset/sync-koala-v3-schema.md @@ -2,4 +2,4 @@ 'java-sdk': patch --- -Fix descriptions to use ID rather than Id. Clarify descriptions for Labels . +**events**: Fix descriptions to use ID rather than Id. Clarify descriptions for Labels . From 59c3db75f85429127ad3371a2cdf3b2c8ed1a13d Mon Sep 17 00:00:00 2001 From: Dan McNulty Date: Thu, 24 Sep 2026 16:21:18 -0500 Subject: [PATCH 4/4] chore: fix extra space in changeset --- .changeset/sync-koala-v3-schema.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.changeset/sync-koala-v3-schema.md b/.changeset/sync-koala-v3-schema.md index 2dd2a59f..062f1792 100644 --- a/.changeset/sync-koala-v3-schema.md +++ b/.changeset/sync-koala-v3-schema.md @@ -2,4 +2,4 @@ 'java-sdk': patch --- -**events**: Fix descriptions to use ID rather than Id. Clarify descriptions for Labels . +**events**: Fix descriptions to use ID rather than Id. Clarify descriptions for Labels.