Skip to content

HyperVerge

HyperVerge is an AI-powered identity verification platform specializing in document OCR (Optical Character Recognition), face matching, liveness detection, and Video In-Person Verification (VIPV). For the broking KYC system, HyperVerge handles the critical visual verification layer — extracting data from identity documents, matching the applicant’s live face against document photos, and conducting SEBI-compliant video KYC sessions. Founded in India and serving major banks, fintechs, and stock brokers, HyperVerge offers both REST APIs and native SDKs across Android, iOS, and Web.

SEBI’s KYC norms require In-Person Verification (IPV) for all new demat and trading accounts. HyperVerge’s liveness-certified face match satisfies the IPV requirement digitally, eliminating the need for physical branch visits. Their iBeta Level 2 certified liveness detection — tested against printed photos, digital screens, video replays, 3D masks, and deepfakes — prevents spoofing attempts and provides a defensible audit trail for regulatory inspections. For the estimated 15-20% of applicants who do not complete DigiLocker-based Aadhaar eKYC, HyperVerge’s VIPV module provides a fully compliant fallback path with tamper-proof recording and geo-tagged activity logs.

This page covers HyperVerge’s API specifications for OCR, face match, liveness detection, and VIPV workflows, including SDK integration for mobile and web, response field mappings, confidence score thresholds, and quality handling strategies. The integration details at the end describe how HyperVerge fits into our broader KYC pipeline alongside DigiLocker, Decentro, and the KYC Admin back-office.

  1. Overview
  2. Face Match API
  3. Liveness Detection
  4. VIPV (Video In-Person Verification)
  5. Document OCR
  6. Non-Individual Entity Documents
  7. SDK Integration
  8. Integration Details
  9. HyperVerge Dashboard
  10. Pricing
  11. Compliance & Certifications
  12. Edge Cases & Failure Handling
  13. Alternatives Comparison
  14. Integration with Our System

HyperVerge is an AI-powered identity verification platform founded in India, serving major banks, fintechs, NBFCs, and stock brokers. The company provides document OCR, face match, liveness detection, and video KYC capabilities through REST APIs and native SDKs.

Website: https://hyperverge.co API Docs: https://github.com/hyperverge/kyc-india-rest-api SDK Repos: https://github.com/hyperverge/hyperkyc-android

CapabilityPurpose in KYC FlowPhase
Face MatchCompare DigiLocker Aadhaar photo vs live selfiePhase 6: Verification
Liveness DetectionEnsure live person (not spoof) during selfie/videoPhase 6: Verification
VIPVVideo In-Person Verification when DigiLocker not usedPhase 6: Verification
Document OCRExtract fields from PAN, Aadhaar, cheque, passport, DLPhase 2: Document Capture
MetricValue
Face Match Accuracy~99.8%
OCR Accuracy~99.8% (with per-field confidence scores)
Liveness CertificationISO 30107-3 Level 2 (iBeta tested)
Presentation Attack DetectionPrinted photos, digital screens, videos, 3D masks, deepfakes
SDK PlatformsAndroid (5.0+), iOS (11+), Web (JavaScript)
Data ResidencyIndia (Mumbai data center)
Integration Time1-2 weeks

POST https://ind-faceid.hyperverge.co/v1/photo/verifyPair
Headers:
appId: <your_app_id>
appKey: <your_app_key>

Multipart form-data with two images:

ParameterTypeDescription
image1file (JPEG/PNG) or base64Reference image (from Aadhaar/PAN photo via DigiLocker)
image2file (JPEG/PNG) or base64Live selfie (captured via HyperVerge SDK)
POST /v1/photo/verifyPair
Content-Type: multipart/form-data
image1: <aadhaar_photo_file>
image2: <live_selfie_file>

Success (match found):

{
"status": "success",
"statusCode": "200",
"result": {
"match": "yes",
"confidence": 92.5,
"details": {
"face_detected_ref": true,
"face_detected_selfie": true,
"multiple_faces_ref": false,
"multiple_faces_selfie": false
}
}
}

Success (no match):

{
"status": "success",
"statusCode": "200",
"result": {
"match": "no",
"confidence": 35.2,
"details": {
"face_detected_ref": true,
"face_detected_selfie": true,
"multiple_faces_ref": false,
"multiple_faces_selfie": false
}
}
}

Error (face not detected):

{
"status": "failure",
"statusCode": "422",
"error": "Face not detected in image2. Ensure clear, front-facing photo."
}
Score RangeClassificationOnboarding Action
80-100Strong matchAuto-approve
60-79Moderate matchRoute to manual review queue in KYC Admin
0-59Weak / no matchReject or prompt re-capture of selfie

The face match API works in conjunction with liveness detection (Section 3) to detect and reject:

Attack TypeDetection Method
Printed photosTexture analysis, depth estimation
Digital screens (phone/tablet/laptop)Moire pattern detection, reflection analysis
Pre-recorded videosTemporal analysis, lip movement detection
3D masksMaterial analysis, skin texture verification
DeepfakesAI-generated artifact detection, frequency domain analysis
API Response FieldMaster Dataset FieldSection
result.matchface_match_result (R40)R: Third-Party Results
result.confidenceface_match_score (R41)R: Third-Party Results
result.details.face_detected_refface_match_ref_detected (R42)R: Third-Party Results
result.details.face_detected_selfieface_match_selfie_detected (R43)R: Third-Party Results

While face match confirms that the person in the selfie matches the document photo, it does not by itself prove that a live human is present. A printed photograph or a video replay of someone’s face could pass a naive face comparison. Liveness detection closes this gap by verifying the physical presence of a real person at the time of capture.

HyperVerge supports two modes of liveness detection.

AttributeDetails
InputSingle selfie image (no gestures required)
MethodAI analyzes texture, depth cues, lighting from a single frame
Processing TimeSub-second (<500ms typical)
User ExperienceBest UX - customer just takes a selfie
Use CaseDefault for all onboarding flows

How it works: The customer takes a single selfie through the HyperVerge SDK. The AI model analyzes the image for liveness signals without requiring any user interaction beyond the initial capture. This is transparent to the user.

AttributeDetails
InputVideo sequence with prompted gestures
PromptsHead turn left/right, blink, smile, nod
MethodAI verifies real-time response to random prompts
Processing Time3-5 seconds
User ExperienceMore friction - requires following on-screen instructions
Use CaseHigh-value accounts, regulatory requirement, enhanced security

When to use Active Liveness:

  • Customer flagged for enhanced due diligence (PEP, high-risk)
  • Passive liveness confidence score falls in borderline range
  • Regulatory audit requires demonstrable active verification

The liveness check is integrated into the SDK flow. When using the REST API directly:

POST https://ind-faceid.hyperverge.co/v1/photo/verifyLiveness
Content-Type: multipart/form-data
Headers: { "appId": "xxx", "appKey": "xxx" }
Body: { "image": <selfie_file> }

Response:

{
"status": "success",
"statusCode": "200",
"result": {
"live": "yes",
"liveness_score": 0.97,
"attack_type": "none",
"details": {
"is_printed_photo": false,
"is_digital_screen": false,
"is_video_replay": false,
"is_mask": false
}
}
}

Failure response (spoof detected):

{
"status": "success",
"statusCode": "200",
"result": {
"live": "no",
"liveness_score": 0.12,
"attack_type": "printed_photo",
"details": {
"is_printed_photo": true,
"is_digital_screen": false,
"is_video_replay": false,
"is_mask": false
}
}
}
Score RangeClassificationAction
0.90-1.00High confidence liveAuto-approve
0.70-0.89Moderate confidenceConsider re-capture or manual review
0.00-0.69Likely spoofReject, prompt re-capture in better conditions
  • ISO 30107-1 / 30107-3 Level 2 certified
  • Tested by iBeta Quality Assurance (independent third-party lab)
  • Level 2 = defends against sophisticated presentation attacks (not just printed photos)
  • Attacks tested: print (laser/inkjet), digital display (phone/tablet/monitor), 3D mask, video replay

When a customer does not complete DigiLocker-based Aadhaar eKYC, the IPV exemption does not apply, and a Video In-Person Verification session becomes mandatory. VIPV combines face match, liveness, document OCR, and OTP verification into a single recorded video session that satisfies SEBI’s IPV requirements.

4. VIPV (Video In-Person Verification) - SEBI Compliant

Section titled “4. VIPV (Video In-Person Verification) - SEBI Compliant”
ScenarioVIPV Required?Reason
Customer completed Aadhaar eKYC via DigiLockerNO (Exempted)IPV exemption per SEBI KYC Master Circular
Customer uploaded Aadhaar Offline XML (not eKYC)YESNo real-time identity verification done
Customer used alternative address proof (Passport, DL, Voter ID)YESeKYC not performed
Customer could not complete DigiLocker flowYESFallback path requires VIPV

Expected usage: ~15-20% of customers (those not using DigiLocker for Aadhaar eKYC).

Per SEBI KYC Master Circular (SEBI/HO/MIRSD/MIRSD-SEC-2/P/CIR/2023/168) and Stock Brokers Master Circular (SEBI/HO/MIRSD/MIRSD-PoD/P/CIR/2025/90):

#RequirementHyperVerge Implementation
1Random question generation + response captureAI generates random questions; speech-to-text captures answers
2OTP verification (customer reads aloud)OTP sent to registered mobile; customer reads aloud; auto-recognized via speech-to-text
3Document display (PAN, Aadhaar, KYC form shown to camera)SDK prompts customer to hold up each document; OCR runs in real-time
4Live face match vs document photoVideo frame compared against Aadhaar/PAN photo during session
5Liveness detection during videoPassive liveness runs continuously during video session
6Geo-location captureSDK captures GPS coordinates (lat/long) at session start
7Tamper-proof recording storage (7-year retention per RBI)Recording encrypted (AES-256), SHA-256 hash generated, stored in India DC
8Activity log with timestampsEvery action timestamped: session start, document shown, question asked, OTP read, etc.
Step 1: SDK initiates video session
-> Camera + microphone permissions requested
-> Session ID generated
-> Geo-location captured (lat/long)
Step 2: Customer shows PAN card to camera
-> Real-time OCR extracts: PAN number, name, DOB, father's name
-> Cross-verified against pre-captured PAN data
Step 3: Customer shows Aadhaar card to camera
-> Real-time OCR extracts: name, DOB, gender, address
-> Photo extracted for face match reference
-> Cross-verified against pre-captured Aadhaar data
Step 4: Random question displayed on screen
-> Customer answers verbally
-> Speech-to-text captures response
-> Answer logged with timestamp
Step 5: OTP sent to registered mobile number
-> Customer reads OTP aloud
-> Speech-to-text auto-recognizes OTP digits
-> OTP verified against server-generated value
Step 6: Live face match
-> Video frame captured
-> Compared against Aadhaar/PAN photo
-> Match score calculated (same thresholds as Section 2)
Step 7: Liveness check (passive, during video)
-> AI confirms live person throughout session
-> No additional gesture required
Step 8: Geo-location re-confirmed
-> Final GPS coordinates captured
Step 9: Session recording finalized
-> Video encrypted (AES-256)
-> SHA-256 hash generated for tamper evidence
-> Recording uploaded to secure storage (India DC)
Step 10: Result generated
-> PASS / FAIL with detailed scorecard
-> All individual check results (face match, liveness, OCR, OTP) included
-> Activity log with all timestamps attached
ModeDescriptionPass RateCostBest For
Agent-AssistedHuman agent conducts VIPV via video call, verifies documents and identity interactivelyHigher (~98%)Rs. 40-50/sessionComplex cases, elderly customers, low digital literacy
Fully AutomatedAI-driven, no human agent involved, all checks performed by AIStandard (~95%)Rs. 30-40/sessionScale, standard onboarding, cost optimization

Initiate Session:

POST https://ind-vkyc.hyperverge.co/v1/session/create
Headers: { "appId": "xxx", "appKey": "xxx" }
{
"customer_id": "CUST_12345",
"reference_image": "<base64_aadhaar_photo>",
"customer_name": "RAKESH KUMAR",
"customer_mobile": "9876543210",
"customer_email": "rakesh@example.com",
"mode": "automated",
"callback_url": "https://api.broker.in/webhooks/hyperverge/vipv"
}

Session Status Webhook:

{
"event": "session.completed",
"session_id": "VIPV_SESSION_ABC123",
"status": "PASS",
"result": {
"face_match": {
"match": "yes",
"score": 88.5
},
"liveness": {
"live": "yes",
"score": 0.96
},
"ocr": {
"pan_verified": true,
"aadhaar_verified": true
},
"otp_verified": true,
"questions_answered": 2,
"geo_location": {
"latitude": 28.6139,
"longitude": 77.2090
},
"recording": {
"url": "https://storage.hyperverge.co/recordings/VIPV_SESSION_ABC123.mp4",
"hash_sha256": "a1b2c3d4e5f6...",
"duration_seconds": 180,
"size_bytes": 15728640
},
"activity_log": [
{"timestamp": "2026-02-13T10:30:00Z", "action": "session_started"},
{"timestamp": "2026-02-13T10:30:05Z", "action": "geo_location_captured"},
{"timestamp": "2026-02-13T10:30:15Z", "action": "pan_shown", "ocr_result": "ABCDE1234F"},
{"timestamp": "2026-02-13T10:30:45Z", "action": "aadhaar_shown", "ocr_result": "XXXX-XXXX-1234"},
{"timestamp": "2026-02-13T10:31:00Z", "action": "random_question_asked", "question": "What is your mother's maiden name?"},
{"timestamp": "2026-02-13T10:31:15Z", "action": "question_answered"},
{"timestamp": "2026-02-13T10:31:30Z", "action": "otp_sent"},
{"timestamp": "2026-02-13T10:31:45Z", "action": "otp_verified"},
{"timestamp": "2026-02-13T10:32:00Z", "action": "face_match_completed", "score": 88.5},
{"timestamp": "2026-02-13T10:32:05Z", "action": "liveness_confirmed"},
{"timestamp": "2026-02-13T10:32:10Z", "action": "session_completed", "result": "PASS"}
]
}
}
AttributeDetails
EncryptionAES-256 at rest, TLS 1.2+ in transit
Tamper EvidenceSHA-256 hash generated at recording completion
RetentionMinimum 7 years (RBI V-CIP requirement)
Storage LocationIndia (Mumbai data center)
AccessDownloadable via API with authenticated credentials
FormatMP4 (H.264 video, AAC audio)

Data Mapping (to Master Dataset, Section N)

Section titled “Data Mapping (to Master Dataset, Section N)”
HyperVerge OutputMaster Dataset FieldSection
session_idvipv_session_id (N09)N: IPV Details
activity_log[0].timestampvipv_start_time (N10)N
activity_log[-1].timestampvipv_end_time (N11)N
recording.urlvipv_video_url (N14)N
recording.hash_sha256vipv_video_hash (N15)N
result.face_match.scorevipv_face_match_score (N17)N
result.liveness.scorevipv_liveness_score (N18)N
result.activity_log (questions)vipv_random_questions_json (N19)N
result.geo_locationvipv_geo_location (N20)N
recording.duration_secondsvipv_duration_seconds (N16)N

EnvironmentBase URL
Sandboxhttps://test-docs.hyperverge.co/v2.0
Productionhttps://ind-docs.hyperverge.co/v2.0
Headers:
appId: <your_app_id>
appKey: <your_app_key>
DocumentEndpointMethodContent-Type
PAN Card/readPANPOSTmultipart/form-data
Aadhaar Card/readAadhaarPOSTmultipart/form-data
Passport/readPassportPOSTmultipart/form-data
Driving License/readKYCPOSTmultipart/form-data
Voter ID/readVoterIDPOSTmultipart/form-data
Cheque / Cancelled Cheque/readKYCPOSTmultipart/form-data
Auto-Detect (any KYC doc)/readKYCPOSTmultipart/form-data
ParameterDetails
Field nameimage
Accepted formatsJPEG, PNG, TIFF, PDF (first page)
Minimum resolution800px width recommended
Maximum file size5MB
ColorColor preferred; grayscale accepted with lower accuracy
POST /v2.0/readPAN
Content-Type: multipart/form-data
Headers: { "appId": "xxx", "appKey": "xxx" }
Body:
image: <pan_card_image_file>
{
"status": "success",
"statusCode": "200",
"result": {
"details": [
{
"type": "pan",
"fieldsExtracted": {
"pan_no": { "value": "ABCDE1234F", "conf": 0.99 },
"name": { "value": "RAKESH KUMAR", "conf": 0.99 },
"father": { "value": "SURESH KUMAR", "conf": 0.95 },
"date": { "value": "01/01/1990", "conf": 0.97 },
"date_of_issue": { "value": "15/06/2015", "conf": 0.85 }
}
}
]
}
}

PAN OCR Fields:

FieldKeyDescriptionTypical Confidence
PAN Numberpan_no10-character alphanumeric PAN0.97-0.99
NamenameName as printed on PAN card0.95-0.99
Father’s NamefatherFather’s name on PAN0.90-0.97
Date of BirthdateDOB in DD/MM/YYYY format0.93-0.99
Date of Issuedate_of_issueCard issue date (if visible)0.80-0.90
{
"status": "success",
"statusCode": "200",
"result": {
"details": [
{
"type": "aadhaar",
"fieldsExtracted": {
"aadhaar_no": { "value": "XXXX-XXXX-1234", "conf": 0.98 },
"name": { "value": "RAKESH KUMAR", "conf": 0.99 },
"dob": { "value": "01/01/1990", "conf": 0.97 },
"gender": { "value": "M", "conf": 0.99 },
"address": { "value": "123, MG Road, Sector 5, Gurgaon, Haryana - 122001", "conf": 0.88 },
"photo": { "value": "<base64_encoded_face_photo>", "conf": 0.95 }
}
}
]
}
}

Aadhaar OCR Fields:

FieldKeyDescriptionTypical Confidence
Aadhaar Numberaadhaar_noMasked (last 4 digits visible per UIDAI norms)0.95-0.99
NamenameName on Aadhaar0.95-0.99
Date of BirthdobDOB in DD/MM/YYYY0.93-0.98
GendergenderM / F / T0.98-0.99
AddressaddressFull address as printed0.80-0.92
PhotophotoExtracted face photo (base64)0.90-0.97
{
"status": "success",
"statusCode": "200",
"result": {
"details": [
{
"type": "cheque",
"fieldsExtracted": {
"account_no": { "value": "1234567890", "conf": 0.96 },
"ifsc": { "value": "SBIN0001234", "conf": 0.98 },
"bank_name": { "value": "State Bank of India", "conf": 0.99 },
"branch": { "value": "Gurgaon Main Branch", "conf": 0.90 },
"micr": { "value": "110002345", "conf": 0.94 }
}
}
]
}
}

Cheque OCR Fields:

FieldKeyDescriptionTypical Confidence
Account Numberaccount_noBank account number0.92-0.98
IFSC Codeifsc11-character IFSC0.95-0.99
Bank Namebank_nameName of the bank0.95-0.99
BranchbranchBranch name0.85-0.95
MICR Codemicr9-digit MICR code0.90-0.97
{
"status": "success",
"statusCode": "200",
"result": {
"details": [
{
"type": "passport",
"fieldsExtracted": {
"passport_num": { "value": "K1234567", "conf": 0.98 },
"name": { "value": "RAKESH KUMAR", "conf": 0.99 },
"dob": { "value": "01/01/1990", "conf": 0.97 },
"nationality": { "value": "INDIAN", "conf": 0.99 },
"gender": { "value": "M", "conf": 0.99 },
"issue_date": { "value": "15/06/2020", "conf": 0.95 },
"expiry_date": { "value": "14/06/2030", "conf": 0.96 },
"place_of_birth": { "value": "NEW DELHI", "conf": 0.92 },
"place_of_issue": { "value": "NEW DELHI", "conf": 0.90 },
"mrz_line1": { "value": "P<INDKUMAR<<RAKESH<<<<<<<<<<<<<<<<<<<<<<<<", "conf": 0.99 },
"mrz_line2": { "value": "K12345671IND9001010M3006146<<<<<<<<<<<<<<00", "conf": 0.99 }
}
}
]
}
}
{
"status": "success",
"statusCode": "200",
"result": {
"details": [
{
"type": "dl",
"fieldsExtracted": {
"dl_number": { "value": "HR0120190012345", "conf": 0.97 },
"name": { "value": "RAKESH KUMAR", "conf": 0.98 },
"dob": { "value": "01/01/1990", "conf": 0.96 },
"address": { "value": "123, MG Road, Gurgaon, Haryana", "conf": 0.85 },
"issue_date": { "value": "01/06/2019", "conf": 0.93 },
"validity": { "value": "31/05/2039", "conf": 0.94 },
"vehicle_classes": { "value": "LMV, MCWG", "conf": 0.90 }
}
}
]
}
}

The /readKYC endpoint automatically identifies the document type and extracts relevant fields. Use this when:

  • Document type is not known in advance
  • Building a generic document upload flow
  • Processing mixed document batches

The response includes a type field indicating the detected document type: pan, aadhaar, passport, dl, voter_id, cheque, etc.

HyperVerge OCR includes built-in tamper detection that flags signs of document manipulation:

Tamper TypeDetection
Photo pasting (face swapped on document)Detects paste edges, inconsistent lighting
Text editing (Photoshopped name/DOB)Font inconsistency, pixel-level artifacts
Cropped/partial documentsMissing expected regions, incomplete fields
Color-copied documentsColor profile analysis, print pattern detection

Tamper detection results appear in the response as:

{
"tamper_check": {
"is_tampered": false,
"tamper_score": 0.05,
"tamper_details": []
}
}
Confidence RangeQualityAction
0.95-1.00HighAuto-accept field value
0.80-0.94MediumAccept but flag for visual confirmation by customer
0.60-0.79LowPresent to customer for manual correction
0.00-0.59Very LowPrompt re-capture of document

The individual document OCR capabilities described above cover the primary onboarding flow. However, accounts opened on behalf of Hindu Undivided Families (HUFs), partnerships, and corporates require additional document types that do not follow standardized layouts.

HyperVerge’s OCR capabilities extend beyond individual KYC documents to support entity-level verification.

DocumentOCR SupportFields ExtractedAccuracy Notes
CIN CertificateYesCIN number, company name, date of incorporation, registered officeGood accuracy on printed certificates
Board ResolutionPartialSignatory names, company name, dateLimited accuracy on handwritten portions
MOA/AOAPartialCompany name, objects (first page)Multi-page documents require page-by-page processing
DocumentOCR SupportFields Extracted
Karta’s AadhaarYes (standard Aadhaar OCR)Name, DOB, gender, address, photo
Karta’s PANYes (standard PAN OCR)PAN number, name, DOB
HUF PANYes (standard PAN OCR)HUF PAN number, HUF name
HUF DeedPartial (generic document OCR)HUF name, Karta name (accuracy varies)
DocumentOCR SupportFields Extracted
Partnership DeedPartialFirm name, partner names, dates (accuracy varies on scanned legal docs)
Partnership PANYes (standard PAN OCR)Firm PAN, firm name
Partner’s PAN/AadhaarYes (standard individual OCR)All standard fields

For authorized signatories and directors of non-individual entities, the same face match API (Section 2) applies. The reference image is the signatory’s PAN/Aadhaar photo, matched against a live selfie.


AttributeDetails
Repositoryhttps://github.com/hyperverge/hyperkyc-android
Min SDK VersionAPI 21 (Android 5.0 Lollipop)
SDK Size~5MB (AAR)
LanguageJava / Kotlin compatible
CameraUses device camera with quality optimization
PermissionsCamera, Internet, Location (for VIPV)

Gradle Integration:

dependencies {
implementation 'co.hyperverge:hyperkyc-android:x.y.z'
}

Basic Usage:

val config = HyperKycConfig.Builder()
.appId("your_app_id")
.appKey("your_app_key")
.setWorkflow("face_match_liveness")
.build()
HyperKyc.start(activity, config, object : HyperKycCallback {
override fun onSuccess(result: HyperKycResult) {
// result.faceMatchScore, result.livenessResult, etc.
}
override fun onFailure(error: HyperKycError) {
// Handle error
}
})
AttributeDetails
RepositoryHyperVerge iOS SDK (contact for access)
Min iOS VersioniOS 11.0+
LanguageSwift / Objective-C compatible
SDK Size~4MB
PermissionsCamera, Internet, Location (for VIPV)

CocoaPods Integration:

pod 'HyperKyc', '~> x.y.z'
AttributeDetails
IntegrationJavaScript SDK loaded via script tag or npm
Browser SupportChrome 60+, Firefox 60+, Safari 12+, Edge 79+
RequirementsCamera access via getUserMedia API, HTTPS required
Size~200KB (minified + gzip)

Script Tag Integration:

<script src="https://cdn.hyperverge.co/hyperkyc-web/v1/hyperkyc.min.js"></script>

Basic Usage:

const hyperKyc = new HyperKyc({
appId: 'your_app_id',
appKey: 'your_app_key',
workflow: 'face_match_liveness'
});
hyperKyc.start({
containerId: 'kyc-container',
onSuccess: function(result) {
console.log('Face match score:', result.faceMatchScore);
console.log('Liveness:', result.livenessResult);
},
onFailure: function(error) {
console.error('Error:', error.code, error.message);
},
onCancel: function() {
console.log('User cancelled');
}
});

All SDKs handle the following:

FeatureDescription
Camera captureOptimized capture with auto-focus, exposure adjustment
Image quality checkReal-time feedback if image is blurry, dark, or overexposed
Liveness promptsOn-screen instructions for active liveness (if configured)
Document alignment guideOverlay guide for positioning PAN/Aadhaar in frame
Result callbackStructured result object with scores and status
Error handlingDetailed error codes for camera issues, network errors, etc.
UI customizationCustomizable themes, colors, fonts to match broker’s brand identity
LocalizationSupport for multiple Indian languages in UI text

With the SDK handling client-side capture and quality checks, the backend integration layer is responsible for authentication, API orchestration, error handling, and webhook processing. The following section covers these server-side concerns in detail.

All API requests require appId and appKey in HTTP headers:

Headers:
appId: <your_application_id>
appKey: <your_application_key>
Content-Type: multipart/form-data (for image APIs)
Content-Type: application/json (for session APIs)

Credentials are issued per environment (sandbox vs production). Rotate keys periodically (quarterly recommended).

ServiceSandboxProduction
Document OCRhttps://test-docs.hyperverge.co/v2.0https://ind-docs.hyperverge.co/v2.0
Face Match / Livenesshttps://test-faceid.hyperverge.co/v1https://ind-faceid.hyperverge.co/v1
VIPVhttps://test-vkyc.hyperverge.co/v1https://ind-vkyc.hyperverge.co/v1
Dashboardhttps://dashboard.hyperverge.cohttps://dashboard.hyperverge.co
TierRate LimitBurst
Standard50 TPS (transactions per second)100 TPS
Enterprise100+ TPS (configurable)200+ TPS

Rate limit headers returned:

X-RateLimit-Limit: 100
X-RateLimit-Remaining: 95
X-RateLimit-Reset: 1707820800

For async operations (VIPV session results), HyperVerge sends webhooks to the configured callback_url:

Webhook Payload:

{
"event": "session.completed",
"session_id": "VIPV_SESSION_ABC123",
"status": "PASS",
"timestamp": "2026-02-13T10:32:10Z",
"result": { ... }
}

Webhook Security:

  • HMAC-SHA256 signature in X-HyperVerge-Signature header
  • Verify signature before processing:
    signature = HMAC-SHA256(webhook_secret, request_body)
HTTP CodeErrorDescriptionAction
200SuccessRequest processed successfullyProcess response
400Bad RequestMalformed request, missing required fieldsFix input parameters
401UnauthorizedInvalid or expired appId/appKeyCheck credentials, rotate if needed
404Not FoundInvalid endpoint or session IDVerify URL and session ID
413Payload Too LargeImage exceeds maximum file size (5MB)Compress or resize image
422Unprocessable EntityFace not detected, document not readablePrompt user to re-capture
429Too Many RequestsRate limit exceededImplement backoff, retry after Retry-After header
500Internal Server ErrorHyperVerge server issueRetry with exponential backoff
503Service UnavailableTemporary maintenance or overloadRetry after delay

Recommended retry policy for transient errors (429, 500, 503):

Attempt 1: Immediate
Attempt 2: Wait 1 second
Attempt 3: Wait 3 seconds
(Max 2 retries, total 3 attempts)

For 422 errors (face not detected, document unreadable), do NOT retry automatically. Prompt the user to re-capture the image with better conditions.

APIRecommended Timeout
Face Match10 seconds
Liveness10 seconds
Document OCR15 seconds
VIPV Session Create15 seconds
VIPV WebhookN/A (async)

HyperVerge provides an admin dashboard at https://dashboard.hyperverge.co for monitoring and management.

FeatureDescription
Real-time AnalyticsTotal verifications, success/failure rates, average scores by day/week/month
Transaction SearchSearch by session ID, customer ID, date range, status
Manual Review QueueView borderline cases (face match 60-79%) for human decision
Manual OverrideApprove or reject borderline verifications with audit trail
Screenshot/Video ViewerView captured selfies, document images, VIPV recordings inline
Audit TrailComplete history of every verification attempt with timestamps and reviewer actions
API UsageTrack API call volume, latency percentiles, error rates
AlertsConfigure alerts for high failure rates, API errors, unusual patterns
1. Verification completes with borderline score (face match 60-79%)
2. Case appears in "Pending Review" queue on dashboard
3. Reviewer sees:
- Reference image (Aadhaar/PAN photo)
- Live selfie
- Face match score
- Liveness score
- OCR results (if applicable)
4. Reviewer decides: Approve / Reject / Request Re-capture
5. Decision logged with reviewer ID, timestamp, reason
6. Webhook sent to broker system with final decision
RolePermissions
AdminFull access: settings, API keys, user management, all data
ReviewerManual review queue, approve/reject, view transactions
AnalystView-only: analytics, reports, transaction search
AuditorView audit trail, compliance reports (read-only)

ServiceCost (INR)Notes
Face MatchRs. 1-2 per matchIncludes anti-spoofing
Passive LivenessRs. 1-2 per checkOften bundled with face match
Active LivenessRs. 2-3 per checkHigher due to video processing
Document OCR (per document)Rs. 1-3 per documentVaries by document type
VIPV - Fully AutomatedRs. 30-40 per sessionAI-driven, no agent
VIPV - Agent-AssistedRs. 40-50 per sessionIncludes agent time
ItemCostNotes
SDK LicenseIncludedNo separate SDK license fee; included in per-transaction pricing
VIPV Recording StorageAdditionalFor 7-year retention beyond standard period; negotiate based on volume
Dashboard AccessIncludedStandard dashboard included; advanced analytics may be extra
SupportIncluded (standard)Dedicated account manager for enterprise plans
Monthly VolumeTypical Discount
Up to 10,000 transactionsStandard pricing
10,001 - 50,00010-15% discount
50,001 - 200,00015-25% discount
200,000+Custom enterprise pricing (negotiate)

Estimated Per-Onboarding Cost (HyperVerge components only)

Section titled “Estimated Per-Onboarding Cost (HyperVerge components only)”
ScenarioComponentsEst. Cost
DigiLocker path (no VIPV)Face Match + Liveness + OCR (2 docs)Rs. 5-9
Non-DigiLocker path (with VIPV)Face Match + Liveness + OCR (2 docs) + VIPVRs. 35-55

Beyond pricing, the choice of a verification vendor in the Indian broking context is heavily influenced by regulatory compliance posture. HyperVerge’s certification portfolio and data residency commitments are summarized below.

CertificationScopeStatus
ISO 27001Information Security Management SystemCertified
SOC 2 Type IISecurity, Availability, Processing Integrity controlsCertified
ISO 30107-3 Level 2Presentation Attack Detection (Liveness)iBeta certified
GDPRData protection (for international operations)Compliant
RegulationCompliance
SEBI VIPVFully compliant with SEBI KYC Master Circular requirements for Video IPV
RBI V-CIPCompliant with RBI Video-based Customer Identification Process guidelines
IRDAI VBIPCompliant with Insurance Regulatory Authority Video-Based Identification Process
DPDP Act 2023Data Protection Digital Privacy Act compliance (India)
IT Act 2000Electronic record and digital signature compliance
PMLAPrevention of Money Laundering Act - KYC verification support
AspectDetails
Primary Data CenterMumbai, India
Data SovereigntyAll Indian customer data processed and stored within India
BackupGeo-redundant within India
Data DeletionOn request, customer data purged within 30 days (except regulatory retention)

HyperVerge supports the following for SEBI inspection/audit:

RequirementHyperVerge Support
Transaction audit trailComplete API logs with request/response (PII masked)
VIPV recording accessDownloadable recordings with hash verification
Verification evidenceFace match scores, liveness results, OCR data exportable
System auditSOC 2 Type II report available on request
Data retention proofLogs and recordings retained per configured retention policy

Even with high accuracy rates and robust certifications, real-world onboarding introduces a wide range of edge cases — poor lighting, elderly applicants whose appearance has changed significantly since their Aadhaar photo was taken, laminated documents with glare, and unreliable mobile network connections during VIPV sessions. The following section catalogs these scenarios and prescribes handling strategies.

IssueSDK BehaviorBackend BehaviorResolution
Low light / dark environmentSDK shows real-time brightness warningReturns 422 or low confidencePrompt user to move to better-lit area
Camera blur / out of focusSDK shows focus indicatorReturns 422 or low confidencePrompt user to hold steady, auto-focus
Glare on documentSDK detects reflection spotsLower OCR confidencePrompt user to tilt document, remove glare source
Partial document visibilitySDK shows alignment guideIncomplete field extractionPrompt user to fit full document in frame
Very low resolution cameraSDK warns at session startMay not meet minimum 800pxSuggest uploading a scanned copy instead
ChallengeImpactHandling
Elderly users with significant appearance change from Aadhaar photo (10+ years old)Lower confidence score (60-75 typical)Lower auto-approve threshold or route to manual review
Glasses (prescription)Minimal impactHandles well; trained on diverse dataset
SunglassesModerate impactSDK prompts removal; face detection may fail
Masks (COVID/medical)High impactSDK prompts removal; face detection will fail
Facial hair change (clean-shaven vs full beard)Moderate impact (5-10 point drop)Usually still above 80 threshold; manual review if borderline
Multiple faces in frameRejectionSDK detects and prompts single face in frame
Heavy makeup or cosmetic changesMinor impactHandles well in most cases
Head coverings (religious)Minimal impact if face fully visibleSDK accepts if face is visible; turban, hijab (face visible) OK
ChallengeImpactHandling
Laminated document with heavy glareReduced accuracy (80-90%)Prompt user to capture at angle to avoid glare
Very old / faded documentsReduced accuracy (70-85%)Flag low-confidence fields for manual entry
Handwritten portions on legal documentsPoor accuracy (<70%)Auto-detect and skip; flag for manual transcription
Non-standard fonts or print qualityModerate impactPer-field confidence lets system identify weak fields
Multi-language documents (Hindi + English)Good support for common Indian languagesOCR trained on bilingual Indian documents
Aadhaar in regional language onlyModerate impactSupports 12 Indian languages but accuracy varies
ChallengeImpactHandling
Poor network connectivityVideo quality degrades, session may dropSDK auto-adjusts bitrate; auto-reconnect with session resume
Background noiseOTP speech recognition may failVisual OTP entry fallback available
Customer does not understand instructionsSession failureAgent-assisted mode recommended for such cases
OTP not received on mobileSession blocked at OTP stepAllow OTP resend (max 3 attempts); fallback to email OTP
Customer holds document too close/farOCR during video failsSDK provides distance guide overlay
ScenarioHandling
HyperVerge API down (500/503)Retry with exponential backoff; if persistent, queue for later; show user-friendly message
Rate limit exceeded (429)Backoff and retry; alert ops team if sustained
Sandbox/Production credential mismatch401 error; log and alert; environment-specific config check
Image upload timeoutRetry once; if persistent, suggest smaller file or better network
Webhook delivery failureHyperVerge retries 3 times over 15 minutes; poll status API as fallback

FeatureHyperVergeIDfySignzy
Face Match Accuracy~99.8%~99.5%~99.0%
Liveness CertificationISO 30107 Level 2 (iBeta)ISO 30107 Level 1Basic liveness
Liveness ModePassive + ActivePassive + ActiveActive only
VIPV - SEBI CompliantFull (automated + agent)Full (automated + agent)Agent-assisted only
OCR Document Types7+ Indian doc types3 task types (OCR/Verify/Both)14,000+ doc types (180+ countries)
OCR Accuracy~99.8% with per-field confidence~99.0%~98.5%
Tamper DetectionBuilt-inAvailableAvailable
SDKAndroid / iOS / WebAndroid / iOS / WebWeb + offline SDK
Face Match PricingRs. 1-2Rs. 2-5Rs. 2-4
OCR PricingRs. 1-3Rs. 2-5Rs. 2-4
VIPV PricingRs. 30-50Rs. 30-50Rs. 40-60
Integration Time1-2 weeks1-2 weeks2-3 weeks
CertificationsISO 27001, SOC 2 Type IIISO 27001ISO 27001, SOC 2
India Data ResidencyYes (Mumbai)YesYes
Deepfake DetectionYesLimitedNo
Low Bandwidth SupportModerateModerateBest (offline SDK)
Best ForHigh accuracy at scale, full VIPVBundled verification + gov DB checkLow bandwidth, global doc coverage
  1. Highest face match accuracy (~99.8%) reduces manual review queue volume
  2. ISO 30107 Level 2 liveness provides strongest presentation attack defense (regulatory defensible)
  3. Full SEBI VIPV compliance with both automated and agent-assisted modes
  4. Native SDKs for Android, iOS, and Web — covers all our customer channels
  5. Single vendor for face match + liveness + OCR + VIPV reduces integration complexity
  6. Per-field confidence scores on OCR enable intelligent auto-fill vs manual review routing
  7. India data residency (Mumbai DC) meets SEBI/RBI data localization requirements
  8. Tamper detection built into OCR catches document fraud early

KYC App (Frontend - Web/Android/iOS)
|
+---> HyperVerge SDK (embedded)
| |
| +--- Camera capture + quality check
| +--- Liveness prompts (if active mode)
| +--- Document alignment guide
| +--- VIPV session management
| |
| +--- Returns: images, scores, session data
|
v
KYC API Gateway (Backend)
|
+---> HyperVerge REST APIs
| |
| +--- /v1/photo/verifyPair (Face Match)
| +--- /v1/photo/verifyLiveness (Liveness)
| +--- /v2.0/readPAN (PAN OCR)
| +--- /v2.0/readAadhaar (Aadhaar OCR)
| +--- /v2.0/readKYC (Auto-detect OCR)
| +--- /v1/session/create (VIPV)
| |
| +--- Webhooks -> /webhooks/hyperverge/vipv
|
+---> Cross-verification with other vendors
|
v
KYC Database
|
v
KYC Admin (Back-Office)
Step 1: DigiLocker returns Aadhaar XML
-> Extract photo from <Pht> element (base64)
-> Store as reference_image in KYC DB
Step 2: HyperVerge SDK captures live selfie
-> SDK performs client-side quality check
-> SDK performs passive liveness check
-> Returns selfie image + liveness result
Step 3: Backend calls HyperVerge Face Match API
-> POST /v1/photo/verifyPair
-> image1 = DigiLocker Aadhaar photo
-> image2 = live selfie from SDK
Step 4: Process result
-> If match >= 80% AND liveness = pass -> Auto-approve (store in R40-R43)
-> If match 60-79% -> Route to KYC Admin manual review queue
-> If match < 60% -> Prompt re-capture; max 3 attempts then reject
Step 1: Customer uploads PAN card image
-> HyperVerge OCR: POST /v2.0/readPAN
-> Extract: pan_no, name, father, dob (with confidence scores)
-> Auto-fill form fields where confidence >= 0.80
Step 2: Customer uploads Aadhaar card image
-> HyperVerge OCR: POST /v2.0/readAadhaar
-> Extract: name, dob, gender, address, photo (masked aadhaar_no)
-> Auto-fill form fields where confidence >= 0.80
Step 3: Cross-verify OCR results
-> Compare PAN OCR name vs Aadhaar OCR name (fuzzy match)
-> Compare PAN OCR DOB vs Aadhaar OCR DOB (exact match)
-> Flag discrepancies for manual review
Step 4: Use extracted Aadhaar photo as reference for Face Match (Step 2 above)
Step 1: Customer uploads cancelled cheque image
-> HyperVerge OCR: POST /v2.0/readKYC
-> Extract: account_no, ifsc, bank_name, branch, micr
Step 2: Auto-fill bank details in KYC form
-> account_number = OCR account_no
-> ifsc_code = OCR ifsc
Step 3: Feed to Decentro Penny Drop API [V3]
-> POST /core_banking/money_transfer/validate_account
-> { account_number: <from OCR>, ifsc: <from OCR>, name: <from PAN> }
-> Verify account ownership via name match
Step 4: Cross-verify
-> Decentro beneficiary_name vs PAN name vs Aadhaar name
-> If all match -> bank details confirmed
-> If mismatch -> flag for review
Step 1: Customer did not complete DigiLocker Aadhaar eKYC
-> VIPV required (no IPV exemption)
Step 2: Backend creates VIPV session
-> POST /v1/session/create
-> Pass: reference_image (from PAN/Aadhaar OCR photo), customer details
Step 3: SDK launches VIPV session
-> Customer follows on-screen prompts:
1. Show PAN -> OCR verifies
2. Show Aadhaar -> OCR verifies
3. Answer random question
4. Read OTP aloud
5. Face match + liveness (continuous)
Step 4: Session completes
-> Webhook received at /webhooks/hyperverge/vipv
-> Store results in Section N fields (N09-N20)
-> Store recording URL + hash for 7-year retention
Step 5: KYC Admin reviews VIPV result
-> If PASS: mark IPV as completed
-> If FAIL: contact customer, offer retry (max 3 attempts)
-> If borderline: reviewer watches recording, makes decision
Error TypeDetectionActionFallback
API timeoutTimeout after configured thresholdRetry onceShow user-friendly message, allow manual document entry
Face not detected (422)API returns 422Do NOT retryPrompt user to re-capture with SDK guidance
Low face match score (<60%)Score in responseAllow 2 re-capturesRoute to VIPV if repeated failure
API down (500/503)HTTP status codeRetry with backoff (3 attempts)Queue for async processing; allow user to continue and verify later
Rate limited (429)HTTP 429 + Retry-AfterWait and retryAlert ops team if sustained
Tamper detected on documenttamper_check.is_tampered = trueReject documentRequire original document; flag for compliance review
VIPV session droppedWebhook timeout or session statusSession auto-resume on reconnectIf unrecoverable, create new session
config/hyperverge.yml
sandbox:
app_id: "HV_SANDBOX_APP_ID"
app_key: "HV_SANDBOX_APP_KEY"
ocr_base_url: "https://test-docs.hyperverge.co/v2.0"
face_base_url: "https://test-faceid.hyperverge.co/v1"
vipv_base_url: "https://test-vkyc.hyperverge.co/v1"
production:
app_id: "${HYPERVERGE_APP_ID}"
app_key: "${HYPERVERGE_APP_KEY}"
ocr_base_url: "https://ind-docs.hyperverge.co/v2.0"
face_base_url: "https://ind-faceid.hyperverge.co/v1"
vipv_base_url: "https://ind-vkyc.hyperverge.co/v1"
common:
face_match_auto_approve_threshold: 80
face_match_manual_review_threshold: 60
liveness_auto_approve_threshold: 0.90
ocr_auto_accept_confidence: 0.80
max_selfie_retries: 3
max_vipv_retries: 3
api_timeout_ms: 10000
vipv_timeout_ms: 15000
retry_max_attempts: 3
retry_backoff_base_ms: 1000
webhook_secret: "${HYPERVERGE_WEBHOOK_SECRET}"
callback_url: "https://api.broker.in/webhooks/hyperverge/vipv"
vipv_recording_retention_years: 7

This document should be read alongside Vendor Integrations (Sections V7, V8, V9 for HyperVerge context) and Master Dataset for field-level data mappings.