TDS Risk
Products
Trust Score — £0.35/check Mobile KYC — £0.45/check
Use cases
Consumer Lending Insurance Fintech & Payments iGaming Lead Generation Lead buying Affiliate Networks 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

Mobile Risk API reason codes, explained

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 D1, review on LS.

📋
Audit evidence

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

Example response with indicators
"indicators": [ “LS”, // SIM change <90 days ⚠ “CF”, // Call forwarding on ⚠ “PT” // Ported number ℹ ]
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: trueD1CF

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: 2LSINLAUV

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: nonfixedvoipRLNMPNTF

High-risk, non-mobile, toll-free or inactive numbers. These submissions are unlikely to represent genuine customers — deprioritise or discard before further processing.

Positive — increase confidence
riskLevel: 4callDivert: falsephoneRisk: falselineType: mobileverified: true

No recent SIM swap, no call forwarding, a real mobile line and an identity that matches the number. Use these signals to reduce friction for genuine customers — fewer step-up checks, faster journeys.

Context only — no action on its own
PTWSNDCUTRDTNCXBCN

Informational codes: a ported number, missing carrier or identity data, a timeout. Log them for context and combine them with the signals above rather than acting on them alone.