Provero provides real-time Verification, risk Screening, data Enrichment, and basic format Validation services. Pick what you need or combine several via Multi-Validation.
Available APIs
Multi-Validation
CompositeRun multiple checks in a single request (Phone/Email verification, TPS screening, IP fraud, IP geolocation, Name screening).
- One request, many results
- Only returns blocks for supplied inputs
- Consistent response mapping
Phone (HLR/MNP & Delivery)
VerificationReal-time reachability with network, porting, roaming and delivery status.
- Network & porting status
- Roaming detection
- Delivery verification
- Error mapping
TPS Screening
ScreeningChecks if a phone number appears on UK TPS/CTPS suppression registers.
- UK TPS & CTPS
- Live status check
- Compliance-ready output
Confirms mailbox deliverability and risk signals for an email address.
- SMTP/mailbox checks
- Disposable detection
- Risk level
- Typos
- Syntax validity
Address
VerificationVerifies deliverability and normalizes postal addresses.
- Deliverability
- Normalization
- Geo confidence
Name Screening
ScreeningScreens names for quality and risk (fake patterns, profanity, etc.).
- Real-name heuristics
- Profanity filtering
- Risk indicators
IP Fraud Detection
ScreeningDetects proxies, VPNs, TOR, bots and other abuse signals.
- Proxy/VPN/TOR
- Bot/crawler ID
- Abuse & risk signals
IP Geolocation
EnrichmentCity/region/country for an IP, with optional distance & matching to an address.
- City/region/country
- GeoMatch option
- Distance calculation
Breach Detection
ScreeningChecks if inputs (email/phone/IP/name) appear in known data breaches.
- Multiple sources
- Leaked domains
- Flexible inputs
Getting Started
- Choose your API: Pick the Verification, Screening, or Enrichment you need.
- Get your API key: Create keys in your account settings.
- Review the docs: Each API has examples and response formats.
- Integrate: Use the code samples in your preferred language.
Rate Limits
Please contact us for rate limits and pricing for your use case.
Support
- Email: support.provero.io
- Documentation: Browse the API panes above.
All endpoints are secured and require authentication via a Bearer token. You must include your API key in the Authorization
header of every request you make. You can create API tokens in your settings page.
Headers
Authorization: Bearer REPLACE_WITH_API_TOKEN
Content-Type: application/json
Accept: application/json
Code Examples
import requests
url = "https://api.provero.io/api/user"
headers = {
"Authorization": "Bearer REPLACE_WITH_API_TOKEN",
"Content-Type": "application/json"
"Accept": "application/json"
}
response = requests.get(url, headers=headers)
print(response.status_code)
print(response.text)
<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.provero.io/api/user",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
"Authorization: Bearer REPLACE_WITH_API_TOKEN",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
curl_close($curl);
echo $response;
const headers = new Headers();
headers.append("Authorization", "Bearer REPLACE_WITH_API_TOKEN");
headers.append("Content-Type", "application/json");
headers.append("Accept", "application/json");
fetch("https://api.provero.io/api/user", {
method: "GET",
headers: headers,
})
.then(response => response.text())
.then(result => console.log(result))
.catch(error => console.error("Error:", error));
curl -X GET https://api.provero.io/api/user \
-H "Authorization: Bearer REPLACE_WITH_API_TOKEN" \
-H "Content-Type: application/json"
Response Examples
{
"error": {
"code": "401",
"message": "Unauthenticated. Please provide a valid API key."
}
}
Response Body
Error structure
Field Name | Type | Example | Always Present | Description |
---|---|---|---|---|
error.code |
string |
401 | Yes | HTTP status code for the error. |
error.message |
string |
Unauthenticated. Please provide a valid API key. | Yes | A message describing why authentication failed. |
Validate multiple inputs in a single call (email, phone, TPS, IP fraud, IP geolocation, and name). Only supplied fields are processed and only corresponding result blocks are returned.
Response mapping: Each nested object in the response mirrors its standalone validator’s response. For full field descriptions and examples, see the corresponding single-validator panes: Email Validation
, Phone Validation
, TPS Check
, IP Fraud
, and GeoIP
.
Endpoint
https://api.provero.io/api/validate/multiple
Headers
Authorization: Bearer REPLACE_WITH_API_TOKEN
Content-Type: application/json
Accept: application/json
Request Body
Field | Type | Required | Description |
---|---|---|---|
email |
string |
No | Email to validate. |
phone |
string |
No | Phone number to validate. |
roaming |
boolean |
No | Checks roaming details (only applies when phone is provided). |
tps |
string |
No | Phone number to check against TPS. |
ip |
string |
No | IP address for fraud detection and optional geolocation. |
user_agent |
string |
No | User agent string (used by IP fraud when ip is provided). |
user_language |
string |
No | Browser language (used by IP fraud when ip is provided). |
geoip |
boolean |
No | Enable IP-to-location lookup (requires ip ). |
geoMatch |
boolean |
No | Compare IP geolocation to an address (requires geoip=true ). |
address |
string |
No | Address/postcode used when geoMatch=true to compute distance/match. |
name |
string |
No | Full name for identity/fraud checks. |
Request Body example (JSON)
{
"name": "John Doe",
"email": "test@example.com",
"phone": "+441302778473",
"tps": "+441302778473",
"ip": "8.8.8.8",
"user_agent": "Mozilla/5.0",
"user_language": "en",
"geoip": true,
"geoMatch": true,
"address": "London"
}
Code Examples
import requests
payload = {
"name": "John Doe",
"email": "test@example.com",
"phone": "+441302778473",
"tps": "+441302778473",
"ip": "8.8.8.8",
"user_agent": "Mozilla/5.0",
"user_language": "en",
"geoip": True,
"geoMatch": True,
"address": "London"
}
url = "https://api.provero.io/api/validate/multiple"
headers = {
"Authorization": "Bearer REPLACE_WITH_API_TOKEN",
"Content-Type": "application/json",
"Accept": "application/json"
}
response = requests.post(url, headers=headers, json=payload)
print(response.status_code)
print(response.json())
<?php
$payload = [
"name" => "John Doe",
"email" => "test@example.com",
"phone" => "+441302778473",
"tps" => "+441302778473",
"ip" => "8.8.8.8",
"user_agent" => "Mozilla/5.0",
"user_language" => "en",
"geoip" => true,
"geoMatch" => true,
"address" => "London"
];
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.provero.io/api/validate/multiple",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POSTFIELDS => json_encode($payload),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer REPLACE_WITH_API_TOKEN",
"Content-Type: application/json",
"Accept: application/json"
]
]);
$response = curl_exec($curl);
if (curl_errno($curl)) {
echo 'Error:' . curl_error($curl);
}
curl_close($curl);
echo $response;
const payload = {
name: "John Doe",
email: "test@example.com",
phone: "+441302778473",
tps: "+441302778473",
ip: "8.8.8.8",
user_agent: "Mozilla/5.0",
user_language: "en",
geoip: true,
geoMatch: true,
address: "London"
};
fetch("https://api.provero.io/api/validate/multiple", {
method: "POST",
headers: {
"Authorization": "Bearer REPLACE_WITH_API_TOKEN",
"Content-Type": "application/json",
"Accept": "application/json"
},
body: JSON.stringify(payload)
})
.then(r => r.json())
.then(console.log)
.catch(console.error);
curl -X POST https://api.provero.io/api/validate/multiple \
-H "Authorization: Bearer REPLACE_WITH_API_TOKEN" \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-d '{
"name": "John Doe",
"email": "test@example.com",
"phone": "+441302778473",
"tps": "+441302778473",
"ip": "8.8.8.8",
"user_agent": "Mozilla/5.0",
"user_language": "en",
"geoip": true,
"geoMatch": true,
"address": "London"
}'
Response Examples
{
"email": {
"emailAddress": "test@example.com",
"isSyntaxValid": true,
"isMailboxDeliverable": false,
"isCatchAll": false,
"typoSuggestion": false,
"isDisposable": false,
"isRoleBased": false,
"riskLevel": "HIGH",
"failureReason": "missing_mx"
},
"phone": {
"results": [
{
"to": "+441302778473",
"mccMnc": "",
"imsi": "",
"originalNetwork": {
"networkName": "",
"networkPrefix": "1302",
"countryName": "",
"countryPrefix": "44",
"networkId": ""
},
"status": {
"groupId": 1,
"groupName": "Handset errors",
"id": 255,
"name": "REJECTED_NETWORK",
"description": "The number is outside the valid network range or is currently unassigned."
},
"ported": false,
"error": {
"groupId": 1,
"groupName": "Handset errors",
"id": 255,
"name": "REJECTED_NETWORK",
"description": "The number is outside the valid network range or is currently unassigned.",
"permanent": true
}
}
]
},
"tps": {
"phone": "tel:+44-1302-778473",
"result": false
},
"ip": {
"value": "8.8.8.8",
"proxy": false,
"isp": "Google",
"organization": "Google DNS",
"asn": "15169",
"host": "dns.google",
"countryCode": "US",
"city": "Mountain View",
"region": "California",
"isCrawler": false,
"connectionType": "Data Center",
"latitude": "37.38999939",
"longitude": "-122.06999969",
"zipCode": "N/A",
"timezone": "America/Los_Angeles",
"vpn": false,
"tor": false,
"activeVpn": false,
"activeTor": false,
"recentAbuse": false,
"abuseVelocity": "none",
"botStatus": false,
"mobile": false,
"fraudScore": 0,
"highRiskAttacks": null,
"sharedConnection": null,
"dynamicConnection": null,
"securityScanner": null,
"trustedNetwork": null,
"operatingSystem": "UNK UNK",
"browser": "UNK UNK",
"deviceModel": "N/A",
"deviceBrand": "N/A",
"frequentAbuser": null
},
"geoip": {
"country": "United States",
"regionName": "Virginia",
"city": "Ashburn",
"zip": "20149",
"lat": 39.03,
"lon": -77.5,
"ip": "8.8.8.8",
"distance": {
"km": 3597.3244810449423,
"mi": 2235.273110111377
}
},
"name": {
"message": "Identity fraud check passed",
"name": "John Doe"
}
}
{
"message": "The email field must be a valid email address.",
"errors": {
"email": [
"The email field must be a valid email address."
]
}
}
{
"message": "The provided phone number is invalid",
"errors": {
"phone": [
"The provided phone number is invalid"
]
}
}
{
"message": "The provided phone number is invalid",
"errors": {
"tps": [
"The provided phone number is invalid"
]
}
}
{
"message": "The ip field is required when geoip is true.",
"errors": {
"ip": [
"The ip field is required when geoip is true."
]
}
}
{
"message": "Please provide a valid destination to match.",
"errors": {
"address": [
"Please provide a valid destination to match."
]
}
}
{
"requestError": {
"serviceException": {
"messageId": "Error message",
"code": "400"
}
}
}
Response Body
Success structure
Field Name | Type | Example | Always Present | Description |
---|---|---|---|---|
email |
object |
{"emailAddress":"test@example.com","isSyntaxValid":true} | No | Email validation result. See the Email Validation pane for full field list. |
phone |
object |
{"results":[{"status":{"name":"REJECTED_NETWORK"}}]} | No | Phone validation result. See the Phone Validation pane. |
tps |
object |
{"phone":"tel:+44-1302-778473","result":false} | No | TPS check result. See the TPS pane. |
ip |
object |
{"proxy":false,"fraudScore":0} | No | Fraud detection result. See the IP Fraud pane. |
geoip |
object |
{"country":"United States","city":"Ashburn","distance":{"km":3597.32}} | No | Geolocation (and optional distance/match). See the GeoIP pane. |
name |
object |
{"message":"Identity fraud check passed","name":"John Doe"} | No | Name fraud/identity check result. |
Error structure
Field Name | Type | Example | Always Present | Description |
---|---|---|---|---|
message |
string |
The email field must be a valid email address. | No | Top-level validation message. |
errors |
object |
{"email":["The email field must be a valid email address."]} | No | Per-field validation errors. |
requestError |
object |
{"serviceException":{"messageId":"Error message","code":"400"}} | No | Application/service errors container. |
Phone Verification (HLR/MNP & Delivery) provides real-time number validation by checking active status, network and portability information, and assessing delivery routes to ensure reliable communication.
- HLR: Database checks that validate if a number is active and identify its operator.
- MNP: Process to determine if a number has been ported and confirm the current carrier.
- Delivery: Mechanism for routing messages or calls to the correct destination and confirming their status.
Endpoint
https://api.provero.io/api/validate/phone
Headers
Authorization: Bearer REPLACE_WITH_API_TOKEN
Content-Type: application/json
Accept: application/json
Request Body
Field | Type | Required | Description |
---|---|---|---|
phone |
string |
Yes | The phone number to be validated. |
roaming |
boolean |
No | Set to "1" or "true" to include roaming checks. |
Request Body example (JSON)
{
"phone": "+441302778473",
"roaming": true
}
Code Examples
import requests
userPhone = "REPLACE_WITH_PHONE"
roaming = "1"
url = "https://api.provero.io/api/validate/phone"
payload = {"phone": userPhone, "roaming": roaming}
headers = {
"Authorization": "Bearer REPLACE_WITH_API_TOKEN",
"Content-Type": "application/json",
"Accept": "application/json"
}
response = requests.post(url, headers=headers, json=payload)
print(response.status_code)
print(response.text)
<?php
$userPhone = "REPLACE_WITH_PHONE";
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.provero.io/api/validate/phone",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POSTFIELDS => json_encode(["phone" => $userPhone]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer REPLACE_WITH_API_TOKEN",
"Content-Type: application/json",
"Accept: application/json"
],
]);
$response = curl_exec($curl);
if (curl_errno($curl)) {
echo 'Error:' . curl_error($curl);
}
curl_close($curl);
echo $response;
const userPhone = "REPLACE_WITH_PHONE";
fetch("https://api.provero.io/api/validate/phone", {
method: "POST",
headers: {
"Authorization": "Bearer REPLACE_WITH_API_TOKEN",
"Content-Type": "application/json",
"Accept": "application/json"
},
body: JSON.stringify({ phone: userPhone })
})
.then(response => response.text())
.then(result => console.log(result))
.catch(error => console.error("Error:", error));
userPhone="REPLACE_WITH_PHONE"
curl -X POST https://api.provero.io/api/validate/phone \
-H "Authorization: Bearer REPLACE_WITH_API_TOKEN" \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-d "{\"phone\": \"$userPhone\"}"
Response Examples
{
"results": [
{
"to": "+1234567890",
"mccMnc": "123456",
"imsi": "",
"originalNetwork": {
"networkName": "Example",
"networkPrefix": "234",
"countryName": "Example",
"countryPrefix": "1",
"networkId": ""
},
"status": {
"groupId": 3,
"groupName": "DELIVERED",
"id": 5,
"name": "DELIVERED_TO_HANDSET",
"description": "Message delivered to handset"
},
"roaming": true,
"roamingNetwork": {
"networkName": "Example",
"networkPrefix": "",
"countryName": "Example",
"countryPrefix": "1",
"networkId": ""
},
"ported": true,
"portedNetwork": {
"networkName": "Example",
"networkPrefix": "234",
"countryName": "Example",
"countryPrefix": "1",
"networkId": ""
},
"error": {
"groupId": 0,
"groupName": "Ok",
"id": 0,
"name": "DELIVERED_TO_HANDSET",
"description": "No Error.",
"permanent": false
}
}
]
}
{
"results": [
{
"to": "+1234567890",
"mccMnc": "123456",
"imsi": "",
"originalNetwork": {
"networkName": "Example",
"networkPrefix": "234",
"countryName": "Example",
"countryPrefix": "1",
"networkId": ""
},
"status": {
"groupId": 3,
"groupName": "DELIVERED",
"id": 5,
"name": "DELIVERED_TO_HANDSET",
"description": "Message delivered to handset"
},
"ported": true,
"portedNetwork": {
"networkName": "Example",
"networkPrefix": "234",
"countryName": "Example",
"countryPrefix": "1",
"networkId": ""
},
"error": {
"groupId": 0,
"groupName": "Ok",
"id": 0,
"name": "DELIVERED_TO_HANDSET",
"description": "No Error.",
"permanent": false
}
}
]
}
{
"results": [
{
"to": "+1234567890",
"mccMnc": "123456",
"imsi": "",
"originalNetwork": {
"networkName": "Example",
"networkPrefix": "234",
"countryName": "Example",
"countryPrefix": "1",
"networkId": ""
},
"status": {
"groupId": 1,
"groupName": "Handset errors",
"id": 27,
"name": "UNDELIVERABLE_NOT_DELIVERED",
"description": "Absent Subscriber"
},
"ported": false,
"error": {
"groupId": 1,
"groupName": "Handset errors",
"id": 27,
"name": "UNDELIVERABLE_NOT_DELIVERED",
"description": "Absent Subscriber",
"permanent": false
}
}
]
}
{
"requestError": {
"serviceException": {
"messageId": "Error message",
"code": "400"
}
}
}
{
"message": "The phone field is required.",
"errors": {
"phone": [
"The phone field is required."
]
}
}
{
"message": "The phone field must not be greater than 15 characters.",
"errors": {
"phone": [
"The phone field must not be greater than 15 characters."
]
}
}
{
"message": "The phone field must be at least 10 characters.",
"errors": {
"phone": [
"The phone field must be at least 10 characters."
]
}
}
Response Body
Error structure
Field Name | Type | Example | Always Present | Description |
---|---|---|---|---|
message |
string |
The phone field is required. | No | Top-level error message returned on validation failure. |
errors |
object |
{"phone": ["The phone field is required."]} | No | Object of validation services with validation failures. |
requestError |
object |
{"serviceException": {"messageId": "Error message", "code": "400"}} | No | Object containing service exceptions for application errors. |
The TPS (Telephone Preference Service) Validation API checks whether a UK landline or mobile number is listed with either the official TPS or Corporate TPS (CTPS) registers. Use this to avoid calling users who have opted out of unsolicited sales and marketing contact.
Endpoint
https://api.provero.io/api/validate/phone-tps
Headers
Authorization: Bearer REPLACE_WITH_API_TOKEN
Content-Type: application/json
Accept: application/json
Request Body
Field | Type | Required | Description |
---|---|---|---|
phone |
string |
Yes | Phone number to check (in E.164 format, e.g. +441234567890) |
Request Body example (JSON)
{
"phone": "+441302778473"
}
Code Examples
import requests
userPhone = "REPLACE_WITH_PHONE"
url = "https://api.provero.io/api/validate/phone-tps"
payload = {"phone": userPhone}
headers = {
"Authorization": "Bearer REPLACE_WITH_API_TOKEN",
"Content-Type": "application/json",
"Accept": "application/json"
}
response = requests.post(url, headers=headers, json=payload)
print(response.status_code)
print(response.text)
<?php
$userPhone = "REPLACE_WITH_PHONE";
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.provero.io/api/validate/phone-tps",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POSTFIELDS => json_encode(["phone" => $userPhone]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer REPLACE_WITH_API_TOKEN",
"Content-Type: application/json",
"Accept: application/json"
],
]);
$response = curl_exec($curl);
if (curl_errno($curl)) {
echo 'Error:' . curl_error($curl);
}
curl_close($curl);
echo $response;
const userPhone = "REPLACE_WITH_PHONE";
fetch("https://api.provero.io/api/validate/phone-tps", {
method: "POST",
headers: {
"Authorization": "Bearer REPLACE_WITH_API_TOKEN",
"Content-Type": "application/json",
"Accept": "application/json"
},
body: JSON.stringify({ phone: userPhone })
})
.then(response => response.text())
.then(result => console.log(result))
.catch(error => console.error("Error:", error));
userPhone="REPLACE_WITH_PHONE"
curl -X POST https://api.provero.io/api/validate/phone-tps \
-H "Authorization: Bearer REPLACE_WITH_API_TOKEN" \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-d "{\"phone\": \"$userPhone\"}"
Response Examples
{
"phone": "tel:+44-1234-567890",
"result": false
}
{
"requestError": {
"serviceException": {
"messageId": "Error message",
"code": "400"
}
}
}
{
"message": "The provided phone number is not valid for the GB region.",
"errors": {
"phone": [
"The provided phone number is not valid for the GB region."
]
}
}
{
"message": "The phone field is required.",
"errors": {
"phone": [
"The phone field is required."
]
}
}
{
"message": "The provided phone number is invalid",
"errors": {
"phone": [
"The provided phone number is invalid"
]
}
}
{
"message": "The string supplied is too short to be a phone number.",
"errors": {
"phone": [
"The string supplied is too short to be a phone number."
]
}
}
Response Body
Success structure
Field Name | Type | Example | Always Present | Description |
---|---|---|---|---|
result.status |
string |
TPS | Yes | `TPS`, `CTPS`, or `UNLISTED` depending on registry status |
result.type |
string |
mobile | Yes | The type of number detected (e.g. `mobile`, `landline`) |
result.operator |
string |
Vodafone | No | Detected carrier/operator for the number |
result.date |
string |
2024-03-22 | No | Date the number was registered on TPS/CTPS (if applicable) |
Error structure
Field Name | Type | Example | Always Present | Description |
---|---|---|---|---|
message |
string |
The phone field is required. | No | Top-level error message for validation issues |
errors |
object |
{"phone": ["The phone field is required."]} | No | Details of validation field errors |
requestError |
object |
{"serviceException": {"messageId": "Error message", "code": "400"}} | No | Object returned for application-level service errors |
The Email Validation API allows you to validate email addresses, check their deliverability, and assess the risk associated with them among other detailed information.
Endpoint
https://api.provero.io/api/validate/email
Headers
Authorization: Bearer REPLACE_WITH_API_TOKEN
Content-Type: application/json
Accept: application/json
Request Body
Field | Type | Required | Description |
---|---|---|---|
email |
string |
Yes | The email to be validated. |
Request Body example (JSON)
{
"email": "test@example.com"
}
Code Examples
import requests
userEmail = "REPLACE_WITH_EMAIL"
url = "https://api.provero.io/api/validate/email"
payload = {"email": userEmail}
headers = {
"Authorization": "Bearer REPLACE_WITH_API_TOKEN",
"Content-Type": "application/json",
"Accept": "application/json"
}
response = requests.post(url, headers=headers, json=payload)
print(response.status_code)
print(response.text)
<?php
$userEmail = "REPLACE_WITH_EMAIL";
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.provero.io/api/validate/email",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POSTFIELDS => json_encode(["email" => $userEmail]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer REPLACE_WITH_API_TOKEN",
"Content-Type: application/json",
"Accept: application/json"
],
]);
$response = curl_exec($curl);
if (curl_errno($curl)) {
echo 'Error:' . curl_error($curl);
}
curl_close($curl);
echo $response;
const userEmail = "REPLACE_WITH_EMAIL";
fetch("https://api.provero.io/api/validate/email", {
method: "POST",
headers: {
"Authorization": "Bearer REPLACE_WITH_API_TOKEN",
"Content-Type": "application/json",
"Accept": "application/json"
},
body: JSON.stringify({ email: userEmail })
})
.then(response => response.text())
.then(result => console.log(result))
.catch(error => console.error("Error:", error));
userEmail="REPLACE_WITH_EMAIL"
curl -X POST https://api.provero.io/api/validate/email \
-H "Authorization: Bearer REPLACE_WITH_API_TOKEN" \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-d "{\"email\": \"$userEmail\"}"
Response Examples
{
"emailAddress": "user@example.com",
"isSyntaxValid": true,
"isMailboxDeliverable": false,
"isCatchAll": false,
"typoSuggestion": "user@example.com",
"isDisposable": false,
"isRoleBased": false,
"riskLevel": "HIGH",
"failureReason": "missingMX"
}
{
"requestError": {
"serviceException": {
"messageId": "Error message",
"code": "400"
}
}
}
{
"message": "The email field is required.",
"errors": {
"email": [
"The email field is required."
]
}
}
{
"message": "The email field must be a valid email address.",
"errors": {
"email": [
"The email field must be a valid email address."
]
}
}
Response Body
Success structure
Field Name | Type | Example | Always Present | Description |
---|---|---|---|---|
emailAddress |
string |
user@example.com | Yes | The target email address that was looked up. |
isSyntaxValid |
boolean |
1 | Yes | Checks if the email address is formatted correctly and valid. |
isMailboxDeliverable |
boolean |
Yes | Determines if the email address is deliverable. | |
isCatchAll |
boolean |
Yes | Indicates whether the email address domain is configured as catch-all. | |
typoSuggestion |
string |
user@example.com | Yes | Provides a suggested alternate email address that closely resembles the input and may be valid. |
isDisposable |
boolean |
Yes | Checks if the email address is temporary or disposable. | |
isRoleBased |
boolean |
Yes | Checks if the email address is for a team or department. | |
riskLevel |
string |
HIGH | Yes | Indicates the risk status of an email address. HIGH, MEDIUM, LOW, or UNKNOWN. |
failureReason |
string |
missingMX | No | Reason is provided when validMailbox status is unknown. |
Error structure
Field Name | Type | Example | Always Present | Description |
---|---|---|---|---|
message |
string |
The email field is required. | No | Top-level error message returned on validation failure. |
errors |
object |
{"email": ["The email field is required."]} | No | Object of validation services with validation failures. |
requestError |
object |
{"serviceException": {"messageId": "Error message", "code": "400"}} | No | Object containing service exceptions for application errors. |
This endpoint validates and standardises UK addresses by postcode using PAF data, ensuring
accurate formatting and confirming postcode validity.
It’s designed to improve data quality at the
point of entry and supports reporting on the number of corrected or rejected addresses by source or campaign,
helping identify patterns and maintain consistent address standards.
Endpoint
https://api.provero.io/api/validate/address
Headers
Authorization: Bearer REPLACE_WITH_API_TOKEN
Content-Type: application/json
Accept: application/json
Request Body
Field | Type | Required | Description |
---|---|---|---|
postcode |
string |
Yes | Postcode to be validated. |
Request Body example (JSON)
{
"postcode": "string"
}
Code Examples
import requests
address = "10 Downing Street, London"
postcode = "LS18 5SB"
url = "https://api.provero.io/api/validate/address"
payload = {"postcode": postcode}
headers = {
"Authorization": "Bearer REPLACE_WITH_API_TOKEN",
"Content-Type": "application/json",
"Accept": "application/json"
}
response = requests.post(url, headers=headers, json=payload)
print(response.status_code)
print(response.text)
<?php
$postcode = "LS18 5SB";
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.provero.io/api/validate/address",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POSTFIELDS => json_encode([
"postcode" => $postcode
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer REPLACE_WITH_API_TOKEN",
"Content-Type: application/json",
"Accept: application/json"
],
]);
$response = curl_exec($curl);
if (curl_errno($curl)) {
echo 'Error:' . curl_error($curl);
}
curl_close($curl);
echo $response;
const postcode = "LS18 5SB";
fetch("https://api.provero.io/api/validate/address", {
method: "POST",
headers: {
"Authorization": "Bearer REPLACE_WITH_API_TOKEN",
"Content-Type": "application/json",
"Accept": "application/json"
},
body: JSON.stringify({ postcode })
})
.then(response => response.text())
.then(result => console.log(result))
.catch(error => console.error("Error:", error));
postcode="LS18 5SB"
curl -X POST https://api.provero.io/api/validate/address \
-H "Authorization: Bearer REPLACE_WITH_API_TOKEN" \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-d "{\"postcode\": \"$postcode\"}"
Response Examples
{
"valid": true,
"postcode": "LS18 5SB",
"address": {
"Address1": "Brownberrie Lane",
"Address2": "Horsforth",
"Address3": "",
"Address4": "",
"Town": "Leeds",
"County": "West Yorkshire",
"Postcode": "LS18 5SB",
"PremiseData": "Old Ball||;||2;||4;||6;||8;||10;||12;||14;||16;||18;||20;||22;||24;||26;||28;||30;||32;||34;||36;||38;||40;||42;||44;||46;||48;||50;||52;||54;"
}
}
{
"requestError": {
"serviceException": {
"messageId": "Error message",
"code": "400"
}
}
}
{
"message": "The address field is required.",
"errors": {
"address": [
"The address field is required."
]
}
}
Response Body
Success structure
Field Name | Type | Example | Always Present | Description |
---|---|---|---|---|
postcode |
string |
LS18 5SB | Yes | The request postcode. |
valid |
boolean |
true | Yes | Indicates whether the postcode is valid |
address |
object |
{"Address1":"Brownberrie Lane","Address2":"Horsforth","Address3":"","Address4":"","Town":"Leeds","County":"West Yorkshire","Postcode": "LS18 5SB","PremiseData": "Old Ball||;||2;||4;||6;||8;||10;||12;||14;||16;||18;||20;||22;||24;||26;||28;||30;||32;||34;||36;||38;||40;||42;||44;||46;||48;||50;||52;||54;"} | Yes | Breakdown of address into structured parts. |
Error structure
Field Name | Type | Example | Always Present | Description |
---|---|---|---|---|
message |
string |
The postcode field is required. | No | Top-level validation message. |
errors |
object |
{"postcode": ["The postcode field is required."]} | No | Object containing input validation errors. |
requestError |
object |
{"serviceException": {"messageId": "Error message", "code": "400"}} | No | Returned when an internal service exception occurs. |
COMING SOON!!!
The Identity Validation API allows you to validate personal identities, ensuring they are accurate and legitimate.
We determine whether a name is likely to belong to a real person rather than a fictional/historical character, cultural icon, or fabricated identity.
This API also includes built-in profanity filtering to detect and reject names that contain offensive or inappropriate language.
Endpoint
https://api.provero.io/api/fraud-check/name
Headers
Authorization: Bearer REPLACE_WITH_API_TOKEN
Content-Type: application/json
Accept: application/json
Request Body
Field | Type | Required | Description |
---|---|---|---|
firstName |
string |
Yes | The first name to be validated. |
lastName |
string |
Yes | The last name to be validated. |
Request Body example (JSON)
{
"firstName": "string",
"lastName": "string"
}
Code Examples
import requests
firstName = "John"
lastName = "Doe"
url = "https://api.provero.io/api/fraud-check/name"
payload = {"firstName": firstName, "lastName": lastName}
headers = {
"Authorization": "Bearer REPLACE_WITH_API_TOKEN",
"Content-Type": "application/json",
"Accept": "application/json"
}
response = requests.post(url, headers=headers, json=payload)
print(response.status_code)
print(response.text)
<?php
$firstName = "John";
$lastName = "Doe";
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.provero.io/api/fraud-check/name",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POSTFIELDS => json_encode([
"firstName" => $firstName,
"lastName" => $lastName
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer REPLACE_WITH_API_TOKEN",
"Content-Type: application/json",
"Accept: application/json"
],
]);
$response = curl_exec($curl);
if (curl_errno($curl)) {
echo 'Error:' . curl_error($curl);
}
curl_close($curl);
echo $response;
const firstName = "John";
const lastName = "Doe";
fetch("https://api.provero.io/api/fraud-check/name", {
method: "POST",
headers: {
"Authorization": "Bearer REPLACE_WITH_API_TOKEN",
"Content-Type": "application/json",
"Accept": "application/json"
},
body: JSON.stringify({ firstName, lastName })
})
.then(response => response.text())
.then(result => console.log(result))
.catch(error => console.error("Error:", error));
firstName="John"
lastName="Doe"
curl -X POST https://api.provero.io/api/fraud-check/name \
-H "Authorization: Bearer REPLACE_WITH_API_TOKEN" \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-d "{\"firstName\": \"$firstName\", \"lastName\": \"$lastName\"}"
Response Examples
{
"fullName": "John Doe",
"isValid": true,
"isProfane": false,
"riskLevel": "LOW",
"notes": "Name is a common real-world identity."
}
{
"requestError": {
"serviceException": {
"messageId": "Error message",
"code": "400"
}
}
}
{
"message": "The firstName field is required.",
"errors": {
"firstName": [
"The firstName field is required."
]
}
}
{
"message": "The lastName field is required.",
"errors": {
"lastName": [
"The lastName field is required."
]
}
}
Response Body
Success structure
Field Name | Type | Example | Always Present | Description |
---|---|---|---|---|
fullName |
string |
John Doe | Yes | The validated full name. |
isValid |
boolean |
true | Yes | Whether the name is considered real and legitimate. |
isProfane |
boolean |
false | Yes | Indicates whether the name contains any profanity. |
riskLevel |
string |
LOW | Yes | A risk rating of the name (LOW, MEDIUM, HIGH, UNKNOWN). |
notes |
string |
Name is a common real-world identity. | No | Additional metadata or validation observations. |
Error structure
Field Name | Type | Example | Always Present | Description |
---|---|---|---|---|
message |
string |
The firstName field is required. | No | Top-level validation message. |
errors |
object |
{"firstName": ["The firstName field is required."]} | No | Object containing input validation errors. |
requestError |
object |
{"serviceException": {"messageId": "Error message", "code": "400"}} | No | Returned when an internal service exception occurs. |
This endpoint performs IP fraud detection by evaluating indicators such as proxies, VPNs, bots, TOR nodes, device fingerprints, and other markers. It returns a detailed fraud risk profile.
Endpoint
https://api.provero.io/api/fraud-check/ip
Headers
Authorization: Bearer REPLACE_WITH_API_TOKEN
Content-Type: application/json
Accept: application/json
Request Body
Field | Type | Required | Description |
---|---|---|---|
ip |
string |
Yes | The IP address to be validated. |
user_agent |
string |
No | User-Agent header string of the client. |
user_language |
string |
No | User language country code (e.g., "en"). |
Request Body example (JSON)
{
"ip": "8.8.8.8",
"user_agent": "Mozilla/5.0",
"user_language": "en"
}
Code Examples
import requests
payload = {
"ip": "0.0.0.0", # Replace with users IP address
"user_agent": "REPLACE_WIH_USER_AGENT", # Example: "Mozilla/5.0 (...)"
"user_language": "en" # Language code e.g. "en" for English
}
url = "https://api.provero.io/api/fraud-check/ip"
headers = {
"Authorization": "Bearer REPLACE_WITH_API_TOKEN",
"Content-Type": "application/json",
"Accept": "application/json"
}
response = requests.post(url, headers=headers, json=payload)
print(response.status_code)
print(response.text)
<?php
$payload = [
"ip" => "0.0.0.0", // Replace with clients IP address
"user_agent" => "REPLACE_WIH_USER_AGENT", // Example: "Mozilla/5.0 (...)"
"user_language" => "en" // Language code e.g. "en" for English
];
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.provero.io/api/fraud-check/ip",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POSTFIELDS => json_encode($payload),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer REPLACE_WITH_API_TOKEN",
"Content-Type: application/json",
"Accept: application/json"
],
]);
$response = curl_exec($curl);
if (curl_errno($curl)) {
echo 'Error:' . curl_error($curl);
}
curl_close($curl);
echo $response;
const payload = {
ip: "0.0.0.0", // Replace with clients IP address
user_agent: "REPLACE_WIH_USER_AGENT", // Example: "Mozilla/5.0 (...)"
user_language: "en" // Language code e.g. "en" for English
};
fetch("https://api.provero.io/api/fraud-check/ip", {
method: "POST",
headers: {
"Authorization": "Bearer REPLACE_WITH_API_TOKEN",
"Content-Type": "application/json",
"Accept": "application/json"
},
body: JSON.stringify(payload)
})
.then(response => response.text())
.then(result => console.log(result))
.catch(error => console.error("Error:", error));
curl -X POST https://api.provero.io/api/fraud-check/ip \
-H "Authorization: Bearer REPLACE_WITH_API_TOKEN" \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-d '{
"ip": "0.0.0.0", # Replace with clients IP address
"user_agent": "REPLACE_WIH_USER_AGENT", # Example: "Mozilla/5.0 (...)"
"user_language": "en" # Language code e.g. "en" for English
}'
Response Examples
{
"message": "IP fraud check passed",
"result": {
"value": "127.0.0.1",
"proxy": true,
"isp": "Reserved",
"organization": "Reserved",
"asn": "3",
"host": "localhost",
"countryCode": "N/A",
"city": "N/A",
"region": "N/A",
"isCrawler": "",
"connectionType": "Premium required.",
"latitude": "0",
"longitude": "0",
"zipCode": "N/A",
"timezone": "",
"vpn": true,
"tor": false,
"activeVpn": false,
"activeTor": false,
"recentAbuse": true,
"abuseVelocity": "Premium required.",
"botStatus": true,
"mobile": false,
"fraudScore": 100,
"highRiskAttacks": null,
"sharedConnection": null,
"dynamicConnection": null,
"securityScanner": null,
"trustedNetwork": null,
"operatingSystem": "Mac 10.15",
"browser": "Chrome 136.0",
"deviceModel": "N/A",
"deviceBrand": "Apple",
"frequentAbuser": null
}
}
{
"requestError": {
"serviceException": {
"messageId": "Error message",
"code": "400"
}
}
}
Response Body
Error structure
Field Name | Type | Example | Always Present | Description |
---|---|---|---|---|
requestError |
object |
{"serviceException": {"messageId": "Error message", "code": "400"}} | No | Returned when an internal application or request error occurs. |
The IP Geolocation API provides insights about the country and city associated with an IP address, along with optional distance comparison to a user-provided address.
This can be used to flag unexpected or foreign leads without affecting lead acceptance decisions.
Endpoint
https://api.provero.io/api/fraud-check/geoip
Headers
Authorization: Bearer REPLACE_WITH_API_TOKEN
Content-Type: application/json
Accept: application/json
Request Body
Field | Type | Required | Description |
---|---|---|---|
ip |
string |
Yes | The IP address to be validated. |
address |
string |
No | Optional address or postcode to calculate distance from IP location. Required if geoMatch is used. |
geoMatch |
boolean |
No | Enable matching between IP’s geolocation and the supplied address. |
Request Body example (JSON)
{
"ip": "8.8.8.8",
"address": "London",
"geoMatch": true
}
Code Examples
import requests
ip = "0.0.0.0" # Replace with clients IP
address = "REPLACE_WITH_AN_ADDRESS" # Optional address for distance calculation
geoMatch = true # Enable geoMatch to compare IP location with address
url = "https://api.provero.io/api/fraud-check/geoip"
headers = {
"Authorization": "Bearer REPLACE_WITH_API_TOKEN",
"Content-Type": "application/json",
"Accept": "application/json"
}
payload = {"ip": ip, "address": address, "geoMatch": geoMatch}
response = requests.post(url, headers=headers, json=payload)
print(response.status_code)
print(response.text)
<?php
$ip = "0.0.0.0"; // Replace with clients IP
$address = "REPLACE_WITH_AN_ADDRESS"; // Optional address for distance calculation
$geoMatch = true; // Enable geoMatch to compare IP location with address
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.provero.io/api/fraud-check/geoip",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POSTFIELDS => json_encode([
"ip" => $ip,
"address" => $address,
"geoMatch" => $geoMatch
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer REPLACE_WITH_API_TOKEN",
"Content-Type: application/json",
"Accept: application/json"
]
]);
$response = curl_exec($curl);
if (curl_errno($curl)) {
echo 'Error:' . curl_error($curl);
}
curl_close($curl);
echo $response;
const ip = "0.0.0.0"; // Replace with clients IP
const address = "REPLACE_WITH_AN_ADDRESS"; // Optional address for distance calculation
const geoMatch = true; // Enable geoMatch to compare IP location with address
fetch("https://api.provero.io/api/fraud-check/geoip", {
method: "POST",
headers: {
"Authorization": "Bearer REPLACE_WITH_API_TOKEN",
"Content-Type": "application/json",
"Accept": "application/json"
},
body: JSON.stringify({ ip, address, geoMatch })
})
.then(response => response.text())
.then(result => console.log(result))
.catch(error => console.error("Error:", error));
ip="0.0.0.0" # Replace with clients IP
address="REPLACE_WITH_AN_ADDRESS" # Optional address for distance calculation
geoMatch=true # Enable geoMatch to compare IP location with address
curl -X POST https://api.provero.io/api/fraud-check/geoip \
-H "Authorization: Bearer REPLACE_WITH_API_TOKEN" \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-d "{ \"ip\": \"$ip\", \"address\": \"$address\", \"geoMatch\": $geoMatch }"
Response Examples
{
"country": "Ireland",
"regionName": "Leinster",
"city": "Dublin",
"zip": "D02",
"lat": "53.3498",
"lon": "-6.26031",
"ip": "46.51.128.144",
"distance": {
"km": 0.0514,
"mi": 0.0319
},
"geoMatch": {
"country": true,
"city": true
}
}
{
"requestError": {
"serviceException": {
"messageId": "Error message",
"code": "400"
}
}
}
{
"message": "The ip field is required.",
"errors": {
"ip": [
"The ip field is required."
]
}
}
{
"message": "The ip field must be a valid IP address.",
"errors": {
"ip": [
"The ip field must be a valid IP address."
]
}
}
{
"message": "Please provide a valid destination to match.",
"errors": {
"address": [
"Please provide a valid destination to match."
]
}
}
Response Body
Success structure
Field Name | Type | Example | Always Present | Description |
---|---|---|---|---|
country |
string |
Ireland | Yes | Country of the IP's location |
regionName |
string |
Leinster | Yes | Region/province/state |
city |
string |
Dublin | Yes | City of the IP location |
zip |
string |
D02 | Yes | Postcode of the IP |
lat |
string |
53.3498 | Yes | Latitude |
lon |
string |
-6.2603 | Yes | Longitude |
ip |
string |
46.51.128.144 | Yes | IP address submitted |
distance.km |
string |
0.051 | No | Distance to address (km) |
distance.mi |
string |
0.031 | No | Distance to address (miles) |
geoMatch.country |
boolean |
true | No | Country match result |
geoMatch.city |
boolean |
true | No | City match result |
Error structure
Field Name | Type | Example | Always Present | Description |
---|---|---|---|---|
message |
string |
The ip field is required. | No | Top-level error message returned on validation failure. |
errors |
object |
{"ip": ["The ip field is required."]} | No | Object of validation services with validation failures. |
requestError |
object |
{"serviceException": {"messageId": "Error message", "code": "400"}} | No | Object containing service exceptions for application errors. |
The Breach Detection API checks if an email, phone, username, ip, domain, password or full name has been compromised in known data breaches.
It provides information on the breach source and the type of data exposed.
Endpoint
https://api.provero.io/api/fraud-check/breach
Headers
Authorization: Bearer REPLACE_WITH_API_TOKEN
Content-Type: application/json
Accept: application/json
Request Body
Field | Type | Required | Description |
---|---|---|---|
type |
enum |
Yes | Accepted values: email , username , ip , phone , domain , password , full_name . |
value |
string |
Yes | The actual data item you want to check for breach exposure. |
Request Body example (JSON)
{
"type": "string",
"value": "string"
}
Code Examples
import requests
type = "email" # Replace with "email", "username", "ip", "phone", "domain", "password", or "full_name"
value = "support.provero.io" # Replace with type value
url = "https://api.provero.io/api/fraud-check/breach"
headers = {
"Authorization": "Bearer REPLACE_WITH_API_TOKEN",
"Content-Type": "application/json"
}
response = requests.post(url, headers=headers, json={"type": type, "value": value})
print(response.status_code)
print(response.text)
<?php
$type = "email"; // Replace with "email", "username", "ip", "phone", "domain", "password", or "full_name"
$value = "support.provero.io"; // Replace with type value
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.provero.io/api/fraud-check/breach",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POSTFIELDS => json_encode(['type' => $type, 'value' => $value]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer REPLACE_WITH_API_TOKEN",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
if (curl_errno($curl)) {
echo 'Error:' . curl_error($curl);
}
curl_close($curl);
echo $response;
const type = "email"; // Replace with "email", "username", "ip", "phone", "domain", "password", or "full_name"
const value = "support.provero.io"; // Replace with type value
fetch("https://api.provero.io/api/fraud-check/breach", {
method: "POST",
headers: {
"Authorization": "Bearer REPLACE_WITH_API_TOKEN",
"Content-Type": "application/json"
},
body: JSON.stringify({ type, value })
})
.then(response => response.text())
.then(console.log)
.catch(console.error);
type="email" # Replace with "email", "username", "ip", "phone", "domain", "password", or "full_name"
value="support.provero.io" # Replace with type value
curl -X POST https://api.provero.io/api/fraud-check/breach \
-H "Authorization: Bearer REPLACE_WITH_API_TOKEN" \
-H "Content-Type: application/json" \
-d "{\"type\": \"$type\", \"value\": \"$value\"}"
Response Examples
{
"value": "requested_value",
"type": "requested_type",
"leaks": [
"leaked_domain.com",
"leaked_domain.net"
]
}
{
"requestError": {
"serviceException": {
"messageId": "Error message",
"code": "400"
}
}
}
{
"message": "Please provide a type.",
"errors": {
"email": [
"Please provide a type."
]
}
}
{
"message": "Type must be one of email, username, ip, phone, domain, password, full_name.",
"errors": {
"type": [
"Type must be one of email, username, ip, phone, domain, password, full_name."
]
}
}
{
"message": "Please provide a value to search.",
"errors": {
"email": [
"Please provide a value to search."
]
}
}
{
"message": "The value field must be a valid email address.",
"errors": {
"type": [
"The value field must be a valid email address."
]
}
}
{
"message": "The value field must be a valid IP address.",
"errors": {
"type": [
"The value field must be a valid IP address."
]
}
}
{
"message": "The value should be a valid phone number.",
"errors": {
"type": [
"The value should be a valid phone number."
]
}
}
{
"message": "The value must be a valid domain.",
"errors": {
"type": [
"The value must be a valid domain."
]
}
}
{
"message": "The value should be a valid full name with capital first letter in first and last names.",
"errors": {
"type": [
"The value should be a valid full name with capital first letter in first and last names."
]
}
}
Response Body
Success structure
Field Name | Type | Example | Always Present | Description |
---|---|---|---|---|
type |
enum |
Yes | The type of data checked, matching the requests type parameter. |
|
value |
string |
support.provero.io | Yes | The actual data that was checked for breaches. |
leaks |
array |
["leaked_domain.com", "leaked_domain.net"] | Yes | An array of breach sources where the provided value was found. |
Error structure
Field Name | Type | Example | Always Present | Description |
---|---|---|---|---|
message |
string |
The value field must be a valid IP address. | No | Top-level error message. |
errors |
object |
{"type": ["The value field must be a valid IP address."]} | No | Validation error details. |
requestError |
object |
{"serviceException": {"messageId": "Error message", "code": "400"}} | No | Application-level error response object. |