Know the line behind the number.
Send any phone number and learn whether it can exist, what kind of line it is, which carrier issued it and where it belongs. 243 countries and territories, $1.00 per 1,000 numbers.
No SMS is sent and nothing reaches the phone.
- Line type
- mobile
- Carrier
- T-Mobile USA, Inc.
- E.164
- +14155552671
- Local format
- (415) 555-2671
- Time zone
- America/Los_Angeles
Everything a number can tell you.
One request, one JSON object. The check is Veriphone’s, in production since 2019.
Validity
The number is checked against the numbering plan of its country: length, prefix and range. A typo or an invention fails here.
Line type
Mobile, fixed line, VoIP, toll-free and more. The difference between a customer you can reach and a line made to be thrown away.
Carrier
The carrier the number was issued to, named as the operator names itself.
Country and region
Where the number belongs, read from its prefix: the country, and the region or city where the plan defines one.
Clean formats
One E.164 string to store, plus the international and local forms to display or dial.
Time zone
The time zones the number’s range covers, so a call or a message arrives at a decent hour.
One POST. One number.
Send the number in the request body, never in a URL, so it stays out of every log on the way. Apt_test_ key returns simulated results for documented numbers, free.
The values on the right are an illustration; the fields are the live ones.
curl https://api.prooftell.com/v1/phone \ -H "Authorization: Bearer $PROOFTELL_KEY" \ -H "Content-Type: application/json" \ -d '{ "phone": "+14155552671" }'
const res = await fetch("https://api.prooftell.com/v1/phone", { method: "POST", headers: { "Authorization": `Bearer ${process.env.PROOFTELL_KEY}`, "Content-Type": "application/json", }, body: JSON.stringify({ phone: "+14155552671", }), }) const number = await res.json()
import os, requests
res = requests.post(
"https://api.prooftell.com/v1/phone",
headers={"Authorization": f"Bearer {os.environ['PROOFTELL_KEY']}"},
json={
"phone": "+14155552671",
},
)
result = res.json()
print(result["phone_valid"], result["phone_type"]){
"status": "success",
"phone": "+14155552671",
"phone_valid": true,
"phone_type": "mobile",
"phone_region": "San Francisco, CA",
"country": "United States",
"country_code": "US",
"country_prefix": "1",
"international_number": "+1 415-555-2671",
"local_number": "(415) 555-2671",
"e164": "+14155552671",
"carrier": "T-Mobile USA, Inc.",
"timezone": ["America/Los_Angeles"],
"geographical": false,
"cost": "0.0010",
"currency": "USD",
"signals": {
"static": { "status": "ok", "cost": "0.0010" }
}
}$1.00 per 1,000 numbers.
- $0.0010 per number, taken from your dollar balance. No plan, no minimum volume.
- Charged when the number is judged, valid or not: an invalid number is a definitive answer.
- Input that cannot be read as a phone number is answered and free. So are sandbox calls.
The tells a number gives away.
Sent to /v1/assess with an email or an IP, the same check feeds the score. These are the reasons it can add:
- phone_invalidThe phone number is not a valid number.
- phone_voipThe number is a VoIP line, easy to obtain anonymously.
- phone_non_personalThe number is a toll-free, premium-rate, shared-cost or pager line, not a personal one.
- phone_type_unknownThe line type could not be determined.
- geo_mismatchThe phone number’s country differs from the IP address’s.
About the phone check.
Does ProofTell send an SMS or call the number?
Does it tell me whether the phone is switched on right now?
Does the carrier follow a number that was ported?
Which formats can I send?
+447700900123). A number in national format works with a country hint, the two-letter ISO code of the country it should be read in.Which countries are covered?
Can I check a whole list?
Check your first number in a minute.
Create an account, take a sandbox key, make your first call in minutes.