curl --request POST \
--url https://{environment-subdomain}.idmetagroup.com/api/v3/verifications/biometrics-verification-passthrough \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"image": "<string>"
}
'import requests
url = "https://{environment-subdomain}.idmetagroup.com/api/v3/verifications/biometrics-verification-passthrough"
payload = { "image": "<string>" }
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({image: '<string>'})
};
fetch('https://{environment-subdomain}.idmetagroup.com/api/v3/verifications/biometrics-verification-passthrough', 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://{environment-subdomain}.idmetagroup.com/api/v3/verifications/biometrics-verification-passthrough",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'image' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://{environment-subdomain}.idmetagroup.com/api/v3/verifications/biometrics-verification-passthrough"
payload := strings.NewReader("{\n \"image\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://{environment-subdomain}.idmetagroup.com/api/v3/verifications/biometrics-verification-passthrough")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"image\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://{environment-subdomain}.idmetagroup.com/api/v3/verifications/biometrics-verification-passthrough")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"image\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"success": true,
"message": "Biometrics verification processed successfully",
"data": {
"livenessPass": true,
"livenessScore": 98.12
},
"verificationStatus": "VERIFIED",
"verificationStatusCode": 3,
"transactionId": "9d4f2b18-6c31-4e75-8a90-2f1b7c3e5d60",
"verificationType": "biometrics_verification",
"metadata": {
"customerReference": "CUST-10294"
},
"createdAt": "2026-09-14 04:12:37+0000"
}Biometrics Verification
Run a face liveness check, and optionally screen the same selfie for duplicates and against your blacklists
curl --request POST \
--url https://{environment-subdomain}.idmetagroup.com/api/v3/verifications/biometrics-verification-passthrough \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"image": "<string>"
}
'import requests
url = "https://{environment-subdomain}.idmetagroup.com/api/v3/verifications/biometrics-verification-passthrough"
payload = { "image": "<string>" }
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({image: '<string>'})
};
fetch('https://{environment-subdomain}.idmetagroup.com/api/v3/verifications/biometrics-verification-passthrough', 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://{environment-subdomain}.idmetagroup.com/api/v3/verifications/biometrics-verification-passthrough",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'image' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://{environment-subdomain}.idmetagroup.com/api/v3/verifications/biometrics-verification-passthrough"
payload := strings.NewReader("{\n \"image\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://{environment-subdomain}.idmetagroup.com/api/v3/verifications/biometrics-verification-passthrough")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"image\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://{environment-subdomain}.idmetagroup.com/api/v3/verifications/biometrics-verification-passthrough")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"image\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"success": true,
"message": "Biometrics verification processed successfully",
"data": {
"livenessPass": true,
"livenessScore": 98.12
},
"verificationStatus": "VERIFIED",
"verificationStatusCode": 3,
"transactionId": "9d4f2b18-6c31-4e75-8a90-2f1b7c3e5d60",
"verificationType": "biometrics_verification",
"metadata": {
"customerReference": "CUST-10294"
},
"createdAt": "2026-09-14 04:12:37+0000"
}Authorizations
Use your API token as a Bearer token in the Authorization header.
Headers
"Bearer {your_api_token}"
Body
Base64 data URI (for example data:image/jpeg;base64,...), or a multipart file upload when posting multipart/form-data.
Minimum liveness confidence as a percentage (0–100), on the same scale as livenessScore. livenessPass is true and verificationStatus is VERIFIED when the score is greater than or equal to this value. May only tighten the result, never loosen it.
0 <= x <= 100When true, screens the selfie against your company's duplicate watchlist and enrols it for future matches.
When true, screens the selfie against the blacklists named in blacklistIds. This feature is only available if your account is subscribed to biometric blacklist screening. You must create and add blacklists in the IDmeta Platform first to obtain the blacklistIds to pass here.
UUID strings of your company's active biometric blacklists, created in the IDmeta Platform. Required when performBlacklistDetection is true.
Free-form correlation data, echoed back on the response.
Response
Liveness completed. Passed, rejected, and review-needed outcomes all use HTTP 200 when the engine returns a liveness verdict. Duplicate and blacklist hits are reported in data but do not change verificationStatus.
true
Biometrics verification successful when liveness passed; Biometrics verification rejected when liveness failed.
Show child attributes
Show child attributes
Liveness verdict only. Duplicate and blacklist hits do not change this field.
VERIFIED, REVIEW_NEEDED, REJECTED 3 = Verified, 2 = Review Needed, 1 = Rejected.
3, 2, 1 "biometrics_verification"
"2026-09-14 04:12:37+0000"

