Verify Customer
curl --request POST \
--url https://adhere-api.smartcomply.com/api/onboarding/verify_customer \
--header 'Content-Type: application/json' \
--header 'x-access-token: <api-key>' \
--data '
{
"country": "nigeria",
"identifier": "12345678901",
"identifier_type": "bvn"
}
'import requests
url = "https://adhere-api.smartcomply.com/api/onboarding/verify_customer"
payload = {
"country": "nigeria",
"identifier": "12345678901",
"identifier_type": "bvn"
}
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({country: 'nigeria', identifier: '12345678901', identifier_type: 'bvn'})
};
fetch('https://adhere-api.smartcomply.com/api/onboarding/verify_customer', 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/verify_customer",
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([
'country' => 'nigeria',
'identifier' => '12345678901',
'identifier_type' => 'bvn'
]),
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/verify_customer"
payload := strings.NewReader("{\n \"country\": \"nigeria\",\n \"identifier\": \"12345678901\",\n \"identifier_type\": \"bvn\"\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/verify_customer")
.header("x-access-token", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"country\": \"nigeria\",\n \"identifier\": \"12345678901\",\n \"identifier_type\": \"bvn\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://adhere-api.smartcomply.com/api/onboarding/verify_customer")
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 \"country\": \"nigeria\",\n \"identifier\": \"12345678901\",\n \"identifier_type\": \"bvn\"\n}"
response = http.request(request)
puts response.read_body{
"status": "failed",
"data": [
"<unknown>"
],
"message": "<string>"
}{
"status": "failed",
"message": "Authentication credentials were not provided."
}Intégration client
Vérifier le client
Exécutez la vérification d’identité et le filtrage AML pour un client en un seul appel.
POST
/
api
/
onboarding
/
verify_customer
Verify Customer
curl --request POST \
--url https://adhere-api.smartcomply.com/api/onboarding/verify_customer \
--header 'Content-Type: application/json' \
--header 'x-access-token: <api-key>' \
--data '
{
"country": "nigeria",
"identifier": "12345678901",
"identifier_type": "bvn"
}
'import requests
url = "https://adhere-api.smartcomply.com/api/onboarding/verify_customer"
payload = {
"country": "nigeria",
"identifier": "12345678901",
"identifier_type": "bvn"
}
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({country: 'nigeria', identifier: '12345678901', identifier_type: 'bvn'})
};
fetch('https://adhere-api.smartcomply.com/api/onboarding/verify_customer', 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/verify_customer",
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([
'country' => 'nigeria',
'identifier' => '12345678901',
'identifier_type' => 'bvn'
]),
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/verify_customer"
payload := strings.NewReader("{\n \"country\": \"nigeria\",\n \"identifier\": \"12345678901\",\n \"identifier_type\": \"bvn\"\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/verify_customer")
.header("x-access-token", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"country\": \"nigeria\",\n \"identifier\": \"12345678901\",\n \"identifier_type\": \"bvn\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://adhere-api.smartcomply.com/api/onboarding/verify_customer")
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 \"country\": \"nigeria\",\n \"identifier\": \"12345678901\",\n \"identifier_type\": \"bvn\"\n}"
response = http.request(request)
puts response.read_body{
"status": "failed",
"data": [
"<unknown>"
],
"message": "<string>"
}{
"status": "failed",
"message": "Authentication credentials were not provided."
}Endpoint
POST /api/onboarding/verify_customer
Requête
En-têtes
| En-tête | Valeur | Requis |
|---|---|---|
x-access-token | Votre clé API | Oui |
Content-Type | application/json | Oui |
Paramètres de corps
| Paramètre | Type | Requis | Description |
|---|---|---|---|
country | string | Oui | Pays du client. Pris en charge : nigeria, kenya, ghana, uganda, rwanda |
identifier | string | Oui | Numéro d’identité du client (ex: BVN, NIN, ID National) |
identifier_type | string | Non | Remplace la valeur par défaut du pays. Voir valeurs prises en charge |
Exemple
curl -X POST https://adhere-api.smartcomply.com/api/onboarding/verify_customer \
-H "x-access-token: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"country": "nigeria",
"identifier": "12345678901"
}'
import requests
response = requests.post(
"https://adhere-api.smartcomply.com/api/onboarding/verify_customer",
headers={"x-access-token": "YOUR_API_KEY"},
json={
"country": "nigeria",
"identifier": "12345678901",
},
)
print(response.json())
const response = await fetch("https://adhere-api.smartcomply.com/api/onboarding/verify_customer", {
method: "POST",
headers: {
"x-access-token": "YOUR_API_KEY",
"Content-Type": "application/json",
},
body: JSON.stringify({
country: "nigeria",
identifier: "12345678901",
}),
});
const data = await response.json();
Réponse
Toutes les réponses renvoient HTTP200. Utilisez le champ decision — pas le statut HTTP — pour déterminer le résultat de l’intégration. Voir le Guide de décision pour savoir comment agir sur chaque valeur.
string
Toujours
"success" sur une réponse 200.string
Toujours
"Customer onboarding completed" en cas de succès.object
Masquer champs de données
Masquer champs de données
number
ID unique pour cet enregistrement d’intégration.
object
Résultat de l’étape de vérification d’identité.
Afficher champs d'identité
Afficher champs d'identité
boolean
true si l’identifiant a été vérifié avec succès auprès de l’autorité émettrice.string
Le type de document utilisé, ex:
"BVN", "NIN", "National ID".string
Présent quand
verified: true.string
Présent quand
verified: true.string
Présent quand
verified: true et que le fournisseur renvoie un deuxième prénom.string
Chaîne de date ISO-8601. Présent quand
verified: true.string
Présent quand
verified: true.string
Présent quand
verified: true et disponible auprès du fournisseur.string
Message d’erreur du fournisseur de vérification. Présent uniquement quand
verified: false.object
Résultats du filtrage AML. Toujours renvoyé sous une forme cohérente, même lorsque le filtrage a été ignoré.
Afficher champs de filtrage
Afficher champs de filtrage
array
Correspondances aux sanctions. Chaque entrée contient
entity_name, recorded_date, country, sanction_body, sanction_types, et other_information.array
Correspondances PEP. Chaque entrée contient
name, pep_types, gender, country, source, et political_post.array
Actuellement toujours
[] — sera activé en tant qu’étape configurable dans une future version.string
"low", "medium", ou "high".string
Présent uniquement lorsque le filtrage a été ignoré. Explique pourquoi.
string
"pass", "review", ou "fail". Voir le Guide de décision.Pass — identité vérifiée, aucune correspondance
{
"status": "success",
"message": "Customer onboarding completed",
"data": {
"onboarding_id": 1024,
"identity": {
"verified": true,
"identifier_type": "BVN",
"first_name": "Amaka",
"middle_name": "Chisom",
"last_name": "Okafor",
"date_of_birth": "1992-04-17",
"gender": "Female",
"phone": "08031234567"
},
"screening": {
"sanctions": [],
"peps": [],
"adverse_media": [],
"risk_level": "low"
},
"decision": "pass"
}
}
Review — identité vérifiée, correspondance PEP trouvée
{
"status": "success",
"message": "Customer onboarding completed",
"data": {
"onboarding_id": 1025,
"identity": {
"verified": true,
"identifier_type": "NIN",
"first_name": "Emeka",
"last_name": "Nwosu",
"date_of_birth": "1985-11-02",
"gender": "Male"
},
"screening": {
"sanctions": [],
"peps": [
{
"name": "Emeka Nwosu",
"pep_types": ["role.pep", "pep-class-2"],
"gender": "male",
"source": "OpenSanctions",
"country": "Nigeria",
"political_post": ["Former State Commissioner"]
}
],
"adverse_media": [],
"risk_level": "medium"
},
"decision": "review"
}
}
Fail — vérification d’identité infructueuse
{
"status": "success",
"message": "Customer onboarding completed",
"data": {
"onboarding_id": 1026,
"identity": {
"verified": false,
"identifier_type": "BVN",
"error": "Bank Verification Number (BVN) check failed: Invalid BVN provided"
},
"screening": {
"sanctions": [],
"peps": [],
"adverse_media": [],
"risk_level": "low",
"note": "AML screening skipped: identity verification did not return a name"
},
"decision": "fail"
}
}
Réponses d’erreur
| Statut HTTP | Message | Cause |
|---|---|---|
401 | "Authorization token is missing" | Aucun en-tête x-access-token |
401 | "Authorization failed" | Jeton non reconnu ou expiré |
403 | "Identity Verification suite isn't enabled for this branch" | Fonctionnalité non activée — contactez le support |
403 | "Your account hasn't been verified for Identity Verification Suite" | Compte administrateur en attente de vérification |
400 | "country is required" | Champ country manquant |
400 | "identifier is required" | Champ identifier manquant |
400 | "Unsupported country '…'. Supported: …" | Valeur country invalide |
400 | "Unsupported identifier_type '…' for …. Supported: …" | identifier_type invalide pour le pays donné |
Autorisations
Your Adhere API secret key
Corps
application/json
Country of the customer
Options disponibles:
nigeria, kenya, ghana, uganda, rwanda Exemple:
"nigeria"
The ID number to verify (BVN, NIN, National ID, etc.)
Exemple:
"12345678901"
Overrides the country default. Nigeria: bvn, nin, vnin. Others: national_id or ghana_id.
Exemple:
"bvn"
Réponse
Onboarding completed — check decision field for pass/review/fail

