Stored faces double as the reference for Biometric Authentication: create a biometric-auth session with the user’s
vendor_data and omit portrait_image, and Didit reuses the stored face automatically (approved liveness face first, then the ePassport chip photo, then the ID document portrait, then a manually enrolled profile face).How faces attach to a user
1
Captured during liveness
When a User goes through a session with liveness enabled, Didit captures a selfie, runs passive liveness detection, extracts the largest face, and generates a vector embedding for search.
2
Stored on the user profile
The face is linked to the session and the parent User entity. The portrait URL surfaces on the user profile as
portrait_image.3
Indexed for search
The embedding is added to the search index. Subsequent sessions can run 1:N searches against this index.
Face search (1:N)
Face search lets you find a user by uploading an image and matching it against every enrolled face in your application. Use-cases:- Duplicate detection at onboarding — prevent the same person from creating two accounts.
- Reverse lookup — identify the user behind a CCTV frame or an image in a fraud investigation.
- Repeat customer recognition — skip KYC for a returning customer.
POST /v3/face-search/— standalone face search
Duplicate detection
Every new face can be compared against existing enrolled faces to surface duplicates. Didit assigns each face anapproved_duplicate_status:
Workflows can be configured to:
- Decline duplicate-flagged sessions automatically.
- Flag for review — route to a human analyst.
- Warn only — allow but add a risk tag.
Face blocklist
When a session is declined (by rule, analyst, or workflow configuration), the associated face is automatically added to the Face Blocklist for your application. Future sessions with a matching face are rejected.Upload an imported face to a User profile
If you are migrating from another KYC provider, you can create the User first and then attach a trusted face image to that profile. The User is still keyed by yourvendor_data, but the face upload endpoint uses Didit’s internal User id (didit_internal_id) so the target is unambiguous.
1
Create or retrieve the User
Call
POST /v3/users/create/ with your stable vendor_data, or call GET /v3/users/{vendor_data}/ if the User already exists.2
Read didit_internal_id
The User response includes
didit_internal_id. Keep using vendor_data in your own system; use didit_internal_id only for profile attachment endpoints.3
Upload the face
Call
POST /v3/organization/{organization_id}/application/{application_id}/vendor-users/by-id/{didit_internal_id}/faces/upload/ with a base64-encoded face image.How blocklisting happens
Uploading a face to the blocklist
To block a user by face programmatically, upload the face image to a face-type blocklist via the dedicated Upload face to list endpoint. Didit extracts the biometric embedding and inserts it into the matching index — any future session whose liveness selfie matches is auto-declined.Profile face upload and face blocklist upload are different operations. Use profile upload to attach a trusted imported face to a User for evidence, duplicate detection, and face search. Use the Lists API to block a face so future matching sessions are rejected.
Removing a face from the blocklist
Remove the entry from the console at Blocklist → Faces → row actions → Remove, or use the Delete entry endpoint.Retained biometric templates after session deletion
Deleting a session deletes the face image and, by default, the face embedding, so the person drops out of duplicate detection and Face Search. If you delete sessions soon after approval but still need to catch repeat sign-ups, enable biometric-template retention on the application, or sendretain_face_embeddings: true on the delete call.
Didit then deletes the session and all of its data as usual and keeps one separately managed, image-free face biometric template anchored to the User:
- It contains the numeric face template plus retention metadata only. It never contains the face image, liveness video, document data, extracted identity fields, the decision, or the deleted session’s id.
- It takes part in duplicate detection, Face Search, biometric authentication, and your face lists exactly like a live session face. Hits are reported with
source: "retained_template", the User’svendor_user_idandvendor_data, and abiometric_template_id. - It is biometric data with a finite
expires_at. It is purged when the User is deleted, when any session of that User is deleted withdeletion_instruction: "privacy_erasure", when it expires, or when you purge it in Lists → Biometric templates or through the Biometric Templates API. - A session created without
vendor_datahas no User to anchor a template to; deleting it reportsineligible_no_vendor_userand the embedding is deleted with the session. - Retained templates are never blocklisted. A face blocklist entry created from the deleted session keeps its own independent biometric entry and lifecycle.
Face lifecycle summary
Upload a face from the console
Compliance operators can upload faces manually:- Navigate to Users → [user] → Actions → Upload face.
- Select an image; Didit extracts the largest face and stores a new Face record linked to the user.
- The face is enrolled for profile evidence, duplicate detection, and face search. Use the Blocklist area when the goal is to reject future matching sessions.
- You have a known portrait of a customer verified through an offline channel.
- You want to pre-seed a blocklist with known bad actors from your fraud database.
Privacy and retention
- Face embeddings are numerical vectors, not images. Images themselves are stored in encrypted object storage with signed-URL access. A face embedding is biometric data.
- Retention follows your application’s data retention policy. Retained biometric templates follow the stricter, finite biometric-template retention period.
- Deleting a session deletes the image and, by default, the embedding. If your application has opted in to biometric-template retention, deleting a session keeps an image-free template until it expires or is purged.
- For a GDPR / CCPA right-to-be-forgotten request, delete the person’s sessions with
deletion_instruction: "privacy_erasure"or delete the User: both purge every retained template as well. Face blocklist entries you manage stay until you remove them.
Next steps
Face Search
How 1:N face search works.
Liveness
Liveness detection that captures the face.
Blocklist API
Upload a face to a blocklist.
Biometric templates
Templates retained after session deletion.
User blocklist
How blocklisting a user works.