Guides
Carrier and line type lookup, explained
What carrier and line type data is, allocated vs current network, how porting changes it, and how to read every field of a carrier lookup answer.
8 min read
Phone & e-mail intelligence API
Check phone numbers and e-mail addresses before you message, call or approve them. One API request tells you whether a number is registered on messaging apps, what line type and carrier it has, and whether an address has a mailbox or an account. Every answer is yes, no or unknown, with the time we checked. You don't pay for unknowns.
Developers
The console calls the live API from your browser with our public sandbox key. Pick a test number or e-mail and you get the real JSON, a plain-English verdict and the same call in seven languages. Sandbox calls are free and limited to 30 a minute.
Or paste this into a terminal:
curl https://api.mobilevalidate.com/v1/lookup -H "Authorization: Bearer mv_test_publicSandboxn9ZgneuhR1B9CRfKG3fulym" -H "Content-Type: application/json" -d '{"numbers":["+447700900001"],"checks":["whatsapp","telegram","carrier"]}'POST /v1/lookup
Public sandbox key · test values only · never billed
Sample response, captured in test mode
Phone number · GB
+44 7700 900001
whatsapp.registered
This number has a WhatsApp account.
Telegram
telegram.registered
This number has a Telegram account.
Carrier lookup
network.carrier
Mobile line on Test Carrier (GB). Line type tells you whether SMS can reach it.
3 of 3 conclusiveCost $0 · test mode is never billed
{
"object": "lookup",
"id": "lkp_0VWF4k0QQLs2yThfjlfW",
"status": "completed",
"livemode": false,
"created_at": "2026-09-25T14:25:28.937Z",
"results": [
{
"kind": "phone",
"input": "+447700900001",
"e164": "+447700900001",
"country": "GB",
"number_status": "valid",
"checks": {
"whatsapp.registered": {
"service": "whatsapp.registered",
"status": "completed",
"registered": true,
"attributes": null,
"confidence": "high",
"confidence_score": 0.99,
"checked_at": "2026-09-25T14:25:28.950Z",
"cached": false,
"age_seconds": 0,
"billed": false,
"reason": null,
"poll_after_ms": null
},
"telegram.registered": {
"service": "telegram.registered",
"status": "completed",
"registered": true,
"attributes": null,
"confidence": "high",
"confidence_score": 0.99,
"checked_at": "2026-09-25T14:25:28.950Z",
"cached": false,
"age_seconds": 0,
"billed": false,
"reason": null,
"poll_after_ms": null
},
"network.carrier": {
"service": "network.carrier",
"status": "completed",
"registered": true,
"attributes": {
"line_type": "mobile",
"carrier": "Test Carrier",
"country": "GB"
},
"confidence": "high",
"confidence_score": 0.99,
"checked_at": "2026-09-25T14:25:28.950Z",
"cached": false,
"age_seconds": 0,
"billed": false,
"reason": null,
"poll_after_ms": null
}
},
"whatsapp": {
"service": "whatsapp.registered",
"status": "completed",
"registered": true,
"confidence": "high",
"confidence_score": 0.99,
"checked_at": "2026-09-25T14:25:28.950Z",
"cached": false,
"age_seconds": 0,
"billed": false,
"reason": null,
"poll_after_ms": null
},
"test": true
}
],
"summary": {
"total": 1,
"registered": 1,
"not_registered": 0,
"unknown": 0,
"pending": 0,
"invalid": 0,
"suppressed": 0,
"by_service": {
"whatsapp.registered": {
"completed": 1,
"registered": 1,
"not_registered": 0,
"unknown": 0,
"pending": 0
},
"telegram.registered": {
"completed": 1,
"registered": 1,
"not_registered": 0,
"unknown": 0,
"pending": 0
},
"network.carrier": {
"completed": 1,
"registered": 1,
"not_registered": 0,
"unknown": 0,
"pending": 0
}
}
},
"billing": {
"billed_units": 0,
"cost": {
"amount": "0",
"currency": "USD"
},
"balance_after": {
"amount": "0",
"currency": "USD"
}
},
"next": null,
"request_id": "req_0VWF4k06NEVOB7ZR7HVR"
}curl https://api.mobilevalidate.com/v1/lookup \
-H "Authorization: Bearer mv_test_publicSandboxn9ZgneuhR1B9CRfKG3fulym" \
-H "Content-Type: application/json" \
-d '{"numbers":["+447700900001"],"checks":["whatsapp","telegram","carrier"]}'What we check
Run any combination on the same phone number or e-mail address. Every answer is registered, not registered or unknown, with the time we checked.
Registration on messaging apps before you pick a channel.
Whether a number is linked to an account on a social network.
Account presence on major consumer platforms and marketplaces.
Line type, carrier and reputation signals for risk decisions.
Mailbox existence and account presence for e-mail addresses.
Combine up to 20 checks per lookup. Phone and e-mail checks run together, with one result per identifier and check.
Why check first
Find invalid, duplicate and non-mobile numbers before your SMS bill does.
Line type, messenger presence and, where enabled, spam reputation tell you which numbers deserve a second look.
See whether a number uses WhatsApp, Telegram, Viber, iMessage or RCS, and pick a channel that will deliver.
registered is true, false or null. null means unknown, never a guess, and every answer carries checked_at.
Phone and e-mail checks run together, with one result per identifier and check.
How it works
One request, every check in parallel, one answer per check. You pay only for the conclusive ones.
A phone number or an e-mail address, plus up to 20 checks.
Each check runs on its own, at the same time as the others.
Yes, no or unknown, with the time we checked.
Unknown, timeouts, invalid input and duplicates are never charged.
Realtime API for single decisions, bulk jobs for lists, and an MCP server for AI agents — same services, same answers.
POST /v1/lookup takes up to 100 numbers and e-mails with the checks you want, for example ["whatsapp", "telegram", "carrier"].
Real-time checks usually answer within the request. Slower ones return pending, and you can poll or receive a webhook.
POST /v1/jobs checks up to 50,000 numbers and e-mails, gives a free estimate first and returns CSV or NDJSON in your original row order.
The MCP server lets AI assistants run checks, with spend limits and confirmation built in.
Phone number · GB
+44 7700 900001
whatsapp.registered
This number has a WhatsApp account.
Telegram
telegram.registered
This number has a Telegram account.
Carrier lookup
network.carrier
Mobile line on Test Carrier (GB). Line type tells you whether SMS can reach it.
3 of 3 conclusiveCost $0 · test mode is never billed
Pricing promise
No. You pay per check, and only for conclusive answers. You're not charged for inconclusive results (unknown, unsupported country, timeout, invalid, duplicate). Repeat checks served from your account's cache are free too, and max_cost caps what any request can spend. Prices per check for real-time and bulk are on the pricing page.
Never charged
Checks from $0.00005 ($0.05 per 1,000)
View all pricesUse cases
Check the phone number or e-mail address a user adds or changes on an account, and step up verification when the signals suggest takeover risk.
Read the playbookScreen inbound callers and outbound dialling lists by line type and carrier and, where enabled, by spam-report reputation for US, CA and DE numbers.
Read the playbookSee which messaging apps an opted-in customer's number uses, such as WhatsApp, Telegram, Viber, iMessage or RCS, and send on a channel that arrives.
Read the playbookCheck the phone number and e-mail address on a lead form in one request, so fake, mistyped and low-quality leads are flagged before sales calls them.
Read the playbookCheck a phone number's line type and messenger presence before sending a one-time passcode, so fake and high-risk sign-ups are reviewed first.
Read the playbookRemove invalid, duplicate and unreachable numbers, and route messages people expect over the channels they use, before paying for SMS.
Read the playbookFrom the blog
Guides
What carrier and line type data is, allocated vs current network, how porting changes it, and how to read every field of a carrier lookup answer.
8 min read
Guides
What iMessage registration means, blue vs green bubbles, iMessage vs RCS on iPhone, what businesses can and can't send, and a bulk API example.
7 min read
Developers
How a WhatsApp registration check works, what registered, not registered and unknown mean, and how to call it responsibly from cURL, Node and Python.
8 min read
Trust
Phone numbers and e-mail addresses are encrypted when stored and masked in logs and screens. By default we keep API lookups for 7 days and bulk jobs for 30 days, and you can delete a job's data at any time. Your cache is never shared with other customers. Requests that look like sequential number ranges or generated e-mail lists are rejected. Anyone can object to their number or address being checked through the opt-out form. Read more on the trust page.
Numbers and addresses are sealed when stored and masked in logs and screens.
Account checks answer yes, no or unknown. We never return names, photos or profiles.
Cached answers are scoped to your account and never shared with other customers.
Anyone can object to their number or address being checked.
MobileValidate is a phone and e-mail checks API. One request tells you whether a number is registered on messaging apps such as WhatsApp or Telegram, what line type and carrier it has, and whether an e-mail address has a mailbox or an account on a service.
No. You're not charged for inconclusive results (unknown, unsupported country, timeout, invalid, duplicate).
No. Account checks answer only yes, no or unknown. We never return names, photos or profile data.
Yes. Test keys use documented test numbers and e-mail addresses, never reach a real network and are never billed.
Access is by request during the preview. Fill in the request access form with your company and use case, and we will set up your account and keys.
No. Platform names only describe which service a check refers to. MobileValidate is independent and not endorsed by any of these companies.
MobileValidate is in private preview. Tell us about your company, your use case and your expected volume, and we will set up your account with test and live keys.