Condition Variables
The Workflow Builder's conditional nodes allow you to create intelligent routing based on applicant data, verification results, risk scores, and more. This reference documents all available condition variables.
Root Variables
| Variable | Description |
|---|---|
applicant | Information about the applicant |
poi | Proof of identity document data |
poa | Proof of address document data |
device | Device and IP information |
screening | Sanctions, PEP, and adverse media results |
questionnaire | CDD/EDD questionnaire responses |
risk | Computed risk scores |
workflow | Current workflow execution state |
Applicant Variables
Basic Info
| Field | Description | Example |
|---|---|---|
applicant.id | Applicant ID | app_123abc |
applicant.external_id | Your external user ID | user_456 |
applicant.email | Email address | user@example.com |
applicant.country | Country code (ISO 3166-1 alpha-3) | USA, GBR, DEU |
applicant.created_at | Creation timestamp | 2026-01-25T14:30:00Z |
applicant.status | Current status | pending, approved, rejected |
Personal Information
| Field | Description |
|---|---|
applicant.info.first_name | First name |
applicant.info.last_name | Last name |
applicant.info.full_name | Full name |
applicant.info.dob | Date of birth |
applicant.info.age | Calculated age in years |
applicant.info.gender | Gender (M/F) |
applicant.info.nationality | Nationality (ISO alpha-3) |
applicant.info.phone | Phone number |
Review Status
| Field | Description |
|---|---|
applicant.review.decision | Review decision: approved, rejected, resubmission |
applicant.review.reject_labels | List of rejection reasons |
applicant.review.reviewer_id | ID of reviewer (if manual) |
Document Variables (POI/POA)
Proof of Identity
| Field | Description |
|---|---|
poi.country | Document issuing country |
poi.type | Document type: passport, drivers_license, national_id |
poi.number | Document number |
poi.dob | Date of birth from document |
poi.expiry | Expiration date |
poi.valid | Whether document is valid |
poi.expired | Whether document is expired |
poi.mrz_valid | MRZ validation result |
Proof of Address
| Field | Description |
|---|---|
poa.country | Document country |
poa.type | Document type: utility_bill, bank_statement, tax_document |
poa.address | Extracted address |
poa.issue_date | Document issue date |
poa.age_days | Days since document was issued |
Device & IP Variables
| Field | Description |
|---|---|
device.ip_country | IP address country |
device.ip_state | IP state/region code |
device.is_vpn | VPN detected |
device.is_tor | TOR network detected |
device.is_proxy | Proxy detected |
device.risk_score | Device risk score (0-100) |
device.fraud_score | Fraud probability score |
Device Statistics
| Field | Description |
|---|---|
device.stats.device_count | Number of devices used |
device.stats.same_device_applicants | Other applicants on same device |
device.stats.ip_count | Number of IPs used |
Screening Variables
Sanctions
| Field | Description |
|---|---|
screening.sanctions.has_hits | Any sanctions matches found |
screening.sanctions.hit_count | Number of matches |
screening.sanctions.lists | Lists with matches: ofac_sdn, un_consolidated, eu_sanctions |
screening.sanctions.match_score | Highest match confidence (0-100) |
PEP (Politically Exposed Persons)
| Field | Description |
|---|---|
screening.pep.is_pep | Is a PEP |
screening.pep.level | PEP level: 1, 2, 3, 4 |
screening.pep.categories | PEP categories found |
Adverse Media
| Field | Description |
|---|---|
screening.adverse_media.has_hits | Any adverse media found |
screening.adverse_media.categories | Categories: financial_crime, terrorism, fraud, etc. |
screening.adverse_media.severity | Severity level: low, medium, high, critical |
Risk Variables
| Field | Description |
|---|---|
risk.score | Overall risk score (0-100) |
risk.level | Risk level: low, medium, high, critical |
risk.factors | Contributing risk factors |
Risk Labels
| Field | Description |
|---|---|
risk.labels.email | Email risk: disposable, high_risk, invalid |
risk.labels.phone | Phone risk: virtual, disposable, high_risk |
risk.labels.device | Device risk: vpn_usage, tor_usage, high_risk_ip |
risk.labels.identity | Identity risk: selfie_mismatch, document_fraud |
risk.labels.aml | AML risk: pep, sanctions, adverse_media |
Questionnaire Variables
Access questionnaire responses:
questionnaire["questionnaire_id"]["section_id"]["item_id"]
Example:
questionnaire["cdd_basic"]["source_of_funds"]["employment_type"] equals "employed"
Common Questionnaire Fields
| Field | Description |
|---|---|
questionnaire.score | Calculated questionnaire score |
questionnaire.completed | Whether questionnaire was completed |
questionnaire.risk_level | Risk level from questionnaire |
Client Lists
Reference custom client lists in conditions:
clientLists.high_risk_countries contains applicant.country
clientLists.blocked_ips contains device.ip
clientLists.vip_customers contains applicant.external_id
Logical Operators
Comparison Operators
| Operator | Description | Example |
|---|---|---|
equals | Exact match | applicant.country equals "USA" |
not_equals | Not equal | applicant.status not_equals "rejected" |
greater_than | Greater than | risk.score greater_than 60 |
less_than | Less than | applicant.info.age less_than 18 |
greater_or_equal | Greater or equal | poi.age_days greater_or_equal 90 |
less_or_equal | Less or equal | screening.sanctions.match_score less_or_equal 50 |
contains | Contains value | risk.labels.device contains "vpn_usage" |
contains_any | Contains any of values | screening.sanctions.lists contains_any ["ofac_sdn", "un_consolidated"] |
is_in | Value in list | applicant.country is_in clientLists.high_risk_countries |
is_not_in | Value not in list | applicant.country is_not_in clientLists.blocked_countries |
is_empty | Field is empty/null | applicant.info.phone is_empty |
is_not_empty | Field has value | poi.number is_not_empty |
Logical Combinators
| Combinator | Description |
|---|---|
AND | All conditions must be true |
OR | At least one condition must be true |
NOT | Negate condition |
Common Condition Patterns
Country-Based Routing
IF applicant.country is_in clientLists.high_risk_countries
→ Enhanced Due Diligence
ELSE IF applicant.country equals "USA"
→ US-specific verification
ELSE
→ Standard verification
Age Verification
IF applicant.info.age less_than 18
→ Reject (underage)
ELSE IF applicant.info.age greater_than 70
→ Manual Review
ELSE
→ Auto-approve
Risk-Based Routing
IF risk.score greater_than 70 OR screening.sanctions.has_hits
→ Manual Review (high risk)
ELSE IF risk.score greater_than 40
→ Enhanced Due Diligence
ELSE
→ Auto-approve
VPN/Fraud Detection
IF device.is_vpn OR device.is_tor
→ Reject (VPN detected)
ELSE IF device.fraud_score greater_than 80
→ Manual Review
ELSE
→ Continue
Document Validation
IF poi.expired
→ Reject (expired document)
ELSE IF poi.country not_equals applicant.country
→ Manual Review (country mismatch)
ELSE
→ Continue
Next Steps
- Creating Workflows - Build workflows with conditions
- Node Types - All available node types
- Workflow Templates - Pre-built workflows with conditions