Skip to main content

Video OTP

Objective

The Video OTP module necessitates users to read aloud a dynamically generated one-time passcode (OTP) and verifies if the verbal input from the user matches with the OTP. It records a high resolution video of the user undergoing the verification process and additionally checks for liveness and face match.

It serves the following verifications:

  • Verifies if the user's verbal input matches the displayed OTP,
  • Ensures the user is distinctly visible and live which prevents fraudulent attempts using pre-recorded videos,
  • Confirms that the same user completes the entire verification process.
InputOutput
The user's selfieIt indicates whether the user's verbal input matches the displayed OTP, and provides the outcomes of the liveness and face match evaluations

Supported Configurations

Configuration OptionDescription
Verification ChecksConfigure the specific verification checks to be performed. This includes the speech to text(STT), liveness and the face match checks.
Mandatory or non-mandatory checksYou can further configure a check as mandatory or non-mandatory.
  • If a mandatory check fails in case of a synchronous check, the user is rerouted to the verification step again and must successfully complete it to proceed further.
  • You can configure a limit for the number of re-attempts a user is allowed for such checks.
  • If a non-mandatory check fails in case of a synchronous check, the user is permitted to continue with the verification process. However, the outcome will accurately indicate the failure of this particular check.
Time LimitSet time limits for users to complete the verification. Ideally, ensure that you tailor the time limit to accommodate longer OTPs.
Instruction PagesCreate instruction pages to guide users through the verification process.
Verification Restart LimitEstablish a limit on the number of times a user can restart the verification process. A restart is triggered when a user fails any of the configured verification checks.

Sample Instruction

The following image shows an optional sample instruction page preceeding the OTP verification step. It can be configured to suit your workflow requirements.

instruction_image

Best Practices

For the best results during the verification process, consider the following tips:

  • Speak naturally and clearly, maintaining a consistent volume and tone.
  • Avoid background noise and ensure a quiet environment during the verification process.
  • Pronounce each digit of the OTP as clearly as possible.

Success Response Sample

The following code is a sample of a success response from the module.


{
"status": "success",
"statusCode": 200,
"metadata": {
"requestId": "<Request_ID>",
"transactionId": "<Transaction_ID>"
},
"result": {
"workflowDetails": {
"workflowId": "skyc_flow",
"version": 1
},
"applicationStatus": "auto_approved",
"results": [
{
"moduleId": "module_video_otp",
"apiResponse": {
"status": 200,
"details": {
"videoRef": "c173579c-abbd-4f83-9a15-a7f1263bad56_0",
"statements": [
{
"statementId": "S_0",
"startTimestamp": "00:00:00",
"endTimestamp": "00:00:02",
"statementText": "5423",
"liveness": {
"apiResponse": {
"status": "success",
"statusCode": 200,
"metadata": {
"requestId": "<Request_ID_1>",
"transactionId": "<Transaction_ID_1>"
},
"result": {
"details": {
"liveFace": {
"value": "yes",
"confidence": "high"
},
"qualityChecks": {
"multipleFaces": {
"value": "no",
"confidence": "high"
},
"blur": {
"value": "no",
"confidence": "high"
},
"eyesClosed": {
"value": "no",
"confidence": "high"
}
}
},
"inputImageUrls": {
"image": "<Image_URL_1>"
},
"summary": {
"action": "pass",
"details": []
}
}
},
"requestId": "<Request_ID_1>",
"image": "<Image_URL_1>",
"results": {
"live": "yes"
}
},
"speechToTextMatching": {
"apiResponse": {
"sttOutput": "",
"matchResult": {
"match": false,
"verboseOutput": "",
"status": "FAILURE"
}
},
"results": {
"match": "no"
}
},
"speechToText": ""
}
],
"images": {}
}
},
"attempts": "2",
"previousAttempts": [
{
"moduleId": "module_video_otp",
"apiResponse": {
"status": 200,
"details": {
"videoRef": "c173579c-abbd-4f83-9a15-a7f1263bad56_0",
"statements": [
{
"statementId": "S_0",
"startTimestamp": "00:00:00",
"endTimestamp": "00:00:02",
"statementText": "5423",
"liveness": {
"apiResponse": {
"status": "success",
"statusCode": 200,
"metadata": {
"requestId": "<Request_ID_2>",
"transactionId": "<Transaction_ID_2>"
},
"result": {
"details": {
"liveFace": {
"value": "yes",
"confidence": "high"
},
"qualityChecks": {
"multipleFaces": {
"value": "no",
"confidence": "high"
},
"blur": {
"value": "no",
"confidence": "high"
},
"eyesClosed": {
"value": "no",
"confidence": "high"
}
}
},
"inputImageUrls": {
"image": "<Image_URL_2>"
},
"summary": {
"action": "pass",
"details": []
}
}
},
"requestId": "<Request_ID_2>",
"image": "<Image_URL_2>",
"results": {
"live": "yes"
}
},
"speechToTextMatching": {
"apiResponse": {
"sttOutput": "5423",
"matchResult": {
"match": true,
"verbose": "Method Used: rule_based\nR: five thousand, four hundred and twenty-three \nH: five thousand, four hundred and twenty-three \n\nSimilarity ratio: 1.0\nDiff: []\nMismatches found = []\n\n",
"status": "SUCCESS!"
}
},
"results": {
"match": "yes"
}
},
"speechToText": "5423"
}
],
"images": {}
}
},
"attempts": "1"
}
]
}
],
"applicantId": "<Applicant_ID>",
"applicationId": "<Application_ID>",
"modulesCount": 1
}
}

Success Response Details

ObjectFieldDescription
apiResponsestatusThe API response status is 200, indicating a successful request.
apiResponsedetailsAdditional details about the analysis including video references.
apiResponse.detailsvideoRefAn identifier for the analyzed video.
apiResponse.detailsstatementsAn array of individual statements that is displayed to the user and associated details. In this scenario, it is limited to a single statement comprising of the OTP.
apiResponse.details.statementsstatementIdA unique identifier for each statement in the video. In this scenario, it is limited to "S_0".
apiResponse.details.statementsstartTimestampThe start time of the statement in the video (e.g., "00:00:05").
apiResponse.details.statementsendTimestampThe end time of the statement in the video (e.g., "00:00:13").
apiResponse.details.statementsspeechToTextMatchingInformation about speech-to-text matching for the statement.
apiResponse.details.statements.speechToTextMatchingresultsIndicates whether there was a match or not for speech-to-text.
apiResponse.details.statements.speechToTextMatchingapiResponseAdditional details about the speech-to-text analysis.
apiResponse.details.statements.speechToTextMatching.apiResponsesttOutputThe speech-to-text (STT) output reflects what the module captured and converted to text.
apiResponse.details.statements.speechToTextMatching.apiResponsematchResultDetails about the match status, status message, and similarity information.
apiResponse.details.statements.liveness.apiResponse.result.details.liveFacevalueIndicates that the face is live with high confidence.
apiResponse.details.statements.liveness.apiResponse.result.details.liveFaceconfidenceHigh confidence in live face detection.
apiResponse.details.statements.liveness.apiResponseinputImageUrlsInput image URLs for liveness detection.
apiResponse.details.statements.liveness.apiResponse.summaryactionThe action is "pass," indicating successful liveness detection.
apiResponse.details.statements.faceMatch.apiResponse.result.details.matchvalueFace match result is "yes" with high confidence.
apiResponse.details.statements.faceMatch.apiResponse.result.details.matchconfidenceHigh confidence in face matching.
apiResponse.details.statements.faceMatch.apiResponseinputImageUrlsInput image URLs for face matching.
apiResponse.details.statementsstatementTextThe text extracted from the statement.
apiResponse.details.statementsspeechToTextThe text obtained from the speech-to-text analysis.
apiResponse.details.statementsfaceDetectionIndicates whether a face was detected in the statement.
apiResponse.details.statementslivenessIndicates whether the face detected appears to be live.
apiResponse.details.statementsfaceMatchIndicates whether the face detected matches a reference face.
attemptsIndicates the serial number of the attempt for the analysis.
previousAttemptsAn array that contains information about previous attempts.

Application View

The following image shows the information about the Video OTP module for a sample application available under the Applications tab of the HyperVerge dashboard.

case_management_image

note

The user's image has been intentionally blurred for representation purposes.

Application Details

The application view displays the recorded video of the user undergoing the verification process and provides the result next to it as shown in the previous image.

The following table describes the fields available in the view.

Field NameDescription
Attempted AtThe timestamp of the verification process
SummaryIf the field value is "pass", it indicates that the application has passed all the configured checks in the module. Otherwise, it reflects a "fail" value.
Input TextThe actual OTP displayed to the user
Speech to TextThe verbal input of the user against the displayed OTP as captured and converted to text during the verification process
Lip ReadingThe field is not applicable at present
Match ResultIf the field value is "yes", it indicates that the OTP displayed to the user and the verbal input from the user matched.
Input ImageDisplays the selfie of the user captured (or provided as an input) as a prerequisite to the Video OTP verification
Face CapturedDisplays a snapshot of the user's face captured during the verification process
LivenessIf the field value is "yes", it indicates that the user passed the liveness verification
Face MatchIf the field value is "yes", it indicates a successful face match verification between the Input Imageand the Face Captured images
Was this helpful?
Ask AIBeta
Hi! How can I help?
Ask me anything about HyperVerge products, APIs, and SDKs.
Try asking: