- rendre le verdict plus sévère selon vos propres règles : un montant élevé, un document qui expire bientôt, une personne mineure ;
- envoyer la vérification à une équipe de relecteurs ;
- prévenir vos outils : un e-mail, un webhook, une requête HTTP vers votre CRM.
Les flux font partie de l’offre Grands comptes. Si votre organisation quitte cette offre, la version active continue de tourner telle quelle, en lecture seule : vous pouvez seulement la désactiver.
Un exemple
Kaïna Pay ouvre des portefeuilles. Au-delà de 500 000 FCFA, son équipe conformité veut relire chaque dossier ; en dessous, le CRM est prévenu dès que le client est vérifié.metadata que votre serveur passe à l’ouverture de la session :
Construire un flux
Chaque application a un flux, fait d’autant de règles que vous voulez (vingt au plus). Une règle commence par un déclencheur (« Vérification terminée », « Revue tranchée » ou « Session expirée ») ; vous pouvez la nommer (« Gros montants », « Mineurs »), la mettre en pause sans la supprimer, la replier et changer son ordre avec ↑↓. Toutes les règles actives s’appliquent, de haut en bas, à chaque vérification : un verdict ne fait que se durcir, donc le plus sévère l’emporte, et chaque règle fait ses propres envois. Un seul flux par application garde une seule réponse à « pourquoi cette vérification est-elle en revue ? » ; pour des parcours vraiment séparés, utilisez des applications distinctes. Un flux vide, comme le bouton Nouvelle règle, propose trois départs :- Décrivez votre règle en une phrase, par exemple « au-delà de 500 000 FCFA, envoyer en revue à l’équipe Conformité ». Un modèle d’IA en propose un brouillon, que vous relisez, testez et publiez vous-même : rien n’est publié sans vous. N’y écrivez pas de données personnelles ; la phrase n’est pas conservée.
- Partir d’un modèle : gros montants en revue, mineurs refusés, document qui expire bientôt, prévenir mon CRM, relance des abandons, passeport avec puce obligatoire.
- Une page blanche, ou, depuis Nouvelle règle, une règle vide qui commence par le déclencheur de votre choix.
amount_xof 750000 > 500000) et le panneau donne le verdict publié et ce qui serait envoyé. Le test se refait à chaque modification. Rien n’est envoyé ni enregistré ; soixante tests par minute au plus.
Intégrer le flux à votre application
Le flux s’exécute chez VerifNer, à chaque vérification de l’application, quel que soit le SDK : votre code n’appelle rien de plus. L’onglet Intégrer de l’éditeur montre ce qu’il doit faire, en trois étapes, avec du code prêt à copier pour votre application (Web, React Native, Flutter, ou un simple lien envoyé par SMS ou e-mail) et votre serveur (Node.js, Python, PHP, cURL) :- Ouvrir la session avec les données que vos règles lisent. Si une règle teste
amount_xof, votre serveur passemetadata: { "amount_xof": … }àPOST /v1/sessions; le code d’exemple contient déjà les clés de votre flux. - Lancer la capture : le SDK Web, le SDK React Native, ou, pour Flutter et sans application, la page de capture hébergée dont la session renvoie l’adresse (
url). Le SDK Flutter natif est en bêta et appelle encore l’API avec la clé secrète : ne l’embarquez pas en production. - Recevoir la décision sur votre webhook :
data.verdictaprès vos règles,data.workflow(équipe, raison) quand c’est une revue, puisdata.final_verdictquand un relecteur tranche.
metadata que lisent vos règles (reçue dans combien de vérifications), un webhook actif, une version publiée. Une clé jamais reçue est aussi signalée sur le bloc qui la lit : votre serveur ne l’envoie pas, et la règle ne se déclenchera jamais.
Brouillon, versions et test
- Chaque application a un flux : un brouillon que vous modifiez librement, et des versions publiées, numérotées 1, 2, 3… Une version publiée ne change plus jamais.
- Publier fait du brouillon la version active. Une seule version est active à la fois, pour le mode test comme pour le mode live.
- Vous pouvez revenir à une version précédente ou désactiver le flux à tout moment.
- Brouillon en test : activé, les vérifications de test passent par le brouillon au lieu de la version active ; le live n’est pas touché. Si le brouillon contient une erreur, c’est la version active qui tourne.
Chaque publication, retour arrière, désactivation, simulation et envoi est inscrit dans le journal d’audit.
Les déclencheurs
Un flux peut contenir les trois déclencheurs, chacun au plus une fois.
Les blocs
Conditions
Chaque condition a plusieurs sorties. Une condition qui ne peut pas répondre (date non lue, donnée absente) sort par inconnu quand elle en a une, sinon par non.
L’âge et l’expiration sont calculés au jour de la vérification, heure de Niamey : une simulation donne la même réponse des mois plus tard. Pour la carte d’identité papier, l’expiration est celle que déduisent les contrôles, 5 ans après la délivrance.
Décisions
Seulement sous Vérification terminée, et toujours avant tout envoi ou attente sur leur chemin.Envois et attente
Les branches d’une même sortie s’exécutent dans l’ordre des blocs ; un bloc atteint par deux branches ne s’exécute qu’une fois.
Garde-fous
- Un flux ne rend jamais un verdict moins sévère. Ordre :
verified, puisreview, puisrejected. Un document rejeté par les contrôles reste rejeté ; aucun bloc ne propose « vérifiée ». - Le score ne change jamais. Il reste celui des contrôles.
- Une erreur dans le flux ne bloque jamais une vérification : le verdict des contrôles est publié et l’erreur apparaît dans le bloc
workflow. - Pas de boucle, et au plus 50 blocs, 100 liens, 10 envois ou attentes sur un même chemin et 20 envois dans un flux.
- Adresses publiques uniquement :
localhostet les adresses privées sont refusées à la publication, puis vérifiées à nouveau à chaque envoi. Les redirections ne sont pas suivies. - Rien n’est envoyé par défaut au-delà de l’identifiant de la vérification : vous cochez chaque champ.
Les champs envoyables
Les champs
document.* demandent une confirmation explicite dans le bloc : vous attestez que ce destinataire peut les recevoir. Jamais d’image, de ligne MRZ ni de similarité de visage. Le journal d’audit note chaque envoi avec sa destination et la liste des champs, jamais leurs valeurs.
Les envois
Ils partent après la réponse de l’API et le webhookverification.completed, dans l’ordre du chemin. Un envoi qui échoue n’empêche pas les suivants.
Webhook
Un événementworkflow.notification vers l’endpoint choisi, signé comme tous les webhooks. Il apparaît dans Dernières livraisons et suit les mêmes relances.
version vaut null quand c’est le brouillon qui a tourné, en test.
Requête HTTP
UnPOST JSON avec la même enveloppe workflow.notification (data.label est le nom d’hôte), vers une adresse https publique, avec ces en-têtes :
Réponses :
- 2xx : envoyé ;
- 408, 429, 5xx, délai de 10 secondes dépassé ou serveur injoignable : nouvelle tentative, avec un délai qui double à partir de 60 secondes, 5 tentatives au total ;
- toute autre réponse 4xx : échec définitif, sans nouvelle tentative ;
- secret révoqué : échec avant tout envoi.
Secrets
Créés dans la console, chiffrés, jamais réaffichés :- Clé de signature : générée par VerifNer (
wsec_…) et montrée une seule fois ; vous la gardez sur votre serveur pour vérifierVerifNer-Signature. Vous pouvez aussi fournir la vôtre (16 caractères au moins). - En-tête d’authentification : un nom (
Authorization,X-Api-Keyou un autreX-…) et la valeur que vous collez, par exemple la clé d’API de votre CRM. Elle n’est jamais renvoyée.
Ce que vous recevez
Leverdict de la réponse de POST /v1/verify, de GET /v1/verifications/{id} et du webhook verification.completed est toujours le verdict publié, celui du flux. Votre code ne change pas : verified on poursuit, review on attend la décision humaine, rejected on refuse.
Deux champs vous disent ce qu’a fait le flux :