Fraud Signals
Verifa collects over 150 fraud signals during the capture and verification
process. These signals feed into the risk_assessment check, which produces a
composite risk score (0–100) that can route sessions to approval, review, or
rejection.
How signals are collected
Signals come from three sources:
- Client-side (capture flow) — Behavioral analysis, device fingerprinting, bot detection, and integrity checks collected by the capture JavaScript or mobile SDK.
- Server-side (network) — IP analysis, geolocation, velocity tracking, and timezone validation performed during the capture request flow.
- Verification engine — Document forensics, duplicate detection, and identity graph analysis performed during workflow execution.
Signal categories
Behavioral signals
Collected during the capture flow by analyzing how the user interacts with the verification UI.
Device signals
Client-side device fingerprinting and automation detection.
Network signals
Server-side analysis of the request origin and network behavior.
Document forensics signals
Analysis of uploaded ID document images for tampering and quality issues.
Identity graph signals
Cross-session duplicate detection via hashed identity links.
Integrity signals
Validates that the client-side signal payload hasn’t been tampered with.
Biometric signals
AI-generated face detection.
Mobile-specific signals
Collected by the mobile SDK (not available in web capture).
Risk scoring
All triggered signals are aggregated into a composite risk score by the
risk_assessment check.
Risk levels
Hard blocks
Certain signals trigger an automatic hard block regardless of the composite score:
bot_detected(when configured asblock)virtual_camera(when configured asblock)camera_injection_detected(when configured asblock)integrity_checksum_mismatch(when configured asblock)
Per-signal actions
Each signal can be configured with one of three actions:
Configure signal actions per organization to tune risk sensitivity.
Viewing signals for a session
Using risk scores in workflows
The risk_assessment check is auto-injected into every workflow. You can use
conditional nodes to route based on the risk level:
Related
- Verifications & Checks — The
risk_assessmentandduplicate_detectionchecks - Workflows — Route sessions based on risk level
- Web Capture Flow — How signals are collected automatically
- Mobile SDK — Mobile-specific fraud signals