How it works

One check. A real answer from the network.

Not a format check. Not a guess. Here's exactly what happens.

YOU
Your app or platform
one number · or a batch
↓ lookup request
FILTER
Lookup API
validate E.164 · pick a route
/api/v1/filter
cache · 24 hours
CACHE
FILTER Transient Cache
kept for 24 hours
if no cached answer
GATEWAY
Signalling partners
licensed · interconnect
signalling
SS7 / SIGTRAN
Global signalling network
carrier to carrier
operator query
OPERATOR
Home Location Register (HLR)
the subscriber's · home network
Typically under 1.5s1 / 7
STEP 01

Your system sends a phone number to the FILTER API over HTTPS — one number, or millions in a batch.

HLR = Home Location Register · MAP SRI-SM = the signalling message used to ask a network about a subscriber · MCC-MNC = the country and network codes that identify an operator.

What we check

Format

Is the number a well-formed E.164 mobile number?

Line status

Is the line currently active or disconnected?

Line type

Mobile, landline, or something else?

Operator

Which carrier currently serves the number, including after porting.

Risk signal

Anything else the network exposes that indicates a disposable or high-risk line.

What we deliberately don't do

  • No OTP. We never send anything to the number — the customer never knows a check happened.

  • No SMS cost on your side, and none on the customer's.

  • No guessing from stale data. Every check queries the live network, not a cached database that goes out of date.

In practice

A request, and a response

curl -X POST https://api.usefilter.io/api/v1/filter \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"phone": "+919876543210", "source": "website"}'
{
  "country": "IN",
  "valid": true,
  "status": "CONNECTED",
  "carrier": "Jio",
  "line_type": "MOBILE",
  "is_ported": false
}

See it on your own numbers.

Start free — verify 100 numbers