Skip to main content
The risk_signal_details object gives you concrete, named reason codes that explain why a session’s risk scores are elevated. It is returned as a sibling of risk_signals and risk_signal_scores inside the session object on POST /session/authenticate, POST /session/unauthenticated, and GET /session/{session_id}.
For a clean session the arrays are empty; for a risky session they contain only the reasons that contributed to risk. Signal presence is designed to be safe to write rules against — each signal appears only when there is affirmative evidence for it.

How signals relate to scores

Risk signals are consistent with the scores they explain: a session whose proxy and VPN scores read clean will never carry a proxy- or VPN-related signal, and a session whose device risk score reads clean will never carry a probe-based device signal. Some signals are deliberately independent of score levels because they are meaningful on their own: location-consistency signals such as true_country_mismatch and outside_expected_countries, and the administrative device-brand signals chinese_sanctioned_device and chinese_device, which describe a factual property of the device rather than risk evidence and are designed to be combined with location or other conditions in rules. As risk scores increase, sessions typically carry more corroborating signals: a moderately risky session usually shows one or two reasons, while a highly risky session shows several.

Network Signals

Network signals explain the proxy, vpn, and location-related scores. They describe evidence that the session’s network path or claimed location is not what it appears to be.

Device Signals

Device signals explain the device_risk score. They describe evidence that the device or browser is tampered with, automated, virtualized, or otherwise not a normal personal device.