Identity Match
curl --request POST \
--url https://cra.pr.snh-ai.com/complianceEngine/identity-match \
--header 'Content-Type: application/json' \
--data '
{
"candidateToVerify": {
"firstName": "<string>",
"middleName": "<string>",
"lastName": "<string>",
"dateOfBirth": "<string>",
"ssn": "<string>",
"state": "<string>",
"annualSalary": 123,
"aliases": [
{
"firstName": "<string>",
"middleName": "<string>",
"lastName": "<string>"
}
],
"addresses": [
{
"streetOne": "<string>",
"streetTwo": "<string>",
"city": "<string>",
"stateOrProvince": "<string>",
"postalCode": "<string>",
"country": "<string>",
"addressType": "<string>",
"startDate": "<string>",
"endDate": "<string>"
}
]
},
"candidateInRecord": {}
}
'import requests
url = "https://cra.pr.snh-ai.com/complianceEngine/identity-match"
payload = {
"candidateToVerify": {
"firstName": "<string>",
"middleName": "<string>",
"lastName": "<string>",
"dateOfBirth": "<string>",
"ssn": "<string>",
"state": "<string>",
"annualSalary": 123,
"aliases": [
{
"firstName": "<string>",
"middleName": "<string>",
"lastName": "<string>"
}
],
"addresses": [
{
"streetOne": "<string>",
"streetTwo": "<string>",
"city": "<string>",
"stateOrProvince": "<string>",
"postalCode": "<string>",
"country": "<string>",
"addressType": "<string>",
"startDate": "<string>",
"endDate": "<string>"
}
]
},
"candidateInRecord": {}
}
headers = {"Content-Type": "application/json"}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({
candidateToVerify: {
firstName: '<string>',
middleName: '<string>',
lastName: '<string>',
dateOfBirth: '<string>',
ssn: '<string>',
state: '<string>',
annualSalary: 123,
aliases: [{firstName: '<string>', middleName: '<string>', lastName: '<string>'}],
addresses: [
{
streetOne: '<string>',
streetTwo: '<string>',
city: '<string>',
stateOrProvince: '<string>',
postalCode: '<string>',
country: '<string>',
addressType: '<string>',
startDate: '<string>',
endDate: '<string>'
}
]
},
candidateInRecord: {}
})
};
fetch('https://cra.pr.snh-ai.com/complianceEngine/identity-match', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://cra.pr.snh-ai.com/complianceEngine/identity-match",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'candidateToVerify' => [
'firstName' => '<string>',
'middleName' => '<string>',
'lastName' => '<string>',
'dateOfBirth' => '<string>',
'ssn' => '<string>',
'state' => '<string>',
'annualSalary' => 123,
'aliases' => [
[
'firstName' => '<string>',
'middleName' => '<string>',
'lastName' => '<string>'
]
],
'addresses' => [
[
'streetOne' => '<string>',
'streetTwo' => '<string>',
'city' => '<string>',
'stateOrProvince' => '<string>',
'postalCode' => '<string>',
'country' => '<string>',
'addressType' => '<string>',
'startDate' => '<string>',
'endDate' => '<string>'
]
]
],
'candidateInRecord' => [
]
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://cra.pr.snh-ai.com/complianceEngine/identity-match"
payload := strings.NewReader("{\n \"candidateToVerify\": {\n \"firstName\": \"<string>\",\n \"middleName\": \"<string>\",\n \"lastName\": \"<string>\",\n \"dateOfBirth\": \"<string>\",\n \"ssn\": \"<string>\",\n \"state\": \"<string>\",\n \"annualSalary\": 123,\n \"aliases\": [\n {\n \"firstName\": \"<string>\",\n \"middleName\": \"<string>\",\n \"lastName\": \"<string>\"\n }\n ],\n \"addresses\": [\n {\n \"streetOne\": \"<string>\",\n \"streetTwo\": \"<string>\",\n \"city\": \"<string>\",\n \"stateOrProvince\": \"<string>\",\n \"postalCode\": \"<string>\",\n \"country\": \"<string>\",\n \"addressType\": \"<string>\",\n \"startDate\": \"<string>\",\n \"endDate\": \"<string>\"\n }\n ]\n },\n \"candidateInRecord\": {}\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://cra.pr.snh-ai.com/complianceEngine/identity-match")
.header("Content-Type", "application/json")
.body("{\n \"candidateToVerify\": {\n \"firstName\": \"<string>\",\n \"middleName\": \"<string>\",\n \"lastName\": \"<string>\",\n \"dateOfBirth\": \"<string>\",\n \"ssn\": \"<string>\",\n \"state\": \"<string>\",\n \"annualSalary\": 123,\n \"aliases\": [\n {\n \"firstName\": \"<string>\",\n \"middleName\": \"<string>\",\n \"lastName\": \"<string>\"\n }\n ],\n \"addresses\": [\n {\n \"streetOne\": \"<string>\",\n \"streetTwo\": \"<string>\",\n \"city\": \"<string>\",\n \"stateOrProvince\": \"<string>\",\n \"postalCode\": \"<string>\",\n \"country\": \"<string>\",\n \"addressType\": \"<string>\",\n \"startDate\": \"<string>\",\n \"endDate\": \"<string>\"\n }\n ]\n },\n \"candidateInRecord\": {}\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://cra.pr.snh-ai.com/complianceEngine/identity-match")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Content-Type"] = 'application/json'
request.body = "{\n \"candidateToVerify\": {\n \"firstName\": \"<string>\",\n \"middleName\": \"<string>\",\n \"lastName\": \"<string>\",\n \"dateOfBirth\": \"<string>\",\n \"ssn\": \"<string>\",\n \"state\": \"<string>\",\n \"annualSalary\": 123,\n \"aliases\": [\n {\n \"firstName\": \"<string>\",\n \"middleName\": \"<string>\",\n \"lastName\": \"<string>\"\n }\n ],\n \"addresses\": [\n {\n \"streetOne\": \"<string>\",\n \"streetTwo\": \"<string>\",\n \"city\": \"<string>\",\n \"stateOrProvince\": \"<string>\",\n \"postalCode\": \"<string>\",\n \"country\": \"<string>\",\n \"addressType\": \"<string>\",\n \"startDate\": \"<string>\",\n \"endDate\": \"<string>\"\n }\n ]\n },\n \"candidateInRecord\": {}\n}"
response = http.request(request)
puts response.read_body{
"ssnScore": 123,
"ssnMatchDesc": "<string>",
"dobScore": 123,
"dobMatchDesc": "<string>",
"nameScore": 123,
"nameMatchDesc": "<string>",
"addressScore": 123,
"addresseMatchDesc": "<string>",
"matchScore": 123,
"isMatch": true,
"details": "<string>"
}Endpoints
Identity Match
Compare two identity records to determine if they match
POST
/
complianceEngine
/
identity-match
Identity Match
curl --request POST \
--url https://cra.pr.snh-ai.com/complianceEngine/identity-match \
--header 'Content-Type: application/json' \
--data '
{
"candidateToVerify": {
"firstName": "<string>",
"middleName": "<string>",
"lastName": "<string>",
"dateOfBirth": "<string>",
"ssn": "<string>",
"state": "<string>",
"annualSalary": 123,
"aliases": [
{
"firstName": "<string>",
"middleName": "<string>",
"lastName": "<string>"
}
],
"addresses": [
{
"streetOne": "<string>",
"streetTwo": "<string>",
"city": "<string>",
"stateOrProvince": "<string>",
"postalCode": "<string>",
"country": "<string>",
"addressType": "<string>",
"startDate": "<string>",
"endDate": "<string>"
}
]
},
"candidateInRecord": {}
}
'import requests
url = "https://cra.pr.snh-ai.com/complianceEngine/identity-match"
payload = {
"candidateToVerify": {
"firstName": "<string>",
"middleName": "<string>",
"lastName": "<string>",
"dateOfBirth": "<string>",
"ssn": "<string>",
"state": "<string>",
"annualSalary": 123,
"aliases": [
{
"firstName": "<string>",
"middleName": "<string>",
"lastName": "<string>"
}
],
"addresses": [
{
"streetOne": "<string>",
"streetTwo": "<string>",
"city": "<string>",
"stateOrProvince": "<string>",
"postalCode": "<string>",
"country": "<string>",
"addressType": "<string>",
"startDate": "<string>",
"endDate": "<string>"
}
]
},
"candidateInRecord": {}
}
headers = {"Content-Type": "application/json"}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({
candidateToVerify: {
firstName: '<string>',
middleName: '<string>',
lastName: '<string>',
dateOfBirth: '<string>',
ssn: '<string>',
state: '<string>',
annualSalary: 123,
aliases: [{firstName: '<string>', middleName: '<string>', lastName: '<string>'}],
addresses: [
{
streetOne: '<string>',
streetTwo: '<string>',
city: '<string>',
stateOrProvince: '<string>',
postalCode: '<string>',
country: '<string>',
addressType: '<string>',
startDate: '<string>',
endDate: '<string>'
}
]
},
candidateInRecord: {}
})
};
fetch('https://cra.pr.snh-ai.com/complianceEngine/identity-match', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://cra.pr.snh-ai.com/complianceEngine/identity-match",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'candidateToVerify' => [
'firstName' => '<string>',
'middleName' => '<string>',
'lastName' => '<string>',
'dateOfBirth' => '<string>',
'ssn' => '<string>',
'state' => '<string>',
'annualSalary' => 123,
'aliases' => [
[
'firstName' => '<string>',
'middleName' => '<string>',
'lastName' => '<string>'
]
],
'addresses' => [
[
'streetOne' => '<string>',
'streetTwo' => '<string>',
'city' => '<string>',
'stateOrProvince' => '<string>',
'postalCode' => '<string>',
'country' => '<string>',
'addressType' => '<string>',
'startDate' => '<string>',
'endDate' => '<string>'
]
]
],
'candidateInRecord' => [
]
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://cra.pr.snh-ai.com/complianceEngine/identity-match"
payload := strings.NewReader("{\n \"candidateToVerify\": {\n \"firstName\": \"<string>\",\n \"middleName\": \"<string>\",\n \"lastName\": \"<string>\",\n \"dateOfBirth\": \"<string>\",\n \"ssn\": \"<string>\",\n \"state\": \"<string>\",\n \"annualSalary\": 123,\n \"aliases\": [\n {\n \"firstName\": \"<string>\",\n \"middleName\": \"<string>\",\n \"lastName\": \"<string>\"\n }\n ],\n \"addresses\": [\n {\n \"streetOne\": \"<string>\",\n \"streetTwo\": \"<string>\",\n \"city\": \"<string>\",\n \"stateOrProvince\": \"<string>\",\n \"postalCode\": \"<string>\",\n \"country\": \"<string>\",\n \"addressType\": \"<string>\",\n \"startDate\": \"<string>\",\n \"endDate\": \"<string>\"\n }\n ]\n },\n \"candidateInRecord\": {}\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://cra.pr.snh-ai.com/complianceEngine/identity-match")
.header("Content-Type", "application/json")
.body("{\n \"candidateToVerify\": {\n \"firstName\": \"<string>\",\n \"middleName\": \"<string>\",\n \"lastName\": \"<string>\",\n \"dateOfBirth\": \"<string>\",\n \"ssn\": \"<string>\",\n \"state\": \"<string>\",\n \"annualSalary\": 123,\n \"aliases\": [\n {\n \"firstName\": \"<string>\",\n \"middleName\": \"<string>\",\n \"lastName\": \"<string>\"\n }\n ],\n \"addresses\": [\n {\n \"streetOne\": \"<string>\",\n \"streetTwo\": \"<string>\",\n \"city\": \"<string>\",\n \"stateOrProvince\": \"<string>\",\n \"postalCode\": \"<string>\",\n \"country\": \"<string>\",\n \"addressType\": \"<string>\",\n \"startDate\": \"<string>\",\n \"endDate\": \"<string>\"\n }\n ]\n },\n \"candidateInRecord\": {}\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://cra.pr.snh-ai.com/complianceEngine/identity-match")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Content-Type"] = 'application/json'
request.body = "{\n \"candidateToVerify\": {\n \"firstName\": \"<string>\",\n \"middleName\": \"<string>\",\n \"lastName\": \"<string>\",\n \"dateOfBirth\": \"<string>\",\n \"ssn\": \"<string>\",\n \"state\": \"<string>\",\n \"annualSalary\": 123,\n \"aliases\": [\n {\n \"firstName\": \"<string>\",\n \"middleName\": \"<string>\",\n \"lastName\": \"<string>\"\n }\n ],\n \"addresses\": [\n {\n \"streetOne\": \"<string>\",\n \"streetTwo\": \"<string>\",\n \"city\": \"<string>\",\n \"stateOrProvince\": \"<string>\",\n \"postalCode\": \"<string>\",\n \"country\": \"<string>\",\n \"addressType\": \"<string>\",\n \"startDate\": \"<string>\",\n \"endDate\": \"<string>\"\n }\n ]\n },\n \"candidateInRecord\": {}\n}"
response = http.request(request)
puts response.read_body{
"ssnScore": 123,
"ssnMatchDesc": "<string>",
"dobScore": 123,
"dobMatchDesc": "<string>",
"nameScore": 123,
"nameMatchDesc": "<string>",
"addressScore": 123,
"addresseMatchDesc": "<string>",
"matchScore": 123,
"isMatch": true,
"details": "<string>"
}Compare candidate information against a criminal record subject to determine identity match probability. No authentication required.
Request
Candidate identity to verify (the person being checked).
Show Candidate Properties
Show Candidate Properties
First name (uppercase recommended)
Middle name
Last name
Date of birth in
YYYY-MM-DD formatSocial Security Number (empty string if unavailable)
Two-letter state abbreviation
Annual salary (used for salary-based compliance rules)
List of address objects
Show Address Properties
Show Address Properties
Primary street address
Secondary address line
City name
State or province code
ZIP/postal code
Country code (e.g.,
"US")"DOMESTIC" or "INTERNATIONAL"Address start date (
YYYY-MM-DD)Address end date (
YYYY-MM-DD), empty for current addressCandidate identity found in the criminal record (the person in the record). Same structure as
candidateToVerify.Response
SSN match score (0–1)
Description of SSN match result
Date of birth match score (0–1)
Description of DOB match result
Name match score (0–1)
Description of name match result (e.g.,
"Exact Name Match")Address match score (0–1)
Description of address match result
Overall weighted match score (0–1)
Whether the match threshold is met.
true = positive match.Detailed breakdown of match scores with weights for each component
Code Examples
Full Request Body (JSON)
Full Request Body (JSON)
Copy and modify this JSON payload:
{
"candidateToVerify": {
"firstName": "EDGAR",
"middleName": "",
"lastName": "LINARES",
"dateOfBirth": "1997-05-05",
"ssn": "",
"state": "TX",
"annualSalary": 55000.0,
"aliases": [
{ "firstName": "ED", "middleName": "", "lastName": "LINARES" }
],
"addresses": [
{
"streetOne": "200 AVANT ST APT C1 DEL RIO, TX 78840",
"streetTwo": "",
"city": "DEL RIO",
"stateOrProvince": "TX",
"postalCode": "78840",
"country": "US",
"addressType": "DOMESTIC",
"startDate": "2020-01-01",
"endDate": ""
}
]
},
"candidateInRecord": {
"firstName": "EDGAR",
"middleName": "",
"lastName": "LINARES",
"dateOfBirth": "1997-05-05",
"ssn": "",
"state": "TX",
"annualSalary": null,
"aliases": [],
"addresses": [
{
"streetOne": "200 AVANT ST APT C1 DEL RIO, TX 78840",
"streetTwo": "",
"city": "",
"stateOrProvince": "",
"postalCode": "",
"country": "US",
"addressType": "DOMESTIC",
"startDate": "",
"endDate": ""
}
]
}
}
Example Request (cURL / Python / JavaScript)
Example Request (cURL / Python / JavaScript)
curl -X POST "https://cra.pr.snh-ai.com/complianceEngine/identity-match" \
-H "Content-Type: application/json" \
-d '{
"candidateToVerify": {
"firstName": "EDGAR",
"middleName": "",
"lastName": "LINARES",
"dateOfBirth": "1997-05-05",
"ssn": "",
"state": "TX",
"annualSalary": 55000.0,
"aliases": [
{
"firstName": "ED",
"middleName": "",
"lastName": "LINARES"
}
],
"addresses": [
{
"streetOne": "200 AVANT ST APT C1 DEL RIO, TX 78840",
"streetTwo": "",
"city": "DEL RIO",
"stateOrProvince": "TX",
"postalCode": "78840",
"country": "US",
"addressType": "DOMESTIC",
"startDate": "2020-01-01",
"endDate": ""
}
]
},
"candidateInRecord": {
"firstName": "EDGAR",
"middleName": "",
"lastName": "LINARES",
"dateOfBirth": "1997-05-05",
"ssn": "",
"state": "TX",
"annualSalary": null,
"aliases": [],
"addresses": [
{
"streetOne": "200 AVANT ST APT C1 DEL RIO, TX 78840",
"streetTwo": "",
"city": "",
"stateOrProvince": "",
"postalCode": "",
"country": "US",
"addressType": "DOMESTIC",
"startDate": "",
"endDate": ""
}
]
}
}'
import requests
response = requests.post(
"https://cra.pr.snh-ai.com/complianceEngine/identity-match",
headers={"Content-Type": "application/json"},
json={
"candidateToVerify": {
"firstName": "EDGAR",
"lastName": "LINARES",
"dateOfBirth": "1997-05-05",
"ssn": "",
"state": "TX",
"aliases": [{"firstName": "ED", "lastName": "LINARES"}],
"addresses": [{
"streetOne": "200 AVANT ST APT C1 DEL RIO, TX 78840",
"country": "US",
"addressType": "DOMESTIC"
}]
},
"candidateInRecord": {
"firstName": "EDGAR",
"lastName": "LINARES",
"dateOfBirth": "1997-05-05",
"ssn": "",
"state": "TX",
"aliases": [],
"addresses": [{
"streetOne": "200 AVANT ST APT C1 DEL RIO, TX 78840",
"country": "US",
"addressType": "DOMESTIC"
}]
}
}
)
print(response.json())
const response = await fetch("https://cra.pr.snh-ai.com/complianceEngine/identity-match", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({
candidateToVerify: {
firstName: "EDGAR",
lastName: "LINARES",
dateOfBirth: "1997-05-05",
ssn: "",
state: "TX",
aliases: [{ firstName: "ED", lastName: "LINARES" }],
addresses: [{
streetOne: "200 AVANT ST APT C1 DEL RIO, TX 78840",
country: "US",
addressType: "DOMESTIC"
}]
},
candidateInRecord: {
firstName: "EDGAR",
lastName: "LINARES",
dateOfBirth: "1997-05-05",
ssn: "",
state: "TX",
aliases: [],
addresses: [{
streetOne: "200 AVANT ST APT C1 DEL RIO, TX 78840",
country: "US",
addressType: "DOMESTIC"
}]
}
})
});
const data = await response.json();
console.log(data);
Example Response — Match Found
Example Response — Match Found
{
"ssnScore": 0,
"ssnMatchDesc": "Invalid/Empty SSN(s)",
"dobScore": 1.0,
"dobMatchDesc": "Exact DOB Match",
"nameScore": 1.0,
"nameMatchDesc": "Exact Name Match",
"addressScore": 1.0,
"addresseMatchDesc": "Exact Address Match",
"matchScore": 0.90,
"isMatch": true,
"details": "Name/Alias Score: 100 % (Weight: 45 %)\nDOB Score: 100 % (Weight: 40 %)\nSSN Score: 0 % (Weight: 10 %)\nAddress Score: 100 % (Weight: 5 %)\nOverall Score: 90.0 % (Qualify: 85 %)"
}
Error Responses (400)
Error Responses (400)
Invalid Request Format:Validation Error:
{
"error": "Invalid request format",
"message": "Request body must be a JSON object with 'candidateToVerify' and 'candidateInRecord' properties.",
"code": "INVALID_REQUEST_FORMAT"
}
{
"error": "Validation failed",
"message": "One or more validation errors occurred",
"code": "VALIDATION_ERROR",
"errors": {
"candidateToVerify.dateOfBirth": [
"The dateOfBirth field must be in YYYY-MM-DD format (e.g., 1997-08-30). Received: 1997-50-30"
]
}
}
Match Scoring
The identity match algorithm uses a weighted scoring system:| Component | Weight | Method |
|---|---|---|
| Name/Alias | 45% | Fuzzy matching across name and aliases |
| Date of Birth | 40% | Date comparison |
| SSN | 10% | Exact match when available |
| Address | 5% | Standardized address comparison |
Maximum score is 1.00 when SSN, DOB, name, and address all match exactly: (45% x 1.0) + (40% x 1.0) + (10% x 1.0) + (5% x 1.0) = 1.00. Records with SSN + DOB + exact name typically score 0.95+. Without SSN (most common), the practical maximum is 0.90 (name + DOB + address).
Related
⌘I
