curl
curl -X GET 'https://verification.didit.me/v3/biometric-templates/?vendor_data=user-42&status=active' \
-H 'x-api-key: YOUR_API_KEY'import requests
url = "https://verification.didit.me/v3/biometric-templates/"
headers = {"x-api-key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'x-api-key': '<api-key>'}};
fetch('https://verification.didit.me/v3/biometric-templates/', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://verification.didit.me/v3/biometric-templates/",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"x-api-key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://verification.didit.me/v3/biometric-templates/"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("x-api-key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://verification.didit.me/v3/biometric-templates/")
.header("x-api-key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://verification.didit.me/v3/biometric-templates/")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["x-api-key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"count": 1,
"next": null,
"previous": null,
"results": [
{
"uuid": "9d2f4b6e-1c3a-4e8f-b7d5-0a1c2e3f4a5b",
"vendor_user_uuid": "2f7c1a9e-8b4d-4c6a-9e1f-3d5b7a9c1e2f",
"vendor_data": "user-42",
"source_type": "session_delete",
"provenance_reference": "6b1e8d2f-4a3c-4f9e-8c7d-1a2b3c4d5e6f",
"retention_policy": "retain_until_user_deleted",
"retention_override": null,
"retained_at": "2026-08-28T10:15:42.318402Z",
"expires_at": "2027-08-28T10:15:42.318402Z",
"retained_by": "3c9e2b1f-7d4a-4e8b-9c1d-5f6a7b8c9d0e",
"retained_by_type": "API_KEY",
"instruction_class": "operational_session_delete",
"instruction_source": "api",
"instruction_id": "post-approval-cleanup-2026-08",
"held_out_of_use": false,
"status": "active",
"purged_at": null
}
]
}{
"retained_to": [
"Must be on or after retained_from."
]
}{
"detail": "You do not have permission to perform this action."
}Biometric Templates
List Biometric Templates
GET /v3/biometric-templates/ — paginated list of the image-free face biometric templates your application retains, filtered by user, status, source, and date.
GET
/
v3
/
biometric-templates
/
curl
curl -X GET 'https://verification.didit.me/v3/biometric-templates/?vendor_data=user-42&status=active' \
-H 'x-api-key: YOUR_API_KEY'import requests
url = "https://verification.didit.me/v3/biometric-templates/"
headers = {"x-api-key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'x-api-key': '<api-key>'}};
fetch('https://verification.didit.me/v3/biometric-templates/', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://verification.didit.me/v3/biometric-templates/",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"x-api-key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://verification.didit.me/v3/biometric-templates/"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("x-api-key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://verification.didit.me/v3/biometric-templates/")
.header("x-api-key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://verification.didit.me/v3/biometric-templates/")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["x-api-key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"count": 1,
"next": null,
"previous": null,
"results": [
{
"uuid": "9d2f4b6e-1c3a-4e8f-b7d5-0a1c2e3f4a5b",
"vendor_user_uuid": "2f7c1a9e-8b4d-4c6a-9e1f-3d5b7a9c1e2f",
"vendor_data": "user-42",
"source_type": "session_delete",
"provenance_reference": "6b1e8d2f-4a3c-4f9e-8c7d-1a2b3c4d5e6f",
"retention_policy": "retain_until_user_deleted",
"retention_override": null,
"retained_at": "2026-08-28T10:15:42.318402Z",
"expires_at": "2027-08-28T10:15:42.318402Z",
"retained_by": "3c9e2b1f-7d4a-4e8b-9c1d-5f6a7b8c9d0e",
"retained_by_type": "API_KEY",
"instruction_class": "operational_session_delete",
"instruction_source": "api",
"instruction_id": "post-approval-cleanup-2026-08",
"held_out_of_use": false,
"status": "active",
"purged_at": null
}
]
}{
"retained_to": [
"Must be on or after retained_from."
]
}{
"detail": "You do not have permission to perform this action."
}Returns a paginated list of the biometric templates your application currently holds. Purged templates are not listed.
See the overview for every field.
Query parameters
| Parameter | Type | Description |
|---|---|---|
vendor_data | string | Case-insensitive substring match on the owning User’s current vendor_data |
vendor_user_uuid | UUID | Exact match on the owning User |
status | enum | pending, active, expired, held_out_of_use, purge_pending, purge_failed |
source_type | enum | session_delete, automatic_retention, backfill |
retained_from | datetime | Templates retained at or after this time |
retained_to | datetime | Templates retained at or before this time. Must not be earlier than retained_from. |
ordering | enum | retained_at, -retained_at (default), expires_at, -expires_at |
limit | integer | Page size |
offset | integer | Pagination offset |
Example
curl -X GET "https://verification.didit.me/v3/biometric-templates/?vendor_data=user-42&status=active" \
-H "x-api-key: YOUR_API_KEY"
{
"count": 1,
"next": null,
"previous": null,
"results": [
{
"uuid": "9d2f4b6e-1c3a-4e8f-b7d5-0a1c2e3f4a5b",
"vendor_user_uuid": "2f7c1a9e-8b4d-4c6a-9e1f-3d5b7a9c1e2f",
"vendor_data": "user-42",
"source_type": "session_delete",
"provenance_reference": "6b1e8d2f-4a3c-4f9e-8c7d-1a2b3c4d5e6f",
"retention_policy": "retain_until_user_deleted",
"retention_override": null,
"retained_at": "2026-08-28T10:15:42.318402Z",
"expires_at": "2027-08-28T10:15:42.318402Z",
"retained_by": "3c9e2b1f-7d4a-4e8b-9c1d-5f6a7b8c9d0e",
"retained_by_type": "API_KEY",
"instruction_class": "operational_session_delete",
"instruction_source": "api",
"instruction_id": "post-approval-cleanup-2026-08",
"held_out_of_use": false,
"status": "active",
"purged_at": null
}
]
}
Errors
| Status | When |
|---|---|
400 | Invalid filter value, or retained_to earlier than retained_from |
403 | Console user token, or the API key is not allowed |
Authorizations
Query Parameters
Case-insensitive substring match on the owning User's current vendor_data.
Exact match on the owning User.
Lifecycle status. Purged templates are never listed.
Available options:
pending, active, expired, held_out_of_use, purge_pending, purge_failed How the template was created.
Available options:
session_delete, automatic_retention, backfill Templates retained at or after this time.
Templates retained at or before this time. Must not be earlier than retained_from (400).
Sort order.
Available options:
retained_at, -retained_at, expires_at, -expires_at Page size.
Pagination offset.