Face Comparison
curl --request POST \
--url https://adhere-api.smartcomply.com/api/onboarding/biometrics/face/comparison \
--header 'Content-Type: application/json' \
--header 'x-access-token: <api-key>' \
--data '
{
"image_url": "<string>",
"selfie_url": "<string>"
}
'import requests
url = "https://adhere-api.smartcomply.com/api/onboarding/biometrics/face/comparison"
payload = {
"image_url": "<string>",
"selfie_url": "<string>"
}
headers = {
"x-access-token": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'x-access-token': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({image_url: '<string>', selfie_url: '<string>'})
};
fetch('https://adhere-api.smartcomply.com/api/onboarding/biometrics/face/comparison', 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://adhere-api.smartcomply.com/api/onboarding/biometrics/face/comparison",
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_url' => '<string>',
'selfie_url' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"x-access-token: <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"
"strings"
"net/http"
"io"
)
func main() {
url := "https://adhere-api.smartcomply.com/api/onboarding/biometrics/face/comparison"
payload := strings.NewReader("{\n \"image_url\": \"<string>\",\n \"selfie_url\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("x-access-token", "<api-key>")
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://adhere-api.smartcomply.com/api/onboarding/biometrics/face/comparison")
.header("x-access-token", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"image_url\": \"<string>\",\n \"selfie_url\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://adhere-api.smartcomply.com/api/onboarding/biometrics/face/comparison")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["x-access-token"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"image_url\": \"<string>\",\n \"selfie_url\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"status": "success",
"data": {
"status": true,
"response_code": "00",
"message": "Face Match",
"confidence": 100,
"record_id": 76981
},
"message": "Face comparison completed successfully"
}Biométrie
Comparaison faciale
Comparez deux images de visage pour déterminer si elles appartiennent à la même personne.
POST
/
api
/
onboarding
/
biometrics
/
face
/
comparison
Face Comparison
curl --request POST \
--url https://adhere-api.smartcomply.com/api/onboarding/biometrics/face/comparison \
--header 'Content-Type: application/json' \
--header 'x-access-token: <api-key>' \
--data '
{
"image_url": "<string>",
"selfie_url": "<string>"
}
'import requests
url = "https://adhere-api.smartcomply.com/api/onboarding/biometrics/face/comparison"
payload = {
"image_url": "<string>",
"selfie_url": "<string>"
}
headers = {
"x-access-token": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'x-access-token': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({image_url: '<string>', selfie_url: '<string>'})
};
fetch('https://adhere-api.smartcomply.com/api/onboarding/biometrics/face/comparison', 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://adhere-api.smartcomply.com/api/onboarding/biometrics/face/comparison",
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_url' => '<string>',
'selfie_url' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"x-access-token: <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"
"strings"
"net/http"
"io"
)
func main() {
url := "https://adhere-api.smartcomply.com/api/onboarding/biometrics/face/comparison"
payload := strings.NewReader("{\n \"image_url\": \"<string>\",\n \"selfie_url\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("x-access-token", "<api-key>")
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://adhere-api.smartcomply.com/api/onboarding/biometrics/face/comparison")
.header("x-access-token", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"image_url\": \"<string>\",\n \"selfie_url\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://adhere-api.smartcomply.com/api/onboarding/biometrics/face/comparison")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["x-access-token"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"image_url\": \"<string>\",\n \"selfie_url\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"status": "success",
"data": {
"status": true,
"response_code": "00",
"message": "Face Match",
"confidence": 100,
"record_id": 76981
},
"message": "Face comparison completed successfully"
}L’endpoint de comparaison faciale utilise l’analyse biométrique pour comparer deux images de visage et renvoie un score de confiance indiquant si elles représentent le même individu. Utilisez-le pour la vérification d’identité lors de l’intégration ou de l’approbation de transaction.
Avant de comparer, le fournisseur exécute une vérification anti-spoofing sur
Un
Demandez à l’utilisateur un selfie plus clair (meilleur éclairage, pas d’écran/photo dans le cadre) et soumettez à nouveau — ce n’est pas la même erreur qu’une véritable inadéquation faciale, et réessayer avec un selfie de meilleure qualité de la même personne est la bonne étape suivante.
selfie_url ; si cette vérification échoue, aucune comparaison n’est tentée et la réponse l’indique explicitement — voir 200 OK — rejeté par la vérification anti-spoofing ci-dessous.
Endpoint
POST /api/onboarding/biometrics/face/comparison
Requête
En-têtes
| En-tête | Valeur | Requis |
|---|---|---|
x-access-token | Votre clé secrète API | Oui |
Content-Type | application/json | Oui |
Paramètres de corps
| Paramètre | Type | Requis | Description |
|---|---|---|---|
image_url | string | Oui | URL de la photo d’identité de référence ou image de visage de base de données |
selfie_url | string | Oui | URL du selfie en direct à comparer avec la référence |
Exemple
curl -X POST "https://adhere-api.smartcomply.com/api/onboarding/biometrics/face/comparison" \
-H "x-access-token: YOUR_SECRET_KEY" \
-H "Content-Type: application/json" \
-d '{
"image_url": "https://example.com/id_photo.jpg",
"selfie_url": "https://example.com/selfie.jpg"
}'
const response = await fetch(
"https://adhere-api.smartcomply.com/api/onboarding/biometrics/face/comparison",
{
method: "POST",
headers: {
"x-access-token": "YOUR_SECRET_KEY",
"Content-Type": "application/json",
},
body: JSON.stringify({
image_url: "https://example.com/id_photo.jpg",
selfie_url: "https://example.com/selfie.jpg",
}),
}
);
const data = await response.json();
import requests
response = requests.post(
"https://adhere-api.smartcomply.com/api/onboarding/biometrics/face/comparison",
headers={
"x-access-token": "YOUR_SECRET_KEY",
"Content-Type": "application/json",
},
json={
"image_url": "https://example.com/id_photo.jpg",
"selfie_url": "https://example.com/selfie.jpg",
},
)
data = response.json()
Réponse
200 OK
| Champ | Type | Description |
|---|---|---|
data.status | boolean | true si les visages correspondent, false sinon |
data.response_code | string | "00" indique une comparaison réussie |
data.message | string | Résultat de correspondance lisible par l’homme |
data.confidence | integer | Pourcentage de confiance de correspondance (0–100) |
data.record_id | number | ID d’enregistrement interne pour cette vérification |
{
"status": "success",
"data": {
"status": true,
"response_code": "00",
"message": "Face Match",
"confidence": 100,
"record_id": 76981
},
"message": "Comparaison faciale effectuée avec succès"
}
data.status à false indique que les visages ne correspondent pas. Utilisez data.confidence pour appliquer votre propre seuil d’acceptation (ex: exigez >= 80 pour une correspondance positive).
200 OK — rejeté par la vérification anti-spoofing (aucune comparaison effectuée)
Avant de comparer les deux images, le fournisseur exécute sa propre vérification anti-spoofing surselfie_url — cela détecte une photo de photo, une relecture d’écran ou toute autre soumission falsifiée. Si selfie_url échoue à cette vérification, la comparaison elle-même ne s’exécute jamais, et la réponse explique pourquoi dans data.message plutôt que de simplement dire que les visages ne correspondent pas. data.confidence est à 0 dans ce cas puisqu’aucun score de correspondance n’a été produit.
Cette vérification s’exécute même si
selfie_url est une image fixe, et non une vidéo — le texte du message ci-dessous fait toujours référence à “la vidéo soumise” car il est partagé avec le libellé interne de l’endpoint de vérification de vivacité faciale. Traitez cette réponse de la même manière, que vous ayez soumis une photo ou une vidéo en tant que selfie.{
"status": "failed",
"data": {
"status": false,
"response_code": "01",
"message": "Liveness check failed — the submitted video did not pass the liveness/anti-spoofing check, so no face comparison was performed.",
"confidence": 0
},
"message": "Liveness check failed — the submitted video did not pass the liveness/anti-spoofing check, so no face comparison was performed."
}
400 Bad Request
Renvoyé lorsque l’une ou les deux URL d’image sont manquantes, inaccessibles ou ne contiennent pas de visage détectable.{
"status": "failed",
"data": [],
"message": "Could not process one or both images"
}
401 Unauthorized
{
"status": "failed",
"message": "Authentication credentials were not provided."
}
Autorisations
Your Adhere API secret key
Corps
application/json
Réponse
Comparison ran to completion. This includes the anti-spoofing rejection case below — the provider still returns HTTP 200 with status "failed" when selfie_url fails its own liveness check before any comparison is attempted.

