FACE MATCH · ON-DEVICE 1:1 VERIFICATION · PLUS

Match a selfie to an ID photo right on the device.

On-device face detection and 1:1 matching that returns a single accuracy score from 0 to 100, with clear reliability bands so your flow knows when to accept, when to route to manual review, and when to decline. It runs entirely on the handset with no upload, across iOS, Android, Flutter and React Native, so a face never has to leave the device to be verified.

On-device · offline Accuracy score 0–100 Reliability bands Plus · license-gated
WHAT YOU GET

Detect a face, compare two, get one clear score

A focused verification engine that answers the one question an onboarding or login flow needs: is this the same person? It computes the answer locally on the phone with no server round-trip.

Face detection

Find the face in a photo, an ID card or a selfie and get its location, so you can confirm a usable face is present before you try to match anything.

1:1 matching

Compare two faces, one from the ID document and one from the live selfie, and get a similarity result. No database, no gallery search, just the two faces you present.

Accuracy score 0–100

Every match returns a single number from 0 to 100. The higher it is, the more alike the two faces are, giving you a threshold you can tune to your risk appetite.

Reliability bands

The score maps to plain-language bands, from highly reliable down to no match, so your rules can accept, review or decline without anyone eyeballing a raw number.

Fully on-device

Detection and matching both run on the handset. No face image, template or score has to be sent anywhere for the decision to be made, which keeps sensitive biometrics local.

Duplicate detection

Because you control both inputs, you can also compare a new applicant's face against one you captured earlier to catch the same person applying twice under different details.

Decision-support, tuned to your risk

The accuracy score is a strong signal, not a verdict on its own. Set the threshold that fits your flow, and for the highest-assurance cases pair the on-device result with a backend verification step. Because the match runs locally, you get the signal at the moment of capture, before any personal data leaves the phone.

ACCURACY BANDS

What the score means

One number, five bands. Wire these to your accept / review / decline rules so the outcome is consistent every time, whatever the score.

ScoreReliabilityRecommended action
90–100Highly reliableStrong, confident match. Suitable for straight-through verification.
75–89StrongConfident match. Accept for most onboarding and login flows.
65–74ModeratePlausible match. Route to manual review before you accept it.
50–64LowWeak signal. Treat as unverified; retry the capture or review.
0–49No matchThe two faces do not match. Decline or restart the check.

For exceptionally high assurance, add a backend check

The bands above are a practical default for on-device decisions. Where a false accept would be costly, keep the on-device match as the fast first gate and confirm the borderline and high-value cases with a server-side verification step as well.

HOW IT WORKS

Detect, then match, in a few lines

  • ✓ Detect the face in each image first to confirm a usable face is present
  • ✓ Match two faces and read back a single 0–100 accuracy score
  • ✓ Compare the score to your own thresholds to accept, review or decline
  • ✓ A Plus, license-gated feature: activate the license once at startup
  • ✓ One integration ships to iOS, Android, Flutter and React Native
java
// Plus feature — activate the license once at startup
Config.License.Activate(this, licenseString);

HumanFaceHelper faces = new HumanFaceHelper(this);

// 1. Detect the face in each image (ID photo + selfie)
faces.detectHumanFaces(idCardBitmap, r -> {
    // r.FACE_DATA: boxes + IDs, r.DOC_ID
});

// 2. Match the two faces — returns a 0–100 accuracy score
faces.matchHumanFaces(doc1, face1, doc2, face2, r -> {
    int accuracy = r.ACCURACY;      // 0..100 similarity
    if (accuracy >= 75) { /* accept */ }
    else if (accuracy >= 65) { /* manual review */ }
});
THE KYC PIPELINE

Three steps to an offline face check

Face match is the last step of a capture pipeline you can build entirely from the same SDK: get the ID photo, get the selfie, then compare them, all on the device.

1 · Capture the ID

Photograph the identity card and crop the exact region, then use the portrait on it as the reference face.

ID card capture →

2 · Capture the selfie

Take a quality-gated selfie with centring, distance and lighting checks, so the live face is clean enough to compare.

Face capture →

3 · Match on-device

Compare the ID portrait with the selfie and read the accuracy score. Accept, review or decline right there in the flow.

You are here

USE CASES

Where an on-device face match earns its place

KYC · ONBOARDING

Offline face verification

Confirm the person holding the phone is the person on the ID, right at signup, with no upload. The accuracy score gates straight-through approval, and borderline scores go to review.

DIGITAL ONBOARDING

Presence checks at capture

Pair the match with a fresh, quality-gated selfie so the face being compared is captured live in the session, a strong liveness-adjacent signal that raises the bar for impostors.

LOGIN · AUTH

Re-verification at sign-in

Ask a returning user for a quick selfie and match it against the face on file to step up a sensitive action, all decided on the device in the moment.

FRAUD

Duplicate-applicant detection

Compare a new applicant's face with faces captured earlier to spot the same person applying twice under different identities, before an account or a loan is opened.

FIELD KYC

Verification with no signal

Agents in low-connectivity areas can still verify a face against an ID on the spot, because the whole check runs offline on the handset.

HIGH ASSURANCE

Fast gate, backed by the server

Use the on-device match as an instant first gate, then confirm the high-value and borderline cases with a backend verification step for belt-and-braces assurance.

PLATFORM SUPPORT

Every major mobile platform · one license can cover all

iOS

Swift · UIKit · SwiftUI

Android

Kotlin · Java · Jetpack Compose

Cross-platform

React Native · Flutter

PRICING

Part of the Plus tier

Face match is a Plus, license-gated feature of the mobile SDK, alongside the other advanced AI and fraud-signal capabilities. One flat license, no per-match metering. Pricing shown in your local currency.

Affordable to all

The same on-device face verification a bank ships is priced so a lending startup or a single onboarding app can ship it too. Flat annual license, unlimited matches.

See the full mobile SDK →

FAQ

Common questions

Does the face-match SDK run fully on-device and work offline?
Yes. Both face detection and 1:1 matching run locally on the handset, so a verification can complete with no internet connection. No face image, template or score is uploaded to a server, so everything needed to reach a decision stays on the phone. It works the same way across iOS, Android, Flutter and React Native.
Which mobile platforms does the face-match SDK support?
It runs on iOS, Android, Flutter and React Native from a single integration. The matching logic is identical across all four and returns the same 0-100 accuracy score, so you build the verification flow once and ship it to every platform.
Is this 1:1 face verification or a 1:N database search?
It is 1:1 verification: you supply exactly two faces and it tells you how alike they are. There is no gallery or database search, and the SDK does not index or store faces, which makes it a fit for confirming a selfie against a single ID photo rather than identifying an unknown face in a crowd.
What does the 0-100 accuracy score mean, and what are the reliability bands?
Each match returns a single number from 0 to 100 that reflects how similar the two faces are, where higher means more alike. The score maps to five bands: 90-100 highly reliable, 75-89 strong, 65-74 moderate (route to manual review), 50-64 low, and 0-49 no match. You choose the thresholds that decide when your flow accepts, reviews or declines.
Can it detect the same person applying twice under different details?
Yes. Because you control both inputs, you can compare a new applicant's face against a face you captured earlier and read back an accuracy score, flagging a likely duplicate before an account or loan is opened. It only compares the two faces you present, so this is a deliberate check you run rather than a background gallery search.
Is any face image or biometric data sent to a server?
No. Detection and matching both compute on the device, so the face image and the resulting score never leave the handset to reach a decision. Keeping the biometric local simplifies data-residency and privacy requirements, and for the highest-assurance cases you can still add your own backend verification step.
Is the on-device accuracy score enough on its own for KYC?
The score is a strong decision-support signal, not a verdict on its own. For most onboarding and login flows a high band can drive straight-through approval while borderline scores go to manual review. Where a false accept would be costly, keep the on-device match as a fast first gate and confirm high-value and borderline cases with a server-side check as well.
How is the face-match feature licensed and priced?
Face match is a Plus, license-gated capability: you activate a license once at startup to unlock it. Licensing is a flat model with no per-match metering, so unlimited matches are included. See contact to talk through plans for your volume.

Add face verification to your capture flow

Free trial. All platforms. On-device. No credit card.