Complete reference for all public Veriphone API endpoints. Base URL: https://api.veriphone.io
All endpoints accept both GET and POST requests. Pass your API key via one of the following methods (checked in this order):
Authorization: Bearer YOUR_API_KEYkey=YOUR_API_KEY?key=YOUR_API_KEYEvery verification runs in one of two modes, selected with the optional mode parameter:
| Mode | What it returns | Cost |
|---|---|---|
static (default) | Validates the number and reports its original carrier and line type from national numbering-plan data. | 1 credit |
current | Everything 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. 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.
{
"status": "error",
"code": 401,
"type": "Unauthorized",
"message": "API key or token required"
}| Code | Type | Meaning |
|---|---|---|
| 400 | BadRequest / MissingParameter | Invalid or missing input (including an unsupported mode value) |
| 401 | Unauthorized | Missing or invalid API key |
| 402 | PaymentRequired | Insufficient credits |
| 403 | Forbidden | Account inactive or access denied |
| 404 | NotFound | Resource not found |
| 500 | InternalServerError | Server error |
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.
| Name | Required | Description |
|---|---|---|
phone | Yes | The phone number to verify. International format recommended (e.g. +14169670000). |
key | Yes | Your API key (or use a header/cookie — see Authentication). |
mode | No | static (default) or current. See Lookup Modes. |
default_country | No | Two-letter country code used when the number has no international prefix (e.g. US). |
record | No | true to save the result to your verification history. |
| Field | Type | Description |
|---|---|---|
status | string | success — 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. |
phone | string | The number in E.164 format when valid; otherwise your original input. |
phone_valid | boolean | Whether 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. |
reason | string | Present 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_type | string | Line type, e.g. mobile, fixed_line, voip, toll_free, fixed_line_or_mobile. Special inputs are classified as short_code or emergency. |
shortcode_cost | string | Only for phone_type: "short_code": toll_free, standard_rate, premium_rate, or unknown. |
carrier | string | The carrier of the number's range. For the current carrier of ported numbers, use mode=current. |
phone_region | string | Geographic region of the number, where the numbering plan defines one (e.g. Toronto, ON). |
country / country_code / country_prefix | string | Country name, ISO code, and dial code. |
international_number / local_number / e164 | string | The number formatted for international dialing, national dialing, and E.164. |
timezone | array | Time zone identifiers for the number's region (usually one). |
geographical | boolean | Whether the number is tied to a geographic area (as opposed to mobile or non-geographic ranges). |
mode | string | The mode this response was produced with, echoed back. |
curl "https://api.veriphone.io/v3/verify?phone=%2B14169670000" \ -H "Authorization: Bearer YOUR_API_KEY"
{
"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
}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.
{
"status": "success",
"phone": "+1 123 456 7890",
"phone_valid": false,
"reason": "unrecognized_range",
...
}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.
| Field | Type | Description |
|---|---|---|
original_carrier | string | Carrier of the number's original range assignment (same value as carrier). |
original_line_type | string | Line type of the original assignment (same value as phone_type). |
current_carrier | string | The carrier currently serving the number. May be null while current_mccmnc is set. |
current_line_type | string | The line type currently serving the number. Line types can change when numbers move between networks. |
current_mccmnc / original_mccmnc | string | Mobile network codes (MCC+MNC) where applicable. Strings — leading zeros are significant. |
ported | boolean | ported: 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_source | string | registry when resolved from a portability registry. |
curl "https://api.veriphone.io/v3/verify?phone=%2B14169670000&mode=current" \ -H "Authorization: Bearer YOUR_API_KEY"
{
...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"
}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.
{
...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
}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.
Returns your account's balance and usage, split by lookup mode.
curl "https://api.veriphone.io/v3/credits" \ -H "Authorization: Bearer YOUR_API_KEY"
{
"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 }
}
}Public, unauthenticated list of countries where Current lookups are available. Also rendered as a browsable page.
curl "https://api.veriphone.io/v3/coverage/current"
{
"countries": [
{ "iso": "AG", "covered": true },
{ "iso": "AR", "covered": true },
...
],
"updatedAt": "2026-07-04T04:15:00Z"
}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.