Benchmarks

Measured, not marketed.

Every number below comes from a harness that ships in our repository, with the dataset and conditions stated next to it. Where we don't have externally validated numbers yet, we say so instead of inventing them.

Latency

What a check actually takes.

Full pipeline — decode, detect, embed, match, anti-spoof, sign — in one process. No queue between you and the model.

<200ms

typical full check, production API

~110ms

end-to-end, our production release build

Measured on our production release build: end-to-end from HTTP request in to Ed25519-signed response out, with CPU-only inference (pure-Rust tract ONNX runtime, no GPU) on the cloud virtual machine that serves liveliness.neetix.in. Your numbers depend on hardware, image size and network path — the binary exposes per-route latency histograms at /metrics so you can measure yours, not trust ours.

AML screening

Sanctions screening, tuned in the open.

Fuzzy name matching against the consolidated OFAC and UN lists — 18,079 entries. We ship a match threshold of 0.90 and publish exactly why.

MeasureThreshold 0.850.90 (shipped)
Exact-name recall100%100%
Typo recall (one adjacent-character swap)100%100%
False positives — two-token clean names17.5%1.25%
False positives — three-token clean names4.3%0.08%

Moving from 0.85 to 0.90 cuts false positives roughly 14× with no loss of typo recall. Above ~0.92, genuinely misspelled sanctioned names start slipping through — which is why 0.90 is the shipped default, not a bigger, better-looking number.

Conditions: derived with our open aml_audit harness (cargo run --release --bin aml_audit -- tune) against the full 18,079-entry ingested OFAC + UN list. Typo recall uses a single adjacent-character transposition on real listed names; false-positive rates use synthetic realistic two- and three-token clean names, not customer data. Exact matches score 1.0 and are recalled at every threshold. The table is re-derived whenever the list is re-ingested.

Liveness & face match

Methodology first. Numbers after validation.

An accuracy percentage without a stated dataset and protocol is marketing, not measurement. Here is our protocol; the numbers follow external testing.

FMR

False-match rate

Impostor pairs — two different people — that the face matcher scores as the same person. The security failure.

FNMR

False-non-match rate

Genuine pairs — the same person twice — scored as different people. The friction failure your users feel.

APCER

Attack presentation classification error rate

Presentation attacks — prints, replays, masks — that the liveness check accepts as genuine. ISO/IEC 30107-3's security metric.

BPCER

Bona fide presentation classification error rate

Real, live people the liveness check rejects as attacks. ISO/IEC 30107-3's usability metric — the one vendors don't quote.

How we evaluate

The evaluation harness ships in the repository as a binary (src/bin/eval). It takes a CSV of image pairs labeled genuine or impostor, extracts a 512-d embedding per image with the same engine that serves production, and reports FMR and FNMR across cosine thresholds plus the equal-error crossover (EER). Liveness is reported as APCER/BPCER per ISO/IEC 30107-3 — attack acceptance and genuine-user rejection, always as a pair, because either one alone can be gamed.

Third-party PAD testing (iBeta, ISO/IEC 30107-3) is planned. We will publish our internal accuracy numbers after external validation — with the dataset, protocol and demographic breakdown attached, the same way every other figure on this page is reported.

Until then, this section deliberately contains no accuracy percentages. If a vendor quotes one without telling you the dataset, ask for the FNMR and the BPCER that came with it.

Run it yourself

Don't take our word for it.

The engine ships as one binary and the harnesses ship in the repository. Benchmark on your own hardware, with your own data.

cargo run --release --bin eval -- pairs.csv

FMR/FNMR across cosine thresholds, plus the EER crossover, on your own genuine/impostor pairs — 512-d embeddings, same engine as production.

cargo run --release --bin aml_audit -- tune

Re-derives the entire AML threshold table on this page against the full ingested sanctions list — recall and false-positive curve per threshold.

k6 run scripts/loadtest.js

Drives the real HTTP stack with AML screening at a constant arrival rate and reports latency percentiles — cross-check them against the server's own /metrics histograms.

500 free credits at signup · API key is shown once at signup.