Skip to main content

Phone Verification

Phone verification in TrustGate is a passive intelligence capability built into the Device Intelligence service. It validates phone numbers and assesses risk based on phone type, carrier, fraud score, and abuse signals -- all without requiring the user to interact with an OTP flow.

Under the hood, phone intelligence is powered by a fraud intelligence provider.

Part of Device Intelligence

Phone verification is not a standalone endpoint. To run a phone check, include the phone and phone_country parameters when calling the Device Intelligence analyze endpoint.

Running a Phone Check

Submit a phone number as part of a device intelligence analysis:

curl -X POST https://api.bytrustgate.com/api/v1/device-intel/analyze \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"ip_address": "203.0.113.1",
"phone": "+14155551234",
"phone_country": "US",
"applicant_id": "550e8400-e29b-41d4-a716-446655440000"
}'
ParameterTypeRequiredDescription
ip_addressstringYesIP address for device analysis
phonestringNoPhone number to validate (E.164 format recommended)
phone_countrystringNoISO 2-letter country code for number formatting
applicant_idUUIDNoAssociate the check with an applicant

Response

The response includes a phone_check object alongside the other device intelligence results:

{
"phone_check": {
"phone": "+14155551234",
"valid": true,
"fraud_score": 15,
"line_type": "mobile",
"carrier": "Verizon",
"country": "US",
"risky": false,
"recent_abuse": false
}
}

Phone Check Fields

FieldTypeDescription
phonestringThe phone number that was checked
validbooleanWhether the phone number is valid and active
fraud_scoreintegerRisk score from 0 (safe) to 100 (high risk)
line_typestringPhone line type: mobile, landline, voip, toll_free, premium, etc.
carrierstringCarrier or provider name
countrystringISO country code where the number is registered
riskybooleanWhether the number has been flagged as risky
recent_abusebooleanWhether the number has been associated with recent abuse

Phone Types

TypeDescriptionRisk Level
mobileStandard mobile phoneLow
landlineFixed landlineLow
voipVoice over IPMedium
toll_free1-800 numbersHigh
premiumPremium rate numbersHigh
virtualVirtual numbersMedium-High

Risk Factors

High Risk

FactorRisk ContributionDescription
fraud_history+40Phone linked to fraud
premium_rate+30Premium rate number
recently_ported+20Number ported in last 30 days
known_fraud_carrier+35Carrier associated with fraud

Medium Risk

FactorRisk ContributionDescription
voip_number+15VoIP provider number
virtual_number+20Virtual phone service
prepaid+10Prepaid SIM card
country_mismatch+15Phone country differs from applicant

Low Risk

FactorRisk ContributionDescription
new_number+5Number recently activated
unusual_carrier+5Less common carrier

VoIP Detection

TrustGate detects VoIP numbers through its fraud intelligence provider and flags them with a higher fraud score. When a VoIP number is detected, the line_type field returns "voip" and the valid field may be set to false depending on risk thresholds.

Example: VoIP Number Detected

{
"phone_check": {
"phone": "+14155559999",
"valid": false,
"fraud_score": 45,
"line_type": "voip",
"carrier": "Google Voice",
"country": "US",
"risky": true,
"recent_abuse": false
}
}

When a phone check fails validation, the response includes reason codes to help you understand why:

Reason CodeDescription
voip_detectedVoIP phone numbers have higher fraud risk
high_fraud_scorePhone number associated with suspicious activity (fraud score >= 85)
risky_numberPhone number flagged as potentially risky
invalid_numberUnable to validate the phone number

Workflow Rules

Flag VoIP Numbers for Review

curl -X POST https://api.bytrustgate.com/api/v1/workflows/rules \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"rule_id": "flag_voip_phones",
"trigger": "device_analysis_complete",
"conditions": {
"all": [
{"field": "phone_check.line_type", "operator": "eq", "value": "voip"}
]
},
"actions": [
{
"type": "add_flag",
"flag": "voip_phone"
},
{
"type": "request_info",
"info_needed": "VoIP number detected - manual review recommended"
}
]
}'

Flag High Fraud Score Phones

curl -X POST https://api.bytrustgate.com/api/v1/workflows/rules \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"rule_id": "flag_high_risk_phone",
"trigger": "device_analysis_complete",
"conditions": {
"all": [
{"field": "phone_check.fraud_score", "operator": "gte", "value": 75}
]
},
"actions": [
{
"type": "add_flag",
"flag": "high_risk_phone"
},
{
"type": "create_case",
"case_type": "fraud",
"priority": "high",
"title": "High fraud score phone number detected"
}
]
}'

Programmatic Access

Phone verification is also available as a standalone primitive for use in custom pipelines:

from app.primitives.device_intel import PhoneCheckPrimitive

result = await PhoneCheckPrimitive.run(
phone="+14155551234",
phone_country="US"
)

Next Steps