Products Capture - Scan - Compare

Three products.
One subscription.

Most teams spend months building KYC from scratch. Camera logic, liveness detection, document parsing, face matching - each one a project in itself. Veris is the infrastructure layer that replaces all of it. One key. Ship this week.

What you get

Three tools, each doing
one thing perfectly.

Use one product or all three. Same license key, same dashboard. Modular by design - integrate what you need, add the rest later.

SDK

Veris Capture

Live face capture with liveness detection on device. Returns a cryptographically signed result. Supports Android, iOS, Flutter, React Native.

Passive liveness (LBP) Active liveness challenges 12 quality gate checks Human face validation ECDSA-signed result Zero images uploaded
SDK

Veris Scan

Document OCR for all 9 Nigerian ID and utility bill types. Snap or upload. Returns clean structured JSON.

NIN slip Passport Driver's licence Voter's card National ID Electricity bill Water bill Bank statement AUTO_DETECT
API

Veris Compare

Server-side face similarity. POST two images from your backend, get a 0-100 score. No SDK required.

Precision face matching engine Tuned for West African skin tones and lighting Images deleted in finally block REST API from any language
A complete identity flow

From document scan to verified identity
- in one session.

All three products are designed to work together as one complete workflow. Or drop in just the piece you need. Your architecture, your choice.

01

Scan the ID

Veris Scan extracts structured fields plus a face photo from the document - on device, no upload.

02

Capture the live face

Veris Capture runs liveness on-device and returns a signed proof that the person is real and present.

03

Compare the faces

Veris Compare: document face vs live selfie. One HTTP POST from your backend. 0-100 similarity score back.

04

Verified

Your backend has structured ID fields, signed liveness proof, and a face match score. Everything compliance needs.

Integration

Four platforms.
Same three lines.

Every product ships on all four platforms with identical APIs and the same sandbox key. Copy the snippet, swap in your key, run it.

// build.gradle
implementation 'com.verisinfra:veris-capture-android:1.3.0'
implementation 'com.verisinfra:veris-scan-android:1.3.0'

// Capture: register for results, init once, then start a session
val verisLauncher = VerisCapture.registerForResult(this) { result ->
    when (result) {
        is VerisResult.Success -> verifyWithBackend(result.signedResult)
        is VerisResult.Failure -> showError(result.humanReadableReason)
        is VerisResult.Cancelled -> { /* user closed it */ }
        is VerisResult.SubscriptionInactive -> showUpgradePrompt()
    }
}
VerisCapture.init(this, VerisConfig(licenseKey = "veris_sandbox_xxxx", initNonce = nonce)) { /* ready */ }
VerisCapture.startCapture(verisLauncher, VerisSessionConfig(nonce = nonce))

// Scan: init once, then start a session
VerisScan.init(context = this, licenseKey = "veris_sandbox_xxxx")
VerisScan.startCapture(context = this, documentType = DocumentType.AUTO_DETECT) { response ->
    when (response) {
        is ScanResult  -> processFields(response.idFields, response.faceImageBase64)
        is ScanFailure -> showError(response.userMessage)
    }
}
# Podfile
pod 'VerisCapture', '~> 1.3'

// Capture
VerisCapture.initialise(
    config: VerisConfig(licenseKey: "veris_sandbox_xxxx", initNonce: nonce)
) { _ in }
VerisCapture.startVerification(from: self, session: VerisSessionConfig(nonce: nonce)) { result in
    switch result {
    case .success(let capture): verifyWithBackend(capture.signedResult)
    case .failure(_, let reason, _): showError(reason)
    default: break
    }
}

// Scan: see SDK Access in your dashboard for the current iOS package
# pubspec.yaml
veris_capture: ^1.3.0

// Capture
await VerisCapture.instance.initialise(
  config: VerisConfig(licenseKey: 'veris_sandbox_xxxx', initNonce: nonce),
);
final result = await VerisCapture.instance.startVerification(
  session: VerisSessionConfig(nonce: nonce),
);
if (result is VerisSuccess) { verifyWithBackend(result.signedResult); }

// Scan: see SDK Access in your dashboard for the current Flutter package
// npm install
npm install @verisinfra/react-native-capture

// Capture
await VerisCapture.initialise({ licenseKey: 'veris_sandbox_xxxx', initNonce: nonce });
const result = await VerisCapture.startVerification({ nonce });
if (result.type === 'success') { verifyWithBackend(result.signedResult); }

// Scan: see SDK Access in your dashboard for the current React Native package

Samples use a sandbox key. Find the exact copy-paste snippet in your dashboard under SDK Access →

By the numbers

Three products, four platforms,
one very small footprint.

12
quality checks on every capture - blur, lighting, angle, liveness
9
Nigerian document types - 5 ID + 4 utility bill
4
platforms - Android, iOS, Flutter, React Native
0
biometric images ever stored on Veris servers
Try it yourself

See it on your phone
before you write a line of code.

Download Veris Labs - our free demo app. Run a live face capture, scan a Nigerian ID, and test a face comparison. No account or key needed. Android now, iOS coming soon.

Download for Android App Store · Coming soon
Learn about Veris Labs →
Face Capture
12-point quality gate · Liveness detection · Signed payload
Document Scan
5 Nigerian ID types · 4 utility bills · On-device OCR
Face Compare
0–100 score · Veris Match · No images stored

Stop rebuilding infrastructure. Start building your product.

Sandbox key in seconds. All three products. Compliance-ready from day one. No credit card required.

No credit card - Sandbox includes all 3 products - Live key once your business is verified