Carrier lookup API

Carrier lookup API for US and Canadian phone numbers

The CheckThatPhone carrier lookup API returns the carrier that currently serves a US or Canadian phone number, with its OCN, its routing number (LRN) and whether it has been ported. The data comes from a live carrier dip at lookup time, so a number that moved carriers last week shows its new carrier, not the one that first issued it.

One POST /v1/lookup call costs one credit and also returns line type, deliverability and location. The Free plan includes 500 lookups a month.

What a carrier lookup returns

A lookup returns these carrier fields. Values are strings, including booleans.

FieldExampleMeaning
dip "success" Status of the carrier dip: "success", "error" or "invalid".
dipCarrier "AT&T" The carrier currently serving the number.
dipCarrierType "mobile" Broad carrier type: "mobile", "landline", "invalid" or "undefined".
dipCarrierSubType "WIRELESS" Sub-classification such as WIRELESS, PCS, ILEC, RBOC, CLEC or IPES (VoIP). The docs list every code.
dipOcn "6010" Operating Company Number: the ID of the carrier currently operating the number.
dipLrn "3125550199" Local Routing Number: the number calls and texts are actually routed on. Critical for ported numbers.
dipPorted "true" "true" when dipLrn differs from the number, the standard way to detect a port.
nanpCarrier "verizon" Carrier according to numbering-plan data. Not authoritative once a number ports; prefer dipCarrier.

Why a live carrier dip matters for ported numbers

Numbering-plan data tells you which carrier a block of numbers was assigned to. Once a subscriber ports their number to another carrier, that answer is out of date, and anything built on it (SMS routing, carrier-based fraud rules, line-type filters) inherits the error.

We return both views. nanpCarrier is the numbering-plan answer. The dip* fields come from a live carrier dip at lookup time: when the routing number differs from the number itself, dipPorted is "true", dipLrn holds the routing number and dipCarrier and dipOcn name the carrier the number moved to.

Example request and response

Send the number in any common format. Add "ip" to get IP-based location as well.

curl --request POST \
  --url 'https://api.checkthatphone.com/v1/lookup' \
  --header 'Authorization: Bearer YOUR_API_KEY' \
  --header 'Content-Type: application/json' \
  --data '{"phone": "(312) 555-0142"}'

An illustrative response for a ported mobile number (a fictional 555 number; field names and formats match the live API):

{
  "success": true,
  "credits_used": 1,
  "data": {
    "subscriber": "3125550142",
    "optDate": "2026-10-03T15:04:12.381Z",
    "action": "send",
    "deliverable": "true",
    "reason": "",
    "nanpType": "mobile",
    "blackList": "false",
    "dip": "success",
    "dipLrn": "3125550199",
    "dipPorted": "true",
    "dipOcn": "6010",
    "dipCarrier": "AT&T",
    "dipCarrierSubType": "WIRELESS",
    "dipCarrierType": "mobile",
    "geoState": "IL",
    "geoCity": "chicago",
    "geoCountry": "US",
    "geoSource": "area-code",
    "timezone": "America/Chicago",
    "tzOffset": 6,
    "error": "false"
  }
}

credits_used: 1 is the whole cost of this call. The same fields come back from the official Node.js and Python SDKs and in every row of a bulk CSV upload.

What else comes back in the same call

Where teams use carrier data

Pricing

Carrier data is part of every lookup, with no per-field fees: one lookup is one credit. The Free plan includes 500 lookups a month, hard-capped. Paid plans:

PlanPer monthLookups includedOverage per lookup
1K $5 1,000 $0.005
10K $30 10,000 $0.003
100K $100 100,000 $0.001
500K $450 500,000 $0.0009

Failed lookups are free. Annual billing is 15% off. Above 500,000 lookups a month, ask for a volume quote. Full details on the pricing page.

Limits worth knowing

Carrier lookup: common questions

What is a carrier lookup API?

An API that tells you which carrier serves a phone number. The CheckThatPhone carrier lookup returns the current carrier, OCN, routing number (LRN), porting status and line type for US and Canadian numbers, from a live carrier dip, in one POST /v1/lookup call.

Does the carrier lookup detect ported numbers?

Yes. dipPorted is "true" when the routing number (dipLrn) differs from the number itself, and dipCarrier names the carrier the number moved to. nanpCarrier comes from numbering-plan data and can be out of date after a port, so prefer dipCarrier.

Does it work for Canadian numbers?

Yes. The API accepts US and Canadian (NANP) numbers in any common format: 10 digits, or 11 digits starting with 1. Numbers outside North America are not supported.

How much does a carrier lookup cost?

One credit. There is no separate carrier fee. The Free plan includes 500 lookups a month, hard-capped; paid plans start at $5 a month for 1,000 lookups, and overage goes down to $0.0009 per lookup on the 500K plan. Failed lookups are not billed.

Can I try it without writing code?

Yes. Run a free check with the demo on the homepage. For a whole list, sign up and upload a CSV from the dashboard: see bulk phone validation.

Related