Adhere Web SDK
Le Adhere Web SDK vous permet de vérifier rapidement et en toute sécurité l’identité des utilisateurs et d’effectuer des vérifications de vivacité faciale directement dans vos applications web. Le SDK monte un widget prêt à l’emploi par-dessus votre application, gérant la capture de documents, la vérification d’identité et la détection de vivacité — le tout dans un flux transparent.Fonctionnalités
- Modale UI prête à l’emploi — Widget responsive et animé qui se superpose à votre app via
SmartComplyFlow.open(). - Support CDN & npm — Installez via npm/yarn ou chargez directement depuis un CDN sans étape de build.
- Routage dynamique — Adapte automatiquement les exigences de documents et de vérification depuis la configuration de votre tableau de bord.
- Sessions à usage unique —
clientIdest votre clé d’intégration permanente (depuis votre SDK Config) et est réutilisée pour chaque session. Chaque appelcreateSession()émet un jeton de session frais et à usage unique — ce jeton, pas leclientId, est délimité à une seule vérification. - Identité multi-pays — Prend en charge les canaux de données et de documents pour le Nigéria (BVN, NIN, passeports, permis de conduire, cartes d’électeur, etc.), le Ghana, le Kenya, l’Afrique du Sud et la Côte d’Ivoire, avec une vérification de passeport générique disponible pour d’autres pays et des vérifications de vivacité/concordance faciale indépendantes du pays — les canaux exacts dépendent de ce qui est activé dans votre tableau de bord.
- Capture de document recto-verso — Le recto est toujours requis ; le verso est requis, optionnel ou non proposé selon le type de document (par ex. le NIN est verso-optionnel, car pas chaque document physique NIN a un verso utilisable).
- Vivacité indéduite du matériel — Utilise la webcam native et l’API MediaRecorder pour une compatibilité interplateforme. Un seul scan passif (clignement + mouvement naturel de la tête) — sans étapes explicites pas à pas.
Installation
Option 1 — CDN (aucune étape de build requise, recommandé)
Ajoutez la balise script à votre HTML :window.SmartComplySDK :
Option 2 — npm / yarn
Contrairement au CDN, npm n’a pas d’option de mise à jour automatique — c’est vrai pour chaque package npm, pas spécifique au nôtre.
npm install résout vers la dernière version au moment où vous l’exécutez, puis verrouille cette version exacte dans package-lock.json (ou yarn.lock) ; elle ne changera plus d’elle-même. Exécutez npm update smartcomply-web-sdk périodiquement (ou avant chaque déploiement) pour récupérer les nouveaux correctifs — cela reste dans la plage ^1.0.x déjà définie dans votre package.json, et nous nous engageons à ne jamais publier de changement déstabilisant dans 1.x, donc c’est toujours sûr à exécuter. Consultez npmjs.com/package/smartcomply-web-sdk pour le numéro de version actuel.Démarrage rapide — Widget prêt à l’emploi (recommandé)
La manière la plus simple d’intégrer est le widget prêt à l’emploi. Il gère automatiquement le flux complet de vérification.Récupérez votre clé API et votre ID client depuis votre tableau de bord Adhere — les deux proviennent de votre SDK Config et sont permanents ; réutilisez les mêmes valeurs pour chaque session. Ce qui est à usage unique est le jeton de session que le SDK obtient en interne via
createSession() (expiration de 30 minutes, révoqué après soumission) — vous ne voyez jamais ni ne gérez ce jeton directement via le widget prêt à l’emploi.Le widget avertit l’utilisateur 2 minutes avant cette expiration de 30 minutes, puis affiche automatiquement un message « session expirée » et se ferme lui-même (en déclenchant onClose) une fois la limite réellement atteinte — avec une courte période de grâce si l’utilisateur est en cours de scan, de sorte qu’une capture active ne soit jamais interrompue en plein flux. Si vous avez besoin d’une nouvelle vérification après cela, appelez à nouveau SmartComplyFlow.open() pour démarrer une nouvelle session (disponible depuis smartcomply-web-sdk@1.0.76).Paramètres de configuration
URLs d’environnement
Image de marque
La configuration du SDK sur votre tableau de bord fournit le nom de marque, la description et la couleur du thème queinitializeConfig() retourne, et que le widget les affiche.
Exemples pour frameworks
React
Vue
HTML brut (CDN)
API Headless (avancé)
Pour un contrôle total de l’UI, utilisez directement la classeSmartComply sans la modale.
Le scan de vivacité lui-même a sa propre fenêtre de capture de 12 secondes, séparée du TTL de session de 30 minutes ci-dessus. Ce minuteur ne démarre que lorsque l’enregistrement actif commence — juste après que la caméra s’est centrée sur le visage de l’utilisateur et s’est brièvement re-stabilisée (mise au point/exposition) — et non lorsque la caméra s’ouvre pour la première fois. À partir de ce moment, le widget affiche un anneau de compte à rebours autour de l’ovale du visage ; le scan doit détecter le signal de vivacité passif (clignement + mouvement naturel de la tête) dans ces 12 secondes ou il échoue avec un écran « Temps écoulé » et un bouton Réessayer qui redémarre le scan en utilisant la même entrée de vivacité (pas de nouveau débit).Ce minuteur est entièrement local à l’onglet du navigateur et ne fonctionne que pendant le scan actif — il est effacé au moment où le scan se résout (succès ou timeout) et ne persiste pas, ne fonctionne pas en arrière-plan, ni ne reprend si l’utilisateur part et revient. En pratique, cela signifie : si l’étape de vivacité/concordance faciale est déjà terminée et que l’utilisateur est passé à une autre partie du flux (par ex. la révision de sa soumission), la fenêtre de 12 secondes est depuis longtemps terminée et sans objet — rien à propos de cette étape ne peut expirer à nouveau. La seule horloge encore en cours à ce stade est le TTL de session de 30 minutes, qui régit les appels API du SDK de manière générale, pas le scan terminé.
Payload onComplete
onComplete se déclenche dès que l’utilisateur termine sa partie du flux (l’écran « Vérification soumise » s’affiche) — c’est un accusé de réception de soumission, pas un verdict de vérification. Le traitement backend (concordance faciale, lecture de document, vérification BD gouvernementale) se poursuit après ce déclenchement, et status est toujours "processing" ici quel que soit le résultat final. Le vrai résultat pass/fail n’arrive que via webhook.
verificationResult n’est présent que pour la vérification par données (BVN/NIN) — c’est le résultat immédiat de recherche en base de données gouvernementale confirmant que le numéro d’identification correspond à un enregistrement réel. Il ne dit rien sur la concordance faciale, qui est toujours en attente. Il est absent pour les flux de vérification de document.Réception des résultats (Webhook)
Le backend délivre exactement un webhookliveness.completed par vérification, vers l’URL configurée dans votre SDK Config, une fois la concordance faciale (et le OCR / la vérification BD gouvernementale, selon le flux) terminée.
C’est le propre webhook du SDK — configuré par SDK Config et spécifique à
liveness.completed. Il est séparé du système de webhook global décrit dans Webhooks (surveillance des transactions, événements généraux du module KYC, forme {success, module, event, data}). Les deux signent actuellement avec HMAC-SHA256 et un en-tête préfixé sha256=, encodé en hexadécimal — vérifiez par rapport au corps brut de la requête dans les deux cas.Forme du payload
verification_type: "document_verification" et un bloc document (champs OCR + concordance faciale document-selfie) au lieu de customer_profile :
document contient é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 (par ex. les numéros de série/code-barres s’appliquent principalement aux nouvelles cartes d’identité kényanes). face_match.reason est rempli avec une explication destinée à l’utilisateur lorsque verified est false ou que la concordance a été ignorée.face_match.decision ("MATCH", "NO_MATCH" ou "REJECTED") est ce à partir de quoi verified est réellement dérivé — lisez decision plutôt que de comparer confidence_percentage par rapport à un seuil de votre choix, car notre seuil de concordance interne ne fait pas partie de ce payload et peut changer au fil du temps. "REJECTED" signifie que la vivacité/l’anti-spoofing a échoué avant toute comparaison, donc confidence_percentage peut être absent ou 0 aux côtés de verified: false pour une raison sans rapport avec la similarité des visages.verification_id correspond au entryId reçu par votre callback onComplete.
Vérifier la signature
L’en-tête de signature estX-Adhere-Signature: sha256=<hex> — notez le préfixe sha256=. Il est calculé sur les octets exacts du JSON compact du corps de la requête, donc votre gestionnaire doit vérifier par rapport au corps brut, pas à une copie re-sérialisée du JSON parsé (le re-stringage peut produire différents octets et la signature ne correspondra jamais).
Notes de sécurité
- ID client — Permanent, depuis votre SDK Config. Réutilisez le même
clientIdpour chaque session — il n’y a pas d’ID par session à générer. - Clé API — Ne exposez jamais votre clé API dans le code côté client en production. Utilisez des variables d’environnement.
- Jetons de session — La partie à usage unique. Obtenus et gérés automatiquement par le SDK par vérification via
createSession(), expirent après 30 minutes et sont révoqués immédiatement une fois la vivacité soumise.

