Server-Side Instructions
Overview
Verify API Field Changes
From time to time, Arkose will add additional fields to the Verify API . We will not either delete fields, or change their value specification (i.e. if field "foo" has been defined as having integer values between 0 and 100, we will not change "foo" so that it has, for example, a string value or integer values between -500 and 5000).
This means you must write your Verify data processing code so it handles unknown fields and their values. For example, suppose it encounters a field "bar" and does not have a defined way of handling "bar" and its value. It could just ignore "bar" as an unknown field and go on to the next field.
SUMMARY:
Arkose will not delete any fields from the Verify API .
Arkose will not change what values a Verify API field can have.
Arkose will add additional fields and their values to the Verify API over time.
Your Verify API data processing code must be able to deal with unknown to it fields and their values in its Verify data input.
This document is for Server-Side processing using Arkose Labs Verify API Version 4. It applies to Arkose Detect and Arkose Protect.
The latest Verify API version (v4) includes integrated IP Intelligence and enriched Fingerprint information as a part of the Verify response. Please review the changes to the response schema before upgrading from a previous version or consult with your CSM.
Additional Risk Score Feature Available
A session's Risk Score can be determined based on multiple signals collected throughout it. This feature is turned off by default. For more information, see the Risk Score page. To have it turned on, ask your Arkose Labs CSM.
Additional IP Velocity Fields Available
As of April 2022, you can have optional IP velocity fields returned as part of the Verify v4 API response. To have these fields included, contact your CSM (Customer Success Manager).
There are two steps required to fully implement the Arkose Fraud Deterrence Platform (Arkose Platform):
-
Client-side implementation that allows the Arkose Platform to collect data necessary to classify the traffic from the client, display an Enforcement Challenge (EC) if necessary, and provide a one-time use token.
-
Server-side implementation that takes the token provided by the client-side and verifies it with the Verify API. The result is a response that contains information about the session.
This guide documents the steps required to implement the server-side verification.
Detailed information on implementing the Arkose Platform client-side processing can be found in Setting Up the Arkose Platform.


API Request Authentication
Arkose Labs authenticates your API requests using a private/public key pair that can be retrieved from the Key Settings page of the Arkose Labs Command Center. As shown below, go to the left menubar's Settings entry, and then to the Keys sub-entry. If you do not have access to the Command Center or do not have your private and public keys, contact your Sales Rep or Sales Engineer.


The private key is needed to authenticate when using the Verify API. This private key must not be published on a client facing website, and must only be used on your server-side implementation on the Verify API.
Verify API Request and Response Schemas
Verify API Changing To Personalized URLs
As of February 2022, Arkose Labs is beginning to deprecate its previously used generic Verify API URL in favor of unique URLs personalized to our customers. If you have not already done so, please talk to your CSM about switching over to your own unique Verify URLs. Note that the generic URLs will continue to work until all customers are using their personalized URLs. This document now uses mock personalized URLs.
Information on the current Verify API request and response schema can be found at the following URLs. As mentioned above, Arkose is moving to giving each customer their own personalized Verify API URL, so please substitute your own URL for the descriptions and examples used in this document.
Request schema:
<company>-verify.arkoselabs.com/api/v4/verify/schema/request
Response schema:
<company>-verify.arkoselabs.com/api/v4/verify/schema/response
e.g.
https://acme-verify.arkoselabs.com/api/v4/verify/schema/request
https://acme-verify.arkoselabs.com/api/v4/verify/schema/response
Generic Verify URLs
For reference for those still using our generic Verify URL, it is:
Request schema:
http://verify.arkoselabs.com/api/v4/verify/schema/request
Response schema:
http://verify.arkoselabs.com/api/v4/verify/schema/response
Here is an example of how to get the response schema using cURL:
curl https://<company>-verify.arkoselabs.com/api/v4/verify/schema/request
Calling the Verify API
Requests to the Verify API can either be sent via:
-
An
application/json
body (POST) -
A URL with query parameters (GET)
-
An HTTP header.
POST and GET Request Parameters
This table shows the parameters that should be included within the GET or POST requests.
Parameter Name | Required / Optional | Description |
---|---|---|
| Required | The private key issued by Arkose Labs along with the public key used for the client-side API. |
| Required | The token value contained within the |
| Optional | A freeform string that allows information to be passed to the Verify API. This can be used to pass basic information that you want stored by Arkose with the session data. This can be used internally by Arkose when performing manual traffic analysis. |
GET request
Below is an example URL that includes the parameters from the above table as query parameters. Before actually using it, replace the ???
placeholders with the real values to be used, as well as replacing <company>
with your company's personalized API URL name.
https://<company>-verify.arkoselabs.com/api/v4/verify/?private_key=???&session_token=???&log_data=???
POST request
The POST request requires the use of the request body. Below is an example of a JSON request body using the parameters from the table above.
{
private_key: "_PRIVATE_KEY_HERE_",
session_token: "_SESSION_TOKEN_HERE_",
log_data: "_LOG_DATA_HERE_"
}
HTTP Header Request
Requests using HTTP headers do not support
log_data
In the instructions above, the private key and session token are passed via the URL query parameters (GET) or POST body. An alternative method of passing the private key and session token to the Verify API is via HTTP headers on the request. The table below shows the name of the headers that should be used.
Parameter Name | Required / Optional | Description |
---|---|---|
Arkose-Private-Key | Required | This is the private key issued by Arkose Labs along with the public key used for the client-side API |
Arkose-Session-Token | Required | This is the token value contained within the token key of the client-side API response object. This object is provided within the client-side |
Here is an example of providing the required data using the headers listed above in a simple Curl command.
curl -H "Content-Type: application/json" -H "Arkose-Private-Key: <your private key>" -H "Arkose-Session-Token: <value of verification-token>" https://<company>-verify.arkoselabs.com/api/v4/verify/
Processing the Verify API Response
The reason for performing the verification step is to ensure that the user cannot proceed with their action unless their session is valid. Each response.token
provided by the client-side API can only be used once. This means that a solved session token cannot be reused to bypass Arkose Labs' challenges.
Once a response.token
has been verified using the verify API, it cannot be used again.
Check the API response. Allow the user to continue ONLY if:
The value of the
session_details.solved
key within the response is true.Any other value means that the userβs response was not valid.
Verify API JSON Response Details
The response from the new Verify API v4 includes
- Session details
- Fingerprints information broken into three categories
- Browser characteristics
- Device characteristics
- User preferences
- IP Intelligence
The following information is completely new to v4
game_number_limit_reached
telltale_list
user_language_shown
- The Fingerprint section
- IP Intelligence section
The table below shows the JSON response details. Unless otherwise noted, they appear in responses for both Arkose Detect and Arkose Protect.
session_risk
Field Not Described HereIf the Risk Score function has been turned on, the Verify v4 response will always include a
session_risk
field.session_risk
is not listed or described below. For a description ofsession_risk
and what you need to know to process it, see the Risk Score page.
Field Name | Description | Example Values | Applicable Product |
---|---|---|---|
Session Characteristics | |||
| When a session's risk level does not qualify it for transparent mode (no challenge) it is shown an interactive challenge. In that case, this field's value indicates if the challenge was successfully solved or not. If it was in transparent mode, the field value is |
| Arkose Protect |
| A unique token for the Arkose Labs session. A session is the whole experience from solution load to verification. | A unique token, e.g. | Arkose Detect |
| AnΒ ISO 8601 UTC timestamp signifying the time the session was created | e.g. | Arkose Detect |
| An ISO 8601 UTC timestamp signifying the time that the Enforcement Challenge user supplied answered were evaluated | e.g. | Arkose Protect |
| An ISO 8601 UTC timestamp signifying the time that the request to the verify endpoint was made. | e.g. | Arkose Detect |
| Whether the user attempted to solve the Enforcement Challenge, or not. |
| Arkose Protect |
| A number that indicates the security level used for this session. Be aware that | A security level, e.g. | Arkose Protect |
| Indicates if Arkose Labs certifies there are no telltales of non-legitimate activity in the session. |
| Arkose Detect |
| Indicates if a session has already been verified |
| Arkose Detect |
| Indicates if a session timed out before it was solved |
| Arkose Detect |
| Indicates if the session qualified for low security, but failed verification. Low security is when a session has qualified to run in transparent mode, or use a no wrong answer enforcement challenge, such as the pick your favorite color challenge. |
| Arkose Protect |
| If the theme arg setting at verification matched the original theme arg passed in at session setup. |
| Arkose Protect |
| Suppressed is the old name for transparent mode. This field shows if the the user was offered transparent mode. |
| Arkose Protect |
| Punishable is an attack mitigation tactic, which randomly fails verification attempts, even if the response was correct. This field indicates if punishable was activated. |
| Arkose Protect |
| UID for a combination of telltales that identify a particular bad user or organization. | A string such as | Arkose Detect |
| Indicates that the intention was to offer the user a lowsec session, but they failed to qualify for it when the verification was attempted. |
| Arkose Protect |
| An identifier showing why a user was denied a lowsec session. |
| Arkose Detect |
| The lowsec level that was denied to the user. | A security level, e.g. | Arkose Detect |
| The User Agent string for the user that interacted with the EC. |
| Arkose Detect |
| An identifier which specifies which IP reputation database this IP address has been seen at. |
| Arkose Detect |
|
| Arkose Detect | |
| Game number limit is an optional setting that restricts the number of attempts a user can have at solving the EC. This field can show if the user reached the number of attempts allowed. |
| Arkose Protect |
| Shows the language code of the language in which the challenge was presented to the user. | A string such as | Arkose Protect |
| The list of telltales that were identified as possible candidates during a session. | A string e.g. | Arkose Detect |
Fingerprint | |||
Browser Characteristics | |||
| The name of the browser the user was using. | A string, e.g. | Arkose Detect |
| The version of the browser the user was using. | A version number, e.g. | Arkose Detect |
| The color depth of the device used for the session. | A number, e.g. | Arkose Detect |
| Whether session storage was available or not. |
| Arkose Detect |
|
| Arkose Detect | |
| The canvas fingerprint value of the browser. | e.g. | Arkose Detect |
Device Characteristics | |||
| The operating system used on the device. | e.g. | Arkose Detect |
| The version of the operating system used on the device. | e.g. | Arkose Detect |
| The current screen resolution of the device. | e.g. | Arkose Detect |
| The maximum supported screen resolution of the device. | e.g. | Arkose Detect |
|
| Arkose Detect | |
| The CPU class identifier of the device. | e.g. | Arkose Detect |
| The platform the device belongs to. | e.g. | Arkose Detect |
| Whether the device has touch support or not. |
| Arkose Detect |
| The hardware concurrency support of the device. | e.g. | Arkose Detect |
User Preferences | |||
| The timezone offset from UTC. | e.g. | Arkose Detect |
IP Intelligence | |||
| The timezone the session was originated from. | A string, e.g. | Arkose Detect |
| The IP address of the device used for the session. | An IP address, e.g. | Arkose Detect |
| Indicates if the IP is suspected of being a TOR connection (either active or previously hosted TOR nodes and exist). |
| Arkose Detect |
| Indicates if the IP is suspected of being a VPN connection. For example, it has been on a VPN and can include data center ranges. |
| Arkose Detect |
| Indicates if this IP address suspected to be a proxy. |
| Arkose Detect |
| Whether the session is bot-originated or not. |
| Arkose Detect |
| Country the User IP belongs to. | A string, e.g. | Arkose Detect |
| State/Region that the IP belongs to. | A string, e.g. | Arkose Detect |
| The city the IP belongs to. | A string, e.g. | Arkose Detect |
| The Internet Service Provider name. | A string, e.g. | Arkose Detect |
| Whether the IP address belongs to education and research institutions, corporates, or public WiFi such as hotel lobby, coffee shop, etc. |
| Arkose Detect |
| Whether the connection type belongs to one of the following categories: Residential, Corporate, Education, Mobile, Data Center | A string, e.g. | Arkose Detect |
| The latitude coordinates of the device used for the session. | e.g. | Arkose Detect |
| The longitude coordinates of the device used for the session. | e.g. | Arkose Detect |
For a more detailed information about the Verify API JSON response, please ask your CSM.
See Response Schema for the full schema.
Sample Verify API Responses
The following examples show different Verify API responses. They show the typical values in each field for each type of response.
{
"session_details": {
"solved": true,
"session": "22612c147bb418c8.2570749403",
"session_created": "2021-08-29T23:13:03+00:00",
"check_answer": "2021-08-29T23:13:16+00:00",
"verified": "2021-08-30T00:19:32+00:00",
"attempted": true,
"security_level": 30,
"session_is_legit": false,
"previously_verified": true,
"session_timed_out": true,
"suppress_limited": false,
"theme_arg_invalid": false,
"suppressed": false,
"punishable_actioned": false,
"telltale_user": "eng-1362-game3-py-0.",
"failed_low_sec_validation": false,
"lowsec_error": null,
"lowsec_level_denied": null,
"ua": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.159 Safari/537.36",
"ip_rep_list": null,
"game_number_limit_reached": false,
"user_language_shown": "en",
"telltale_list": [
"eng-1362",
"eng-1362-game3-py-0."
],
"optional": null
},
"fingerprint": {
"browser_characteristics": {
"browser_name": "Chrome",
"browser_version": "92.0.4515.159",
"color_depth": 24,
"session_storage": false,
"indexed_database": false,
"canvas_fingerprint": 1652956012
},
"device_characteristics": {
"operating_system": null,
"operating_system_version": null,
"screen_resolution": [
1920,
1080
],
"max_resolution_supported": [
1920,
1057
],
"behavior": false,
"cpu_class": "unknown",
"platform": "MacIntel",
"touch_support": false,
"hardware_concurrency": 8
},
"user_preferences": {
"timezone_offset": -600
}
},
"ip_intelligence": {
"user_ip": "10.211.121.196",
"is_tor": false,
"is_vpn": true,
"is_proxy": true,
"is_bot": true,
"country": "AU",
"region": "New South Wales",
"city": "Sydney",
"isp": "Amazon.com",
"public_access_point": false,
"connection_type": "Data Center",
"latitude": "-38.85120035",
"longitude": "106.21220398",
"timezone": "Australia/Sydney"
}
}
{
"session_details": {
"solved": false,
"session": "22612c147bb418c8.2570749403",
"session_created": "2021-08-29T23:13:03+00:00",
"check_answer": "2021-08-29T23:13:16+00:00",
"verified": "2021-08-30T00:19:32+00:00",
"attempted": true,
"security_level": 30,
"session_is_legit": false,
"previously_verified": true,
"session_timed_out": true,
"suppress_limited": false,
"theme_arg_invalid": false,
"suppressed": false,
"punishable_actioned": false,
"telltale_user": "eng-1362-game3-py-0.",
"failed_low_sec_validation": false,
"lowsec_error": null,
"lowsec_level_denied": null,
"ua": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.159 Safari/537.36",
"ip_rep_list": null,
"game_number_limit_reached": false,
"user_language_shown": "en",
"telltale_list": [
"eng-1362",
"eng-1362-game3-py-0."
],
"optional": null
},
"fingerprint": {
"browser_characteristics": {
"browser_name": "Chrome",
"browser_version": "92.0.4515.159",
"color_depth": 24,
"session_storage": false,
"indexed_database": false,
"canvas_fingerprint": 1652956012
},
"device_characteristics": {
"operating_system": null,
"operating_system_version": null,
"screen_resolution": [
1920,
1080
],
"max_resolution_supported": [
1920,
1057
],
"behavior": false,
"cpu_class": "unknown",
"platform": "MacIntel",
"touch_support": false,
"hardware_concurrency": 8
},
"user_preferences": {
"timezone_offset": -600
}
},
"ip_intelligence": {
"user_ip": "10.211.121.196",
"is_tor": false,
"is_vpn": true,
"is_proxy": true,
"is_bot": true,
"country": "AU",
"region": "New South Wales",
"city": "Sydney",
"isp": "Amazon.com",
"public_access_point": false,
"connection_type": "Data Center",
"latitude": "-38.85120035",
"longitude": "106.21220398",
"timezone": "Australia/Sydney"
}
}
{
"error": "DENIED ACCESS",
"verified": "2021-08-30T22:15:00+00:00"
}
{
"session_details": {
"solved": true,
"session": "22612c147bb418c8.2570749403",
"session_created": "2021-08-29T23:13:03+00:00",
"check_answer": "2021-08-29T23:13:16+00:00",
"verified": "2021-08-30T00:19:32+00:00",
"attempted": true,
"security_level": 30,
"session_is_legit": false,
"previously_verified": true,
"session_timed_out": true,
"suppress_limited": false,
"theme_arg_invalid": false,
"suppressed": false,
"punishable_actioned": false,
"telltale_user": "eng-1362-game3-py-0.",
"failed_low_sec_validation": false,
"lowsec_error": "user_credits",
"lowsec_level_denied": null,
"ua": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.159 Safari/537.36",
"ip_rep_list": null,
"game_number_limit_reached": false,
"user_language_shown": "en",
"telltale_list": [
"eng-1362",
"eng-1362-game3-py-0."
],
"optional": null
},
"fingerprint": {
"browser_characteristics": {
"browser_name": "Chrome",
"browser_version": "92.0.4515.159",
"color_depth": 24,
"session_storage": false,
"indexed_database": false,
"canvas_fingerprint": 1652956012
},
"device_characteristics": {
"operating_system": null,
"operating_system_version": null,
"screen_resolution": [
1920,
1080
],
"max_resolution_supported": [
1920,
1057
],
"behavior": false,
"cpu_class": "unknown",
"platform": "MacIntel",
"touch_support": false,
"hardware_concurrency": 8
},
"user_preferences": {
"timezone_offset": -600
}
},
"ip_intelligence": {
"user_ip": "10.211.121.196",
"is_tor": false,
"is_vpn": true,
"is_proxy": true,
"is_bot": true,
"country": "AU",
"region": "New South Wales",
"city": "Sydney",
"isp": "Amazon.com",
"public_access_point": false,
"connection_type": "Data Center",
"latitude": "-38.85120035",
"longitude": "106.21220398",
"timezone": "Australia/Sydney"
}
}
{
"session_details": {
"solved": true,
"session": "22612c147bb418c8.2570749403",
"session_created": "2021-08-29T23:13:03+00:00",
"check_answer": "2021-08-29T23:13:16+00:00",
"verified": "2021-08-30T00:19:32+00:00",
"attempted": true,
"security_level": 30,
"session_is_legit": false,
"previously_verified": true,
"session_timed_out": true,
"suppress_limited": false,
"theme_arg_invalid": false,
"suppressed": false,
"punishable_actioned": false,
"telltale_user": "eng-1362-game3-py-0.",
"failed_low_sec_validation": false,
"lowsec_error": null,
"lowsec_level_denied": null,
"ua": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.159 Safari/537.36",
"ip_rep_list": null,
"game_number_limit_reached": false,
"user_language_shown": "en",
"telltale_list": [
"eng-1362",
"eng-1362-game3-py-0."
],
"optional": {
"blob": "BbfYFeKzwEwnGCAU.fCWy85IOHQ2j2SomSW6bf6Mibfgdlqn7MWyoY8JbYkVskPsLbqBqryeAR0EVC1pi5XosVJjPfvWZ4H6EBQgC5XYnHVeKwQ=="
},
},
"fingerprint": {
"browser_characteristics": {
"browser_name": "Chrome",
"browser_version": "92.0.4515.159",
"color_depth": 24,
"session_storage": false,
"indexed_database": false,
"canvas_fingerprint": 1652956012
},
"device_characteristics": {
"operating_system": null,
"operating_system_version": null,
"screen_resolution": [
1920,
1080
],
"max_resolution_supported": [
1920,
1057
],
"behavior": false,
"cpu_class": "unknown",
"platform": "MacIntel",
"touch_support": false,
"hardware_concurrency": 8
},
"user_preferences": {
"timezone_offset": -600
}
},
"ip_intelligence": {
"user_ip": "10.211.121.196",
"is_tor": false,
"is_vpn": true,
"is_proxy": true,
"is_bot": true,
"country": "AU",
"region": "New South Wales",
"city": "Sydney",
"isp": "Amazon.com",
"public_access_point": false,
"connection_type": "Data Center",
"latitude": "-38.85120035",
"longitude": "106.21220398",
"timezone": "Australia/Sydney"
}
}
Request and Response Schemas
The request and response schemas follow the JSON Schema standard. For more information about the JSON Schema standard see JSON Schema.
{
"type": "object",
"properties": {
"private_key": {
"description": "The private key associated with EC that served this session",
"type": "string"
},
"session_token": {
"description": "The session token which identifies the session to verify",
"type": "string"
},
"log_data": {
"description": "A field to allow a free form piece of string data",
"type": "string"
}
},
"required": [
"private_key",
"session_token"
]
}
{
"oneOf": [
{
"description": "error response",
"type": "object",
"properties": {
"error": {
"type": "string"
},
"verified": {
"type": "string",
"format": "date-time"
}
},
"required": [
"error",
"verified"
]
},
{
"description": "simple mode",
"type": "integer",
"default": 0
},
{
"type": "object",
"properties": {
"session_details": {
"type": "object",
"properties": {
"solved": {
"type": "boolean",
"default": false
},
"session": {
"type": ["string", "null"],
"pattern": "^[0-9A-Fa-f]+\\.[0-9]{10}$",
"default": null
},
"session_created": {
"type": ["string", "null"],
"format": "date-time",
"default": null
},
"check_answer": {
"type": ["string", "null"],
"format": "date-time",
"default": null
},
"verified": {
"type": "string",
"format": "date-time"
},
"attempted": {
"type": "boolean",
"default": false
},
"security_level": {
"type": "integer",
"minimum": 0,
"maximum": 500,
"default": 0
},
"session_is_legit": {
"type": "boolean",
"default": false
},
"previously_verified": {
"type": "boolean",
"default": false
},
"session_timed_out": {
"type": "boolean",
"default": false
},
"suppress_limited": {
"type": "boolean",
"default": false
},
"theme_arg_invalid": {
"type": "boolean",
"default": false
},
"suppressed": {
"type": "boolean",
"default": false
},
"punishable_actioned": {
"type": "boolean",
"default": false
},
"telltale_user": {
"type": ["string", "null"],
"minLength": 0,
"maxLength": 128,
"default": null
},
"failed_low_sec_validation": {
"type": "boolean",
"default": false
},
"lowsec_error": {
"type": ["string", "null"],
"enum": ["user_credits", "rate_limit_local", "validation_checks", "rate_limit_global", null],
"default": null
},
"lowsec_level_denied": {
"type": ["integer", "null"],
"minimum": 0,
"maximum": 500,
"default": null
},
"ua": {
"type": ["string", "null"],
"default": null
},
"ip_rep_list": {
"type": ["string", "null"],
"enum": ["tor", "sfs_tor", "sfs", null],
"default": null
},
"optional": {
"type": ["object", "null"],
"default": null
},
"game_number_limit_reached": {
"description": "Whether the maximum number of game retries (if set) is reached",
"type": "boolean",
"default": false
},
"user_language_shown": {
"description": "Shows the language code of the language in which the challenge was presented to the user",
"type": ["string", "null"],
"minLength": 0,
"maxLength": 10,
"default": null
},
"telltale_list": {
"description": "The list of telltales that were identified as possible candidates during a session",
"type": ["array", "null"],
"items": {
"type": "string",
"minLength": 0,
"maxLength": 128
},
"default": null
}
},
"required": [
"solved",
"session",
"session_created",
"check_answer",
"verified",
"previously_verified",
"session_timed_out",
"suppress_limited",
"theme_arg_invalid",
"suppressed",
"attempted",
"punishable_actioned",
"telltale_user",
"session_is_legit",
"failed_low_sec_validation",
"lowsec_error",
"lowsec_level_denied",
"ip_rep_list",
"security_level",
"ua",
"optional",
"game_number_limit_reached",
"user_language",
"telltale_list"
]
},
"fingerprint": {
"type": "object",
"properties": {
"browser_characteristics": {
"type": "object",
"properties": {
"browser_name": {
"type": ["string", "null"],
"default": null
},
"browser_version": {
"type": ["string", "null"],
"default": null
},
"color_depth": {
"type": ["integer", "null"],
"default": null
},
"session_storage": {
"type": "boolean",
"default": false
},
"indexed_database": {
"type": "boolean",
"default": false
},
"canvas_fingerprint": {
"type": ["integer", "null"],
"default": null
}
},
"required": [
"browser_name",
"browser_version",
"color_depth",
"session_storage",
"indexed_database",
"canvas_fingerprint"
]
},
"device_characteristics": {
"type": "object",
"properties": {
"operating_system": {
"type": ["string", "null"],
"default": null,
"examples": [
"Windows",
"OS X"
]
},
"operating_system_version": {
"type": ["string", "null"],
"default": null,
"examples": [
"10",
"Mojave"
]
},
"screen_resolution": {
"type": ["array", "null"],
"items": {"type": "integer"},
"default": null,
"examples": [
[1920, 1080]
]
},
"max_resolution_supported": {
"type": ["array", "null"],
"items": {"type": "integer"},
"default": null,
"examples": [
[1280, 720]
]
},
"behavior": {
"type": "boolean",
"default": false
},
"cpu_class": {
"type": ["string", "null"],
"default": null,
"examples": [
"x86",
"ARM"
]
},
"platform": {
"type": ["string", "null"],
"default": null,
"examples": [
"MacIntel",
"Win32"
]
},
"touch_support": {
"type": "boolean",
"default": false
},
"hardware_concurrency": {
"type": ["integer", "null"],
"default": null
}
},
"required": [
"operating_system",
"operating_system_version",
"screen_resolution",
"max_resolution_supported",
"behavior",
"cpu_class",
"platform",
"touch_support",
"hardware_concurrency"
]
},
"user_preferences": {
"type": "object",
"properties": {
"timezone_offset": {
"type": ["integer", "null"],
"default": null,
"examples": [
1000,
-800,
0
]
}
},
"required": [
"timezone_offset"
]
}
},
"required": [
"browser_characteristics",
"device_characteristics",
"user_preferences"
]
},
"ip_intelligence": {
"type": "object",
"properties": {
"user_ip": {
"oneOf": [
{"type": "string", "format": "ipv4"},
{"type": "string", "format": "ipv6"},
{"type": "null"}
],
"default": null
},
"is_tor": {
"type": "boolean",
"default": false
},
"is_vpn": {
"type": "boolean",
"default": false
},
"is_proxy": {
"type": "boolean",
"default": false
},
"is_bot": {
"type": "boolean",
"default": false
},
"country": {
"type": ["string", "null"],
"default": null
},
"region": {
"type": ["string", "null"],
"default": null
},
"city": {
"type": ["string", "null"],
"default": null
},
"isp": {
"type": ["string", "null"],
"default": null
},
"public_access_point": {
"type": "boolean",
"default": false
},
"connection_type": {
"type": ["string", "null"],
"default": null
},
"latitude": {
"type": ["string", "null"],
"default": null
},
"longitude": {
"type": ["string", "null"],
"default": null
},
"timezone": {
"type": ["string", "null"],
"default": null
}
},
"required": [
"user_ip",
"is_tor",
"is_vpn",
"is_proxy",
"is_bot",
"country",
"region",
"city",
"isp",
"public_access_point",
"connection_type",
"latitude",
"longitude",
"timezone"
]
}
},
"required": [
"session_details",
"fingerprint",
"ip_intelligence"
]
}
]
}
Updated 10 days ago