API Reference

Complete reference for all public Veriphone API endpoints. Base URL: https://api.veriphone.io

Authentication

All endpoints accept both GET and POST requests. Pass your API key via one of the following methods (checked in this order):

  1. Authorization header (recommended): Authorization: Bearer YOUR_API_KEY
  2. Cookie: key=YOUR_API_KEY
  3. Query parameter: ?key=YOUR_API_KEY

Lookup Modes

Every verification runs in one of two modes, selected with the optional mode parameter:

ModeWhat it returnsCost
static (default)Validates the number and reports its original carrier and line type from national numbering-plan data.1 credit
currentEverything Static returns, plus the carrier and line type currently serving the number — ported or not.10 credits

Current resolves the number's serving carrier from national portability registries (also known as MNP data). It does not indicate whether the device is switched on or reachable.

Carrier registries update within hours to days of a porting event, per national regulations.

Current lookups are available for a growing list of countries — see the coverage list. If a current lookup cannot be resolved, you receive the full Static result and are charged only the Static rate: no result, no surcharge.


Error Responses

JSON
{
  "status": "error",
  "code": 401,
  "type": "Unauthorized",
  "message": "API key or token required"
}
CodeTypeMeaning
400BadRequest / MissingParameterInvalid or missing input (including an unsupported mode value)
401UnauthorizedMissing or invalid API key
402PaymentRequiredInsufficient credits
403ForbiddenAccount inactive or access denied
404NotFoundResource not found
500InternalServerErrorServer error

/v3/verify

The primary phone number verification endpoint. Validates a phone number and returns carrier, line type, and formatting data — and, in Current mode, the carrier serving the number right now.

Parameters

NameRequiredDescription
phoneYesThe phone number to verify. International format recommended (e.g. +14169670000).
keyYesYour API key (or use a header/cookie — see Authentication).
modeNostatic (default) or current. See Lookup Modes.
default_countryNoTwo-letter country code used when the number has no international prefix (e.g. US).
recordNotrue to save the result to your verification history.

Response Fields

FieldTypeDescription
statusstringsuccess — the verification happened (this is the only charged status); phone_valid carries the verdict. error — no verification happened (the input is not a phone number, or an API error occurred); never charged.
phonestringThe number in E.164 format when valid; otherwise your original input.
phone_validbooleanWhether the number is in a range carriers can assign to subscribers. A valid number is not necessarily in use — validity describes the numbering plan, not the device.
reasonstringPresent only when the number is not valid: too_short, too_long, invalid_length, invalid_country_code, unrecognized_range (well-formed, but in no range currently allocated to a carrier), or not_a_number.
phone_typestringLine type, e.g. mobile, fixed_line, voip, toll_free, fixed_line_or_mobile. Special inputs are classified as short_code or emergency.
shortcode_coststringOnly for phone_type: "short_code": toll_free, standard_rate, premium_rate, or unknown.
carrierstringThe carrier of the number's range. For the current carrier of ported numbers, use mode=current.
phone_regionstringGeographic region of the number, where the numbering plan defines one (e.g. Toronto, ON).
country / country_code / country_prefixstringCountry name, ISO code, and dial code.
international_number / local_number / e164stringThe number formatted for international dialing, national dialing, and E.164.
timezonearrayTime zone identifiers for the number's region (usually one).
geographicalbooleanWhether the number is tied to a geographic area (as opposed to mobile or non-geographic ranges).
modestringThe mode this response was produced with, echoed back.

Example Request

cURL
curl "https://api.veriphone.io/v3/verify?phone=%2B14169670000" \
  -H "Authorization: Bearer YOUR_API_KEY"

Success Response 200

JSON
{
  "status": "success",
  "phone": "+14169670000",
  "phone_valid": true,
  "phone_type": "fixed_line",
  "phone_region": "Toronto, ON",
  "country": "Canada",
  "country_code": "CA",
  "country_prefix": "1",
  "international_number": "+1 416-967-0000",
  "local_number": "(416) 967-0000",
  "e164": "+14169670000",
  "carrier": "Bell",
  "mode": "static",
  "timezone": ["America/Toronto"],
  "geographical": true
}

Invalid Number Response

A number that was verified and found not valid returns status: "success" with phone_valid: false and a reason — a definitive, charged result. Input that is not a phone number at all returns status: "error" and is not charged. You are charged if and only if status is success.

JSON
{
  "status": "success",
  "phone": "+1 123 456 7890",
  "phone_valid": false,
  "reason": "unrecognized_range",
  ...
}

/v3/verify?mode=current

Current mode returns every Static field unchanged, plus two symmetric pairs that tell the number's full story: the carrier and line type the number was originally assigned to, and the carrier and line type serving it now.

Additional Response Fields

FieldTypeDescription
original_carrierstringCarrier of the number's original range assignment (same value as carrier).
original_line_typestringLine type of the original assignment (same value as phone_type).
current_carrierstringThe carrier currently serving the number. May be null while current_mccmnc is set.
current_line_typestringThe line type currently serving the number. Line types can change when numbers move between networks.
current_mccmnc / original_mccmncstringMobile network codes (MCC+MNC) where applicable. Strings — leading zeros are significant.
portedbooleanported: true means the number has left its original allocation — including moves between entities of the same brand family, such as a landline moving to the same carrier's mobile network. Compare the original_* and current_* pairs to see what changed. false is a successful, charged result: the number was checked and has not moved.
carrier_data_sourcestringregistry when resolved from a portability registry.

Example Request

cURL
curl "https://api.veriphone.io/v3/verify?phone=%2B14169670000&mode=current" \
  -H "Authorization: Bearer YOUR_API_KEY"

Success Response 200

JSON
{
  ...all Static fields...,
  "mode": "current",
  "original_carrier": "Bell",
  "original_line_type": "fixed_line",
  "current_carrier": "Comwave Networks",
  "current_line_type": "fixed_line",
  "current_mccmnc": null,
  "ported": true,
  "carrier_data_source": "registry"
}

When resolution is unavailable

If the current carrier cannot be resolved (uncovered country, registry outage), you still receive the complete Static result with HTTP 200 — and pay only the Static rate of 1 credit.

JSON
{
  ...all Static fields...,
  "mode": "current",
  "original_carrier": "Bell",
  "original_line_type": "fixed_line",
  "current_lookup": "unavailable",
  "current_carrier": null,
  "current_mccmnc": null,
  "current_line_type": null,
  "ported": null
}

Precision note for US numbers

For US numbers, current also resolves pooled thousands-blocks that prefix-level data cannot see — so it can be more precise than Static even for numbers that were never ported.


/v3/credits

Returns your account's balance and usage, split by lookup mode.

Example Request

cURL
curl "https://api.veriphone.io/v3/credits" \
  -H "Authorization: Bearer YOUR_API_KEY"

Response 200

JSON
{
  "email": "you@example.com",
  "counter": 68590,
  "active": true,
  "payg": 36270,
  "limit": 1000000,
  "plan": "ENTERPRISE",
  "renew": 17,
  "last_reset": { "seconds": 1781654402, "nanos": 0 },
  "usage": {
    "static": { "count": 95, "credits": 95 },
    "current": { "count": 4, "credits": 61 }
  }
}

/v3/coverage/current

Public, unauthenticated list of countries where Current lookups are available. Also rendered as a browsable page.

Example Request

cURL
curl "https://api.veriphone.io/v3/coverage/current"

Response 200

JSON
{
  "countries": [
    { "iso": "AG", "covered": true },
    { "iso": "AR", "covered": true },
    ...
  ],
  "updatedAt": "2026-07-04T04:15:00Z"
}

Previous Versions

The v2 API remains fully supported: every /v2 endpoint keeps working, and its responses gain only additive fields. The v2 reference is preserved for existing integrations. New integrations should use /v3.

Bulk CSV processing is documented separately — see Bulk verification.