Skip to main content

Pix on File Risk Signals

Pix on File is a Pix payment flow in Brazil that allows customers to authorize payments with a device linked to their bank account, without being redirected to their bank app for each purchase. Pix on File is available on both the Cross-border and Local tenants.

Risk Signals provide contextual and behavioral data to the Relying Party (the customer's bank), allowing it to ensure the authentication is happening under expected and secure conditions.

This guide lists the Risk Signals parameters accepted by Pix on File. It covers where to send them, which parameters are required, and an example of the full object.

Where to send Risk Signals​

Risk Signals are sent with both Device Linking and Payment requests:

  • Device Linking - Send them in enrollment.fidoOptions.risk_signals of the enrollment request.
  • Payment - Send them in risk_signals of the payment authentication request.

If you use the Hosted Flow, EBANX collects Risk Signals on its own page and you do not need to send them.

Parameters​

Send the widest set your app can collect

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.

device_id is the only snake_case field

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.

ParameterRequirementDescription
device_idRequiredstring Unique and persistent device ID.
isRootedDeviceConditionalboolean Indicates whether the device has root (Android) or jailbreak (iOS). Required on Android and iOS.
screenBrightnessConditionalinteger Screen brightness (typically 0 to 255). Required on Android and iOS.
elapsedTimeSinceBootConditionalinteger Elapsed time (in milliseconds) since device boot. Required on Android and iOS.
osVersionRequiredstring Operating system version (e.g., '14' for iOS 14).
userTimeZoneOffsetRequiredstring User's time zone offset relative to UTC (i.e.: "-03").
languageRequiredstring Device language (ISO 639-1 code).
screenDimensions.heightRequiredinteger Screen height in pixels.
screenDimensions.widthRequiredinteger Screen width in pixels.
accountTenureRequiredstring Customer account creation date in the merchant's system (yyyy-mm-dd).
geolocation.latitudeOptionalnumber Geolocation information.
geolocation.longitudeOptionalnumber Geolocation information.
geolocation.typeOptionalstring Location precision (FINE, COARSE or INFERRED).
isCallInProgressOptionalboolean Indicates whether there is a phone call in progress.
isDevModeEnabledOptionalboolean Indicates whether developer mode is enabled.
isMockGPSOptionalboolean Indicates whether mock location (mock GPS) is enabled.
isEmulatedOptionalboolean Indicates whether the application is running on an emulator.
isMonkeyRunnerOptionalboolean Indicates whether an automated testing tool (MonkeyRunner) is in use.
isChargingOptionalboolean Indicates whether the device is charging the battery.
antennaInformationOptionalstring Information about the mobile network connection type (e.g., 3G, 4G, 5G).
isUsbConnectedOptionalboolean Indicates whether a USB cable is connected.
integrity.appRecognitionVerdictOptionalstring Verdict on app recognition (e.g., via Google Play Protect).
integrity.deviceRecognitionVerdictOptionalstring Verdict on the device's basic integrity.

Example​

Risk Signals object

JSON
"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"
}
}

Still need help?

Help Image

We hope this article was helpful. If you still have questions, you can explore the following options: