Module Release Notes
Filter By:
0 Modules Selected Clear All
Type of change:
All
Breaking Change
Bug Fix
Enhancement
API Response Change
Enhanced Minor PAN Detection
Improved accuracy in detecting Minor PAN cards through integrated face detection and keyword validation.
What's New?
- Enhanced
detectMinorparameter now leverages FRaaS (Face Recognition as a Service) API for reliable face detection - Dual-layer validation combining face detection results with OCR-based keyword matching
- Improved accuracy in distinguishing between legitimate PAN cards and Minor PAN cards
Why the change?
- To reduce high false positive rates where legitimate names similar to the keyword "MINOR" were incorrectly flagged
- To provide more reliable Minor PAN detection by leveraging the fact that Minor PANs contain "MINOR" text instead of a photograph
What do you need to do?
- Use the parameter
"detectMinor": "yes"in your request payload to activate the updated detection logic
curl --location 'https://ind-docs.hyperverge.co/v2.0/readKYC' \
--header 'appId: <your_app_id>' \
--header 'appKey: <your_app_key>' \
--header 'transactionId: <transaction_id>' \
--form 'image=@"/path/to/pan_image.png"' \
--form 'detectMinor=yes'
- Sample Input:

{
"status": "success",
"statusCode": "200",
"result": [
{
"type": "pan",
"details": {
"name": {
"conf": 95,
"value": "<Name>"
},
"father": {
"conf": 94,
"value": "<Father_Name>"
},
"date": {
"conf": 90,
"value": "<DD/MM/YYYY>"
},
"pan_no": {
"conf": 94,
"value": "XXXXXXXXXC"
},
"date_of_issue": {
"conf": 99,
"value": "<DD/MM/YYYY>"
},
"tag": "<Transaction_Tag>",
"minor": "yes"
}
}
]
}
- For additional support or queries, please contact our support team at support@hyperverge.co.
Improved Instructions UX in DigiLocker flows on SDK
Improved the Instructions screen in the DigiLocker flows on SDK to better guide users during the consent step.
What's New?
- Updated the Instructions UI with clear, action-focused visual cues to guide users on selecting required documents during the DigiLocker consent step.
Why the change?
- After the removal of pre-selected checkboxes on the DigiLocker consent screen, users were unclear about which documents needed to be selected, leading to an increase in consent-missing errors.
- This update helps by:
- Clearly guiding users on the documents to select during consent.
- Reducing consent-related drop-offs through better visual education.
What do you need to do?
- Move to the latest module version available by reaching out to your SPOC.
- For additional support or queries, please contact our support team at support@hyperverge.co.
AI-Generated ID Card Detection
Introduced forgery detection capability to identify AI-generated documents across Indian standard KYC documents.
What's New?
- Added a new
forgeryChecks.detectAiForgeryparameter to the ID Card Validation API that detects whether an uploaded identity document is AI-generated or forged. This feature is now available for the following Indian PhotoID documents: Aadhaar, PAN Card, Driving License, Passport, and Voter ID.
Why the change?
- With the rise of AI-generated documents, this enhancement adds a layer of security to help identify fraudulent documents during the verification process, protecting your platform from sophisticated forgery attempts.
What do you need to do?
- To enable forgery detection, add the
forgeryChecks.detectAiForgeryparameter to your API request and set it to"yes".
curl --location --request POST 'https://ind.idv.hyperverge.co/v1/readId' \
--header 'Content-Type: multipart/form-data' \
--header 'appid: <Enter_the_HyperVerge_appId>' \
--header 'appkey: <Enter_the_HyperVerge_appKey>' \
--header 'transactionId: <Enter_the_HyperVerge_transactionID>' \
--form 'pdf=@"<path_to_file>"' \
--form 'countryId="<Enter_the_country_id>"' \
--form 'documentId="<Enter_the_document_id>"' \
--form 'expectedDocumentSide="<Enter_the_expected_document_side>"' \
--form 'forgeryChecks.detectAiForgery="yes"' //new parameter
- The API response will include an additional
aiForgeryobject with the following possible values:
"yes"- Document is detected as AI-generated/forged"no"- Document appears authentic"not_supported"- Document type does not support AI forgery detection
- Sample Input:

{
"status": "success",
"statusCode": 200,
"metadata": {
"requestId": "<Request_ID>",
"transactionId": "<Transaction_ID>"
},
"result": {
"details": [
{
"idType": "aadhaar_front_bottom",
"fieldsExtracted": {
"firstName": {
"value": ""
},
"middleName": {
"value": ""
},
"lastName": {
"value": ""
},
"fullName": {
"value": "Narendra Modi"
},
"dateOfBirth": {
"value": "17-09-1950"
},
"dateOfIssue": {
"value": ""
},
"dateOfExpiry": {
"value": ""
},
"countryCode": {
"value": ""
},
"type": {
"value": ""
},
"address": {
"value": "",
"additionalInfo": "",
"street": "",
"houseNumber": "",
"district": "",
"province": "",
"zipCode": ""
},
"gender": {
"value": "M"
},
"idNumber": {
"value": ""
},
"placeOfBirth": {
"value": ""
},
"placeOfIssue": {
"value": ""
},
"yearOfBirth": {
"value": ""
},
"age": {
"value": ""
},
"fatherName": {
"value": ""
},
"motherName": {
"value": ""
},
"husbandName": {
"value": ""
},
"spouseName": {
"value": ""
},
"nationality": {
"value": ""
},
"mrzString": {
"value": "",
"idNumber": "",
"fullName": "",
"gender": "",
"dateOfBirth": "",
"dateOfExpiry": "",
"nationality": ""
},
"homeTown": {
"value": ""
}
},
"croppedImageUrl": "",
"forgeryChecks": {
"aiForgery": { // new response parameter
"value": "yes"
}
}
}
],
"summary": {
"action": "pass",
"details": []
}
}
}
- For additional support or queries, please contact our support team at support@hyperverge.co.
Auto Redirection to Pin / Pinless DigiLocker Flows with SDK
Added support for auto redirection to Pin or Pinless DigiLocker flows in the SDK.
What's New?
- Added mobile-number–based flow selection that automatically routes users to Pin or Pinless DigiLocker flows based on their account status.
Why the change?
- Earlier, users were often required to manually choose between Pin and Pinless flows, which led to edge cases where users choose the wrong flow and dropped off due to this.
- This enhancement helps in:
- Enabling automated routing to Pinless or Pin Based screens basis user account status.
- Reducing user friction by removing touchpoints for them to manually select the status of their accounts.
What do you need to do?
- Pass the user's mobile number as part of the SDK/module output.
- Move to the latest module version available by reaching out to your SPOC.
- For additional support or queries, please contact our support team at support@hyperverge.co.
Enhanced Dull Check Model
Improved the Dull check model to more accurately flag dull or poorly lit images.
What's New?
- Enhanced Dull Check model with refined thresholds for improved accuracy in detection of dull and low light selfies.
Why the change?
- To address gaps in dull image detection and ensure higher accuracy for edge cases that were not being consistently flagged earlier.
What do you need to do?
- No changes required. Existing integrations will automatically reflect the updated model enhancements.
- For additional assistance or queries, please contact our support team at support@hyperverge.co.
Enhanced White Background Check Model
Enhanced the White Background Check to more accurately validate compliant backgrounds for digital KYC and telecom onboarding.
What's New?
- Refined background classification to better distinguish acceptable white/light-toned backgrounds from non-compliant ones.
Why the change?
- To ensure compliance with RBI KYC requirements and telecom standards and improve background validation accuracy.
What do you need to do?
- No changes required. Existing integrations will automatically reflect the updated model enhancements.
- For additional assistance or queries, please contact our support team at support@hyperverge.co.
Disability Parameters for KYC Accessibility
Introduced Disability Parameters in the CKYC Upload flows to capture disability details for individuals and related persons.
What's New?
- A new mandatory parameter,
isDifferentlyAbled, has been added to the CKYC Upload flows with a default value of "no". - If
isDifferentlyAbledis set toyes, the following parameters become mandatory:
typeOfImpairment- This parameter specifies the impairment type using the corresponding code from the CKYC impairment code list.percentageOfImpairment- This parameter enters the degree of impairment as a numeric percentage value (1-100).udidNumber- This parameter provides the 18-character UDID string, formatted as two alphabets followed by sixteen digits.
- These parameters apply to:
- Individuals, and
- Related persons of Individual and Legal Entity records.
Why the change?
- This update ensures CKYC compliance with the Supreme Court directive on digital KYC accessibility for persons with disability, supporting inclusivity and accurate data capture.
What do you need to do?
- Sample Request:
curl --location --request POST 'https://ind-ckyc.hyperverge.co/api/v1/customer/upload' --header 'Content-Type: multipart/form-data' \
--header 'appId: <Enter_the_HyperVerge_appId>' \
--header 'appKey: <Enter_the_HyperVerge_appKey>' \
--header 'transactionId: <Enter_the_HyperVerge_transactionID>' \
--form 'metadata="{
"constitutionType": "01",
"isDifferentlyAbled": "yes", // new parameter
"percentageOfImpairment": 20, // mandatory if isDifferentlyAbled is yes
"typeOfImpairment": 1, // mandatory if isDifferentlyAbled is yes
"udidNumber": "<Enter_the_udid_number>", // mandatory if isDifferentlyAbled is yes
"residentialStatus": "<Enter_the_residential_status>", // new parameter
"branchCode": "<Enter_the_branch_code>",
"accountType": "01",
"applicantNamePrefix": "<Enter_the_applicant_name_prefix>",
"applicantFirstName": "<Enter_the_applicant_first_name>",
"applicantMiddleName": "<Enter_the_applicant_middle_name>",
"applicantLastName": "<Enter_the_applicant_last_name>",
"applicantMaidenNamePrefix": "<Enter_the_applicant_maiden_name_prefix>",
"applicantMaidenFirstName": "<Enter_the_applicant_maiden_first_name>",
"applicantMaidenMiddleName": "<Enter_the_applicant_maiden_middle_name>",
"applicantMaidenLastName": "<Enter_the_applicant_maiden_last_name>",
"fatherNamePrefix": "<Enter_the_father_name_prefix>",
"fatherFirstName": "<Enter_the_father_first_name>",
"fatherMiddleName": "<Enter_the_father_middle_name>",
"fatherLastName": "<Enter_the_father_last_name>",
"spouseNamePrefix": "<Enter_the_spouse_name_prefix>",
"spouseFirstName": "<Enter_the_spouse_first_name>",
"spouseMiddleName": "<Enter_the_spouse_middle_name>",
"spouseLastName": "<Enter_the_spouse_last_name>",
"motherNamePrefix": "<Enter_the_mother_name_prefix>",
"motherFirstName": "<Enter_the_mother_first_name>",
"motherMiddleName": "<Enter_the_mother_middle_name>",
"motherLastName": "<Enter_the_mother_last_name>",
"gender": "<Enter_the_gender>",
"dob": "<Enter_the_dob>",
"pan": "<Enter_the_pan>"/ "<FORM_60>", // pass form 60 if PAN unavailable
"permanentCurrentAddressMatch": "Y",
"address": {
"line1": "<Enter_the_address_line1>",
"line2": "<Enter_the_address_line2>",
"line3": "<Enter_the_address_line3>",
"city": "<Enter_the_city>",
"district": "<Enter_the_district>",
"state": "<Enter_the_state>",
"country": "<Enter_the_country>",
"pincode": "<Enter_the_pincode>",
"proof": "<Enter_the_proof>"
},
"currentAddress": {
"line1": "<Enter_the_current_address_line1>",
"line2": "<Enter_the_current_address_line2>",
"line3": "<Enter_the_current_address_line3>",
"city": "<Enter_the_current_city>",
"district": "<Enter_the_current_district>",
"state": "<Enter_the_current_state>",
"country": "<Enter_the_current_country>",
"pincode": "<Enter_the_current_pincode>",
"proof": "<Enter_the_current_proof>"
},
"contact": {
"residenceTelephoneStdCode": "<Enter_the_residence_telephone_std_code>",
"residenceTelephone": "<Enter_the_residence_telephone>",
"officeTelephoneStdCode": "<Enter_the_office_telephone_std_code>",
"officeTelephone": "<Enter_the_office_telephone>",
"mobileIsdCode": "<Enter_the_mobile_isd_code>",
"mobile": "<Enter_the_mobile>",
"email": "<Enter_the_email>"
},
"idDetails": [
{
"type": "<Enter_the_id_type>",
"number": "<Enter_the_id_number>"
}
],
"dateOfDeclaration": "<Enter_the_date_of_declaration>",
"placeOfDeclaration": "<Enter_the_place_of_declaration>",
"dateOfKYCVerification": "<Enter_the_date_of_kyc_verification>",
"typeOfDocumentSubmitted": "<Enter_the_type_of_document_submitted>",
"kycVerificationName": "<Enter_the_kyc_verification_name>",
"kycVerificationDesignation": "<Enter_the_kyc_verification_designation>",
"kycVerificationBranch": "<Enter_the_kyc_verification_branch>",
"kycVerificationEmpCode": "<Enter_the_kyc_verification_emp_code>"
}"
--form 'photo=@"<path_to_photo>"' \
--form 'idFront=@"<path_to_front_side_of_ID>"'
// rest of the optional parameters as per the CKYC Upload API documentation
{
"status": "success",
"statusCode": "200",
"result": {
"transactionid": "<Transaction_ID>",
"message": "Request for upload has been successfully registered"
}
}
- For additional assistance or queries, please contact our support team at support@hyperverge.co.
Enhanced Eyes Closed Model Release
Improved eyes closed detection model to more accurately flag both closed eyes and squinting cases.
What's New?
- Enhanced eyes closed model with refined thresholds to improve accuracy, now also detecting and flagging squinting cases.
Why the change?
- To reduce misses in cases of squinting eyes, ensuring more consistent and accurate flagging of eyes closed scenarios.
What do you need to do?
- No changes required. Existing integrations will automatically reflect the updated model enhancements.
- For additional assistance or queries, please contact our support team at support@hyperverge.co.
Enhanced Blur Check Model Release
Enhanced model for Blur Check to improve accuracy in detection of blur cases.
What's New?
- A new
checkStrictBlurflag to improve the accuracy for detection of blur selfies.
Why the change?
- To address gaps in blur detection and ensure higher accuracy for edge cases that were not being consistently flagged earlier.
What do you need to do?
- If you wish to enable stricter blur checks, please update your integration to include the
checkStrictBlurparameter and set it as "yes". Existing blur detection continues to work without changes if already enabled.
curl --location 'https://ind.idv.hyperverge.co/v1/checkLiveness' \
--header 'appId: <Enter_the_HyperVerge_appId>' \
--header 'appKey: <Enter_the_HyperVerge_appKey>' \
--header 'transactionId: <Enter_the_HyperVerge_transactionID>' \
--form 'image=@"<image>"' \
--form 'checkStrictBlur="yes"'
curl --location 'https://ind-faceid.hyperverge.co/v1/photo/liveness' \
--header 'appId: <Enter_the_HyperVerge_appId>' \
--header 'appKey: <Enter_the_HyperVerge_appKey>' \
--header 'transactionId: <Enter_the_HyperVerge_transactionID>' \
--form 'image=@<image>' \
--form 'checkStrictBlur="yes"'
- For additional support or queries, please contact our support team at support@hyperverge.co.
Enhanced Pre-Masked Aadhaar Detection
Addition of a new parameter to improve detection of masking status for non-standard Aadhaar cards in the Mask Aadhaar API.
What's New
- A new optional parameter,
enhancePreMasked, to improve categorisation of non-standard Aadhaar cards. - This works only when
checkPreMaskedis set to"yes".
Why the change?
- To enhance accuracy in detecting whether Aadhaar numbers are already masked, especially for formats such as DigiLocker Aadhaar cards.
What do you need to do?
- To enable improved detection of pre-masked Aadhaar numbers, add the parameters
"checkPreMasked": "yes"and"enhancePreMasked": "yes"in your request payload.
curl --location 'https://ind-ckyc.hyperverge.co/api/v1/maskAadhaar' \
--header 'appId: <Enter_the_HyperVerge_appId>' \
--header 'appKey: <Enter_the_HyperVerge_appKey>' \
--header 'transactionId: <Enter_the_HyperVerge_transactionID>' \
--form 'file=@"/path/to/file"' \
--form 'returnMaskingInfo="yes"' \
--form 'checkPreMasked="yes"' \ //pre-requisite parameter
--form 'enhancePreMasked="yes"' //new parameter
{
"status": "success",
"statusCode": "200",
"result": {
"docType": "AADHAAR",
"inputFile": "photo.jpeg",
"maskedFile": "photo_masked.jpeg",
"maskedOccurences": {
"standardAadhaar": 1,
"nonStandardAadhaar": 0
},
"maskedFileUrl": "", //s3 URL of the masked file
"totalPages": 1,
"pageDetails": [
{
"page": 1,
"maskedOccurences": {
"standardAadhaar": 1,
"nonStandardAadhaar": 0
}
}
],
"maskingInfo": {
"masked": "yes"
}
}
}
- For additional assistance or queries, please contact our support team at support@hyperverge.co.
Enhanced DigiLocker Document Retrieval with XML Support
Support for XML files has been added for PAN and Driving License in the docDetails API.
What's New
- Support for XML files in the docDetails API API
- Clients can now fetch PAN and DL in XML format, providing added flexibility for storage and compliance needs.
Why the change?
- Earlier, the docDetails API only supported the Pan and DL file as part of the output. This created gaps for clients requiring XML for PAN and DL due to in-house compliance, regulatory requirements or downstream use cases.
- This enhancement helps in:
- Supporting compliance requirements by enabling PAN and DL XML storage.
- Solves for downstream use cases where Digilocker XML is required.
What do you need to do?
- Add the parameters
panXMLFileanddlXMLFileto your API request to retrieve XML files.
curl --location 'https://ind-verify.hyperverge.co/api/digilocker/docDetails' \
--header 'Content-Type: application/json' \
--header 'appId: <Enter_the_HyperVerge_appId>' \
--header 'appKey: <Enter_the_HyperVerge_appKey>' \
--data '{
"referenceId": "Unique ref Id used in the Digilocker flow",
"dl":"yes",
"pan":"yes",
"panXMLFile": "yes",
"dlXMLFile":"yes"
}'
- For additional assistance or queries, please contact our support team at support@hyperverge.co.
Enhanced Classification for Non-Aadhaar Documents
Addition of a new parameter in the request payload of the Mask Aadhaar API to improve categorisation of Non-Aadhaar documents like PAN, Voter ID, Cheques, etc.
What's New?
- A new
flagNonAadhaarCardsparameter to enhance Non-Aadhaar document classification; this works only whenmaskAllAadhaarNumbersis set to"yes".
Why the change?
- To improve accuracy in identifying Non-Aadhaar documents, ensuring smoother downstream processing and analytics.
What do you need to do?
- Enable the parameter
"maskAllAadhaarNumbers": "yes"and add the new parameter"flagNonAadhaarCards": "yes"in your request payload.
curl --location 'https://ind-ckyc.hyperverge.co/api/v1/maskAadhaar' \
--header 'appId: appid' \
--header 'appKey: appkey' \
--header 'transactionid: test' \
--form 'file=@"/path/to/file"' \
--form 'returnMaskingInfo="yes"' \
--form 'checkPreMasked="yes"' \
--form 'maskAllAadhaarNumbers="yes"' \ //pre-requisite parameter
--form 'flagNonAadhaarCards="yes"' //new parameter
{
"status": "success",
"statusCode": "200",
"result": {
"docType": "NOT_AADHAAR", //key to consume the correct classification of documents
"inputFile": "photo.jpeg",
"maskedFile": "photo_masked.jpeg",
"maskedOccurences": {
"standardAadhaar": 0,
"nonStandardAadhaar": 0
},
"maskedFileUrl": "", //s3 URL of the masked file
"totalPages": 1,
"pageDetails": [
{
"page": 1,
"maskedOccurences": {
"standardAadhaar": 0,
"nonStandardAadhaar": 0
}
}
],
"maskingInfo": {
"masked": "not_sure"
}
}
}
- For additional assistance or queries, please contact our support team at support@hyperverge.co.
India OCR Updates: Enhanced Classifier for New ID Formats
Improved classifier for India OCR API to improve accuracy for existing and new ID formats.
What's New?
- A new classifier model for the India OCR API to improve support for both existing and newer ID card formats.
Why the Change?
- To enhance classification accuracy for newer or updated ID formats that the previous model was unable to classify reliably.
What Do You Need to Do?
- No changes needed, existing integrations will reflect the update.
- For additional assistance or queries, please contact our support team at support@hyperverge.co.
Docker-based CKYC Search & Download Solution
Introduction of a Docker-based solution for CKYC operations to meet CERSAI's OTP consent and data residency mandates.
What's New
- A self-deployable Docker package for OTP-based CKYC Search and Download, enabling secure and compliant integration from the Regulated Entity's on-prem or cloud setup — with no dependency on HyperVerge's cloud.
Why the change?
- CERSAI now mandates:
- OTP-based user consent before CKYC downloads
- Information of CKYCRR records to remain within the RE's infrastructure
- Our Docker-based solution is designed to help you stay fully compliant while maintaining complete control over your data and infrastructure.
What do you need to do?
- For additional assistance or queries, please contact our support team at support@hyperverge.co.
New Residential Status field and address proof rules
Addition of a new parameter and updated address proof rules for foreign nationals in CKYC operations.
What's New
- A new mandatory field,
Residential Statushas been added to the CKYC Upload API and is applicable to all Individual records and related persons in both Individual and Legal Entity records. - The applicable values to the field are:
- Resident Individual
- Non-Resident Indian (NRI)
- Foreign National
- Person of Indian Origin (PIO)
- If the selected
Residential Statusis Foreign National and the Proof of Identity is one of:- Passport
- Driving License
- Voter ID
Then the following address proof will be accepted:- Documents issued by foreign government departments
- Letters from the Foreign Embassy or Mission in India
Why the change?
- Accurate residency classification and alternate address proof options for foreign nationals now ensure smoother CKYC processing and full compliance with CKYCRR guidelines.
What do you need to do?
- Update your API integration to include the new
residentialStatusfield in the request payload.
curl --location --request POST 'https://ind-ckyc.hyperverge.co/api/v1/customer/upload' \
--header 'Content-Type: application/json' \
--header 'appId: <Enter_the_HyperVerge_appId>' \
--header 'appKey: <Enter_the_HyperVerge_appKey>' \
--header 'transactionId: <Enter_the_HyperVerge_transactionID>' \
--form 'metadata={
"constitutionType": "01",
"residentialStatus": "<Enter_the_residential_status>", // the new parameter
"branchCode": "<Enter_the_branch_code>",
"accountType": "<Enter_the_account_type>",
"applicantNamePrefix": "<Enter_the_applicant_name_prefix>",
"applicantFirstName": "<Enter_the_applicant_first_name>",
"applicantMiddleName": "<Enter_the_applicant_middle_name>",
"applicantLastName": "<Enter_the_applicant_last_name>",
"applicantMaidenNamePrefix": "",
"applicantMaidenFirstName": "",
"applicantMaidenMiddleName": "",
"applicantMaidenLastName": "",
"fatherNamePrefix": "<Enter_the_father_name_prefix>",
"fatherFirstName": "<Enter_the_father_first_name>",
"fatherMiddleName": "<Enter_the_father_middle_name>",
"fatherLastName": "<Enter_the_father_last_name>",
"spouseNamePrefix": "<Enter_the_spouse_name_prefix>",
"spouseFirstName": "<Enter_the_spouse_first_name>",
"spouseMiddleName": "<Enter_the_spouse_middle_name>",
"spouseLastName": "<Enter_the_spouse_last_name>",
"motherNamePrefix": "<Enter_the_mother_name_prefix>",
"motherFirstName": "<Enter_the_mother_first_name>",
"motherMiddleName": "<Enter_the_mother_middle_name>",
"motherLastName": "<Enter_the_mother_last_name>",
"gender": "<Enter_the_gender>",
"dob": "<Enter_the_dob>",
"pan": "<Enter_the_pan>",
"permanentCurrentAddressMatch": "<Enter_the_permanent_current_address_match>",
"address": {
"line1": "<Enter_the_address_line1>",
"line2": "<Enter_the_address_line2>",
"line3": "<Enter_the_address_line3>",
"city": "<Enter_the_city>",
"district": "<Enter_the_district>",
"state": "<Enter_the_state>",
"country": "<Enter_the_country>",
"pincode": "<Enter_the_pincode>",
"proof": "<Enter_the_proof>"
},
"currentAddress": {
"line1": "<Enter_the_current_address_line1>",
"line2": "<Enter_the_current_address_line2>",
"line3": "<Enter_the_current_address_line3>",
"city": "<Enter_the_current_city>",
"district": "<Enter_the_current_district>",
"state": "<Enter_the_current_state>",
"country": "<Enter_the_current_country>",
"pincode": "<Enter_the_current_pincode>",
"proof": "<Enter_the_current_proof>"
},
"contact": {
"residenceTelephoneStdCode": "<Enter_the_residence_telephone_std_code>",
"residenceTelephone": "<Enter_the_residence_telephone>",
"officeTelephoneStdCode": "<Enter_the_office_telephone_std_code>",
"officeTelephone": "<Enter_the_office_telephone>",
"mobileIsdCode": "<Enter_the_mobile_isd_code>",
"mobile": "<Enter_the_mobile>",
"email": "<Enter_the_email>"
},
"idDetails": [
{
"type": "<Enter_the_id_type>",
"number": "<Enter_the_id_number>"
}
],
"dateOfDeclaration": "<Enter_the_date_of_declaration>",
"placeOfDeclaration": "<Enter_the_place_of_declaration>",
"dateOfKYCVerification": "<Enter_the_date_of_kyc_verification>",
"typeOfDocumentSubmitted": "<Enter_the_type_of_document_submitted>",
"kycVerificationName": "<Enter_the_kyc_verification_name>",
"kycVerificationDesignation": "<Enter_the_kyc_verification_designation>",
"kycVerificationBranch": "<Enter_the_kyc_verification_branch>",
"kycVerificationEmpCode": "<Enter_the_kyc_verification_emp_code>",
"relatedPersons": [
{
"typeOfRelation": "<Enter_the_type_of_relation>",
"applicantNamePrefix": "<Enter_the_applicant_name_prefix>",
"applicantFirstName": "<Enter_the_applicant_first_name>",
"applicantMiddleName": "<Enter_the_applicant_middle_name>",
"applicantLastName": "<Enter_the_applicant_last_name>",
"applicantMaidenNamePrefix": "",
"applicantMaidenFirstName": "",
"applicantMaidenMiddleName": "",
"applicantMaidenLastName": "",
"fatherNamePrefix": "<Enter_the_father_name_prefix>",
"fatherFirstName": "<Enter_the_father_first_name>",
"fatherMiddleName": "<Enter_the_father_middle_name>",
"fatherLastName": "<Enter_the_father_last_name>",
"spouseNamePrefix": "<Enter_the_spouse_name_prefix>",
"spouseFirstName": "<Enter_the_spouse_first_name>",
"spouseMiddleName": "<Enter_the_spouse_middle_name>",
"spouseLastName": "<Enter_the_spouse_last_name>",
"motherNamePrefix": "<Enter_the_mother_name_prefix>",
"motherFirstName": "<Enter_the_mother_first_name>",
"motherMiddleName": "<Enter_the_mother_middle_name>",
"motherLastName": "<Enter_the_mother_last_name>",
"aadhaar": "<Enter_the_aadhaar>",
"gender": "<Enter_the_gender>",
"dob": "<Enter_the_dob>",
"pan": "<Enter_the_pan>",
"permanentCurrentAddressMatch": "<Enter_the_permanent_current_address_match>",
"address": {
"line1": "<Enter_the_address_line1>",
"line2": "<Enter_the_address_line2>",
"line3": "<Enter_the_address_line3>",
"city": "<Enter_the_city>",
"district": "<Enter_the_district>",
"state": "<Enter_the_state>",
"country": "<Enter_the_country>",
"pincode": "<Enter_the_pincode>",
"proof": "<Enter_the_proof>"
},
"currentAddress": {
"line1": "<Enter_the_current_address_line1>",
"line2": "<Enter_the_current_address_line2>",
"line3": "<Enter_the_current_address_line3>",
"city": "<Enter_the_current_city>",
"district": "<Enter_the_current_district>",
"state": "<Enter_the_current_state>",
"country": "<Enter_the_current_country>",
"pincode": "<Enter_the_current_pincode>",
"proof": "<Enter_the_current_proof>"
},
"contact": {
"residenceTelephoneStdCode": "<Enter_the_residence_telephone_std_code>",
"residenceTelephone": "<Enter_the_residence_telephone>",
"officeTelephoneStdCode": "<Enter_the_office_telephone_std_code>",
"officeTelephone": "<Enter_the_office_telephone>",
"mobileIsdCode": "<Enter_the_mobile_isd_code>",
"mobile": "<Enter_the_mobile>",
"email": "<Enter_the_email>"
},
"idDetails": [
{
"type": "<Enter_the_id_type>",
"number": "<Enter_the_id_number>"
}
],
"dateOfDeclaration": "<Enter_the_date_of_declaration>",
"placeOfDeclaration": "<Enter_the_place_of_declaration>",
"dateOfKYCVerification": "<Enter_the_date_of_kyc_verification>",
"typeOfDocumentSubmitted": "<Enter_the_type_of_document_submitted>",
"kycVerificationName": "<Enter_the_kyc_verification_name>",
"kycVerificationDesignation": "<Enter_the_kyc_verification_designation>",
"kycVerificationBranch": "<Enter_the_kyc_verification_branch>",
"kycVerificationEmpCode": "<Enter_the_kyc_verification_emp_code>"
}
]
}' \
--form 'dlFront=@"<Enter_the_path_to_the_dl_front_image>"'
{
"status": "success",
"statusCode": "200",
"result": {
"transactionid": "<Transaction_ID>",
"message": "Request for upload has been successfully registered"
}
}
- For additional assistance or queries, please contact our support team at support@hyperverge.co.
DigiLocker Healthcheck API with Downtime Monitoring Dashboard
Introduction of a DigiLocker Healthcheck API integrated with the API Health Monitoring Dashboard to enable proactive detection of service disruptions in KYC flows.
What's New?
1.Digilocker Healthcheck API
- A new API that evaluates the real-time health of DigiLocker services by analyzing user behavior patterns, enabling detection of performance issues even when standard error codes aren't triggered.
2. Dashboard Integration for Downtime Monitoring
- The Healthcheck API is now part of the API Health Monitoring Dashboard, making it easier to setup proactive mail alerts and get historical performance insights
Why the change?
- DigiLocker downtimes are difficult to detect, as they often don't trigger standard API errors—making traditional monitoring ineffective.
- This API helps in:
- Improving reliability in detecting disruptions during DigiLocker KYC flows
- Minimizing user drop-offs through timely alerts or fallback actions
What do you need to do?
You can use the Healthcheck API in two ways:1. Integrate into your Workflow:
- Please contact the Solutions/Support team to get this feature enabled as part of your digilocker flow, or
2. Monitor via Dashboard Alerts:
- To receive email notifications for API downtimes, follow these steps:
- Log in to the HV One Dashboard and navigate to the Dev Hub.
- Select API Health, then choose your country from the dropdown.
- You'll now see the API Health Dashboard, displaying historical uptime data for all key APIs.
- Click on "Get updates" at the top right and choose Email as your preferred notification method.
- Enter the email address you'd like to subscribe, and select the specific APIs you want alerts for.
- Click Subscribe to complete the setup
- For additional support or queries, please contact our support team at support@hyperverge.co.
Dynamic Sign In/Sign Up Flow Routing
Introduction of a new parameter in the Digilocker Start API to enable dynamic routing to Sign In or Sign Up journeys based on user type or business logic.
What's New
- Addition of the
flowparameter to Start API - A new optional parameter in the Start API that enables clients to direct users to Sign In or Sign Up screens for streamlined journey orchestration.
Why the Change?
Earlier, the user flow was tied to a single configuration per appID, which meant all users for a flow could only go through either the Sign In or the Sign Up flow. This enhancement helps in:- Enabling flexible routing to Sign In or Sign Up screens within the same app
- Improving user experience through tailored journeys based on user type or context
What Do You Need to Do?
- Update your Start API integration to include the new
flowparameter in the request payload. - The parameter can be set to
signinorsignupbased on the user type or business logic
curl --location 'https://ind-verify.hyperverge.co/api/digilocker/start' \
--header 'appId: <appId shared by HyperVerge>' \
--header 'appKey: <appKey shared by HyperVerge>' \
--header 'transactionID: <Unique_transactionId>>' \
--header 'Content-Type: application/json' \
--data '{
"referenceId": "<Unique_referenceId>",
"usePinlessAuth": "<yes/no>",
"flow" : "<signin/signup>"
}'
- For additional assistance or queries, please contact our support team at support@hyperverge.co.
Pennyless Updates: Enhanced error handling
Addition of a new parameter in the Pennyless API that helps return simplified error responses for specific account types.
What's New
- The newly introduced
strictValidationparameter returns a failure response for Blocked and Overseas accounts when theaccountNamecannot be fetched — earlier, this case still returned a success response.
Why the change?
- To ensure clarity and correctness, Overseas and Non-overseas accounts cases are now treated as errors since account name details aren't available for them.
What do you need to do?
- To test the
strictValidationflag and distinguish between Overseas and Non-overseas accounts, follow these steps:- Pass the
strictValidationflag as "yes". - When the
strictValidationflag is passed as "yes" in the request, the system will return new response structures.
- Pass the
- For additional assistance or queries, please contact our support team at support@hyperverge.co.
For Overseas accounts:
New Response if strictValidation is set to "yes":
{
"status": "failure",
"statusCode": "422",
"error": "Given account is an NRE account" // NRE, which stands for Non-Resident External, denotes the Overseas accounts
}
For Blocked Accounts:
New Response if strictValidation is set to "yes":
{
"status": "failure",
"statusCode": "422",
"error": "Account is blocked"
}
Call Reconnection Enhancements for Agents and Customers in VKYC
Updates to the call reconnection process, reducing scenarios like network disruptions, page refreshes, and call drops.
What's New
1. Agent and Customer Reconnection:
- Agents can now reconnect to an ongoing call if the customer has not disconnected.
- Customers and agents will see appropriate messages when a reconnection attempt is in progress.
2. Refresh Handling:
- Calls now resume smoothly with reduced loading time when either party refreshes the page. A message is shown indicating that the agent or customer is rejoining, removing any confusion.
- Refer to the recordings showcasing agent refresh and customer refresh screens.
3. Tab Closure Handling:
- If either the Customer or the agent closes the tab, the system waits up to 20 seconds for them to return. Calls resume if they rejoin in time; otherwise, fallback actions apply.
- Customers can see a message when the agent is reconnecting and can rejoin the queue or schedule a call if the agent doesn't return.
- Refer to the screen recordings showcasing the customer and agent experiences.
4. Call Ending Improvements:
- If the Customer ends the call, the Agents see an appropriate message for 20 seconds before being redirected to the Admin portal.
- Refer to the recording showcasing the agent screen.
5. Network Disruption Handling:
- Real-time alerts have been added for low network scenarios
- Customers can see a warning for unstable internet, while agents are notified if the customer has a poor connection.
- An alert banner appears at the top of the screen displaying "Your connection is poor" when the agent's own network quality drops below a threshold.
- Refer to the recordings showcasing the customer and agent screens for network-related alerts.
Why the change?
- To reduce confusion and friction during unexpected disruptions, making the video KYC experience smoother and more dependable.
What do you need to do?
- To experience all enhancements, staying on the latest system version is the only action required from the users.
- For additional assistance or queries, please contact our support team at support@hyperverge.co.
Changes in the CKYC Identifier to improve data security
CKYC updates now mandate masking the CKYC Identifier in search and upload responses, replacing it with a new parameter for enhanced data security.
What's New?
- CKYC Search:
- The
ckycNowill now be masked in the response, showing only the last 4 digits. - A new parameter,
ckycRefNo, will be included in the response ifreturnckycRefNois enabled in the request. - A new ID type "Y," has been added for searches using
ckycRefNo.
- The
- CKYC Search & Download (S&D):
- The
ckycNowill not be masked in S&D responses. - Users can include the
returnckycRefNoparameter in their request to receive theckycRefNo.
- The
- CKYC Upload:
- A new config,
returnCKYCRefIDSeparately, when enabled in the CKYC Pre-Upload API, allows users to receive the CKYC reference ID separately in the response.
• WhenreturnCKYCRefIDSeparatelyis enabled:ckyc_ref_idis returned separately, along withckyc_no.ckyc_nowill have the following values:- →Unmasked: In successful cases.
- →Masked: In 'short_confirmed_match' and 'long_confirmed_match' cases.
- →Empty: In error cases (e.g., reject scenarios) – this is consistent with existing behaviour.
ckyc_ref_idwill have the following values:- → Non-empty: If a value is retrieved from CERSAI, such as in 'short_confirmed_match' and 'long_confirmed_match' cases.
- → Empty: When no value is provided by CERSAI, including:
- ✓ Success cases: CKYC number is available, but no reference ID.
- ✓ Reject cases: Error scenarios with no reference ID.
- • When
returnCKYCRefIDSeparatelyis disabled (current behaviour):ckyc_nowill be returned in the response.ckyc_noholds CKYC number for all cases except 'short_confirmed_match' and 'long_confirmed_match'.- In 'short_confirmed_match' and 'long_confirmed_match',
ckyc_noholds the CKYC reference ID instead of the CKYC number.
- A new config,
Why the Change?
To enhance data security by minimizing direct exposure of the CKYC number, while allowing flexibility to access the required reference details.
What do you need to do?
- Search API:
- Enable
returnckycRefNoin the request to receive theckycRefNo. - Use the new ID type "Y" for searches using the
ckycRefNo.
API Requestcurl --location --request POST 'https://ind-ckyc.hyperverge.co/api/v1/searchAndDownload'
--header 'Content-Type: application/json'
--header 'appId: <Enter_the_HyperVerge_appId>'
--header 'appKey: <Enter_the_HyperVerge_appKey>'
--header 'transactionId: <Enter_the_HyperVerge_transactionID>'
--data '{
"idNo": "idNo",
"idType": "Y",
"dob": "dob",
"returnOnlySearchResponse": "yes",
"returnckycRefNo": "yes"
}'API Response{
"ckycNo": "xxxxxxxxxx9668",
"ckycRefNo": "LEARAV29072000"
} - Enable
- Search and Download API:
- Pass the
ckycRefNo, as returned by the Search API, as theidNoand setidTypeto "Y" for performing downloads.
API Requestcurl --location --request POST 'https://ind-ckyc.hyperverge.co/api/v1/searchAndDownload'
--header 'appId: <Enter_the_HyperVerge_appId>'
--header 'appKey: <Enter_the_HyperVerge_appKey>'
--header 'transactionId: <Enter_the_HyperVerge_transactionID>'
--data '{
"idNo": "<The_CKYC_Reference_Number_from_Search_API>",
"idType": "Y",
"dob": "dob"
}' - Pass the
- Pre-Upload API:
- Enable the
returnCKYCRefIdSeparatelyparameter, to receive the CKYC Reference ID. - Disable the
returnCKYCRefIdSeparatelyparameter, to not receive the CKYC Reference ID.
API Requestcurl --location --request POST 'https://ind-ckyc.hyperverge.co/api/v1/config/upload'
--header 'appId: <Enter_the_HyperVerge_appId>'
--header 'appKey: <Enter_the_HyperVerge_appKey>'
--header 'transactionId: <Enter_the_HyperVerge_transactionID>'
--data '{
"returnCKYCRefIdSeparately": "yes" // enabling the param
}'API Response: Short Match Confirmed{
status: 200,
message: 'CKYC Upload Failure',
application_status: 'short_confirmed_match',
appid: 'appid',
ckyc_no: 'XXXXXXXXXX0000',
ckyc_ref_id: 'INABCD12345678'
errors: [
'Last 4 digits of Aadhaar, Name, DOB and Gender match with that of CKYC no XXXXXXXXXX4810. Please download the record using CKYC REFERENCE ID.'
],
transactionid: '<Transaction_ID>'
}API Response: Long Match Confirmed{
status: 200,
message: 'CKYC Upload Failure',
application_status: 'long_confirmed_match',
appid: 'appid',
ckyc_no: 'XXXXXXXXXX0000',
ckyc_ref_id: 'INABCD12345678'
errors: [
'Last 4 digits of Aadhaar, Name, DOB and Gender match with that of CKYC no XXXXXXXXXX4810. Please download the record using CKYC REFERENCE ID.'
],
transactionid: '<Transaction_ID>'
}API Response: Rejection Case{
status: 200,
message: 'CKYC Upload Failure',
application_status: 'short_reject',
appid: 'appid',
ckyc_no: '',
ckyc_ref_id: ''
errors:[],
transactionid: '<Transaction_ID>'
}API Requestcurl --location --request POST 'https://ind-ckyc.hyperverge.co/api/v1/config/upload'
--header 'appId: <Enter_the_HyperVerge_appId>'
--header 'appKey: <Enter_the_HyperVerge_appKey>'
--header 'transactionId: <Enter_the_HyperVerge_transactionID>'
--data '{
"returnCKYCRefIdSeparately": "no" // disabling the param
}'API Response: Success Case{
status: 200,
message: 'CKYC Upload Success',
application_status: 'success',
appid: 'appid',
ckyc_no: '00000000000000',
ckyc_ref_id: ''
errors:[],
transactionid: '<Transaction_ID>'
} - Enable the
Improved PDF Generation and enhanced Get Signed Document API
The new PDF Generator API enables flexible PDF creation, while the additional parameters in the Get Signed Document API response allow tracking of signing status and analytics.
What's New
- Addition of a new API, PDF Generator. This API takes the templateID /base64 file as its input along with other required details to generate a document for signing.
- Addition of extra parameters in Get Signed Document API's response. They are as follows:
Signed- This parameter indicates if signing has been done by user or not and returns a boolean value.Expired- This parameter indicates if the document has been expired or not and returns a boolean value.failureReason- This is a conditional parameter which displays the reason of failure in document signing.
Why the change?
- To ensure fast implementation, high accuracy, and support for all document types requiring eSign, with quick turnaround times for change requests.
- To track end-user conversion rates and to enable analytics, additional parameters have been added in Get Signed Document API.
What do you need to do?
PDF Generator API
- Use this API to generate a PDF for e-signing.
- If the PDF is not generated by HyperVerge, include the file, signature coordinates, and optional fields for SMS or email notifications in the request body.
curl --location 'https://ind-engine.thomas.hyperverge.co/v1/pdfGenerator'
--header 'Content-Type: application/json'
--header 'appId: <Enter_the_HyperVerge_appId>'
--header 'appKey: <Enter_the_HyperVerge_appKey>'
--header 'transactionId: <Enter_the_HyperVerge_transactionID>'
--data '{
"templateId":"<Enter_the_unique_template_ID>",
"inviteeName":"<Enter_the_name>",
"inviteePhone":"<Enter_the_phone_number>", // optional parameter
"inviteeEmail":"<Enter_the_email_address>", // optional parameter
"stampSeries":"<Enter_the_stamp_series>",
"coordinates":[ //this is only needed when the pdf is not generated by HyperVerge
{
"x1": 0,
"x2": 50,
"y1": 0,
"y2": 50,
"page": 1
}
],
"file": "", //this is only needed when the pdf is not generated by HyperVerge
"eSignHintMessage":"<Enter_the_eSign_hint_message>"
}'
{
"statusCode": 200,
"metaData": {
"requestId": "<Request_ID>",
"transactionId": "1234"
},
"result": {
"data": {
"signUrl": "<Signature_URL>",
"documentId": "<Document_ID>",
"email": "",
"name": "",
"phone": "" // displayed when inviteePhone parameter is enabled in the request
}
}
}
Get Signed Document
- Pass the documentId received from the pdfGenerator API.
- Optionally, set skipBase64 to true if you want a downloadable link instead of base64 data.
curl --location 'https://ind-engine.thomas.hyperverge.co/v1/getSignedDocument'
--header 'Content-Type: application/json'
--header 'appId: <Enter_the_HyperVerge_appId>'
--header 'appKey: <Enter_the_HyperVerge_appKey>'
--header 'transactionId: <Enter_the_HyperVerge_transactionID>'
--data '{
"documentId":"<Enter_the_document_ID>",
"serviceId":"<Enter_the_service_ID>"
}'
{
"status": "success",
"statusCode": 200,
"metaData": {
"requestId": "<Request_ID>",
"transactionId": "<Transaction_ID>"
},
"result": {
"data": {
"documentId": "<Document_ID>",
"s3Url": "<The_S3_URL>",
"signed": true, // the new parameter
"expired": false, // the new parameter
"userCertDetails": {
"name": "",
"pincode": "",
"gender": "",
"state": "",
"title": "",
"yob": ""
},
"inviteeDetails": {
"inviteeName": "",
"inviteeEmail": ""
}
}
}
}
- For additional assistance or queries, please contact our support team at support@hyperverge.co.
Improved user onboarding with new DigiLocker PIN-less authentication
The DigiLocker PIN-less flow enables users to fetch their identity documents without the need for a 6-digit security PIN, offering a faster and more convenient log in experience.
What's New
- By enabling the PIN-less flow, you can now log in without entering a security PIN. This simplifies the sign-in process and improves the user experience.
Why the change?
- 15-20% drop offs happen at the PIN-Step.To reduce the user drop-off rates we simplify the sign-in process with Digilocker PIN-Less flow
What do you need to do?
- To enable the PIN-less flow, update your API integration with the following configuration:
- Add the parameter
"usePinlessAuth": "yes"to the Digilocker Start API.
- Add the parameter
curl --location --request POST 'https://ind-verify.hyperverge.co/api/digilocker/start'
--header 'appId: <Enter_the_HyperVerge_app_ID>'
--header 'appKey: <Enter_the_HyperVerge_app_Key>'
--header 'transactionId: sample_transaction_id'
--header 'Content-Type: application/json'
--data '{
"referenceId": "<Enter_the_Reference_ID>",
"redirectURL": "<Enter_the_Redirect_URL>"
"usePinlessAuth": "yes" // the new parameter
}'
- To use PIN-less flow, users will need to have their own Digilocker credentials.
- Please contact our team at HyperVerge to learn about the process of obtaining Digilocker credentials.
- For additional assistance or queries, please contact our support team at support@hyperverge.co.
Pennyless Updates: Account type identification and enhanced error handling
Addition of a new flag in the Pennyless API that helps specify account type, along with a status code updation and enhanced error handling.
What's New
- We have expanded our coverage of supported banks.
- The
accountTypeflag enables theisOverseasAccountcheck. This parameter will return "Yes" for an overseas account and "No" for a non-overseas account. - The status code for the error "Beneficiary Bank Offline", is updated from
503to424. - A new error case,"Unable to Validate Request," has been added.
Why the change?
- To ensure accurate classification of overseas and non-overseas accounts, enhancing validation, and compliance.
- To enhance error handling, a new error case has been introduced.
What do you need to do?
- To enable the
isOverseasAccountcheck, set theaccountTypeflag as "Yes" in the request body. - Else, set the
accountTypeflag as "No".
curl --location 'https://ind-engine.thomas.hyperverge.co/v1/pennyless'
--header 'Content-Type: application/json'
--header 'appId: <appId shared by HyperVerge>'
--header 'appKey: <appKey shared by HyperVerge>'
--data '{
"accountNumber": "<Enter_the_Account_Number>",
"ifsc": "<Enter_the_IFSC_Value>",
"accountType":"<Enter_Yes_or_No>" // the new flag
}'
{
"status": "success",
"statusCode": 200,
"result": {
"accountExists": true,
"message": "Bank Account details verified successfully.",
"accountName": "<Account_Holder_Name>",
"isOverseasAccount": "<Yes/No>" // new response parameter when accountType flag is enabled
},
"metaData": {
"requestId": "<Request_ID>"
}
}
The updated response for the Beneficiary Bank Offline scenario:
{
"statusCode": 424,
"status": "failure",
"error": "Beneficiary Bank Offline"
}
The new error case "Unable to validate request":
{
"statusCode": 424,
"status": "failure",
"error": "Unable to validate request"
}
- For additional assistance or queries, please contact our support team at support@hyperverge.co.