For fintech and lending onboarding

KYC phone verification for fintech and lending

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.

  • US and Canadian numbers
  • From $0.0009 per lookup
  • State DNC checks free
Applications, scored
Number The lookup says Do this
(646) 555-0125 Active mobile Send the code
(415) 555-0163 VoIP line Step-up review
(702) 555-0118 Deactivated by the carrier Oct 3 Ask for another
(305) 555-0172 On our blacklist Manual review
(312) 555-0144 Landline, can't get an SMS code Ask for a mobile

Fictional 555 numbers.

  • 1B+ requests served by our validation network
  • ~32% of numbers we look up are landline or VoIP

Where the phone number fits in onboarding

“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.

31 CFR 1020.220(a)(2)(i)(A) · ecfr.gov

nanpTypedipCarrierSubType

“VoIP numbers pass our SMS code check.”

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

  1. 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.

  2. 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.

  3. 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 showsFieldDo 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.

1 credit, no add-ons

Highlighted fields: action, blackList, dipCarrierSubType, dipCarrierType, geoSource.

{
  "success": true,
  "credits_used": 1,
  "data": {
    "subscriber": "6465550125",
    "optDate": "2026-10-08T21:56:26.108Z",
    "action": "send",
    "deliverable": "true",
    "nanpType": "mobile",
    "blackList": "false",
    "ipResult": "valid-v4",
    "dip": "success",
    "dipLrn": "6465550125",
    "dipPorted": "false",
    "dipOcn": "6010",
    "dipCarrierSubType": "WIRELESS",
    "dipCarrier": "AT&T",
    "dipCarrierType": "mobile",
    "geoState": "NY",
    "geoCity": "New York",
    "geoCountry": "US",
    "geoMetro": 501,
    "timezone": "America/New_York",
    "tzOffset": 5,
    "geoSource": "ip",
    "error": "false",
    "smsEligible": "true"
  }
}

What it costs at your application volume

Monthly cost:

  • Early-stage lender, 3,000 applications/mo: $15/mo on the 1K plan, billed monthly
  • Growing fintech, 30,000 applications/mo: $90/mo on the 10K plan, billed monthly
  • At scale, 200,000 applications/mo: $200/mo on the 100K plan, billed monthly
Your monthly cost $15/mo on the 1K plan, billed monthly 3,000 applications × 1 credit = 3,000 credits. 1K plan: $5 + 2,000 × $0.005 = $15

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.

Score your next applicant's phone number

500 free lookups a month for pre-launch testing. One credit per lookup after that.