Video KYC
Documents & BiometricsAgent-assisted or self-serve video identification with recording and audit trail.
Complete identity verification over a live video session: document capture, liveness, face match, location capture and an optional agent review, with the recording and audit trail stored for compliance. Built for regulated onboarding that must happen remotely.
Endpoint
Request parameters
| Field | Type | Description |
|---|---|---|
customer_name_and_contact_for_the_session_link
required
|
string | Customer name and contact for the session link |
documents_to_capture_and_checks_to_run
required
|
string | Documents to capture and checks to run |
Example request
curl -X POST https://app.emver.io/api/sandbox/v1/video-kyc \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-d '{
"customer_name_and_contact_for_the_session_link": "string",
"documents_to_capture_and_checks_to_run": "string"
}'
import requests
response = requests.post(
"https://app.emver.io/api/sandbox/v1/video-kyc",
headers={
"Authorization": "Bearer YOUR_API_KEY",
"Accept": "application/json",
},
json={
"customer_name_and_contact_for_the_session_link": "string",
"documents_to_capture_and_checks_to_run": "string"
},
timeout=60,
)
response.raise_for_status()
data = response.json()
const response = await fetch("https://app.emver.io/api/sandbox/v1/video-kyc", {
method: "POST",
headers: {
"Authorization": "Bearer YOUR_API_KEY",
"Content-Type": "application/json",
"Accept": "application/json",
},
body: JSON.stringify({
"customer_name_and_contact_for_the_session_link": "string",
"documents_to_capture_and_checks_to_run": "string"
}),
});
const data = await response.json();
$response = Http::withToken('YOUR_API_KEY')
->acceptJson()
->post('https://app.emver.io/api/sandbox/v1/video-kyc', {
"customer_name_and_contact_for_the_session_link": "string",
"documents_to_capture_and_checks_to_run": "string"
});
$data = $response->json();
Replace YOUR_API_KEY and the placeholder values. Use the switch above to see production URLs.
Response
Structure · 200
{
"status": INTEGER,
"message": STRING,
"data": {
"session_outcome": STRING,
"extracted_document_data": STRING,
"liveness_and_face_match_results": STRING,
"geo_location_and_timestamps": STRING,
"recording_and_audit_trail_reference": STRING
}
}
Example · 200
{
"status": 200,
"message": "string",
"data": {
"session_outcome": "string",
"extracted_document_data": "string",
"liveness_and_face_match_results": "string",
"geo_location_and_timestamps": "string",
"recording_and_audit_trail_reference": "string"
}
}
Error · 4xx / 5xx
{
"status": INTEGER,
"message": STRING
}
See Errors & status codes for what each status means and which calls are billed.
About this API
Video KYC combines the biometric and document APIs into one hosted session. The customer joins from a link, shows their ID, completes liveness and face match, and an agent can review and approve in real time or later. Every step is timestamped and the session recording is retained per your policy.
Because it is a hosted flow, you integrate a link and a webhook rather than building capture screens yourself.
Typical uses
- Bank and NBFC onboarding. Regulated remote KYC for new customers.
- Lending. Verified identity before disbursal for digital loans.
- Insurance. Proposal-stage identification without paperwork.
- Executive hiring. Identity confirmation for remote senior hires.
Questions
- Can our own agents review sessions?
- Yes. Sessions can be routed to your reviewers, to emver's team, or approved automatically based on the biometric results.
- How long are recordings kept?
- For the retention period you configure, after which they are purged automatically.