e-PNC Phone Validation API
Validate any international phone number. Get country, carrier, and line type in a single API call.
Introduction
The e-PNC (e-MC Phone Number Checker) API lets you instantly validate phone numbers from 200+ countries. You can also try it live at api.e-mc.co/epnc. For each number you submit, the API returns:
- Whether the number is valid and mobile
- The country (ISO code + full name)
- The carrier / network operator (MTN, Orange, Airtel…)
- The line type (mobile, fixed line, VoIP…)
All requests must be authenticated with an x-api-key header. Contact us to get your API key.
Authentication
Pass your API key in the x-api-key HTTP header on every request.
Request header
x-api-key: YOUR_API_KEY
Never expose your API key in client-side code (JavaScript, mobile apps). Always call the API from your backend server.
Error codes
| HTTP Code | Meaning | What to do |
| 200 | Request processed — always check valid field | Read the response body |
| 400 | Missing phone parameter | Check your request body |
| 401 | Invalid or missing API key | Check your x-api-key header |
| 402 | No credits remaining | Contact us to recharge |
| 429 | Rate limit exceeded | Slow down — retry after 1 minute |
Validate a phone number
Request body
| Field | Type | Required | Description |
phone | string | Yes | The phone number to validate (see formats) |
Request — cURL
curl -X POST https://verify.e-mc.co/v1/number/validate \
-H "Content-Type: application/json" \
-H "x-api-key: YOUR_API_KEY" \
-d '{"phone": "+229012345678"}'
Response — valid mobile number
HTTP 200
{
"valid": true,
"phone_e164": "+229012345678",
"phone_local": "229012345678",
"country_code": "BJ",
"country": "Benin",
"network": "MTN",
"type": "mobile",
"recommended_action": "proceed"
}
Response fields
| Field | Type | Description |
valid | boolean | true if the number is valid and mobile |
phone_e164 | string | Number in E.164 format (e.g. +229012345678) |
phone_local | string | E.164 without the leading + |
country_code | string | ISO 3166-1 alpha-2 country code (e.g. BJ) |
country | string | Full country name in English (e.g. Benin) |
network | string | Carrier name (e.g. MTN) or unknown |
type | string | Line type — see line types |
recommended_action | string | proceed when valid |
Response — invalid number
HTTP 200
{
"valid": false,
"reason": "invalid_number"
}
reason | Description |
missing_phone | The phone field is absent from the request |
invalid_number | Number does not match any known numbering plan |
not_mobile_number | Number is valid but is a fixed line, VoIP, etc. |
parse_error | Number could not be parsed (unreadable format) |
Line types
type value | Description | Valid? |
mobile | Mobile / cellular number | ✓ Yes |
fixed_or_mobile | Could be mobile or fixed line | ✓ Yes |
fixed_line | Fixed landline number | ✗ No |
voip | Voice over IP number | ✗ No |
unknown | Type could not be determined | ✗ No |
Code examples
PHP (cURL)
PHP
$ch = curl_init('https://verify.e-mc.co/v1/number/validate');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode(['phone' => '+229012345678']));
curl_setopt($ch, CURLOPT_HTTPHEADER, [
'Content-Type: application/json',
'x-api-key: YOUR_API_KEY',
]);
$response = json_decode(curl_exec($ch), true);
curl_close($ch);
if ($response['valid']) {
echo $response['country'] . ' — ' . $response['network'];
}
Node.js (fetch)
JavaScript
const res = await fetch('https://verify.e-mc.co/v1/number/validate', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'x-api-key': 'YOUR_API_KEY'
},
body: JSON.stringify({ phone: '+229012345678' })
});
const data = await res.json();
if (data.valid) {
console.log(data.country, data.network);
}
Python
Python
import requests
r = requests.post(
'https://verify.e-mc.co/v1/number/validate',
json={'phone': '+229012345678'},
headers={'x-api-key': 'YOUR_API_KEY'}
)
data = r.json()
if data['valid']:
print(data['country'], data['network'])
© 2026 e-MC — Phone Validation API v1