Provero Logo

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