From 9253a679d06a8564248d206a28809ef52750c801 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Eray=20Ayd=C4=B1n?= Date: Fri, 31 Jul 2026 21:41:34 +0300 Subject: [PATCH 1/4] feat: add ML-based Smart Signals --- .changeset/add-ml-smart-signals.md | 5 +++ .schema-version | 2 +- docs/Model/Proxy.md | 1 + docs/Model/VPN.md | 1 + docs/Model/VPNMethods.md | 1 + docs/Model/WebhookProxy.md | 1 + docs/Model/WebhookVPN.md | 1 + res/fingerprint-server-api.yaml | 53 ++++++++++++++++++++++++++++++ src/Model/Proxy.php | 40 +++++++++++++++++++--- src/Model/VPN.php | 30 +++++++++++++++++ src/Model/VPNMethods.php | 38 ++++++++++++++++++--- src/Model/WebhookProxy.php | 40 +++++++++++++++++++--- src/Model/WebhookVPN.php | 30 +++++++++++++++++ 13 files changed, 227 insertions(+), 16 deletions(-) create mode 100644 .changeset/add-ml-smart-signals.md diff --git a/.changeset/add-ml-smart-signals.md b/.changeset/add-ml-smart-signals.md new file mode 100644 index 00000000..85b387dd --- /dev/null +++ b/.changeset/add-ml-smart-signals.md @@ -0,0 +1,5 @@ +--- +"fingerprint-pro-server-api-php-sdk": minor +--- + +Add machine learning-based Smart Signals from the Server API schema: `mlScore` on the `VPN` and `Proxy` results (and their webhook counterparts), and `mlPrediction` on `VPNMethods`. These signals are in beta and only available to select customers. diff --git a/.schema-version b/.schema-version index 3a285c2b..684a941c 100644 --- a/.schema-version +++ b/.schema-version @@ -1 +1 @@ -v3.1.0 \ No newline at end of file +v3.5.1 \ No newline at end of file diff --git a/docs/Model/Proxy.md b/docs/Model/Proxy.md index d5b0973b..3645e9f3 100644 --- a/docs/Model/Proxy.md +++ b/docs/Model/Proxy.md @@ -6,6 +6,7 @@ Name | Type | Description | Notes **result** | **bool** | IP address was used by a public proxy provider or belonged to a known recent residential proxy | **confidence** | [**\Fingerprint\ServerAPI\Model\ProxyConfidence**](ProxyConfidence.md) | | **details** | [**\Fingerprint\ServerAPI\Model\ProxyDetails**](ProxyDetails.md) | | [optional] +**ml_score** | **double** | Machine learning-based proxy score, represented as a floating-point value between 0 and 1 (inclusive), with up to three decimal places of precision. A higher score means a higher confidence in the positive `proxy` detection result. This Smart Signal is currently in beta and only available to select customers. If you are interested, please [contact our support team](https://fingerprint.com/support/). | [optional] [[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/Model/VPN.md b/docs/Model/VPN.md index c6e33db3..6ae68d5c 100644 --- a/docs/Model/VPN.md +++ b/docs/Model/VPN.md @@ -5,6 +5,7 @@ Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- **result** | **bool** | VPN or other anonymizing service has been used when sending the request. | **confidence** | [**\Fingerprint\ServerAPI\Model\VPNConfidence**](VPNConfidence.md) | | +**ml_score** | **double** | Machine learning–based VPN score, represented as a floating-point value between 0 and 1 (inclusive), with up to three decimal places of precision. A higher score means a higher confidence in the positive `vpn` detection result. This Smart Signal is currently in beta and only available to select customers. If you are interested, please [contact our support team](https://fingerprint.com/support/). | [optional] **origin_timezone** | **string** | Local timezone which is used in timezoneMismatch method. | **origin_country** | **string** | Country of the request (only for Android SDK version >= 2.4.0, ISO 3166 format or unknown). | **methods** | [**\Fingerprint\ServerAPI\Model\VPNMethods**](VPNMethods.md) | | diff --git a/docs/Model/VPNMethods.md b/docs/Model/VPNMethods.md index 3e864e9c..a35d84c1 100644 --- a/docs/Model/VPNMethods.md +++ b/docs/Model/VPNMethods.md @@ -8,6 +8,7 @@ Name | Type | Description | Notes **auxiliary_mobile** | **bool** | This method applies to mobile devices only. Indicates the result of additional methods used to detect a VPN in mobile devices. | **os_mismatch** | **bool** | The browser runs on a different operating system than the operating system inferred from the request network signature. | **relay** | **bool** | Request IP address belongs to a relay service provider, indicating the use of relay services like [Apple Private relay](https://support.apple.com/en-us/102602) or [Cloudflare Warp](https://developers.cloudflare.com/warp-client/). * Like VPNs, relay services anonymize the visitor's true IP address. * Unlike traditional VPNs, relay services don't let visitors spoof their location by choosing an exit node in a different country. This field allows you to differentiate VPN users and relay service users in your fraud prevention logic. | +**ml_prediction** | **bool** | `true` if the request came from a device running a VPN, `false` otherwise. | [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/Model/WebhookProxy.md b/docs/Model/WebhookProxy.md index e41e0881..86137774 100644 --- a/docs/Model/WebhookProxy.md +++ b/docs/Model/WebhookProxy.md @@ -6,6 +6,7 @@ Name | Type | Description | Notes **result** | **bool** | IP address was used by a public proxy provider or belonged to a known recent residential proxy | [optional] **confidence** | [**\Fingerprint\ServerAPI\Model\ProxyConfidence**](ProxyConfidence.md) | | [optional] **details** | [**\Fingerprint\ServerAPI\Model\ProxyDetails**](ProxyDetails.md) | | [optional] +**ml_score** | **double** | Machine learning-based proxy score, represented as a floating-point value between 0 and 1 (inclusive), with up to three decimal places of precision. A higher score means a higher confidence in the positive `proxy` detection result. This Smart Signal is currently in beta and only available to select customers. If you are interested, please [contact our support team](https://fingerprint.com/support/). | [optional] [[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/Model/WebhookVPN.md b/docs/Model/WebhookVPN.md index 6d0cce3c..631ce94e 100644 --- a/docs/Model/WebhookVPN.md +++ b/docs/Model/WebhookVPN.md @@ -5,6 +5,7 @@ Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- **result** | **bool** | VPN or other anonymizing service has been used when sending the request. | [optional] **confidence** | [**\Fingerprint\ServerAPI\Model\VPNConfidence**](VPNConfidence.md) | | [optional] +**ml_score** | **double** | Machine learning–based VPN score, represented as a floating-point value between 0 and 1 (inclusive), with up to three decimal places of precision. A higher score means a higher confidence in the positive `vpn` detection result. This Smart Signal is currently in beta and only available to select customers. If you are interested, please [contact our support team](https://fingerprint.com/support/). | [optional] **origin_timezone** | **string** | Local timezone which is used in timezoneMismatch method. | [optional] **origin_country** | **string** | Country of the request (only for Android SDK version >= 2.4.0, ISO 3166 format or unknown). | [optional] **methods** | [**\Fingerprint\ServerAPI\Model\VPNMethods**](VPNMethods.md) | | [optional] diff --git a/res/fingerprint-server-api.yaml b/res/fingerprint-server-api.yaml index 3c73f613..1bab5bbb 100644 --- a/res/fingerprint-server-api.yaml +++ b/res/fingerprint-server-api.yaml @@ -1835,6 +1835,11 @@ components: This field allows you to differentiate VPN users and relay service users in your fraud prevention logic. + mlPrediction: + type: boolean + description: > + `true` if the request came from a device running a VPN, `false` + otherwise. deprecated: true VPN: type: object @@ -1853,6 +1858,18 @@ components: request. confidence: $ref: '#/components/schemas/VPNConfidence' + mlScore: + type: number + format: double + minimum: 0 + maximum: 1 + description: > + Machine learning–based VPN score, represented as a floating-point + value between 0 and 1 (inclusive), with up to three decimal places + of precision. A higher score means a higher confidence in the + positive `vpn` detection result. This Smart Signal is currently in + beta and only available to select customers. If you are interested, + please [contact our support team](https://fingerprint.com/support/). originTimezone: type: string description: Local timezone which is used in timezoneMismatch method. @@ -1926,6 +1943,18 @@ components: $ref: '#/components/schemas/ProxyConfidence' details: $ref: '#/components/schemas/ProxyDetails' + mlScore: + type: number + format: double + minimum: 0 + maximum: 1 + description: > + Machine learning-based proxy score, represented as a floating-point + value between 0 and 1 (inclusive), with up to three decimal places + of precision. A higher score means a higher confidence in the + positive `proxy` detection result. This Smart Signal is currently in + beta and only available to select customers. If you are interested, + please [contact our support team](https://fingerprint.com/support/). deprecated: true ProductProxy: type: object @@ -2840,6 +2869,18 @@ components: request. confidence: $ref: '#/components/schemas/VPNConfidence' + mlScore: + type: number + format: double + minimum: 0 + maximum: 1 + description: > + Machine learning–based VPN score, represented as a floating-point + value between 0 and 1 (inclusive), with up to three decimal places + of precision. A higher score means a higher confidence in the + positive `vpn` detection result. This Smart Signal is currently in + beta and only available to select customers. If you are interested, + please [contact our support team](https://fingerprint.com/support/). originTimezone: type: string description: Local timezone which is used in timezoneMismatch method. @@ -2864,6 +2905,18 @@ components: $ref: '#/components/schemas/ProxyConfidence' details: $ref: '#/components/schemas/ProxyDetails' + mlScore: + type: number + format: double + minimum: 0 + maximum: 1 + description: > + Machine learning-based proxy score, represented as a floating-point + value between 0 and 1 (inclusive), with up to three decimal places + of precision. A higher score means a higher confidence in the + positive `proxy` detection result. This Smart Signal is currently in + beta and only available to select customers. If you are interested, + please [contact our support team](https://fingerprint.com/support/). deprecated: true WebhookTampering: type: object diff --git a/src/Model/Proxy.php b/src/Model/Proxy.php index 2a03f65a..6dc0d151 100644 --- a/src/Model/Proxy.php +++ b/src/Model/Proxy.php @@ -63,7 +63,8 @@ class Proxy implements ModelInterface, \ArrayAccess protected static array $swaggerTypes = [ 'result' => 'bool', 'confidence' => '\Fingerprint\ServerAPI\Model\ProxyConfidence', - 'details' => '\Fingerprint\ServerAPI\Model\ProxyDetails']; + 'details' => '\Fingerprint\ServerAPI\Model\ProxyDetails', + 'ml_score' => 'double']; /** * Array of property to format mappings. Used for (de)serialization. @@ -73,7 +74,8 @@ class Proxy implements ModelInterface, \ArrayAccess protected static array $swaggerFormats = [ 'result' => null, 'confidence' => null, - 'details' => null]; + 'details' => null, + 'ml_score' => 'double']; /** * Array of attributes where the key is the local name, @@ -84,7 +86,8 @@ class Proxy implements ModelInterface, \ArrayAccess protected static array $attributeMap = [ 'result' => 'result', 'confidence' => 'confidence', - 'details' => 'details']; + 'details' => 'details', + 'ml_score' => 'mlScore']; /** * Array of attributes to setter functions (for deserialization of responses). @@ -94,7 +97,8 @@ class Proxy implements ModelInterface, \ArrayAccess protected static array $setters = [ 'result' => 'setResult', 'confidence' => 'setConfidence', - 'details' => 'setDetails']; + 'details' => 'setDetails', + 'ml_score' => 'setMlScore']; /** * Array of attributes to getter functions (for serialization of requests). @@ -104,7 +108,8 @@ class Proxy implements ModelInterface, \ArrayAccess protected static array $getters = [ 'result' => 'getResult', 'confidence' => 'getConfidence', - 'details' => 'getDetails']; + 'details' => 'getDetails', + 'ml_score' => 'getMlScore']; /** * Associative array for storing property values. @@ -124,6 +129,7 @@ public function __construct(?array $data = null) $this->container['result'] = isset($data['result']) ? $data['result'] : null; $this->container['confidence'] = isset($data['confidence']) ? $data['confidence'] : null; $this->container['details'] = isset($data['details']) ? $data['details'] : null; + $this->container['ml_score'] = isset($data['ml_score']) ? $data['ml_score'] : null; } /** @@ -280,6 +286,30 @@ public function setDetails(?ProxyDetails $details): self return $this; } + /** + * Gets ml_score. + * + * @return ?double + */ + public function getMlScore(): ?float + { + return $this->container['ml_score']; + } + + /** + * Sets ml_score. + * + * @param ?double $ml_score Machine learning-based proxy score, represented as a floating-point value between 0 and 1 (inclusive), with up to three decimal places of precision. A higher score means a higher confidence in the positive `proxy` detection result. This Smart Signal is currently in beta and only available to select customers. If you are interested, please [contact our support team](https://fingerprint.com/support/). + * + * @return $this + */ + public function setMlScore(?float $ml_score): self + { + $this->container['ml_score'] = $ml_score; + + return $this; + } + /** * Returns true if offset exists. False otherwise. * diff --git a/src/Model/VPN.php b/src/Model/VPN.php index 9a7f354e..9282bcf6 100644 --- a/src/Model/VPN.php +++ b/src/Model/VPN.php @@ -63,6 +63,7 @@ class VPN implements ModelInterface, \ArrayAccess protected static array $swaggerTypes = [ 'result' => 'bool', 'confidence' => '\Fingerprint\ServerAPI\Model\VPNConfidence', + 'ml_score' => 'double', 'origin_timezone' => 'string', 'origin_country' => 'string', 'methods' => '\Fingerprint\ServerAPI\Model\VPNMethods']; @@ -75,6 +76,7 @@ class VPN implements ModelInterface, \ArrayAccess protected static array $swaggerFormats = [ 'result' => null, 'confidence' => null, + 'ml_score' => 'double', 'origin_timezone' => null, 'origin_country' => null, 'methods' => null]; @@ -88,6 +90,7 @@ class VPN implements ModelInterface, \ArrayAccess protected static array $attributeMap = [ 'result' => 'result', 'confidence' => 'confidence', + 'ml_score' => 'mlScore', 'origin_timezone' => 'originTimezone', 'origin_country' => 'originCountry', 'methods' => 'methods']; @@ -100,6 +103,7 @@ class VPN implements ModelInterface, \ArrayAccess protected static array $setters = [ 'result' => 'setResult', 'confidence' => 'setConfidence', + 'ml_score' => 'setMlScore', 'origin_timezone' => 'setOriginTimezone', 'origin_country' => 'setOriginCountry', 'methods' => 'setMethods']; @@ -112,6 +116,7 @@ class VPN implements ModelInterface, \ArrayAccess protected static array $getters = [ 'result' => 'getResult', 'confidence' => 'getConfidence', + 'ml_score' => 'getMlScore', 'origin_timezone' => 'getOriginTimezone', 'origin_country' => 'getOriginCountry', 'methods' => 'getMethods']; @@ -133,6 +138,7 @@ public function __construct(?array $data = null) { $this->container['result'] = isset($data['result']) ? $data['result'] : null; $this->container['confidence'] = isset($data['confidence']) ? $data['confidence'] : null; + $this->container['ml_score'] = isset($data['ml_score']) ? $data['ml_score'] : null; $this->container['origin_timezone'] = isset($data['origin_timezone']) ? $data['origin_timezone'] : null; $this->container['origin_country'] = isset($data['origin_country']) ? $data['origin_country'] : null; $this->container['methods'] = isset($data['methods']) ? $data['methods'] : null; @@ -279,6 +285,30 @@ public function setConfidence(VPNConfidence $confidence): self return $this; } + /** + * Gets ml_score. + * + * @return ?double + */ + public function getMlScore(): ?float + { + return $this->container['ml_score']; + } + + /** + * Sets ml_score. + * + * @param ?double $ml_score Machine learning–based VPN score, represented as a floating-point value between 0 and 1 (inclusive), with up to three decimal places of precision. A higher score means a higher confidence in the positive `vpn` detection result. This Smart Signal is currently in beta and only available to select customers. If you are interested, please [contact our support team](https://fingerprint.com/support/). + * + * @return $this + */ + public function setMlScore(?float $ml_score): self + { + $this->container['ml_score'] = $ml_score; + + return $this; + } + /** * Gets origin_timezone. */ diff --git a/src/Model/VPNMethods.php b/src/Model/VPNMethods.php index af35adbe..f5cfb4b5 100644 --- a/src/Model/VPNMethods.php +++ b/src/Model/VPNMethods.php @@ -65,7 +65,8 @@ class VPNMethods implements ModelInterface, \ArrayAccess 'public_vpn' => 'bool', 'auxiliary_mobile' => 'bool', 'os_mismatch' => 'bool', - 'relay' => 'bool']; + 'relay' => 'bool', + 'ml_prediction' => 'bool']; /** * Array of property to format mappings. Used for (de)serialization. @@ -77,7 +78,8 @@ class VPNMethods implements ModelInterface, \ArrayAccess 'public_vpn' => null, 'auxiliary_mobile' => null, 'os_mismatch' => null, - 'relay' => null]; + 'relay' => null, + 'ml_prediction' => null]; /** * Array of attributes where the key is the local name, @@ -90,7 +92,8 @@ class VPNMethods implements ModelInterface, \ArrayAccess 'public_vpn' => 'publicVPN', 'auxiliary_mobile' => 'auxiliaryMobile', 'os_mismatch' => 'osMismatch', - 'relay' => 'relay']; + 'relay' => 'relay', + 'ml_prediction' => 'mlPrediction']; /** * Array of attributes to setter functions (for deserialization of responses). @@ -102,7 +105,8 @@ class VPNMethods implements ModelInterface, \ArrayAccess 'public_vpn' => 'setPublicVpn', 'auxiliary_mobile' => 'setAuxiliaryMobile', 'os_mismatch' => 'setOsMismatch', - 'relay' => 'setRelay']; + 'relay' => 'setRelay', + 'ml_prediction' => 'setMlPrediction']; /** * Array of attributes to getter functions (for serialization of requests). @@ -114,7 +118,8 @@ class VPNMethods implements ModelInterface, \ArrayAccess 'public_vpn' => 'getPublicVpn', 'auxiliary_mobile' => 'getAuxiliaryMobile', 'os_mismatch' => 'getOsMismatch', - 'relay' => 'getRelay']; + 'relay' => 'getRelay', + 'ml_prediction' => 'getMlPrediction']; /** * Associative array for storing property values. @@ -136,6 +141,7 @@ public function __construct(?array $data = null) $this->container['auxiliary_mobile'] = isset($data['auxiliary_mobile']) ? $data['auxiliary_mobile'] : null; $this->container['os_mismatch'] = isset($data['os_mismatch']) ? $data['os_mismatch'] : null; $this->container['relay'] = isset($data['relay']) ? $data['relay'] : null; + $this->container['ml_prediction'] = isset($data['ml_prediction']) ? $data['ml_prediction'] : null; } /** @@ -345,6 +351,28 @@ public function setRelay(bool $relay): self return $this; } + /** + * Gets ml_prediction. + */ + public function getMlPrediction(): ?bool + { + return $this->container['ml_prediction']; + } + + /** + * Sets ml_prediction. + * + * @param ?bool $ml_prediction `true` if the request came from a device running a VPN, `false` otherwise + * + * @return $this + */ + public function setMlPrediction(?bool $ml_prediction): self + { + $this->container['ml_prediction'] = $ml_prediction; + + return $this; + } + /** * Returns true if offset exists. False otherwise. * diff --git a/src/Model/WebhookProxy.php b/src/Model/WebhookProxy.php index 088ea048..528a7124 100644 --- a/src/Model/WebhookProxy.php +++ b/src/Model/WebhookProxy.php @@ -63,7 +63,8 @@ class WebhookProxy implements ModelInterface, \ArrayAccess protected static array $swaggerTypes = [ 'result' => 'bool', 'confidence' => '\Fingerprint\ServerAPI\Model\ProxyConfidence', - 'details' => '\Fingerprint\ServerAPI\Model\ProxyDetails']; + 'details' => '\Fingerprint\ServerAPI\Model\ProxyDetails', + 'ml_score' => 'double']; /** * Array of property to format mappings. Used for (de)serialization. @@ -73,7 +74,8 @@ class WebhookProxy implements ModelInterface, \ArrayAccess protected static array $swaggerFormats = [ 'result' => null, 'confidence' => null, - 'details' => null]; + 'details' => null, + 'ml_score' => 'double']; /** * Array of attributes where the key is the local name, @@ -84,7 +86,8 @@ class WebhookProxy implements ModelInterface, \ArrayAccess protected static array $attributeMap = [ 'result' => 'result', 'confidence' => 'confidence', - 'details' => 'details']; + 'details' => 'details', + 'ml_score' => 'mlScore']; /** * Array of attributes to setter functions (for deserialization of responses). @@ -94,7 +97,8 @@ class WebhookProxy implements ModelInterface, \ArrayAccess protected static array $setters = [ 'result' => 'setResult', 'confidence' => 'setConfidence', - 'details' => 'setDetails']; + 'details' => 'setDetails', + 'ml_score' => 'setMlScore']; /** * Array of attributes to getter functions (for serialization of requests). @@ -104,7 +108,8 @@ class WebhookProxy implements ModelInterface, \ArrayAccess protected static array $getters = [ 'result' => 'getResult', 'confidence' => 'getConfidence', - 'details' => 'getDetails']; + 'details' => 'getDetails', + 'ml_score' => 'getMlScore']; /** * Associative array for storing property values. @@ -124,6 +129,7 @@ public function __construct(?array $data = null) $this->container['result'] = isset($data['result']) ? $data['result'] : null; $this->container['confidence'] = isset($data['confidence']) ? $data['confidence'] : null; $this->container['details'] = isset($data['details']) ? $data['details'] : null; + $this->container['ml_score'] = isset($data['ml_score']) ? $data['ml_score'] : null; } /** @@ -271,6 +277,30 @@ public function setDetails(?ProxyDetails $details): self return $this; } + /** + * Gets ml_score. + * + * @return ?double + */ + public function getMlScore(): ?float + { + return $this->container['ml_score']; + } + + /** + * Sets ml_score. + * + * @param ?double $ml_score Machine learning-based proxy score, represented as a floating-point value between 0 and 1 (inclusive), with up to three decimal places of precision. A higher score means a higher confidence in the positive `proxy` detection result. This Smart Signal is currently in beta and only available to select customers. If you are interested, please [contact our support team](https://fingerprint.com/support/). + * + * @return $this + */ + public function setMlScore(?float $ml_score): self + { + $this->container['ml_score'] = $ml_score; + + return $this; + } + /** * Returns true if offset exists. False otherwise. * diff --git a/src/Model/WebhookVPN.php b/src/Model/WebhookVPN.php index 2301f042..d791d1a9 100644 --- a/src/Model/WebhookVPN.php +++ b/src/Model/WebhookVPN.php @@ -63,6 +63,7 @@ class WebhookVPN implements ModelInterface, \ArrayAccess protected static array $swaggerTypes = [ 'result' => 'bool', 'confidence' => '\Fingerprint\ServerAPI\Model\VPNConfidence', + 'ml_score' => 'double', 'origin_timezone' => 'string', 'origin_country' => 'string', 'methods' => '\Fingerprint\ServerAPI\Model\VPNMethods']; @@ -75,6 +76,7 @@ class WebhookVPN implements ModelInterface, \ArrayAccess protected static array $swaggerFormats = [ 'result' => null, 'confidence' => null, + 'ml_score' => 'double', 'origin_timezone' => null, 'origin_country' => null, 'methods' => null]; @@ -88,6 +90,7 @@ class WebhookVPN implements ModelInterface, \ArrayAccess protected static array $attributeMap = [ 'result' => 'result', 'confidence' => 'confidence', + 'ml_score' => 'mlScore', 'origin_timezone' => 'originTimezone', 'origin_country' => 'originCountry', 'methods' => 'methods']; @@ -100,6 +103,7 @@ class WebhookVPN implements ModelInterface, \ArrayAccess protected static array $setters = [ 'result' => 'setResult', 'confidence' => 'setConfidence', + 'ml_score' => 'setMlScore', 'origin_timezone' => 'setOriginTimezone', 'origin_country' => 'setOriginCountry', 'methods' => 'setMethods']; @@ -112,6 +116,7 @@ class WebhookVPN implements ModelInterface, \ArrayAccess protected static array $getters = [ 'result' => 'getResult', 'confidence' => 'getConfidence', + 'ml_score' => 'getMlScore', 'origin_timezone' => 'getOriginTimezone', 'origin_country' => 'getOriginCountry', 'methods' => 'getMethods']; @@ -133,6 +138,7 @@ public function __construct(?array $data = null) { $this->container['result'] = isset($data['result']) ? $data['result'] : null; $this->container['confidence'] = isset($data['confidence']) ? $data['confidence'] : null; + $this->container['ml_score'] = isset($data['ml_score']) ? $data['ml_score'] : null; $this->container['origin_timezone'] = isset($data['origin_timezone']) ? $data['origin_timezone'] : null; $this->container['origin_country'] = isset($data['origin_country']) ? $data['origin_country'] : null; $this->container['methods'] = isset($data['methods']) ? $data['methods'] : null; @@ -261,6 +267,30 @@ public function setConfidence(?VPNConfidence $confidence): self return $this; } + /** + * Gets ml_score. + * + * @return ?double + */ + public function getMlScore(): ?float + { + return $this->container['ml_score']; + } + + /** + * Sets ml_score. + * + * @param ?double $ml_score Machine learning–based VPN score, represented as a floating-point value between 0 and 1 (inclusive), with up to three decimal places of precision. A higher score means a higher confidence in the positive `vpn` detection result. This Smart Signal is currently in beta and only available to select customers. If you are interested, please [contact our support team](https://fingerprint.com/support/). + * + * @return $this + */ + public function setMlScore(?float $ml_score): self + { + $this->container['ml_score'] = $ml_score; + + return $this; + } + /** * Gets origin_timezone. */ From c748effe1d4cccdac672a1c273b4209da886dbab Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Eray=20Ayd=C4=B1n?= Date: Fri, 31 Jul 2026 21:42:56 +0300 Subject: [PATCH 2/4] feat: add unknown proxy type --- .changeset/add-unknown-proxy-type.md | 5 +++++ docs/Model/ProxyDetails.md | 2 +- res/fingerprint-server-api.yaml | 8 +++++--- src/Model/ProxyDetails.php | 6 ++++-- 4 files changed, 15 insertions(+), 6 deletions(-) create mode 100644 .changeset/add-unknown-proxy-type.md diff --git a/.changeset/add-unknown-proxy-type.md b/.changeset/add-unknown-proxy-type.md new file mode 100644 index 00000000..8a54bb21 --- /dev/null +++ b/.changeset/add-unknown-proxy-type.md @@ -0,0 +1,5 @@ +--- +"fingerprint-pro-server-api-php-sdk": minor +--- + +Add the `unknown` value to the `ProxyDetails` `proxyType` field. diff --git a/docs/Model/ProxyDetails.md b/docs/Model/ProxyDetails.md index 644dd59e..7f85e288 100644 --- a/docs/Model/ProxyDetails.md +++ b/docs/Model/ProxyDetails.md @@ -5,7 +5,7 @@ Proxy detection details (present if proxy is detected) ## Properties Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- -**proxy_type** | **string** | Residential proxies use real user IP addresses to appear as legitimate traffic, while data center proxies are public proxies hosted in data centers | +**proxy_type** | **string** | Residential proxies use real user IP addresses to appear as legitimate traffic, while data center proxies are public proxies hosted in data centers. `unknown` is reported when a proxy is detected solely by the ML model and the IP sources did not determine a specific type. | **last_seen_at** | [**\DateTime**](\DateTime.md) | ISO 8601 formatted timestamp in UTC with hourly resolution of when this IP was last seen as a proxy when available. | [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/res/fingerprint-server-api.yaml b/res/fingerprint-server-api.yaml index 1bab5bbb..76eee400 100644 --- a/res/fingerprint-server-api.yaml +++ b/res/fingerprint-server-api.yaml @@ -1914,11 +1914,13 @@ components: enum: - residential - data_center + - unknown description: > Residential proxies use real user IP addresses to appear as - legitimate traffic, - - while data center proxies are public proxies hosted in data centers + legitimate traffic, while data center proxies are public proxies + hosted in data centers. `unknown` is reported when a proxy is + detected solely by the ML model and the IP sources did not determine + a specific type. lastSeenAt: type: string format: date-time diff --git a/src/Model/ProxyDetails.php b/src/Model/ProxyDetails.php index 0386bfcb..943e703b 100644 --- a/src/Model/ProxyDetails.php +++ b/src/Model/ProxyDetails.php @@ -53,6 +53,7 @@ class ProxyDetails implements ModelInterface, \ArrayAccess { public const PROXY_TYPE_RESIDENTIAL = 'residential'; public const PROXY_TYPE_DATA_CENTER = 'data_center'; + public const PROXY_TYPE_UNKNOWN = 'unknown'; /** * The original name of the model. @@ -192,7 +193,8 @@ public function getProxyTypeAllowableValues(): array { return [ self::PROXY_TYPE_RESIDENTIAL, - self::PROXY_TYPE_DATA_CENTER, ]; + self::PROXY_TYPE_DATA_CENTER, + self::PROXY_TYPE_UNKNOWN, ]; } /** @@ -240,7 +242,7 @@ public function getProxyType(): string /** * Sets proxy_type. * - * @param string $proxy_type Residential proxies use real user IP addresses to appear as legitimate traffic, while data center proxies are public proxies hosted in data centers + * @param string $proxy_type Residential proxies use real user IP addresses to appear as legitimate traffic, while data center proxies are public proxies hosted in data centers. `unknown` is reported when a proxy is detected solely by the ML model and the IP sources did not determine a specific type. * * @return $this */ From 9f426da4a7d646619855fcb9ba268e40190cff88 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Eray=20Ayd=C4=B1n?= Date: Fri, 31 Jul 2026 21:43:39 +0300 Subject: [PATCH 3/4] docs: update DeveloperTools description --- docs/Model/DeveloperTools.md | 2 +- docs/Model/WebhookDeveloperTools.md | 2 +- res/fingerprint-server-api.yaml | 4 ++-- src/Model/DeveloperTools.php | 2 +- src/Model/WebhookDeveloperTools.php | 2 +- 5 files changed, 6 insertions(+), 6 deletions(-) diff --git a/docs/Model/DeveloperTools.md b/docs/Model/DeveloperTools.md index 58a76cd9..8bb6db44 100644 --- a/docs/Model/DeveloperTools.md +++ b/docs/Model/DeveloperTools.md @@ -3,7 +3,7 @@ ## Properties Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- -**result** | **bool** | `true` if the browser has DevTools open (Chrome, Firefox) or the Android device has Developer Tools enabled, `false` otherwise. | +**result** | **bool** | `true` if the browser has DevTools open (Chrome, Firefox) or the Android/iOS device has Developer Tools enabled, `false` otherwise. | [[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/Model/WebhookDeveloperTools.md b/docs/Model/WebhookDeveloperTools.md index 2f32e5fc..d2c557c9 100644 --- a/docs/Model/WebhookDeveloperTools.md +++ b/docs/Model/WebhookDeveloperTools.md @@ -3,7 +3,7 @@ ## Properties Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- -**result** | **bool** | `true` if the browser has DevTools open (Chrome, Firefox) or the Android device has Developer Tools enabled, `false` otherwise. | [optional] +**result** | **bool** | `true` if the browser has DevTools open (Chrome, Firefox) or the Android/iOS device has Developer Tools enabled, `false` otherwise. | [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/res/fingerprint-server-api.yaml b/res/fingerprint-server-api.yaml index 76eee400..fd168691 100644 --- a/res/fingerprint-server-api.yaml +++ b/res/fingerprint-server-api.yaml @@ -2471,7 +2471,7 @@ components: type: boolean description: > `true` if the browser has DevTools open (Chrome, Firefox) or the - Android device has Developer Tools enabled, `false` otherwise. + Android/iOS device has Developer Tools enabled, `false` otherwise. deprecated: true ProductDeveloperTools: type: object @@ -3196,7 +3196,7 @@ components: type: boolean description: > `true` if the browser has DevTools open (Chrome, Firefox) or the - Android device has Developer Tools enabled, `false` otherwise. + Android/iOS device has Developer Tools enabled, `false` otherwise. deprecated: true WebhookMitMAttack: type: object diff --git a/src/Model/DeveloperTools.php b/src/Model/DeveloperTools.php index 6a1dd932..585a8ac0 100644 --- a/src/Model/DeveloperTools.php +++ b/src/Model/DeveloperTools.php @@ -210,7 +210,7 @@ public function getResult(): bool /** * Sets result. * - * @param bool $result `true` if the browser has DevTools open (Chrome, Firefox) or the Android device has Developer Tools enabled, `false` otherwise + * @param bool $result `true` if the browser has DevTools open (Chrome, Firefox) or the Android/iOS device has Developer Tools enabled, `false` otherwise * * @return $this */ diff --git a/src/Model/WebhookDeveloperTools.php b/src/Model/WebhookDeveloperTools.php index 1a4c5ffe..8db2790f 100644 --- a/src/Model/WebhookDeveloperTools.php +++ b/src/Model/WebhookDeveloperTools.php @@ -204,7 +204,7 @@ public function getResult(): ?bool /** * Sets result. * - * @param ?bool $result `true` if the browser has DevTools open (Chrome, Firefox) or the Android device has Developer Tools enabled, `false` otherwise + * @param ?bool $result `true` if the browser has DevTools open (Chrome, Firefox) or the Android/iOS device has Developer Tools enabled, `false` otherwise * * @return $this */ From 756473574154d916cf9adf941cfb2460b71de8d4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Eray=20Ayd=C4=B1n?= Date: Fri, 31 Jul 2026 22:18:24 +0300 Subject: [PATCH 4/4] feat: add Labels Smart Signal --- .changeset/add-labels-smart-signal.md | 5 + .schema-version | 2 +- .swagger-codegen-ignore | 4 + README.md | 1 + docs/Model/ProductLabels.md | 10 + docs/Model/Products.md | 1 + res/fingerprint-server-api.yaml | 34 +++ scripts/generate.sh | 4 +- src/Model/ProductLabels.php | 302 ++++++++++++++++++++++++++ src/Model/Products.php | 38 +++- 10 files changed, 394 insertions(+), 7 deletions(-) create mode 100644 .changeset/add-labels-smart-signal.md create mode 100644 docs/Model/ProductLabels.md create mode 100644 src/Model/ProductLabels.php diff --git a/.changeset/add-labels-smart-signal.md b/.changeset/add-labels-smart-signal.md new file mode 100644 index 00000000..0200ef52 --- /dev/null +++ b/.changeset/add-labels-smart-signal.md @@ -0,0 +1,5 @@ +--- +"fingerprint-pro-server-api-php-sdk": minor +--- + +Add the Labels Smart Signal. The `Products` response now exposes a `labels` field (`ProductLabels`) whose `data` is an array of label predictions (`label`, `prediction`, `mlScore`). diff --git a/.schema-version b/.schema-version index 684a941c..f9d02f42 100644 --- a/.schema-version +++ b/.schema-version @@ -1 +1 @@ -v3.5.1 \ No newline at end of file +v3.5.2 \ No newline at end of file diff --git a/.swagger-codegen-ignore b/.swagger-codegen-ignore index d189daa1..421afe32 100644 --- a/.swagger-codegen-ignore +++ b/.swagger-codegen-ignore @@ -15,6 +15,8 @@ src/docs/Model/Tag.md src/docs/Model/WebhookRawDeviceAttributes.md src/docs/Model/GeolocationSubdivisions.md src/docs/Model/GeolocationSubdivision.md +src/docs/Model/Labels.md +src/docs/Model/LabelsInner.md src/Model/RawDeviceAttribute.php src/Model/RawDeviceAttributeError.php @@ -23,3 +25,5 @@ src/Model/Tag.php src/Model/WebhookRawDeviceAttributes.php src/Model/GeolocationSubdivisions.php src/Model/GeolocationSubdivision.php +src/Model/Labels.php +src/Model/LabelsInner.php diff --git a/README.md b/README.md index 5c68adf1..ba5dde05 100644 --- a/README.md +++ b/README.md @@ -319,6 +319,7 @@ Class | Method | HTTP request | Description - [ProductIdentification](docs/Model/ProductIdentification.md) - [ProductIncognito](docs/Model/ProductIncognito.md) - [ProductJailbroken](docs/Model/ProductJailbroken.md) + - [ProductLabels](docs/Model/ProductLabels.md) - [ProductLocationSpoofing](docs/Model/ProductLocationSpoofing.md) - [ProductMitMAttack](docs/Model/ProductMitMAttack.md) - [ProductPrivacySettings](docs/Model/ProductPrivacySettings.md) diff --git a/docs/Model/ProductLabels.md b/docs/Model/ProductLabels.md new file mode 100644 index 00000000..a23d9705 --- /dev/null +++ b/docs/Model/ProductLabels.md @@ -0,0 +1,10 @@ +# ProductLabels + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**data** | array | | [optional] +**error** | [**\Fingerprint\ServerAPI\Model\Error**](Error.md) | | [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/Model/Products.md b/docs/Model/Products.md index a8370515..b89794cd 100644 --- a/docs/Model/Products.md +++ b/docs/Model/Products.md @@ -32,6 +32,7 @@ Name | Type | Description | Notes **mitm_attack** | [**\Fingerprint\ServerAPI\Model\ProductMitMAttack**](ProductMitMAttack.md) | | [optional] **rare_device** | [**\Fingerprint\ServerAPI\Model\ProductRareDevice**](ProductRareDevice.md) | | [optional] **proximity** | [**\Fingerprint\ServerAPI\Model\ProductProximity**](ProductProximity.md) | | [optional] +**labels** | [**\Fingerprint\ServerAPI\Model\ProductLabels**](ProductLabels.md) | | [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/res/fingerprint-server-api.yaml b/res/fingerprint-server-api.yaml index fd168691..2de71e26 100644 --- a/res/fingerprint-server-api.yaml +++ b/res/fingerprint-server-api.yaml @@ -2509,6 +2509,38 @@ components: error: $ref: '#/components/schemas/Error' deprecated: true + Labels: + type: array + items: + type: object + additionalProperties: false + properties: + label: + type: string + prediction: + type: boolean + mlScore: + type: number + format: double + minimum: 0 + maximum: 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 + score is determined by a model trained on customer data for that use + case. This field is in the beta phase and only available to select + customers. If you are interested, please [contact our support + team](https://fingerprint.com/support/). + deprecated: true + ProductLabels: + type: object + additionalProperties: false + properties: + data: + $ref: '#/components/schemas/Labels' + error: + $ref: '#/components/schemas/Error' + deprecated: true Proximity: type: object description: > @@ -2620,6 +2652,8 @@ components: $ref: '#/components/schemas/ProductRareDevice' proximity: $ref: '#/components/schemas/ProductProximity' + labels: + $ref: '#/components/schemas/ProductLabels' deprecated: true EventsGetResponse: type: object diff --git a/scripts/generate.sh b/scripts/generate.sh index 48eaaa4f..dc684ef0 100755 --- a/scripts/generate.sh +++ b/scripts/generate.sh @@ -68,7 +68,7 @@ docker run --rm -u "$(id -u):$(id -g)" -v "${PWD}:/local" -w /local \ -i ./res/fingerprint-server-api.yaml \ -o ./ \ -c ./config.json \ - --type-mapping RawDeviceAttributes=array,WebhookRawDeviceAttributes=array,Tag=array,GeolocationSubdivisions=array + --type-mapping RawDeviceAttributes=array,WebhookRawDeviceAttributes=array,Tag=array,GeolocationSubdivisions=array,Labels=array # Add `@deprecated` to the `SearchEventsResponseEvents` sed_in_place \ @@ -105,6 +105,8 @@ patterns=( '\[Tag\](docs\/Model\/Tag\.md)' '\[GeolocationSubdivisions\](docs\/Model\/GeolocationSubdivisions\.md)' '\[GeolocationSubdivision\](docs\/Model\/GeolocationSubdivision\.md)' + '\[Labels\](docs\/Model\/Labels\.md)' + '\[LabelsInner\](docs\/Model\/LabelsInner\.md)' ) for pattern in "${patterns[@]}"; do sed_in_place "/$pattern/d" src/README.md diff --git a/src/Model/ProductLabels.php b/src/Model/ProductLabels.php new file mode 100644 index 00000000..135a7555 --- /dev/null +++ b/src/Model/ProductLabels.php @@ -0,0 +1,302 @@ + 🚧 Deprecation Notice + * > + * > This version of Server API is marked as deprecated starting on **Jan 7th 2026** and will be fully defunct on **Jan 7th 2027** according to our [API Deprecation Policy](https://dev.fingerprint.com/reference/api-deprecation-policy). If you still use this version, please follow our [migration guide](https://dev.fingerprint.com/reference/migrating-from-server-api-v3-to-v4) to migrate from this deprecated version to the new one. + * + * Fingerprint Server API allows you to search, update, and delete identification 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. + * + * + * OpenAPI spec version: 3 + * Contact: support@fingerprint.com + * Generated by: https://github.com/swagger-api/swagger-codegen.git + * Swagger Codegen version: 3.0.78 + */ + +/** + * NOTE: This class is auto generated by the swagger code generator program. + * https://github.com/swagger-api/swagger-codegen + * Do not edit the class manually. + */ + +namespace Fingerprint\ServerAPI\Model; + +use Fingerprint\ServerAPI\ObjectSerializer; + +/** + * ProductLabels Class Doc Comment. + * + * @deprecated + * + * @category Class + * + * @author Swagger Codegen team + * + * @see https://github.com/swagger-api/swagger-codegen + */ +class ProductLabels implements ModelInterface, \ArrayAccess +{ + /** + * The original name of the model. + * + */ + protected static string $swaggerModelName = 'ProductLabels'; + + /** + * Array of property to type mappings. Used for (de)serialization. + * + * @var string[] + */ + protected static array $swaggerTypes = [ + 'data' => 'array', + 'error' => '\Fingerprint\ServerAPI\Model\Error']; + + /** + * Array of property to format mappings. Used for (de)serialization. + * + * @var string[] + */ + protected static array $swaggerFormats = [ + 'data' => null, + 'error' => null]; + + /** + * Array of attributes where the key is the local name, + * and the value is the original name. + * + * @var string[] + */ + protected static array $attributeMap = [ + 'data' => 'data', + 'error' => 'error']; + + /** + * Array of attributes to setter functions (for deserialization of responses). + * + * @var string[] + */ + protected static array $setters = [ + 'data' => 'setData', + 'error' => 'setError']; + + /** + * Array of attributes to getter functions (for serialization of requests). + * + * @var string[] + */ + protected static array $getters = [ + 'data' => 'getData', + 'error' => 'getError']; + + /** + * Associative array for storing property values. + * + * @var mixed[] + */ + protected array $container = []; + + /** + * Constructor. + * + * @param mixed[] $data Associated array of property values + * initializing the model + */ + public function __construct(?array $data = null) + { + $this->container['data'] = isset($data['data']) ? $data['data'] : null; + $this->container['error'] = isset($data['error']) ? $data['error'] : null; + } + + /** + * Gets the string presentation of the object. + * + */ + public function __toString(): string + { + return json_encode(ObjectSerializer::sanitizeForSerialization($this)); + } + + /** + * Array of property to type mappings. Used for (de)serialization. + */ + public static function swaggerTypes(): array + { + return self::$swaggerTypes; + } + + /** + * Array of property to format mappings. Used for (de)serialization. + */ + public static function swaggerFormats(): array + { + return self::$swaggerFormats; + } + + /** + * Array of attributes where the key is the local name, + * and the value is the original name. + */ + public static function attributeMap(): array + { + return self::$attributeMap; + } + + /** + * Array of attributes to setter functions (for deserialization of responses). + */ + public static function setters(): array + { + return self::$setters; + } + + /** + * Array of attributes to getter functions (for serialization of requests). + */ + public static function getters(): array + { + return self::$getters; + } + + /** + * The original name of the model. + */ + public function getModelName(): string + { + return self::$swaggerModelName; + } + + /** + * Show all the invalid properties with reasons. + * + * @return array invalid properties with reasons + */ + public function listInvalidProperties(): array + { + return []; + } + + /** + * Validate all the properties in the model + * return true if all passed. + * + * @return bool True if all properties are valid + */ + public function valid(): bool + { + return 0 === count($this->listInvalidProperties()); + } + + /** + * Gets data. + */ + public function getData(): ?array + { + return $this->container['data']; + } + + /** + * Sets data. + * + * @param ?array $data data + * + * @return $this + */ + public function setData(?array $data): self + { + $this->container['data'] = $data; + + return $this; + } + + /** + * Gets error. + */ + public function getError(): ?Error + { + return $this->container['error']; + } + + /** + * Sets error. + * + * @param ?\Fingerprint\ServerAPI\Model\Error $error error + * + * @return $this + */ + public function setError(?Error $error): self + { + $this->container['error'] = $error; + + return $this; + } + + /** + * Returns true if offset exists. False otherwise. + * + * @param int $offset Offset + */ + public function offsetExists($offset): bool + { + return isset($this->container[$offset]); + } + + /** + * Gets offset. + * + * @param int $offset Offset + */ + public function offsetGet($offset): mixed + { + return isset($this->container[$offset]) ? $this->container[$offset] : null; + } + + /** + * Sets value based on offset. + * + * @param int $offset Offset + * @param mixed $value Value to be set + */ + public function offsetSet($offset, mixed $value): void + { + if (is_null($offset)) { + $this->container[] = $value; + } else { + $this->container[$offset] = $value; + } + } + + /** + * Unsets offset. + * + * @param int $offset Offset + */ + public function offsetUnset($offset): void + { + unset($this->container[$offset]); + } + + /** + * Gets the string presentation of the object in a pretty JSON format. + * + */ + public function toPrettyString(): string + { + return json_encode( + ObjectSerializer::sanitizeForSerialization($this), + JSON_PRETTY_PRINT + ); + } +} diff --git a/src/Model/Products.php b/src/Model/Products.php index d8962c19..22790d5f 100644 --- a/src/Model/Products.php +++ b/src/Model/Products.php @@ -89,7 +89,8 @@ class Products implements ModelInterface, \ArrayAccess 'developer_tools' => '\Fingerprint\ServerAPI\Model\ProductDeveloperTools', 'mitm_attack' => '\Fingerprint\ServerAPI\Model\ProductMitMAttack', 'rare_device' => '\Fingerprint\ServerAPI\Model\ProductRareDevice', - 'proximity' => '\Fingerprint\ServerAPI\Model\ProductProximity']; + 'proximity' => '\Fingerprint\ServerAPI\Model\ProductProximity', + 'labels' => '\Fingerprint\ServerAPI\Model\ProductLabels']; /** * Array of property to format mappings. Used for (de)serialization. @@ -123,7 +124,8 @@ class Products implements ModelInterface, \ArrayAccess 'developer_tools' => null, 'mitm_attack' => null, 'rare_device' => null, - 'proximity' => null]; + 'proximity' => null, + 'labels' => null]; /** * Array of attributes where the key is the local name, @@ -158,7 +160,8 @@ class Products implements ModelInterface, \ArrayAccess 'developer_tools' => 'developerTools', 'mitm_attack' => 'mitmAttack', 'rare_device' => 'rareDevice', - 'proximity' => 'proximity']; + 'proximity' => 'proximity', + 'labels' => 'labels']; /** * Array of attributes to setter functions (for deserialization of responses). @@ -192,7 +195,8 @@ class Products implements ModelInterface, \ArrayAccess 'developer_tools' => 'setDeveloperTools', 'mitm_attack' => 'setMitmAttack', 'rare_device' => 'setRareDevice', - 'proximity' => 'setProximity']; + 'proximity' => 'setProximity', + 'labels' => 'setLabels']; /** * Array of attributes to getter functions (for serialization of requests). @@ -226,7 +230,8 @@ class Products implements ModelInterface, \ArrayAccess 'developer_tools' => 'getDeveloperTools', 'mitm_attack' => 'getMitmAttack', 'rare_device' => 'getRareDevice', - 'proximity' => 'getProximity']; + 'proximity' => 'getProximity', + 'labels' => 'getLabels']; /** * Associative array for storing property values. @@ -270,6 +275,7 @@ public function __construct(?array $data = null) $this->container['mitm_attack'] = isset($data['mitm_attack']) ? $data['mitm_attack'] : null; $this->container['rare_device'] = isset($data['rare_device']) ? $data['rare_device'] : null; $this->container['proximity'] = isset($data['proximity']) ? $data['proximity'] : null; + $this->container['labels'] = isset($data['labels']) ? $data['labels'] : null; } /** @@ -945,6 +951,28 @@ public function setProximity(?ProductProximity $proximity): self return $this; } + /** + * Gets labels. + */ + public function getLabels(): ?ProductLabels + { + return $this->container['labels']; + } + + /** + * Sets labels. + * + * @param ?\Fingerprint\ServerAPI\Model\ProductLabels $labels labels + * + * @return $this + */ + public function setLabels(?ProductLabels $labels): self + { + $this->container['labels'] = $labels; + + return $this; + } + /** * Returns true if offset exists. False otherwise. *