TDS Risk
Products
Trust Score — £0.35/check Mobile KYC — £0.45/check
Use cases
Consumer Lending Lead buying Insurance Lead Generation Account Creation
Developers
Getting Started Reason Codes Rule Studio Postman Collection Changelog System Status
Company
Pricing About Us Enterprise Contact Case Studies ROI Calculator Security & Compliance FAQ Trust Centre Sign up free →
Developer Reference

Reason Code Reference

Every TDS Risk response includes an indicators array containing reason codes that explain exactly why a number scored the way it did. Not just a score — a full picture.

Risk signal Positive indicator Informational
Rule Studio →
Trust Score 13
Mobile KYC 7
D1The phone number exists on websites exposing text message history publicly, which bad actors use to bypass possession checks.
RLThe phone number was associated with a high-risk line type. It is either a Non-Fixed VoIP, SMS delivery has been redirected, or it has been listed on a public website with the contents of its text messages posted publicly to allow a user to bypass phone possession check controls.
LSLow tenure SIM (SIM change < 90 days).
PNThe phone number wasn’t active.
CFThe mobile number has call forwarding enabled.
INPhone number is from a different country than the country request field.
CUCarrier call was unsuccessful.
NMNot a mobile line type.
NDNetwork status information isn’t available.
TFToll-free area code.
TRcallInSession signal is unavailable. Please use the Trust Score+ API.
PTThe carrier ported this phone number.
WSSIM timestamp wasn’t factored into the Trust Score.
No codes match your search.
INPhone number is from a different country than the country request field.
LALow tenure address.
DTData retrieval timeout.
NCName and address information isn’t available.
XBDate of birth isn’t available in the data.
CNFirst and last names combined in one field.
UVUnable to verify the address.
No codes match your search.
How reason codes work

Not just a score. A full picture.

Unlike a simple pass/fail, TDS Risk returns the full set of carrier signals that drove the result. Each code is returned in the indicators array alongside your trustScore or KYC match fields.

🎯
Explainability

Know exactly why a number scored the way it did — not just what score it received.

⚙️
Decision logic

Use codes to build conditional rules in your own risk engine — e.g. block on DV, flag on PT.

📋
Audit evidence

Every code is preserved in your immutable audit record — timestamped and signed.

Example response with indicators
"indicators": [ “OL”, // Ownership >45 days ✓ “DV”, // High device velocity ⚠ “PT” // Ported number ℹ ]
Positive indicator Risk signal Informational
Build decision logic

What to do with each signal

Use the colour-coded tiers below to wire reason codes directly into your risk engine. Each tier maps to a concrete action.

Block immediately
riskLevel: 1phoneRisk: trueisLostStolen: trueDVS1S2S3S4OVDIVAAUCF

High-confidence fraud or account takeover signals. Reject the submission before any downstream process runs — do not trigger a credit check, KYC flow, or account creation.

Escalate to review
riskLevel: 2LPLSLTR1CAOSC2C3C4HV

Elevated risk — not an automatic block, but worth a second look. Route to manual review, add step-up verification, or apply a lower credit limit before proceeding.

Filter or deprioritise
lineType: fixedvoiplineType: nonfixedvoipRLNMNPBLD1D2PN

Non-personal or non-mobile lines, deactivated numbers, web-scraped actives. These submissions are unlikely to represent genuine customers — deprioritise or discard before further processing.

Positive — increase confidence
riskLevel: 4OOOLRNKJKKKLKMKNKOPV

Stable ownership, long tenure, no recent SIM swap, verified mobile line. Use these signals to reduce friction for genuine customers — fewer step-up checks, faster journeys.