Services reference
Reference of every MobileValidate check: service code, alias, input type, real-time or bulk-only, outputs and country coverage.
Last updated
View as MarkdownThis page lists every check you can put in checks, with its code, alias, input type, mode (real time and bulk, or bulk only), outputs and country coverage. Codes and aliases are interchangeable in requests, and responses always use the full code. GET /v1/services returns the live list for your key, with prices. The site's services page may show a live version of this table.
How do I read this table?
- Input:
phoneservices run onnumbers,e-mailservices onemails. - Modes: "real time + bulk" works on
POST /v1/lookupand in jobs. "Bulk only" works in bulk jobs only. - Outputs:
registeredmeans the answer is yes/no/unknown. Named attributes appear inattributesfor conclusive answers. - Countries: "all" means any country. Numbers outside a service's countries return
unsupported_countryand are not billed. - Asking for
whatsapp.registeredandwhatsapp.businesstogether runs onlywhatsapp.business, because it answers both.
Which phone services are there?
| Code | Alias | Modes | Outputs | Countries |
|---|---|---|---|---|
whatsapp.registered | whatsapp | real time + bulk | registered | all |
whatsapp.business | — | real time + bulk | registered, business | all |
telegram.registered | telegram | real time + bulk | registered | all |
viber.registered | viber | real time + bulk | registered | all |
signal.registered | signal | bulk only | registered | all |
imessage.registered | imessage | bulk only | registered | all |
rcs.registered | rcs | bulk only | registered, device_os | all |
line.registered | line | bulk only | registered | all |
zalo.registered | zalo | real time + bulk | registered | all |
botim.registered | botim | bulk only | registered | all |
max.registered | max | bulk only | registered | all |
messenger.registered | messenger | bulk only | registered | all |
facebook.registered | facebook | real time + bulk | registered | all |
instagram.registered | instagram | real time + bulk | registered | all |
threads.registered | threads | real time + bulk | registered | all |
x.registered | x, twitter | real time + bulk | registered | all |
tiktok.registered | tiktok | bulk only | registered | all |
snapchat.registered | snapchat | bulk only | registered | all |
linkedin.registered | linkedin | bulk only | registered | US, IN |
vk.registered | vk | real time + bulk | registered | RU |
apple.registered | apple | real time + bulk | registered | all |
amazon.registered | amazon | real time + bulk | registered | all |
microsoft.registered | microsoft | real time + bulk | registered | all |
netflix.registered | netflix | real time + bulk | registered | all |
network.carrier (beta) | carrier | real time + bulk | line_type, carrier, original_carrier, country | all (coverage varies) |
network.carrier_us | — | bulk only | line_type, carrier | US, CA |
number.spam | spam | real time + bulk | risk_level, risk_score, reason_regulator, reason_government, reason_community, reason_unassigned, voip_range, top_category, first_seen, last_seen, sources | US, CA, DE |
number.hlr (coming soon) | hlr | — | status, ported, roaming, network, mcc_mnc, country | — |
number.hlr (live network status) is not available yet. Requests for it return 403 service_disabled. Access to number.spam is limited while it is in review. Ask us if you need it.
Which e-mail services are there?
| Code | Alias | Modes | Outputs |
|---|---|---|---|
email.valid | email | real time + bulk | registered (mailbox exists; major webmail providers, others → UNSUPPORTED_PROVIDER) |
gmail.email | gmail | bulk only | registered |
outlook.email | outlook | bulk only | registered |
yahoo.email | yahoo | bulk only | registered |
yandex.email | yandex | bulk only | registered |
mailru.email | mailru | bulk only | registered |
apple.email | apple.email | real time + bulk | registered |
amazon.email | — | real time + bulk | registered |
facebook.email | — | real time + bulk | registered |
instagram.email | — | real time + bulk | registered |
netflix.email | — | real time + bulk | registered |
spotify.email | — | real time + bulk | registered |
linkedin.email | — | bulk only | registered |
x.email | — | bulk only | registered |
E-mail services have no country limits. See e-mail checks for normalization and the anti-enumeration rules.
What do the attribute values mean?
| Attribute | Values |
|---|---|
business | true / false: WhatsApp Business account |
device_os | ios, android, unknown: handset platform reported with RCS capability |
line_type | mobile, fixed_line, fixed_line_or_mobile, voip, toll_free, premium_rate, shared_cost, personal, pager, uan, voicemail, unknown |
carrier / original_carrier | Current carrier name / carrier the range was allocated to, when different |
risk_level | high, medium, low, no_reports (no_reports does not mean safe) |
risk_score | integer 0–100 |
top_category | debt_relief, impersonation, robocall, medical, home_services, warranty, sms_spam, dialer, fraud_hacking, other |
first_seen / last_seen | YYYY-MM |
sources | integer 0–10: number of independent signal classes |
Each attribute's type (string, boolean, enum, integer), with enum values and integer bounds, is also returned by GET /v1/services. Enums may gain values, so treat unknown values as unknown.
How do I get the live list?
curl https://api.mobilevalidate.com/v1/services \
-H "Authorization: Bearer mv_test_publicSandboxn9ZgneuhR1B9CRfKG3fulym"// npm install mobilevalidate · Node.js 20+ · save as check.mjs and run: node check.mjs
import { MobileValidate } from "mobilevalidate";
// Omit apiKey to read MOBILEVALIDATE_API_KEY from the environment.
const mv = new MobileValidate({ apiKey: "mv_test_publicSandboxn9ZgneuhR1B9CRfKG3fulym" });
const { data, error } = await mv.services();
if (error) console.error(error.code, error.message);
else console.dir(data, { depth: null });// Node.js 18+, Deno, Bun or the browser console (ES module: save as .mjs or use "type": "module").
const res = await fetch("https://api.mobilevalidate.com/v1/services", {
headers: {
Authorization: "Bearer mv_test_publicSandboxn9ZgneuhR1B9CRfKG3fulym",
},
});
console.log(res.status, res.headers.get("x-request-id"));
console.dir(await res.json(), { depth: null });# pip install mobilevalidate-sdk
from mobilevalidate import MobileValidate
# Omit api_key to read MOBILEVALIDATE_API_KEY from the environment.
mv = MobileValidate(api_key="mv_test_publicSandboxn9ZgneuhR1B9CRfKG3fulym")
result = mv.services()
print(result)<?php
$ch = curl_init('https://api.mobilevalidate.com/v1/services');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
'Authorization: Bearer mv_test_publicSandboxn9ZgneuhR1B9CRfKG3fulym',
],
]);
$response = curl_exec($ch);
echo curl_getinfo($ch, CURLINFO_RESPONSE_CODE), PHP_EOL, $response, PHP_EOL;package main
import (
"fmt"
"io"
"net/http"
)
func main() {
req, err := http.NewRequest("GET", "https://api.mobilevalidate.com/v1/services", nil)
if err != nil {
panic(err)
}
req.Header.Set("Authorization", "Bearer mv_test_publicSandboxn9ZgneuhR1B9CRfKG3fulym")
res, err := http.DefaultClient.Do(req)
if err != nil {
panic(err)
}
defer res.Body.Close()
out, _ := io.ReadAll(res.Body)
fmt.Println(res.Status, string(out))
}require "net/http"
require "json"
uri = URI("https://api.mobilevalidate.com/v1/services")
req = Net::HTTP::Get.new(uri)
req["Authorization"] = "Bearer mv_test_publicSandboxn9ZgneuhR1B9CRfKG3fulym"
res = Net::HTTP.start(uri.host, uri.port, use_ssl: true) { |http| http.request(req) }
puts res.code, res.bodyRuns as pasted with the public sandbox key, which answers the test values only. In the SDKs, omit the key to use MOBILEVALIDATE_API_KEY.
Each entry has code, name, platform, family, input_type, result_kind, attributes, realtime, batch, modes, status, beta, countries and prices (realtime and batch, as decimal strings per check). Without a key, you get the public catalog. Platform names are used only to describe which service a check refers to.
Frequently asked questions
Is this table always current?
It reflects the catalog on the date shown. GET /v1/services is authoritative at run time and shows exactly what your key can use, with prices.
What does bulk only mean?
The service answers in bulk jobs (POST /v1/jobs) but not on the real-time endpoint, which refuses it with 403 service_disabled.

