CrossCheck
CrossCheck scores how well a user's information matches our proprietary data sources, verifying identity beyond an ID check.
BillingThe CrossCheck feature might have an additional cost, depending on your identity package. Please reach out to our support team before enabling it.
CrossCheck
CrossCheck verifies a user's identity by cross-referencing two or more of the following parameters against proprietary databases:
- Full name
- Physical address
- Phone number
- Email address
- IP address
In addition to Full Name, either a phone number or an email address (or both) is required to return results. Submitting more parameters improves the accuracy of the results.
CrossCheck may carry an additional cost depending on your identity package. Contact the Vouched team before enabling it.
Submitting a CrossCheck Job
There are two ways to submit a CrossCheck job.
1. As an add-on to IDV
- JS Plugin: add
enableCrossCheck: trueto theverificationobject. - Invite API: add
"enableCrossCheck": true. - For any other integration method, contact the Vouched team to enable it on your account.
When submitted this way, parameters are populated as follows:
- Full name and physical address are extracted automatically from the ID photo.
- Phone number and email address are submitted as
phoneandemailparameters in the JS Plugin or API request. - IP address is extracted automatically from the request.
2. As a standalone job
Submit a CrossCheck job directly using the CrossCheck API.
POST https://verify.vouched.id/api/identity/crosscheck
Request parameters
| Parameter | Type | Description |
|---|---|---|
firstName | string | First name. Required. |
lastName | string | Last name. Required. |
email | string | Email address. |
phone | string | Phone number. Defaults to +1 (US and CA). Country code required for other countries. |
address | object | Physical address. See below. |
ipAddress | string | IP address. |
jobId | string | Associates the CrossCheck with an existing job ID instead of generating a new one. |
Address object
| Field | Type | Description |
|---|---|---|
unit | string | Unit number. |
streetAddress | string | Street address. |
city | string | City. |
state | string | Two-character state code. |
postalCode | string | Postal code. |
country | string | ISO 3166-1 country code. |
Example request
{
"firstName": "John",
"lastName": "Bao",
"email": "[email protected]",
"phone": "000-111-2222",
"ipAddress": "73.19.102.110",
"address": {
"unit": "",
"streetAddress": "123 Elmo Avenue",
"city": "Seattle",
"state": "WA",
"postalCode": "98109",
"country": "US"
}
}The Result
Results appear in the Vouched dashboard and in the webhook response. The full result is under result.crosscheck, and the identity score is under result.crosscheck.confidences.identity.
A standalone CrossCheck response returns the request ID, an echo of the submitted request, and the result.
| Field | Type | Description |
|---|---|---|
confidences | object | Identity and activity scores. |
address | object | Address match details. Null when no address was submitted or matched. |
email | object | Email match details. Null when no email was submitted or matched. |
phone | object | Phone match details. Null when no phone was submitted or matched. |
gender | object | Name frequency by gender. |
ip | object | Validity of the submitted IP address and its distance from the submitted address. Null when no IP result is available. |
ipAddress | object | IP address inspection details. Returned for standalone CrossCheck requests only, and null when no IP address was submitted. |
model | string | The CrossCheck model used to score the identity: fraud or approval. Returned only when your account is configured with a CrossCheck model and its inference succeeded. |
ageRange | null | Always null. The age range derived from the identity is returned on email.ageRange. |
Confidences
| Field | Type | Description |
|---|---|---|
identity | number | The main result parameter, a value between 0 and 1 that indicates the overall matching confidence for the candidate. The score is based on the address, email, and phone details, cross-referenced against the data submitted by the user or extracted from their ID. |
originalIdentity | number | The rules-based identity score before it was replaced by your account's CrossCheck model. Returned only when a model overrode identity. |
activity | number | Overall activity risk confidence, based on dynamic attributes. |
Address
| Field | Type | Description |
|---|---|---|
isMatch | boolean | The name on the address matches the user. |
isValid | boolean | The address is a verified address. |
errors | array | Errors encountered on the address. |
warnings | array | Warnings raised on the address. |
name | string | The recorded name of the identity. |
ageRange | object | Age range recorded for the identity, as from and to. |
isForwarder | boolean | The address is a freight forwarding address. |
isCommercial | boolean | The address is associated with a business. |
type | string | Address type: incomplete-address, po-box, multi-unit, single-unit, commercial-mail-drop, po-box-forward, or other. |
Email
| Field | Type | Description |
|---|---|---|
isMatch | boolean | The name associated with the email address matches the user. |
isValid | boolean | The email address is valid. |
errors | array | Errors encountered on the email address. |
warnings | array | Warnings raised on the email address. |
name | string | The recorded name of the identity. |
ageRange | object | Age range recorded for the identity, as from and to. |
isAutoGenerated | boolean | The email address was generated automatically. |
isDisposable | boolean | The email address is provided by a disposable email provider. |
daysFirstSeen | integer | The number of days since the email address was first seen in the data network. |
Phone
| Field | Type | Description |
|---|---|---|
isMatch | boolean | The name associated with the phone number matches the user. |
isValid | boolean | The phone number is valid. |
errors | array | Errors encountered on the phone number. |
warnings | array | Warnings raised on the phone number. |
name | string | The recorded name of the identity. |
ageRange | object | Age range recorded for the identity, as from and to. |
carrier | string | The phone provider. |
type | string | Phone type: mobile, landline, fixed-voip, non-fixed-voip, premium-rate, tollfree, voicemail, or other. |
isPrepaid | boolean | The phone number is on a prepaid plan. |
isDisposable | boolean | The phone number is disposable. |
isCommercial | boolean | The phone number is associated with a business. |
Gender
| Field | Type | Description |
|---|---|---|
man | number | Frequency of the first name in men, with a minimum found frequency of 0.0001. Null when the first name is unknown. |
woman | number | Frequency of the first name in women, with a minimum found frequency of 0.0001. Null when the first name is unknown. |
IP
ip reports on the submitted IP address relative to the submitted address.
| Field | Type | Description |
|---|---|---|
isValid | boolean | The IP address was resolved to a valid location. |
distance | number | Distance between the IP address location and the submitted address. Null when it cannot be computed. |
ipAddress returns the full inspection of the IP address and is available on standalone CrossCheck requests.
| Field | Type | Description |
|---|---|---|
city | string | Originating city. |
state | string | Originating state, province, or territory in ISO 3166-2 format. |
country | string | Originating country in ISO 3166-1 format. |
postalCode | string | Postal code. |
location | object | Coordinates of the IP address, as latitude and longitude. |
isp | string | Name of the internet service provider. |
organization | string | Name of the organization associated with the IP address. |
isAnonymous | boolean | The IP address is part of an anonymous network. |
isAnonymousVpn | boolean | The IP address is part of an anonymous VPN network. |
isAnonymousHosting | boolean | The IP address is part of an anonymous hosting network. |
userType | string | A description of the internet access point, for example residential, business, cellular, hosting, traveler, or search_engine_spider. |
Errors and warnings
Each entry in an errors or warnings array contains the following fields.
| Field | Type | Description |
|---|---|---|
type | string | Type of error encountered. |
warnings | boolean | Whether the entry is a warning. |
message | string | Details on the error. |
suggestion | string | A suggested matching name. |
JSON example
"crosscheck": {
"gender": {
"man": 3.271,
"woman": 0.012
},
"address": {
"errors": [],
"warnings": [],
"isMatch": true,
"isValid": true,
"name": null,
"ageRange": null,
"type": "single-unit",
"isForwarder": false,
"isCommercial": false
},
"email": {
"errors": [
{
"type": "NameMatchError",
"message": "Name match score is below the threshold (0.9)"
}
],
"warnings": [],
"isMatch": false,
"isValid": true,
"name": null,
"ageRange": null,
"isAutoGenerated": false,
"isDisposable": false,
"daysFirstSeen": 992
},
"phone": {
"errors": [],
"warnings": [],
"isMatch": true,
"isValid": true,
"name": null,
"ageRange": null,
"carrier": "AT&T",
"type": "mobile",
"isPrepaid": false,
"isDisposable": false,
"isCommercial": false
},
"ageRange": null,
"ip": {
"isValid": true,
"distance": 12.4
},
"model": "fraud",
"confidences": {
"identity": 0.73,
"originalIdentity": 0.68,
"activity": null
},
}If the identity score falls below the threshold, result.warnings is set to true and the job is marked in orange in the dashboard.
If neither a phone number nor an email address is submitted, the following error is returned:
{
"type": "InvalidRequestError",
"message": "Phone number and/or email address is required"
}Response codes
| Code | Meaning |
|---|---|
| 200 | The CrossCheck was submitted and a result was returned. |
| 400 | InvalidRequestError. The request is invalid. |
| 401 | The request could not be authenticated. |
| 500 | UnknownSystemError. An unexpected system error occurred. |
CrossCheck then IDV
This decisioning logic combines CrossCheck and IDV to minimize user friction while still confirming identity:
- Perform CrossCheck verification with the user's information.
- If CrossCheck's
confidences.identitypasses the required threshold, continue with the post-verification process. - If CrossCheck fails, or other criteria such as gender do not match, move the user to IDV.
Updated about 8 hours ago
