Enregistrer un endpoint
Dans la console, ouvrez Settings, puis Webhooks, puis Add Webhook.- Saisissez l’Endpoint URL. Elle doit être en
httpset 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. - Choisissez les événements (ci-dessous).
- 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. - 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).
Événements
Seuls les appels qui portent unereference é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 :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
- Lisez les octets bruts du corps avant d’analyser le JSON. Un JSON resérialisé ne correspond pas.
- Calculez
HMAC-SHA256(secret, timestamp + "." + body)et comparez avecX-Sahl-Signature-V2en temps constant. - 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.
express.raw conserve les octets.
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.