Skip to main content
Au lieu d’interroger l’API en boucle, vous pouvez demander à Sahl d’envoyer un événement à votre serveur quand un appel se termine. Les webhooks sont facultatifs. Chaque événement KYC est envoyé après la validation en base de données de l’appel, en arrière-plan, donc la réponse de votre API n’attend jamais votre endpoint et n’échoue jamais à cause de lui.

Enregistrer un endpoint

Dans la console, ouvrez Settings, puis Webhooks, puis Add Webhook.
  1. Saisissez l’Endpoint URL. Elle doit être en https et se résoudre vers une adresse publique. Les adresses privées, de bouclage et de métadonnées cloud sont refusées, à l’enregistrement et de nouveau avant chaque envoi. Les redirections ne sont pas suivies.
  2. Choisissez les événements (ci-dessous).
  3. Enregistrez. Si vous n’avez pas fourni votre propre secret (16 caractères ou plus), Sahl en génère un, affiché une seule fois, sous la forme whsec_ suivi de 48 caractères. Copiez-le.
  4. Cliquez sur Test sur l’endpoint. Sahl envoie un événement test.ping à votre URL, signé comme une vraie livraison, et affiche le statut avec lequel votre serveur a répondu. La charge utile de test n’a pas la forme d’un événement KYC (voir Ping de test).
La gestion des endpoints exige le rôle d’administrateur du tenant ou de gestionnaire d’API. Les endpoints de webhook se gèrent dans la console, pas par l’API Partenaire.

Événements

Seuls les appels qui portent une reference émettent des événements, car un événement nomme un dossier. Un appel sans référence ne stocke rien et n’émet rien. Les événements sont envoyés pour les deux environnements. La charge utile indique lequel.

Charges utiles

Chaque charge utile a ces quatre clés. Les charges utiles contiennent des identifiants, votre reference, l’environnement et un résumé du verdict. Elles ne contiennent jamais de valeur de champ, de nom, de date de naissance ni de contenu de document : les livraisons sont stockées chez Sahl et envoyées à une URL que vous avez saisie.

kyc.documents_read

failed_checks contient les ids des vérifications échouées de sévérité critical ou warning, sans doublons.

kyc.case_verified et kyc.case_assessed

kyc.eid_completed

complete vaut false quand la demande s’est terminée archivée sans que le client ait fini. failed_checks contient les ids des vérifications eID critical échouées.

Ping de test

Le bouton Test envoie une autre forme, signée de la même façon :
Son en-tête X-Sahl-Event vaut test.ping. Il n’a ni clé event ni clé event_id, donc aiguillez sur l’en-tête, pas sur une clé.

En-têtes de requête

Vérifier la signature

  1. Lisez les octets bruts du corps avant d’analyser le JSON. Un JSON resérialisé ne correspond pas.
  2. Calculez HMAC-SHA256(secret, timestamp + "." + body) et comparez avec X-Sahl-Signature-V2 en temps constant.
  3. Rejetez un horodatage éloigné de plus de quelques minutes de votre horloge (le code ci-dessous utilise 5 minutes, ce qui est votre choix et non une règle Sahl). Chaque nouvelle tentative est signée à nouveau, donc son horodatage est récent.
Un récepteur avec Express. express.raw conserve les octets.
Les deux fonctions ci-dessus ont été exécutées contre le code qui signe les vraies livraisons : une livraison valide est vérifiée, un corps modifié échoue, et un horodatage périmé échoue.

Livraison et nouvelles tentatives

La première tentative est faite juste après l’appel. Les tentatives suivantes sont faites par une tâche de reprise qui s’exécute toutes les quelques minutes, donc une nouvelle tentative peut arriver légèrement après l’heure prévue. Un endpoint que vous désactivez conserve ses livraisons dues et les reprend quand vous le réactivez. Rendez votre gestionnaire idempotent. Dédupliquez sur X-Sahl-Delivery (un id par livraison) ou sur event_id (un par événement). Répondez vite avec une 2xx et faites le travail ensuite. La console affiche chaque livraison d’un endpoint avec son statut HTTP et son nombre de tentatives, et conserve jusqu’à 2 000 caractères du corps de votre réponse.

Dépannage