Browse

Phone Numbering-Plan Validation

Checks a phone number against its country's numbering plan and returns E.164, national and international formats, the country and the number type the plan assigns (mobile, fixed line, toll free, VoIP and others). Uses open libphonenumber metadata only: it does not query carriers, so it cannot tell whether a number is active, ported or reachable.

POST https://YOUR_API_HOST/v1/phone

Credits and caching

  • Success billing. 1 credit per valid number. You are charged only when the lookup finds something; a not-found result is free.
  • Results are cached per account for 7 days. Repeating the same lookup in that window is free and returns cache_hit: true.
  • Invalid input, rate limits and errors are never charged.
  • Read the billing rules for the full picture.

Request

Send a JSON body with Authorization: Bearer <key>. The body can be up to 64 KB.

FieldTypeRequiredNotes
phonestringyesUp to 64 characters.
countrystringnoUp to 8 characters.

Example request

Terminal
curl -X POST https://YOUR_API_HOST/v1/phone \
  -H "Authorization: Bearer $LOOKVALID_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"phone":"+12025550143"}'

Response

The status is 200 whether or not anything was found. Check found. Every response also carries the X-Request-Id, X-Credits-Charged, X-Credits-Remaining and X-RateLimit-* headers.

Envelope

FieldTypeNotes
request_idstring-
product"phone"-
foundbooleanFalse means the lookup ran and found nothing; it is free.
reasonstring or nullWhy nothing was found; null when found.
sourcesarray of stringWhere the data came from, including any attribution the licence requires.
credits_chargedinteger0 for a cache hit, a not-found result or an error.
credits_remaininginteger-
cache_hitbooleanTrue when the account already paid for this lookup within the cache window.
cacheobject-

The data object

Present when found is true, otherwise null.

FieldTypeNotes
validtrueAlways true: a number the numbering plan rejects is a free not_found
possibleboolean-
e164string-
national_formatstring-
international_formatstring-
country_calling_codestring-
countrystring or null-
number_typestringOne of mobile, fixed_line, fixed_line_or_mobile, voip, toll_free, premium_rate, shared_cost, personal_number, pager, uan, unknown.
line_type_source"numbering-plan"-
carriernull-
area_codestring or null-
area_code_regionobject or null-
area_code_region.codestring-
area_code_region.namestring-
extensionstring or null-
notesstring-

Captured example (2026-10-18)

A real run of this lookup on 2026-10-18, using the request above, which is a public input. The envelope fields are left out.

{
  "product": "phone",
  "found": true,
  "data": {
    "valid": true,
    "possible": true,
    "e164": "+12025550143",
    "national_format": "(202) 555-0143",
    "international_format": "+1 202 555 0143",
    "country_calling_code": "1",
    "country": "US",
    "number_type": "fixed_line_or_mobile",
    "line_type_source": "numbering-plan",
    "carrier": null,
    "area_code": "202",
    "area_code_region": {
      "code": "DC",
      "name": "District of Columbia"
    },
    "extension": null,
    "notes": "Line type comes from the numbering plan, not from a carrier. Carrier, porting, line status and reachability are not included; this check cannot say whether the number is active or has been moved to another carrier."
  },
  "sources": [
    "Google libphonenumber metadata (Apache-2.0)",
    "NANPA area code report (nanpa.com)"
  ]
}

Errors

  • 400 invalid_input: The request input is invalid.
  • 401 unauthorized: The API key is missing, malformed, revoked or unknown.
  • 402 insufficient_credits: The account does not have enough credits for this lookup. Error code: insufficient_credits. During a trial whose allowance is used up the code is trial_allowance_exhausted: nothing is charged and the customer starts the plan from the billing page.
  • 405 method_not_allowed: This endpoint does not accept that HTTP method.
  • 413 payload_too_large: The request body is too large.
  • 429 rate_limited: Too many requests for this API key.
  • 500 internal_error: An unexpected error occurred.
  • 503 provider_unavailable: The data source for this product is unavailable right now.