CKYC Fetch and analyze
The Reserve Bank of India's latest notification (Nov 6, 2024) mandates an urgent overhaul of customer onboarding processes. Financial institutions must now retrieve KYC data directly from the Central KYC Registry (CKYCR) instead of repeatedly requesting documents from customers—unless specific updates or verifications are necessary. Delaying this transition not only risks non-compliance but also hampers customer experience.
There are four critical scenarios where additional action is required:
- Updated Customer Information: Changes in a customer's details recorded at the CKYCR.
- Incomplete KYC Records: Retrieval of KYC data that is incomplete or doesn't align with current standards.
- Expired Documents: Downloaded documents that have exceeded their validity period.
- Additional Verification Needed: Situations requiring further identity, address verification, or enhanced due diligence.
This is where our CKYC Download Analyser API becomes essential.
Our API offers advanced features to ensure seamless compliance for Individual's CKYC data:
- ID Type Identification and Validation: Automatically identifies the type of ID presented and verifies its validity, reducing manual effort and errors.
- Data Comparison Between ID and CKYC Metadata: Compares information on the ID with metadata from the CKYC, ensuring consistency and accuracy.
- Verification Against Government Sources: Cross-verifies critical information like name and date of birth with official government databases for added assurance.
- Image Quality Analysis: Assesses the quality of ID images to ensure they meet required standards for clarity and legibility.
By integrating the CKYC Download Analyser API, your organization can efficiently determine when CKYC data alone suffices and when additional documents are necessary. This intelligent analysis streamlines your compliance processes and reduces friction for your customers. Position your organization at the forefront of regulatory compliance while enhancing the onboarding experience—a clear competitive advantage in today's regulatory landscape.
API details
Endpoint
POST https://api.signzy.app/api/v3/ckyc/fetch-analyzePOST https://api-preproduction.signzy.app/api/v3/ckyc/fetch-analyzeRequest headers
Name | Value | Required | Description |
|---|---|---|---|
Content-Type | application/json | Mandatory | The type of content that the request body contains. |
Authorization | XXXXXXXXXXXXXXX | Mandatory | An authentication token to authorize the request. Reach out to the Signzy support team to get one created. |
Request body parameters
Mode A: Directly inputting Name, DoB, and Images
Parameter Name | Data Type | Description | Required |
|---|---|---|---|
fullName | string | Full name of the individual (e.g., "Rajesh Kumar") | Yes |
dob | string | Date of birth in DD/MM/YYYY format (e.g., "15/06/1990") | Yes |
nameMatchThreshold | number | Threshold value for name matching (0.0 to 1.0, e.g., 0.7) | No |
imageQualityThreshold | number | Minimum image quality threshold (0.0 to 1.0, e.g., 0.5) | No |
imageDetails | array | Array of image detail objects containing document/identity images | Yes |
imageDetails.sequenceNo | string | Sequence number of the image (e.g., "1") | Yes |
imageDetails.imageType | string | Type of image (e.g., "1" for document front) | Yes |
imageDetails.imageCode | string | Code identifying the image/document type (e.g., "03") | Yes |
imageDetails.globalFlag | string | Global flag indicator (e.g., "0") | Yes |
imageDetails.branchCode | string | Branch code (e.g., "001") | Yes |
imageDetails.imageData | string | Base64-encoded image data or URL to the image | Yes |
{
"fullName": "Rajesh Kumar",
"dob": "15/06/1990",
"nameMatchThreshold": 0.7,
"imageQualityThreshold": 0.5,
"imageDetails": [
{
"sequenceNo": "1",
"imageType": "1",
"imageCode": "03",
"globalFlag": "0",
"branchCode": "001",
"imageData": "<base64-encoded-string-or-url>"
}
]
}
Mode B: CKYC Fetch API response as input. Here only below parameters are mandatory. You can pass whole CKYC Fetch data in ckycData.result object as well.
Parameter Name | Data Type | Description | Required |
|---|---|---|---|
nameMatchThreshold | number | Threshold value for name matching (0.0 to 1.0, e.g., 0.7) | No |
imageQualityThreshold | number | Minimum image quality threshold (0.0 to 1.0, e.g., 0.5) | No |
ckycData | object | Central KYC data response object | Yes |
ckycData.result | object | Result container for the KYC response | Yes |
ckycData.result.response | object | Response object containing personal details and images | Yes |
ckycData.result.response.personalDetails | object | Container for personal information | Yes |
ckycData.result.response.personalDetails.fullName | string | Full name of the individual (e.g., "Rajesh Kumar") | Yes |
ckycData.result.response.personalDetails.dob | string | Date of birth in DD-MM-YYYY format (e.g., "15-06-1990") | Yes |
ckycData.result.response.imageDetails | array | Array of image detail objects containing document/identity images | Yes |
ckycData.result.response.imageDetails.sequenceNo | string | Sequence number of the image (e.g., "1") | Yes |
ckycData.result.response.imageDetails.imageType | string | Type of image (e.g., "1" for document front) | Yes |
ckycData.result.response.imageDetails.imageCode | string | Code identifying the image/document type (e.g., "03") | Yes |
ckycData.result.response.imageDetails.imageData | string | Base64-encoded image data or URL to the image | Yes |
{
"nameMatchThreshold": 0.7,
"imageQualityThreshold": 0.5,
"ckycData": {
"result": {
"response": {
"personalDetails": {
"fullName": "Rajesh Kumar",
"dob": "15-06-1990"
},
"imageDetails": [
{
"sequenceNo": "1",
"imageType": "1",
"imageCode": "03",
"imageData": "<base64-encoded-string-or-url>"
}
]
}
}
}
}
Code samples
# Base endpoint
curl https://api-preproduction.signzy.app/api/v3/ckyc/analyze \
-X POST \
-H "Content-Type: application/json"
# Mode A: Direct personal details + image upload
curl https://api-preproduction.signzy.app/api/v3/ckyc/analyze \
-X POST \
-H "Content-Type: application/json" \
-d '{
"fullName": "Rajesh Kumar",
"dob": "15/06/1990",
"nameMatchThreshold": 0.7,
"imageQualityThreshold": 0.5,
"imageDetails": [
{
"sequenceNo": "1",
"imageType": "1",
"imageCode": "03",
"globalFlag": "0",
"branchCode": "001",
"imageData": "<base64-encoded-string-or-url>"
}
]
}'
# Mode B: CKYC number-based fetch with existing CKYC data
curl https://api-preproduction.signzy.app/api/v3/ckyc/analyze \
-X POST \
-H "Content-Type: application/json" \
-d '{
"nameMatchThreshold": 0.7,
"imageQualityThreshold": 0.5,
"ckycData": {
"result": {
"response": {
"personalDetails": {
"fullName": "Rajesh Kumar",
"dob": "15-06-1990"
},
"imageDetails": [
{
"sequenceNo": "1",
"imageType": "1",
"imageCode": "03",
"imageData": "<base64-encoded-string-or-url>"
}
]
}
}
}
}'Response body parameters
Parameter Name | Type | Description |
|---|---|---|
status | string | Overall API response status (e.g., "success") |
requestId | string | Unique identifier for the API request |
finalVerdict | string | Final verification outcome (e.g., "pass") |
actionables | array | List of required actions (empty if none) |
analysisResult | array of AnalysisResult | Array of document analysis results |
analysisResult.imageCode | string | Document image identifier code |
analysisResult.docType | string | Document type (e.g., "pan") Note: refer sample response below for other OVDs |
analysisResult.verificationStatus | string | Document verification status (e.g., "pass") |
analysisResult.extractionDetails | object | Extracted data from OCR |
analysisResult.extractionDetails.name | string | Extracted full name |
analysisResult.extractionDetails.dob | string | Date of birth in DD/MM/YYYY format |
analysisResult.extractionDetails.number | string | Document number (PAN number) |
analysisResult.extractionDetails.fatherName | string | Father's name |
analysisResult.extractionDetails.panType | string | PAN type (e.g., "individualPan") |
analysisResult.imageQualityResult | object | Image quality assessment |
analysisResult.imageQualityResult.score | string | Quality score (0.0-1.0) |
analysisResult.imageQualityResult.verdict | string | Quality verdict (e.g., "pass") |
analysisResult.nameMatchResult | object | Name matching scores across data sources |
analysisResult.nameMatchResult.ocrDataVsInputDataScore | string | OCR vs input data match score |
analysisResult.nameMatchResult.apiDataVsOcrDataScore | string | API vs OCR data match score |
analysisResult.nameMatchResult.apiDataVsInputDataScore | string | API vs input data match score |
analysisResult.nameMatchResult.verdict | string | Overall name match verdict |
analysisResult.dobMatchResult | object | DOB matching scores across data sources |
analysisResult.dobMatchResult.ocrDataVsInputDataScore | string | OCR vs input DOB match score |
analysisResult.dobMatchResult.apiDataVsOcrDataScore | string | API vs OCR DOB match score |
analysisResult.dobMatchResult.apiDataVsInputDataScore | string | API vs input DOB match score |
analysisResult.dobMatchResult.verdict | string | Overall DOB match verdict |
//Analysis result for PAN, VoterID and photograph
{
"status": "success",
"requestId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"finalVerdict": "pass",
"actionables": [],
"analysisResult": [
{
"imageCode": "03",
"docType": "pan",
"verificationStatus": "pass",
"extractionDetails": {
"name": "RAJESH KUMAR",
"dob": "15/06/1990",
"number": "ABCDE1234F",
"fatherName": "SURESH KUMAR",
"panType": "individualPan"
},
"imageQualityResult": {
"score": "0.92",
"verdict": "pass"
},
"nameMatchResult": {
"ocrDataVsInputDataScore": "0.95",
"apiDataVsOcrDataScore": "0.92",
"apiDataVsInputDataScore": "0.88",
"verdict": "pass"
},
"dobMatchResult": {
"ocrDataVsInputDataScore": "1",
"apiDataVsOcrDataScore": "1",
"apiDataVsInputDataScore": "1",
"verdict": "pass"
},
},
{
"imageCode": "07",
"docType": "voterId",
"verificationStatus": "pass",
"extractionDetails": {
"name": "RAJESH KUMAR",
"dob": "15/06/1990",
"number": "ABC1234567",
"fatherName": "SURESH KUMAR",
"gender": "MALE"
},
"imageQualityResult": {
"score": "0.91",
"verdict": "pass"
},
"nameMatchResult": {
"ocrDataVsInputDataScore": "0.93",
"apiDataVsOcrDataScore": "0.89",
"apiDataVsInputDataScore": "0.86",
"verdict": "pass"
},
"dobMatchResult": {
"ocrDataVsInputDataScore": "1",
"apiDataVsOcrDataScore": "1",
"apiDataVsInputDataScore": "1",
"verdict": "pass"
},
},
{
"imageCode": "02",
"docType": "Photograph",
"imageQualityResult": {
"score": "0.95",
"verdict": "pass"
}
}
}
]
}
//Aadhaar analysis will be appended in anlysisResult array Voter ID section in above response if PoA is Aadhaar. Verification does not happen in case of Aadhaar
"analysisResult": [
{
"imageCode": "04",
"docType": "aadhaar",
"verificationStatus": "",
"extractionDetails": {
"name": "RAJESH KUMAR",
"dob": "15/06/1990",
"uid": "XXXX XXXX 1234",
"vid": "",
"gender": "MALE",
"address": "123, MG Road, Bangalore, Karnataka",
"pincode": "560001",
"yob": "1990",
"idHash": "a1b2c3d4e5f6"
},
"imageQualityResult": {
"score": "0.89",
"verdict": "pass"
},
"nameMatchResult": {
"ocrDataVsInputDataScore": "0.91",
"apiDataVsOcrDataScore": "",
"apiDataVsInputDataScore": "",
"verdict": "pass"
},
"dobMatchResult": {
"ocrDataVsInputDataScore": "1",
"apiDataVsOcrDataScore": "",
"apiDataVsInputDataScore": "",
"verdict": "pass"
}
}
]
//Analysis result of Driving license will be appended like this in analysisResult array
"analysisResult": [
{
"imageCode": "06",
"docType": "dl",
"verificationStatus": "pass",
"extractionDetails": {
"name": "RAJESH KUMAR",
"dob": "15/06/1990",
"number": "DL0120190012345",
"issueDate": "01/01/2019",
"expiryDate": "31/12/2039",
"dlType": ["LMV", "MCWG"]
},
"imageQualityResult": {
"score": "0.85",
"verdict": "pass"
},
"nameMatchResult": {
"ocrDataVsInputDataScore": "0.90",
"apiDataVsOcrDataScore": "0.87",
"apiDataVsInputDataScore": "0.85",
"verdict": "pass"
},
"dobMatchResult": {
"ocrDataVsInputDataScore": "1",
"apiDataVsOcrDataScore": "1",
"apiDataVsInputDataScore": "1",
"verdict": "pass"
}
}
]
//Passport details will be appended in analysisResult array like this
"analysisResult": [
{
"imageCode": "05",
"docType": "passport",
"verificationStatus": "pass",
"extractionDetails": {
"name": "RAJESH KUMAR",
"dob": "15/06/1990",
"number": "J1234567",
"fileNumber": "FL1234567890123",
"placeOfBirth": "MUMBAI",
"placeOfIssue": "MUMBAI",
"issueDate": "01/01/2020",
"expiryDate": "31/12/2029"
},
"imageQualityResult": {
"score": "0.88",
"verdict": "pass"
},
"nameMatchResult": {
"ocrDataVsInputDataScore": "0.97",
"apiDataVsOcrDataScore": "0.94",
"apiDataVsInputDataScore": "0.91",
"verdict": "pass"
},
"dobMatchResult": {
"ocrDataVsInputDataScore": "1",
"apiDataVsOcrDataScore": "1",
"apiDataVsInputDataScore": "1",
"verdict": "pass"
}
}
]
//Failures
{
"status": "success",
"requestId": "a6d7e8f9-0a1b-2345-defa-456789012345",
"finalVerdict": "fail",
"actionables": [
{
"imageCode": "02",
"errorCode": "IMAGE_QUALITY_FAILED",
"errorMessage": "Image quality is below the acceptable threshold"
},
{
"imageCode": "03",
"errorCode": "ID_VERIFICATION_FAILED",
"errorMessage": "Document verification for the given image failed"
},
{
"imageCode": "03",
"errorCode": "NAME_MATCH_FAILED",
"errorMessage": "Name matching scores did not meet the required threshold"
},
{
"imageCode": "06",
"errorCode": "EXTRACTION_FAILED",
"errorMessage": "OCR data extraction failed for the document (Service temporarily unavailable)"
}
],
"analysisResult": [
{
"imageCode": "02",
"docType": "Photograph",
"imageQualityResult": {
"score": "0.18",
"verdict": "fail"
}
},
{
"imageCode": "03",
"docType": "pan",
"verificationStatus": "fail",
"extractionDetails": {
"name": "R KUMAR",
"dob": "15/06/1990",
"number": "ABCDE1234F",
"fatherName": "SURESH KUMAR",
"panType": "individualPan"
},
"imageQualityResult": {
"score": "0.85",
"verdict": "pass"
},
"nameMatchResult": {
"ocrDataVsInputDataScore": "0.50",
"apiDataVsOcrDataScore": "0.45",
"apiDataVsInputDataScore": "0.42",
"verdict": "fail"
},
"dobMatchResult": {
"ocrDataVsInputDataScore": "1",
"apiDataVsOcrDataScore": "1",
"apiDataVsInputDataScore": "1",
"verdict": "pass"
}
},
{
"imageCode": "06",
"docType": "unknown",
"imageQualityResult": {
"score": "0",
"verdict": "fail"
},
"extractionDetails": {},
"verificationStatus": "fail",
"nameMatchResult": {
"ocrDataVsInputDataScore": "0",
"apiDataVsOcrDataScore": "0",
"apiDataVsInputDataScore": "0",
"verdict": "fail"
},
"dobMatchResult": {
"ocrDataVsInputDataScore": "0",
"apiDataVsOcrDataScore": "0",
"apiDataVsInputDataScore": "0",
"verdict": "fail"
}
}
]
}
CKYC Image Codes Description
Image Code Description
Image Code | Description |
|---|---|
02 | Photograph |
03 | PAN |
04 | Proof of Possession of Aadhaar |
05 | Passport |
06 | Driving License |
07 | Voters Identity Card |
08 | NREGA Job Card |
09 | Signature |
10 | Simplified Measures Account - Identity card with applicant’s photograph issued by Central/ State Government Departments, Statutory/ Regulatory Authorities, Public Sector Undertakings, Scheduled Commercial Banks, and Public Financial Institutions. |
11 | Simplified Measures Account - Letter issued by a gazetted officer, with a duly attested photograph of the person. |
12 | Utility bill which is not more than two months old of any service provider (electricity, telephone, post-paid mobile phone, piped gas, water bill). |
13 | Property or Municipal Tax receipt. |
14 | Bank account or Post Office savings bank account statement. |
15 | Pension or family pension payment orders (PPOs) issued to retired employees by Government Departments or Public Sector Undertakings, if they contain the address. |
16 | Letter of allotment of accommodation from employer issued by State or Central Government departments, statutory or regulatory bodies, public sector undertakings, scheduled commercial banks, financial institutions and listed companies. Similarly, leave and license agreements with such employers allotting official accommodation. |
17 | Documents issued by Government departments of foreign jurisdictions and letter issued by Foreign Embassy or Mission in India. |
18 | Officially valid document(s) in respect of person authorized to transact |
19 | Certificate of Incorporation/Formation |
20 | Registration Certificate |
21 | Memorandum and Articles of Association |
22 | Partnership Deed |
23 | Trust Deed |
24 | Resolution of Board/ Managing Committee |
25 | Power of Attorney granted to its manager, officers or employees to transact on its behalf. |
26 | Activity Proof – 1 (For Sole Proprietorship only) |
27 | Activity Proof – 2 (For Sole Proprietorship only) |
35 | National Population Registry Letter |
36 | E-KYC Authentication |
37 | Offline verification of Aadhaar |
98 | Other |
If you have any questions or need assistance, please reach out to our customer support team. You can contact us via email at [email protected]. We strive to provide prompt and reliable assistance, ensuring your queries are addressed effectively.
We value your feedback and are committed to making your experience smooth and enjoyable. Our team is dedicated to assisting you with any needs you may have. Thank you for choosing our services. We look forward to helping you!