Risk Signals
Risk Signals provide contextual and behavioral data to the Relying Party (i.e. the customer's bank), allowing it to ensure the authentication is happening under expected and secure conditions.
Risk Signals are used both in Device Linking and Payment processing, and the available parameters are the following:
The bank receiving the signals sets its own risk appetite, and that appetite is not published and differs between institutions. A bank can refuse an authentication over missing signals that are listed as Optional here. Under-sending is the most likely cause of rejections that appear only at specific banks, so collect as many of these as your app can.
Every other parameter on this page uses camelCase exactly as shown. Only device_id is snake_case — sending deviceId instead will leave the field unpopulated.
| Parameter | Requirement | Description |
|---|---|---|
device_id | Required | string Unique and persistent device ID. |
isRootedDevice | Conditional | boolean Indicates whether the device has root (Android) or jailbreak (iOS). Required on Android and iOS. |
screenBrightness | Conditional | integer Screen brightness (typically 0 to 255). Required on Android and iOS. |
elapsedTimeSinceBoot | Conditional | integer Elapsed time (in milliseconds) since device boot. Required on Android and iOS. |
osVersion | Required | string Operating system version (e.g., '14' for iOS 14). |
userTimeZoneOffset | Required | string User's time zone offset relative to UTC (i.e.: "-03"). |
language | Required | string Device language (ISO 639-1 code). |
screenDimensions.height | Required | integer Screen height in pixels. |
screenDimensions.width | Required | integer Screen width in pixels. |
accountTenure | Required | string Customer account creation date in the merchant's system (yyyy-mm-dd). |
geolocation.latitude | Optional | number Geolocation information. |
geolocation.longitude | Optional | number Geolocation information. |
geolocation.type | Optional | string Location precision (FINE, COARSE or INFERRED). |
isCallInProgress | Optional | boolean Indicates whether there is a phone call in progress. |
isDevModeEnabled | Optional | boolean Indicates whether developer mode is enabled. |
isMockGPS | Optional | boolean Indicates whether mock location (mock GPS) is enabled. |
isEmulated | Optional | boolean Indicates whether the application is running on an emulator. |
isMonkeyRunner | Optional | boolean Indicates whether an automated testing tool (MonkeyRunner) is in use. |
isCharging | Optional | boolean Indicates whether the device is charging the battery. |
antennaInformation | Optional | string Information about the mobile network connection type (e.g., 3G, 4G, 5G). |
isUsbConnected | Optional | boolean Indicates whether a USB cable is connected. |
integrity.appRecognitionVerdict | Optional | string Verdict on app recognition (e.g., via Google Play Protect). |
integrity.deviceRecognitionVerdict | Optional | string Verdict on the device's basic integrity. |
Node Example
"risk_signals": {
"device_id": "{string}",
"isRootedDevice": false,
"screenBrightness": 255,
"elapsedTimeSinceBoot": 6356027,
"osVersion": "14",
"userTimeZoneOffset": "-03",
"language": "pt",
"screenDimensions": {
"height": 720,
"width": 1280
},
"accountTenure": "yyyy-mm-dd",
"geolocation": {
"latitude": -15.738602,
"longitude": -47.926498,
"type": "{FINE/COARSE/INFERRED}"
},
"isCallInProgress": false,
"isDevModeEnabled": false,
"isMockGPS": false,
"isEmulated": false,
"isMonkeyRunner": false,
"isCharging": false,
"antennaInformation": "4G",
"isUsbConnected": false,
"integrity": {
"appRecognitionVerdict": "PLAY_RECOGNIZED",
"deviceRecognitionVerdict": "BASIC_INTEGRITY_SUCCESS"
}
}