En bref : Les webhooks vous permettent de mettre en place un système de notification pour recevoir des mises à jour sur certaines requêtes effectuées vers l’API Adhere.
Pourquoi utiliser des Webhooks ?
Généralement, lorsque vous faites une requête vers un endpoint API, vous vous attendez à une réponse quasi immédiate. Cependant, certaines requêtes peuvent prendre du temps à traiter. Afin d’éviter une erreur de timeout, une réponse en attente est renvoyée. Puisque vos enregistrements doivent être mis à jour avec l’état final de la requête, vous devez soit :- Polling (Interrogation) : Faire une requête de mise à jour à intervalles réguliers.
- Webhooks : Écouter les événements en utilisant une URL de webhook.
Configuration et intégration
Pour commencer à recevoir des notifications webhook, suivez ces étapes pour configurer votre environnement :1
Configurer l'URL du Webhook
Fournissez l’endpoint sur votre serveur où Adhere enverra les requêtes
POST. Il doit s’agir d’une URL accessible publiquement.2
Définir une clé de hachage
Une clé secrète utilisée pour signer la charge utile (payload) du webhook. Vous devez la garder sécurisée et l’utiliser pour vérifier que les requêtes proviennent bien d’Adhere.
3
Enregistrer la configuration
Enregistrez vos paramètres dans le tableau de bord Adhere sous la section Intégrations.
Il existe deux canaux de webhook indépendants, chacun avec sa propre URL et sa propre clé secrète de signature :
- Événements de module (surveillance des transactions, KYC) sont envoyés à l’URL définie sous Intégrations, et sont signés avec la Clé de hachage que vous y avez définie.
- Vérification d’identité (
liveness.completed, envoyé pour chaque exécution du SDK Web, Android et iOS) est envoyé à l’URL de webhook définie dans votre Configuration SDK, et est signé avec le secret webhook spécifique à cette configuration. Il est généré pour vous, pas défini par vous.
X-Adhere-Signature et le même schéma HMAC-SHA256 décrit ci-dessous.Sécurité et vérification
Toutes les requêtes webhook d’Adhere incluent un en-têteX-Adhere-Signature sous la forme sha256=<signature>, où la signature est le condensé HMAC-SHA256 en hexadécimal minuscule du corps de la requête.
Vérification des signatures
Pour vous assurer qu’une requête webhook provient réellement d’Adhere, vous devez vérifier la signature avant de traiter la charge utile.Pour
liveness.completed, la clé de signature est le secret webhook de votre configuration SDK sans les tirets — une chaîne hexadécimale de 32 caractères, et non la forme UUID avec tirets. Les exemples ci-dessous les suppriment pour vous.Obtenir le secret webhook de votre configuration SDK
Le secret est généré pour vous lorsque la configuration SDK est créée. Récupérez-le depuis le tableau de bord Adhere : allez dans Settings → Integrations → SDK, ouvrez le menu sur la ligne de votre config et choisissez Integration. Le secret y est affiché avec votre ID de config, avec un bouton pour le copier. Traitement comme un mot de passe. Toute personne possédant celui-ci peut forger un webhook validement signé portant de fausses résultats de vérification, stockez-le de la même façon que vous stockez toute autre credential serveur et ne l’embarquez jamais dans du code client. Le secret est généré pour vous lors de la création de la configuration SDK et est délibérément absent de la lecture de configuration ordinaire, car quiconque le possède peut forger un webhook valablement signé. Récupérez-le explicitement :POST sur la même URL. La nouvelle valeur prend effet immédiatement ; déployez-la donc avant que votre prochaine vérification ne soit terminée, sinon les signatures échoueront pendant l’intervalle.
Structure de la charge utile de l’événement
Les événements de module suivent une structure JSON cohérente :
La Vérification d’identité n’utilise pas cette enveloppe. Sa charge utile est plate, avec les champs de vérification au niveau supérieur.
Événements pris en charge
Surveillance des transactions
- Module :
transaction_monitoring - Événements :
-
suspicious_transaction: Déclenché lorsqu’une transaction est traitée et jugée suspecte.
-
Vérification d’identité
- Envoyé par : chaque vérification SDK Web, Android et iOS
- Délivré à : l’URL de webhook sur votre Configuration SDK (pas l’URL Intégrations)
- Événements :
liveness.completed: déclenché une fois par vérification, après que la correspondance faciale et, pour les exécutions de documents, l’OCR soient terminés.
success / module / data.
verification_type est data_verification ou document_verification. Pour une exécution de document, la même forme de niveau supérieur s’applique, avec un bloc document (champs OCR plus une correspondance faciale document-à-selfie) à la place de customer_profile :
document transporte également place_of_birth, place_of_issue, address, district, division, location, sub_location, serial_number, et barcode_number — null sauf si le type de document spécifique porte ce champ. face_match.reason est rempli avec une explication conviviale lorsque verified est false ou que la correspondance a été ignorée.face_match.decision ("MATCH", "NO_MATCH", ou "REJECTED") est ce dont verified est réellement dérivé — lisez decision plutôt que de comparer confidence_percentage par rapport à un seuil qui vous est propre, car notre seuil de correspondance interne ne fait pas partie de cette charge utile et peut changer avec le temps. "REJECTED" signifie que la détection de vivacité/anti-spoofing a échoué avant qu’une comparaison ne soit effectuée, donc confidence_percentage peut être absent ou 0 à côté de verified: false pour une raison sans rapport avec la ressemblance faciale.verification_id correspond au entryId renvoyé par le rappel de fin du SDK.
Tester localement
Avant de déployer en production, nous recommandons de tester votre implémentation webhook localement.- Utilisez ngrok : Utilisez ngrok pour créer un tunnel sécurisé vers votre serveur local.
- Configurer l’URL Webhook : Mettez à jour votre tableau de bord Adhere avec l’URL ngrok (ex:
https://votre-sous-domaine.ngrok-free.app/webhooks). - Inspecter les requêtes : Utilisez le tableau de bord ngrok ou Webhook.site pour inspecter les charges utiles et les en-têtes envoyés par Adhere.
Meilleures pratiques
- Accuser réception immédiatement : Votre serveur doit renvoyer une réponse
200 OKaussi rapidement que possible. Le traitement lourd doit être géré de manière asynchrone à l’aide d’une file d’attente de tâches. - Gérer les réessais : Adhere réessaiera les livraisons de webhook échouées (réponses non-2xx) jusqu’à 3 fois, avec un back-off exponentiel plafonné à 10 minutes.
- Utiliser l’idempotence : Assurez-vous que votre système peut gérer plusieurs fois le même webhook en toute sécurité. Il n’y a pas d’ID de livraison séparé — dédupliquez sur l’identifiant de ressource dans la charge utile (
verification_idpourliveness.completed,data.idpour les événements de module).
Si votre serveur ne renvoie pas de réponse 2xx, Adhere considérera la livraison comme ayant échoué et tentera de réessayer.

