Biometric Portrait Consistency
Compare the primary and secondary portraits printed on one identity document.
Live Engine
Engine
src/lib/verification/biometric-server/face (SCRFD + ArcFace, ONNX Runtime Node)
API
POST /api/v1/biometrics/verify
Biometric Portrait Consistency compares the portraits printed on a single identity document โ the primary photo, the secondary/ghost image, or the chip portrait โ and reports whether they belong to the same person. Detection uses SCRFD, embeddings use ArcFace (MobileFaceNet), and the comparison is a calibrated cosine similarity.
DocumentationCompare portraits (1:1)
POST /api/v1/biometrics/verify ยท two document portraits ยท real SCRFD + ArcFace inference
Upload Reference portrait
Upload Secondary portrait
Endpoint
POST /api/v1/biometrics/verify
modalityโ"face"referenceImageโ base64 JPG/PNG/WEBP (primary portrait)probeImageโ base64 JPG/PNG/WEBP (secondary portrait)- Auth:
Authorization: Bearer vxd_test_โฆ | vxd_live_โฆ
Error codes
- 400 invalid_request โ Malformed JSON body or missing modality.
- 401 unauthorized โ Missing, malformed, or unknown API key.
- 413 payload_too_large โ One of the portraits exceeds the size limit.
- 422 validation_failed โ Image could not be decoded, or no face was detected.
- 429 rate_limited โ Monthly/burst quota exceeded for this key.
- 502 upstream_unavailable โ Inference service unavailable โ retry with backoff.
Request example
POST /api/v1/biometrics/verify
Authorization: Bearer vxd_test_...
Content-Type: application/json
{
"modality": "face",
"referenceImage": "<base64 portrait #1>",
"probeImage": "<base64 portrait #2>"
}Response example
{
"ok": true,
"result": {
"match": true,
"decision": "match",
"score": 0.9134,
"threshold": 0.28,
"engine": "veridexa-face",
"engineVersion": "arcface-mobilefacenet",
"latencyMs": 412
}
}