API Documentation
Account
Lists
Types
Verify Document
Validates the ID document provided and returns detailed information about the document, risk signals, and an overall decision.
curl --request POST \
--url https://api.sandbox.verisoul.ai/liveness/verify-document \
--header 'Content-Type: application/json' \
--header 'x-api-key: <api-key>' \
--data '{
"session_id": "00009588-9835-4fb4-8173-5bf9017d945c"
}'
{
"metadata": {
"project_id": "00000000-0000-0000-0000-000000000001",
"session_id": "00009588-9835-4fb4-8173-5bf9017d945c",
"account_id": "example-account-id",
"referring_session_id": "example-referring-session-id",
"request_id": "c702ef50-6d8e-4276-ac68-69940d9ec002",
"timestamp": "2025-03-16T20:17:54.460Z"
},
"decision": "Fake",
"risk_score": 100,
"risk_flags": [
"proxy_detected",
"datacenter_detected",
"low_id_face_match_score",
"repeat_id"
],
"document_signals": {
"id_age": 28,
"face_age_estimate": "over25",
"id_face_match_score": 0,
"id_barcode_status": "no_barcode_specified_by_template",
"id_face_status": "likely_original_face",
"id_text_status": "likely_original_text",
"is_id_digital_spoof": "likely_physical_id",
"is_full_id_captured": "full_id_detected",
"id_validity": "likely_authentic_id"
},
"device_network_signals": {
"ip_document_country_mismatch": false,
"device_risk": false,
"proxy": true,
"vpn": false,
"datacenter": true,
"tor": false,
"spoofed_ip": false,
"recent_fraud_ip": false,
"device_network_mismatch": true
},
"referring_session_signals": {
"impossible_travel": false,
"ip_mismatch": false,
"user_agent_mismatch": false
},
"document_data": {
"template_info": {
"document_country_code": "US",
"document_country": "United States of America",
"document_state": null,
"template_type": "passport"
},
"user_data": {
"first_name": "David",
"last_name": "Williams",
"date_of_birth": "1997-10-26",
"date_of_expiration": "2034-01-15",
"date_of_issue": "2024-01-16",
"id_number": "1234567890",
"id_number2": null,
"address": null
},
"photo_urls": {
"face": "https://storage.googleapis.com/facematch-prod/00009588...",
"id_scan_front": "https://storage.googleapis.com/facematch-prod/00009588..."
}
},
"session_data": {
"network": {
"ip_address": "2a09:bac3:ac1d:15e1::22e:34",
"service_provider": "Cloudflare, Inc.",
"connection_type": "private_relay"
},
"location": {
"continent": "NA",
"country_code": "US",
"state": "Oklahoma",
"city": "Vinita",
"zip_code": "74301",
"timezone": "America/Chicago",
"latitude": 36.627,
"longitude": -95.1504
},
"browser": {
"type": "Mobile Safari",
"version": "18.1.1",
"language": "en-US",
"user_agent": "Mozilla/5.0 (iPhone; CPU iPhone OS 18_1_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.1.1 Mobile/15E148 Safari/604.1",
"timezone": "America/Chicago"
},
"device": {
"category": "mobile",
"type": "iPhone",
"os": "iOS 18.1.1",
"cpu_cores": 4,
"memory": 0,
"gpu": "Apple GPU"
}
},
"matches": {
"num_accounts_linked": 2,
"accounts_linked": [
{
"account_id": "example-account-id-1",
"match_types": [
"document_name"
]
},
{
"account_id": "example-account-id-2",
"match_types": [
"document_name",
"document_number",
"face"
]
}
]
}
}
Authorizations
API key authentication
Body
The session ID obtained from the /liveness/session endpoint
Response
Identifier for the project
Identifier for the session
Identifier for the account, if provided
Identifier for the referring session, if applicable
Unique identifier for the request
Timestamp of the verification
Overall decision (e.g., 'Fake', 'Authentic')
Risk score from 0 to 100, where higher values indicate higher risk
0 <= x <= 100
See Risk Flags for more information.
See Document Signals for more information.
Age of the ID document in years
Estimated age range of the face in the ID
Score indicating how well the face in the session matches the face in the ID
Status of the ID barcode verification
Status of the face on the ID
Status of the text on the ID
Indicates whether the ID appears to be a digital spoof
Indicates whether the full ID was captured in the scan
Overall assessment of the ID's authenticity
See Device Network Signals for more information.
Indicates whether the IP country mismatches the document country
Indicates whether the device presents a risk
Indicates whether a proxy was detected
Indicates whether a VPN was detected
Indicates whether a datacenter IP was detected
Indicates whether Tor was detected
Indicates whether a spoofed IP was detected
Indicates whether the IP has been associated with recent fraud
Indicates whether there's a mismatch between device and network signals
See Referring Session Signals for more information.
Indicates whether impossible travel was detected between sessions
Indicates whether there's an IP mismatch between sessions
Indicates whether there's a user agent mismatch between sessions
Country code of the document
Country of the document
State of the document, if applicable
Type of document template
First name from the document
Last name from the document
Date of birth from the document
Expiration date of the document
Issue date of the document
Primary ID number from the document
Secondary ID number from the document, if applicable
Address from the document, if applicable
Continent code
Country code
State or region
City
ZIP or postal code
Timezone
Latitude coordinate
Longitude coordinate
Device category (e.g., mobile, desktop)
Device type
Operating system
Number of CPU cores
Amount of memory in GB
GPU information
See Multi-Accounting for more information.
curl --request POST \
--url https://api.sandbox.verisoul.ai/liveness/verify-document \
--header 'Content-Type: application/json' \
--header 'x-api-key: <api-key>' \
--data '{
"session_id": "00009588-9835-4fb4-8173-5bf9017d945c"
}'
{
"metadata": {
"project_id": "00000000-0000-0000-0000-000000000001",
"session_id": "00009588-9835-4fb4-8173-5bf9017d945c",
"account_id": "example-account-id",
"referring_session_id": "example-referring-session-id",
"request_id": "c702ef50-6d8e-4276-ac68-69940d9ec002",
"timestamp": "2025-03-16T20:17:54.460Z"
},
"decision": "Fake",
"risk_score": 100,
"risk_flags": [
"proxy_detected",
"datacenter_detected",
"low_id_face_match_score",
"repeat_id"
],
"document_signals": {
"id_age": 28,
"face_age_estimate": "over25",
"id_face_match_score": 0,
"id_barcode_status": "no_barcode_specified_by_template",
"id_face_status": "likely_original_face",
"id_text_status": "likely_original_text",
"is_id_digital_spoof": "likely_physical_id",
"is_full_id_captured": "full_id_detected",
"id_validity": "likely_authentic_id"
},
"device_network_signals": {
"ip_document_country_mismatch": false,
"device_risk": false,
"proxy": true,
"vpn": false,
"datacenter": true,
"tor": false,
"spoofed_ip": false,
"recent_fraud_ip": false,
"device_network_mismatch": true
},
"referring_session_signals": {
"impossible_travel": false,
"ip_mismatch": false,
"user_agent_mismatch": false
},
"document_data": {
"template_info": {
"document_country_code": "US",
"document_country": "United States of America",
"document_state": null,
"template_type": "passport"
},
"user_data": {
"first_name": "David",
"last_name": "Williams",
"date_of_birth": "1997-10-26",
"date_of_expiration": "2034-01-15",
"date_of_issue": "2024-01-16",
"id_number": "1234567890",
"id_number2": null,
"address": null
},
"photo_urls": {
"face": "https://storage.googleapis.com/facematch-prod/00009588...",
"id_scan_front": "https://storage.googleapis.com/facematch-prod/00009588..."
}
},
"session_data": {
"network": {
"ip_address": "2a09:bac3:ac1d:15e1::22e:34",
"service_provider": "Cloudflare, Inc.",
"connection_type": "private_relay"
},
"location": {
"continent": "NA",
"country_code": "US",
"state": "Oklahoma",
"city": "Vinita",
"zip_code": "74301",
"timezone": "America/Chicago",
"latitude": 36.627,
"longitude": -95.1504
},
"browser": {
"type": "Mobile Safari",
"version": "18.1.1",
"language": "en-US",
"user_agent": "Mozilla/5.0 (iPhone; CPU iPhone OS 18_1_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.1.1 Mobile/15E148 Safari/604.1",
"timezone": "America/Chicago"
},
"device": {
"category": "mobile",
"type": "iPhone",
"os": "iOS 18.1.1",
"cpu_cores": 4,
"memory": 0,
"gpu": "Apple GPU"
}
},
"matches": {
"num_accounts_linked": 2,
"accounts_linked": [
{
"account_id": "example-account-id-1",
"match_types": [
"document_name"
]
},
{
"account_id": "example-account-id-2",
"match_types": [
"document_name",
"document_number",
"face"
]
}
]
}
}