How a template is created
Retention requires a User anchor. A session created without
vendor_data has no User, so it cannot retain a template; the deletion reports ineligible_no_vendor_user and the embedding is deleted with the session.
What a template contains
Templates are tenant-scoped and used only on your instruction inside your application: duplicate-face and multi-account detection, Biometric Authentication, and your own face lists. They are never used for model training, analytics, cross-organization matching, Networks shared signals, or Didit’s independent fraud processing.
Template object
Status
How templates are used in matching
Anactive template takes part in exactly the same matching as a live session face: automatic duplicate detection during new sessions, the standalone Face Search API, Biometric Authentication, and your face lists. A hit on a retained template is reported with source: "retained_template", the owning User’s vendor_user_id and vendor_data, and the biometric_template_id. It never carries a session id, a match image, identity details, or a status, because the session that produced the face no longer exists. See Face Search report.
A retained template is never blocklisted. If the deleted session’s face was on a face blocklist, that blocklist entry keeps its own independent biometric entry and its own lifecycle: removing the list entry deletes the blocklist entry, and purging the template does not touch the list.
Purge points
All of the following remove the template from matching and delete the stored template:
Switching the application policy back to
delete_with_session stops new templates from being created but does not purge existing ones. Purge them explicitly.
Purges delete the stored template first and only then mark the template purged, so a purge that returns 503 leaves the template in purge_failed, already excluded from matching, and safe to repeat. A repeated purge of an already purged template returns already_purged.
Audit trail
Every retain and purge attempt, including failures and ineligible outcomes, is recorded with the acting principal (retained_by / purging principal and type), instruction_class, instruction_source, instruction_id, provenance_reference, and the outcome. Send your own instruction_id on deletions so you can correlate Didit’s audit trail with your erasure log. Audit entries never contain images, vectors, identity fields, or email addresses.
Legal holds
A legal hold is an exception, never a retention mode. Didit does not place holds on its own initiative; a hold can only follow a documented instruction under your Data Processing Agreement or a binding order from a competent authority. While a hold applies the template is markedheld_out_of_use: it is excluded from every kind of matching and from routine recovery, and it is never searchable. There is no API to create or lift holds. Contact your Didit representative if you receive an order that affects retained templates.
Permissions and authentication
The Biometric Templates endpoints accept application API keys only (x-api-key). Business Console user tokens are rejected with 403. Console users manage templates through Lists → Biometric templates with their lists permissions.