New: Liveness detection & deepfake screening now included on every plan. See why it matters →
Features

Inside every verification session.

This is the part your security and engineering team will actually want to read. Six checks, explained down to the mechanism, not just the marketing line.

0%
Document classification accuracy
0
Countries & document types covered
0
Median verification session time
0
Supported languages
MRZ parsed ✓
Hologram detected ✓
No tampering ✓
Photo matched ✓
1 Document verification

Not OCR. Full forensic analysis.

A photo of a government ID gets run through machine-vision classifiers trained on document templates from over 100 countries: passports, driver's licenses, and national IDs. We extract the MRZ and barcode data, cross-check it against the printed fields, and inspect the document image itself for the security features issuers actually use: holograms, microprint, UV patterns, and font-level tampering signatures.

If a field was edited in Photoshop, a photo was swapped, or the document template doesn't match what that country issues, the verification report flags it before a human ever needs to look.

Coverage100+ countries, hundreds of document formats
Checks runOCR + MRZ parsing, template match, security feature detection, tamper analysis
Avg processing timeUnder 3 seconds per document
0 match

Configurable match threshold (default 0.92 cosine similarity)

2Selfie & biometric matching

The face in the photo. The face right now.

We extract facial landmarks from both the ID photo and the live selfie, generate a numerical embedding for each face, and compare them using cosine similarity. It's the same family of technique used across modern face-matching systems, tolerant of lighting, angle, and minor aging differences, but sensitive enough to reject a different person entirely.

Matching runs in the same session as liveness detection, so a high-quality photo of someone else's photo still gets caught. Biometric matching alone was never meant to stand on its own, and we don't sell it that way.

MethodFacial landmark extraction → embedding vector → cosine similarity scoring
Default threshold0.92 similarity, configurable per integration
Comparison timeSub-second, runs inline with the session
Photo of a photo
BLOCKED
Screen replay
BLOCKED
3D mask
BLOCKED
Live, present person
VERIFIED
3 Liveness detection

Proving a person is actually there.

Liveness runs two layers. Passive liveness analyzes texture, depth cues, and reflection patterns from a single frame, enough to catch a printed photo or a screen replay, including the moiré patterns screens leave behind. Active liveness adds a lightweight challenge, like a head turn, that a static image or pre-recorded video simply can't respond to correctly in real time.

This is the layer that's been rebuilt the most as generative video has gotten better, and the one we update the fastest when a new spoofing technique shows up in the wild.

Passive checksTexture & depth analysis, screen-replay / moiré detection
Active checksReal-time challenge-response, no pre-recorded video can pass
Decision timeUnder 500ms per frame batch
FieldSubmittedOn file
Full nameJane A. DoeJane A. Doe
Date of birth04 / 12 / 199004 / 12 / 1990
ID number•••• 8841•••• 8841
MATCH CONFIRMED
4 ID number lookup

An extra layer for high-risk flows.

Some flows need more than "is this a real document." An optional ID number lookup cross-references the keyed-in name, date of birth, and government ID number against authoritative record sources, returning a clean match, no-match, or no-record-found result.

It's built as an add-on for a reason: most integrations don't need it, but lending, high-value marketplaces, and anything touching regulated financial flows usually do.

Fields checkedFull name, date of birth, government ID number
Result setMatch / no match / no record found
AvailabilityOptional add-on, available on request
Your app
+
Hosted session
+
Webhook
=
Verified result, in your backend
created
processing
requires_input
completed
5 Real-time verification sessions

Single-use, short-lived, stateful.

Every check happens inside a hosted, single-use verification session. Your users never touch a form field that posts sensitive data to your own servers. The session moves through a small state machine: created, processing, occasionally requires_input if a recapture is needed, and completed with a clean verified or unverified result.

Completion is pushed to you the moment it happens through a signed webhook, with automatic retries on delivery failure, no polling loop required on your end.

Session statescreated → processing → requires_input → completed
DeliverySigned webhook, automatic retries on failure
Session TTLConfigurable expiry, single-use by default
6Fraud & bot prevention

Catching the ring, not just the account.

A single verified account tells you one thing. The pattern across every session on your platform tells you more: device fingerprints, IP and network signals, and behavioral patterns get compared session-to-session to surface clusters of linked, likely-synthetic identities before they cost you anything.

Every one of those signals rolls up into a single risk score attached to the verification report, so your team can set the bar wherever your risk tolerance actually sits.

Signals usedDevice fingerprinting, velocity checks, cross-session pattern linking
OutputComposite risk score attached to every verification report
ScopePatterns detected across every session on your platform

Get Real.

Book 15 minutes and we'll run a live verification session end to end.