Provero API Documentation

API Docs

For support, contact support.provero.io

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

Run 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

Real-time reachability with network, porting, roaming and delivery status.

  • Network & porting status
  • Roaming detection
  • Delivery verification
  • Error mapping
TPS Screening
Screening

Checks if a phone number appears on UK TPS/CTPS suppression registers.

  • UK TPS & CTPS
  • Live status check
  • Compliance-ready output
Email
Verification

Confirms mailbox deliverability and risk signals for an email address.

  • SMTP/mailbox checks
  • Disposable detection
  • Risk level
  • Typos
  • Syntax validity
Address
Verification

Verifies deliverability and normalizes postal addresses.

  • Deliverability
  • Normalization
  • Geo confidence

Screens names for quality and risk (fake patterns, profanity, etc.).

  • Real-name heuristics
  • Profanity filtering
  • Risk indicators

Detects proxies, VPNs, TOR, bots and other abuse signals.

  • Proxy/VPN/TOR
  • Bot/crawler ID
  • Abuse & risk signals
IP Geolocation
Enrichment

City/region/country for an IP, with optional distance & matching to an address.

  • City/region/country
  • GeoMatch option
  • Distance calculation

Checks if inputs (email/phone/IP/name) appear in known data breaches.

  • Multiple sources
  • Leaked domains
  • Flexible inputs

Getting Started

  1. Choose your API: Pick the Verification, Screening, or Enrichment you need.
  2. Get your API key: Create keys in your account settings.
  3. Review the docs: Each API has examples and response formats.
  4. Integrate: Use the code samples in your preferred language.

Rate Limits

Please contact us for rate limits and pricing for your use case.

Support

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

POST
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

POST
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

POST
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

POST
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

POST
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

POST
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

POST
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

POST
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

POST
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 email 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.