data.signals array (name + weight) and a matching boolean in data.detection_flags. Branch on name, detection_flags, and the score band in code. ShieldLabs surfaces these signals; your own code owns the decision: allow, challenge, review, or block. Risk Scoring explains how the points roll up.
Network and anonymity
These signals indicate the connection is relayed, tunneled, or coming from infrastructure rather than a genuine, unmasked visitor.Consistency and mismatch
These signals indicate two readings of the same visit disagree, which is what spoofed or relayed visits leave behind.Environment
These signals indicate the runtime is spoofed, stripped, or could not be fully verified.Surfaced, not currently scored
These are detected and returned on the webhook indetection_flags, but they add no points to the Risk Score today:
Signal weights
Each anonymity signal adds to the Risk Score by a fixed weight, listed in the full weight table on Risk Scoring. Signals sum into the score and the total is capped at 100. The strongest anonymity signal (Tor, then Privacy Relay, then VPN) takes priority over the others.Connection type
Every visit also resolves to a single connection type, the headline label for how the visit reaches you. It is surfaced asconnection_type on the webhook and as ConnectionType on each History API snapshot.
The per-visit connection_type on the webhook and API is one of: Direct, Mobile, VPN, Proxy, Tor, Privacy Relay, Browser VPN/Proxy, or Unknown (when the type could not be resolved). The dashboard Connection Types breakdown uses the same buckets and rolls Browser VPN/Proxy into Proxy for the chart.
The connection type is a summary. The
signals array on the Risk Score is the full breakdown: one visit can carry a proxy connection type along with a datacenter and abuser flag underneath it.A masked visit is not always abuse
A legitimate visitor can carry these signals. A corporate VPN, iCloud Private Relay, or a privacy-focused browser all raise the score without any wrongdoing. Because every signal is explainable, your code can treat a Privacy Relay differently from a Tor exit or a datacenter IP. All are masking, but they carry different intent, and you decide which action each one warrants.Example
A visit on an anti-detect browser running through a proxy returns both reasons insignals:
Webhook
signals[].name is a stable slug (antidetect_browser, proxy). Branch on that slug or on detection_flags (anti_detect_browser for the flag). Display labels such as “Anti-detect Browser” appear on the dashboard and in History Details.Description — do not treat those as webhook name values.Next steps
Risk Scoring
How signal weights roll up into the 0-100 score and the Clean, Low, Medium, and High bands.
Patterns
The dashboard patterns that grade an identity over time, distinct from these per-request signals.