CKYC Search & Download
Identity & KYCLook up an existing central KYC record and reuse it with consent.
Search the Central KYC Registry by PAN or other identifier, confirm a record exists and, with the customer's consent, download the verified KYC record. Skip repeat document collection for customers who have already been KYC'd.
Endpoint
Request parameters
| Field | Type | Description |
|---|---|---|
p_a_n_or_other_i_d_number
required
|
string | PAN or other ID number |
date_of_birth
optional
|
string | Date of birth |
customer_authorisation_for_download
optional
|
string | Customer authorisation for download |
Example request
curl -X POST https://app.emver.io/api/sandbox/v1/ckyc-search \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-d '{
"p_a_n_or_other_i_d_number": "string",
"date_of_birth": "string",
"customer_authorisation_for_download": "string"
}'
import requests
response = requests.post(
"https://app.emver.io/api/sandbox/v1/ckyc-search",
headers={
"Authorization": "Bearer YOUR_API_KEY",
"Accept": "application/json",
},
json={
"p_a_n_or_other_i_d_number": "string",
"date_of_birth": "string",
"customer_authorisation_for_download": "string"
},
timeout=60,
)
response.raise_for_status()
data = response.json()
const response = await fetch("https://app.emver.io/api/sandbox/v1/ckyc-search", {
method: "POST",
headers: {
"Authorization": "Bearer YOUR_API_KEY",
"Content-Type": "application/json",
"Accept": "application/json",
},
body: JSON.stringify({
"p_a_n_or_other_i_d_number": "string",
"date_of_birth": "string",
"customer_authorisation_for_download": "string"
}),
});
const data = await response.json();
$response = Http::withToken('YOUR_API_KEY')
->acceptJson()
->post('https://app.emver.io/api/sandbox/v1/ckyc-search', {
"p_a_n_or_other_i_d_number": "string",
"date_of_birth": "string",
"customer_authorisation_for_download": "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": {
"c_k_y_c_record_found": STRING,
"c_k_y_c_identifier": STRING,
"k_y_c_record_with_identity_and_address_details_on_download": STRING,
"record_update_date": STRING
}
}
Example · 200
{
"status": 200,
"message": "string",
"data": {
"c_k_y_c_record_found": "string",
"c_k_y_c_identifier": "string",
"k_y_c_record_with_identity_and_address_details_on_download": "string",
"record_update_date": "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
Most financial customers already have a KYC record in the central registry. The CKYC Search & Download API checks for a record, returns the CKYC identifier and lets you pull the full record once the customer authorises it, cutting onboarding from days of paperwork to a single consent step.
Regulated entities use it both to onboard faster and to satisfy the obligation to check the registry before creating a fresh record.
Typical uses
- Bank and NBFC onboarding. Instant KYC for customers already in the registry.
- Broking and mutual funds. Reuse KYC across financial products.
- Insurance issuance. Verified identity and address for policy proposals.
- Periodic KYC refresh. Confirm records are current during re-KYC cycles.
Questions
- Who can use this API?
- Entities registered with the central KYC registry. emver enables it per organisation after eligibility is confirmed.
- What if no record exists?
- The search returns a clear negative, and you proceed with Aadhaar eKYC or DigiLocker to create the KYC.