Check the phone number on every application before you send the one-time code: mobile, landline or VoIP from a live carrier dip, whether a carrier deactivated it in the last 45 days, and whether it is on our internal blacklist. They are fraud-scoring inputs for your risk model, not identity verification.
“Does a verified phone number count toward our CIP?”
No. The bank CIP rule's minimum identifying information is name, date of birth, address and an identification number. Phone signals sit alongside it as fraud-scoring inputs.
dipCarrierSubType "IPES" marks an IP-enabled (VoIP) line, from a live carrier dip. VoIP isn't fraud by itself; weigh it with your other signals.
dipCarrierSubType = IPES
“Applicants give us numbers that are already dead.”
deactivationDate shows a carrier deactivation in the last 45 days, and reason carries the carrier id and date. Don't spend a one-time code on it.
deactivationDatereason
“We pay for every code we send.”
About 32% of the numbers we look up are landline or VoIP. Check the line type before you pay for the SMS.
Source: CheckThatPhone lookup data
nanpTypedipCarrierTypeaction
Wiring it into the signup flow
Step 1
Check before the one-time code
Call the API the moment the applicant enters a phone number, before you pay to send an SMS code. Ask for another number when it was deactivated or can't take a text; for borderline cases, still send the code but flag the application for a stronger verification path downstream.
Step 2
Score it with your other signals
ApproveStep upManual review
Feed the fields into your risk model as inputs: for example, points for dipCarrierSubType "IPES", a deactivationDate or blackList: "true". Approve, step up or route to manual review, with weights and thresholds tuned on your own outcomes.
Step 3
Re-score the existing book
After you change your rules, run the numbers on existing accounts through a CSV upload and send high-risk accounts to fraud ops. Compare dipCarrier and dipOcn with what you stored at signup to see a carrier change since.
How each field feeds your risk score
None of these is decisive on its own. They are inputs to your scorecard; the approve-or-decline call is yours.
If the response shows
Field
Do this
Active mobile
action = sendnanpType = mobile
Send the SMS code.
VoIP
dipCarrierSubType = IPES
A risk input: weigh it with your other signals, and consider step-up verification.
Deactivated by the carrier recently
deactivationDatereason
Don't send the code. Ask for a working number.
On our internal blacklist
blackListreason
Route to manual review. reason reads "Blacklisted Subscriber".
Landline
nanpTypedipCarrierType
It can't take the SMS code, unless the landline SMS check returns smsEligible: "true". Offer another channel or ask for a mobile.
A different carrier than at signup
dipCarrierdipOcndipLrn
The number has likely been ported since you last checked. Consider a step-up challenge before a sensitive action.
Ported
dipPorted
Not a recency signal: it has no date. Compare carrier fields over time instead.
Applicant location
geoStategeoSourceipResult
With an ip passed, location comes from the IP; without one, from the area code. One call returns one or the other, so it cannot compare them. ipResult only says the IP was valid.
The shape a scorecard wants
An active mobile on a wireless carrier, not blacklisted, no recent deactivation. The applicant's IP was passed, so location and time zone come from the IP (geoSource: "ip"); ipResult only says the IP was valid.
A plain lookup, no add-ons needed for these signals. Computed from the published plans. The free plan's 500 lookups a month cover pre-launch testing.
What the lookup covers, and what's still on you
The lookup gives you
Mobile, landline or VoIP from a live carrier dip, after porting
VoIP flagged as carrier sub-type IPES
Carrier deactivations in the last 45 days
Our internal blacklist
An SMS verdict (action) before you send a code
Location and time zone from the applicant's IP, or from the area code
Still your job
Customer identification under your CIP: name, date of birth, address and an identification number · 31 CFR 1020.220(a)(2)(i)(A)
Document verification, sanctions screening and behavioral signals: a clean phone lookup doesn't certify identity, and a flagged one isn't proof of fraud
Weights and thresholds for your scorecard, tuned on your own outcomes
Not legal advice.
Coverage and limits
No subscriber names or owner details, and no identity match: we can't tell you whose number it is.
dipPorted says a number moved carriers at some point. It has no date, so it is not a recent-port or SIM-swap signal.
deactivationDate: data refreshed daily, with a 1 to 7 day lag, and entries expire after 45 days. It is not a reassigned-number check.
With an ip passed, location and time zone come from the IP, otherwise from the area code. One call can't compare the two.
US and Canadian numbers.
KYC phone checks: common questions
Is this a replacement for KYC document verification?
No. Phone signals are a fast first-pass filter that runs before you spend on document verification. Use them to decide whether to challenge a signup, route it to manual review, or let it proceed.
Is a phone number part of CIP?
Not under the bank CIP rule, whose minimum identifying information is name, date of birth, address and an identification number (31 CFR 1020.220(a)(2)(i)(A)). Treat phone signals as fraud-scoring inputs alongside your CIP, not as CIP verification. This page is not legal advice.
What does ipResult actually compare?
Nothing. ipResult only says whether the IP you passed is valid ("valid-v4" or "valid-v6"). When you pass an IP, geoState, geoCity and timezone come from the IP (geoSource: "ip"); without one they come from the area code. One call returns one or the other, so it cannot compare the IP's location with the area code's.
How do you flag VoIP versus mobile?
dipCarrierSubType returns "IPES" (IP-enabled service) for VoIP lines. Mobile carriers return "WIRELESS" or "PCS"; wireline carriers return codes such as "ILEC", "RBOC" or "CLEC".
Can it detect a SIM swap or a recent port?
No. dipPorted says the number was ported at some point, with no date. To spot a carrier change, store dipCarrier and dipOcn at signup and compare them on a fresh lookup before a sensitive action.