Multi-Validation
Validate multiple inputs in a single call (email, phone, KYC, age, TPS, IP fraud, IP geolocation, SIM Swap, and name). Only supplied fields are processed and only corresponding result blocks are returned.
Response mapping: Each nested object mirrors its standalone validator response. Age checks use the same
Response mapping: Each nested object mirrors its standalone validator response. Age checks use the same
mobile_number and minimum_age contract as the standalone Age Verification endpoint.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 |
|---|---|---|---|
age
|
object |
No | Full Age Verification docs. Supply mobile_number and minimum_age; use 18 for an 18+ check. |
email
|
object |
No | Full email validation docs. |
phone
|
object |
No | Full phone validation docs. |
address
|
object |
No | Full UK postcode verification docs. |
tps
|
object |
No | Full TPS validation docs. |
kyc
|
object |
No | Full KYC match docs. |
sim_swap
|
object |
No | Full SIM swap check docs. Supply a phone number and optional period_days. |
ip
|
object |
No | Full IP validation docs. |
breach
|
object |
No | Full breach validation docs. |
name
|
object |
No | Full name screening docs. |
geoip
|
object |
No | Full GEOIP validation docs. |
Request Body example (JSON)
{
"age": {
"mobile_number": "+447746266147",
"minimum_age": 18
},
"email": {
"email": "test@example.com"
},
"phone": {
"phone": "441234567890",
"roaming": true,
"route": "detailed"
},
"address": {
"postcode": "LS18 5HY"
},
"kyc": {
"mobile_number": "+447756562435",
"full_name": "Federica Sanchez Arjona",
"date_of_birth": "1978-08-22"
},
"tps": {
"phone": "441234567890"
},
"sim_swap": {
"phone": "+447700900123",
"period_days": 30
},
"ip": {
"ip": "8.8.8.8",
"user_agent": "Mozilla/5.0",
"user_language": "en"
},
"breach": {
"type": "email",
"value": "example@email.com"
},
"name": {
"name": "John Doe"
},
"geoip": {
"ip": "8.8.8.8",
"address": "London",
"geoMatch": true
}
}
Code Examples
import requests
payload = {
"age": {
"mobile_number": "+447746266147",
"minimum_age": 18
},
"email": {
"email": "test@example.com"
},
"phone": {
"phone": "441234567890",
"roaming": true,
"route": "detailed",
},
"address": {
"postcode": "LS18 5HY"
},
"kyc": {
"mobile_number": "+447756562435",
"full_name": "Federica Sanchez Arjona",
"date_of_birth": "1978-08-22"
},
"tps": {
"phone": "441234567890"
},
"sim_swap": {
"phone": "+447700900123",
"period_days": 30
},
"ip": {
"ip": "8.8.8.8",
"user_agent": "Mozilla/5.0",
"user_language": "en"
},
"breach": {
"type": "email",
"value": "test@example.com"
},
"geoip": {
"ip": "8.8.8.8",
"address": "London",
"geoMatch": true
}
}
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 = [
"age" => [
"mobile_number" => "+447746266147",
"minimum_age" => 18
],
"email" => [
"email" => "test@example.com"
],
"phone" => [
"phone" => "441234567890",
"roaming" => true,
"route" => "detailed",
],
"address" => [
"postcode" => "LS18 5HY"
],
"kyc" => [
"mobile_number" => "+447756562435",
"full_name" => "Federica Sanchez Arjona",
"date_of_birth" => "1978-08-22"
],
"tps" => [
"phone" => "441234567890"
],
"sim_swap" => [
"phone" => "+447700900123",
"period_days" => 30
],
"ip" => [
"ip" => "8.8.8.8",
"user_agent" => "Mozilla/5.0",
"user_language" => "en"
],
"breach" => [
"type" => "email",
"value" => "test@example.com"
],
"geoip" => [
"ip" => "8.8.8.8",
"address" => "London",
"geoMatch" => true
]
];
$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;
$payload = [
'age' => [
'mobile_number' => '+447746266147',
'minimum_age' => 18,
],
'email' => [
'email' => 'test@example.com',
],
'phone' => [
'phone' => '441234567890',
'roaming' => true,
'route' => 'detailed',
],
'address' => [
'postcode' => 'LS18 5HY',
],
'kyc' => [
'mobile_number' => '+447756562435',
'full_name' => 'Federica Sanchez Arjona',
'date_of_birth' => '1978-08-22',
],
'tps' => [
'phone' => '441234567890',
],
'sim_swap' => [
'phone' => '+447700900123',
'period_days' => 30,
],
'ip' => [
'ip' => '8.8.8.8',
'user_agent' => 'Mozilla/5.0',
'user_language' => 'en',
],
'breach' => [
'type' => 'email',
'value' => 'test@example.com',
],
'geoip' => [
'ip' => '8.8.8.8',
'address' => 'London',
'geoMatch' => true,
],
];
$response = Http::withToken('REPLACE_WITH_API_TOKEN')
->acceptJson()
->post('https://api.provero.io/api/validate/multiple', $payload);
return $response->json();
const payload = {
"age": {
"mobile_number": "+447746266147",
"minimum_age": 18
},
"email": {
"email": "test@example.com"
},
"phone": {
"phone": "441234567890",
"roaming": true,
"route": "detailed",
},
"address": {
"postcode": "LS18 5HY"
},
"kyc": {
"mobile_number": "+447756562435",
"full_name": "Federica Sanchez Arjona",
"date_of_birth": "1978-08-22"
},
"tps": {
"phone": "441234567890"
},
"sim_swap": {
"phone": "+447700900123",
"period_days": 30
},
"ip": {
"ip": "8.8.8.8",
"user_agent": "Mozilla/5.0",
"user_language": "en"
},
"breach": {
"type": "email",
"value": "test@example.com"
},
"geoip": {
"ip": "8.8.8.8",
"address": "London",
"geoMatch": true
}
};
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 '{
"age": {
"mobile_number": "+447746266147",
"minimum_age": 18
},
"email": {
"email": "test@example.com"
},
"phone": {
"phone": "441234567890",
"roaming": true,
"route": "detailed",
},
"address": {
"postcode": "LS18 5HY"
},
"kyc": {
"mobile_number": "+447756562435",
"full_name": "Federica Sanchez Arjona",
"date_of_birth": "1978-08-22"
},
"tps": {
"phone": "441234567890"
},
"sim_swap": {
"phone": "+447700900123",
"period_days": 30
},
"ip": {
"ip": "8.8.8.8",
"user_agent": "Mozilla/5.0",
"user_language": "en"
},
"breach": {
"type": "email",
"value": "test@example.com"
},
"geoip": {
"ip": "8.8.8.8",
"address": "London",
"geoMatch": true
}
}'
Response Examples
Success
{
"age": {
"status": "success",
"verification_id": "age_123456",
"mobile_number": "+447746266147",
"minimum_age": 18,
"meets_age_requirement": true,
"identity_verified": true,
"adult_content_restriction_active": false,
"parental_controls_active": false,
"mobile_network_code": "23410"
},
"email": {
"emailAddress": "test@example.com",
"isSyntaxValid": true,
"isMailboxDeliverable": false,
"isCatchAll": false,
"typoSuggestion": false,
"isDisposable": false,
"isRoleBased": false,
"riskLevel": "HIGH",
"checkResult": "missing_mx"
},
"phone": {
"results": [
{
"to": "+441234567890",
"mccMnc": "23420",
"imsi": "23420",
"originalNetwork": {
"networkName": "Telefonica UK",
"networkPrefix": "1234",
"countryName": "United Kingdom of Great Britain and Northern Ireland",
"countryPrefix": "44",
"networkId": ""
},
"status": {
"groupId": 3,
"groupName": "DELIVERED",
"id": 5,
"name": "DELIVERED_TO_HANDSET",
"description": "The message has reached the recipient\u2019s device successfully."
},
"roaming": false,
"ported": true,
"portedNetwork": {
"networkName": "Hutchison 3G UK (20)",
"networkPrefix": "1234",
"countryName": "United Kingdom of Great Britain and Northern Ireland",
"countryPrefix": "44",
"networkId": ""
},
"error": {
"groupId": 0,
"groupName": "Ok",
"id": 0,
"name": "NO_ERROR",
"description": "The request was processed without any issues.",
"permanent": false
}
}
]
},
"address": {
"valid": true,
"postcode": "LS18 5HY",
"address": {
"Address1": "Otley Old Road",
"Address2": "Horsforth",
"Address3": "",
"Address4": "",
"Town": "Leeds",
"County": "West Yorkshire",
"Postcode": "LS18 5HY",
"PremiseData": "Greengates Cattery|Greengates Stables|;The S Cayton Motor Co|The Barn/Greengates Farm|;|Greengates Farm|;"
}
},
"kyc": {
"status": "success",
"verification_id": "kyc_123e4567-e89b-12d3-a456-426614174000",
"mobile_number": "+447756562435",
"mobile_network_code": "23410",
"results": {
"full_name": {
"result": "match"
},
"date_of_birth": {
"result": "match"
}
}
},
"tps": {
"phone": "441234567890",
"onTps": false,
"tpsRegisteredDate": "",
"onCtps": true,
"ctpsRegisteredDate": "2023-05-08",
"tpsExpiry": "2026-08-25"
},
"sim_swap": {
"phone": "+447700900123",
"phone_valid": true,
"period_days": 30,
"sim_swapped": false,
"status": "not_swapped"
},
"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": "none",
"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
},
"breach": {
"value": "test@email.com",
"type": "email",
"leaks": [
{
"name": "Adobe",
"domain": "adobe.com",
"breachDate": "2013-10-04",
"description": "User profile and password hints were exposed."
}
]
},
"geoip": {
"country": "United States",
"regionName": "Virginia",
"city": "Ashburn",
"zip": "20149",
"lat": 39.03,
"lon": -77.5,
"ip": "8.8.8.8",
"distance": {
"km": 3598.695068406005,
"mi": 2236.1247533505075
},
"geoMatch": {
"country": false,
"city": false
}
}
}
Validation Error - Invalid Email
{
"message": "The email field must be a valid email address.",
"errors": {
"email.email": [
"The email field must be a valid email address."
]
}
}
Validation Error - Invalid Phone
{
"message": "The string supplied did not seem to be a phone number.",
"errors": {
"phone.phone": [
"The string supplied did not seem to be a phone number."
],
"phone.ported": [
"The phone.ported field must be true or false."
],
"phone.roaming": [
"The phone.roaming field must be true or false."
],
"phone.route": [
"The route value must be one of: standard, detailed"
]
}
}
Validation Error - Invalid Address
{
"message": "The address.postcode field must not be greater than 255 characters.",
"errors": {
"address.postcode": [
"The address.postcode field must not be greater than 255 characters."
]
}
}
Validation Error - TPS Number Invalid
{
"message": "The string supplied did not seem to be a phone number.",
"errors": {
"tps.phone": [
"The string supplied did not seem to be a phone number."
]
}
}
Validation Error - Fraud detection Invalid
{
"message": "The ip.ip field must be a valid IP address.",
"errors": {
"ip.ip": [
"The ip.ip field must be a valid IP address."
]
}
}
Additional response examples 2
Validation Error - geoip Invalid
{
"message": "The ip field is required when geoip is true.",
"errors": {
"geoip.ip": [
"The geoip.ip field must be a valid IP address."
],
"geoip.geoMatch": [
"The geoip.geo match field must be true or false."
]
}
}
Application Error
{
"requestError": {
"serviceException": {
"messageId": "Error message",
"code": "400"
}
}
}
Response Body
Success structure
| Field Name | Type | Example | Always Present | Description |
|---|---|---|---|---|
age |
object |
{"status":"success","mobile_number":"+447746266147","minimum_age":18,"meets_age_requirement":true} | No | Age Verification result. See the Age Verification pane for the full field list. |
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. |
kyc |
object |
{"status":"success","verification_id":"kyc_123e4567-e89b-12d3-a456-426614174000","results":{"full_name":{"result":"match"}}} | No | KYC match result. See the KYC Match pane. |
tps |
object |
{"phone":"tel:+44-1302-778473","onTps":true,"tpsRegisteredDate":"2024-03-22","onCtps":false,"ctpsRegisteredDate":"","tpsExpiry":"2026-08-25"} | No | TPS check result. See the TPS pane. |
sim_swap |
object |
{"phone":"+447700900123","phone_valid":true,"period_days":30,"sim_swapped":false,"status":"not_swapped"} | No | SIM swap check result. See the SIM Swap Check 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 |
{"fullName":"John Doe","isValid":true,"isProfane":false,"riskLevel":"LOW"} | 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. |