identityVerified boolean backed by a transparent match score — no black-box decisions.
Integration modes
Vouch offers two ways to trigger identity verification. Choose the one that fits your integration context.Iframe modal (recommended)
Call
vouch.identity.verify(externalUserId) from the browser. Vouch launches a zero-click iframe that guides your user through document capture and selfie recording entirely within the modal. You receive the result via a callback — no file handling on your side.Programmatic upload
Call
vouch.identity.submitVerification(documentFile, selfieFrames[], externalUserId) to send a multipart request directly from your server or a custom UI. Use this mode when you need full control over the capture experience or are operating in a non-browser environment.The verification pipeline
Every submission — regardless of integration mode — passes through the same five-stage AI pipeline before a result is returned.1
Document upload
The document image is received as a multipart upload or captured directly inside the iframe modal. Vouch validates the file format and image quality before proceeding.
2
OCR parsing
Optical character recognition extracts structured data from the document — name, date of birth, document number, expiry date, and issuing authority — and checks for signs of tampering or low-quality scans.
3
Face extraction
The portrait embedded in the document is isolated and normalised. If no face is detected or the portrait region is obscured, the pipeline returns a
face_not_found rejection.4
ArcFace biometric matching
The extracted document portrait is compared against the selfie image using the ArcFace deep learning model. The comparison produces an
identityMatchScore between 0 and 99. A score of 90 or above is required for a positive match.5
Liveness detection
Multiple selfie frames captured during the session are analysed to confirm the user is physically present. Static photos, printed images, and screen replays are rejected. Passing this check sets
livenessPassed: true.Match score interpretation
TheidentityMatchScore returned in the response tells you exactly how closely the selfie matched the document portrait. Use the table below to understand what each range means.
Only a score of 90 or above sets
identityVerified: true. Scores in the 50–89 range indicate the pipeline detected faces in both images but could not reach the confidence threshold — this often happens with low-resolution document portraits or inconsistent lighting conditions.Supported document types
Pass one of the following values as thedocumentType parameter when using the programmatic upload mode. The iframe modal detects the document type automatically.
Response fields
boolean
true when the ArcFace match score is ≥ 90 and liveness detection passed. false in all other cases.number
Integer between 0 and 99 representing the biometric similarity between the selfie and the document portrait. Higher is a closer match.
boolean
true when the multi-frame analysis confirms a real, present person. false if the liveness check detects a replay, printed photo, or insufficient frame quality.string
The document type detected or submitted. One of
passport, drivers_license, national_id, or voters_card.What livenessPassed means
Liveness detection analyses multiple frames captured during the selfie stage rather than a single photograph. This guards against presentation attacks — attempts to pass verification by holding up a photo of someone else, playing a video on a screen, or using a deepfake. The multi-frame approach detects micro-movements, natural blinking, and depth cues that a static image cannot replicate. If the captured frames do not meet the minimum quality or motion threshold, the pipeline marks livenessPassed: false and the overall verification fails regardless of the match score.
Rejection reasons
When a verification attempt fails, the response includes a rejection reason. Use this value to provide actionable feedback to your user.face_not_found
face_not_found
No face was detected in either the document portrait region or the selfie frames. Ask the user to retake the selfie in good lighting and ensure the document is fully visible with no glare.
liveness_failed
liveness_failed
The multi-frame analysis determined the selfie was not captured from a live person. Ask the user to complete the verification in a well-lit environment, looking directly at the camera, without using a pre-recorded video.
match_below_threshold
match_below_threshold
A face was found in both images but the ArcFace similarity score fell below 90. This can happen if the document photo is significantly older than the user’s current appearance, or if image quality is poor. Ask the user to retake the selfie with better lighting or submit a different document.
document_unreadable
document_unreadable
The OCR pipeline could not extract reliable data from the document image. This is usually caused by glare, blurring, a partially cropped document, or an unsupported document type. Ask the user to photograph the document on a flat, dark surface with the camera held perpendicular to the page.