POST /v1/kyc/assess prend la même requête que /verify, exécute la même vérification, et construit une évaluation par-dessus. Scope : kyc:verify. Ce n’est pas un score de crédit. Il renvoie quatre indicateurs pour un conseiller : tolérance au risque, capacité financière, risque de conformité et adéquation.
Chaque nombre de cette page est calculé par une fonction déterministe de values et du verdict. Même entrée, même sortie.
Réponse
verification est raccourci ici ; c’est le verdict complet de /verify. L’évaluation répète aussi le verdict sous assessment.verification. L’exemple est la sortie réelle du moteur pour des données fictives (voir le pas-à-pas).
Tolérance au risque
Exige les quatre réponses dansvalues. Si l’une est vide, score et band valent null et missing liste les clés absentes. Aucun score partiel n’est produit et aucune valeur par défaut n’est supposée.
Une réponse présente mais absente de la table obtient une valeur par défaut : objectif 50, horizon 50, connaissances 40, expérience 40. Utilisez les chaînes exactes ci-dessus.
uses_leverage vaut true (booléen), "true" ou "Yes", ajoutez 8. Le résultat est arrondi et borné entre 0 et 100.
Exemple : balanced (50), 5-10 years (68), Good (70), moins de 5 ans (50) donne 50 x 0.35 + 68 x 0.25 + 70 x 0.20 + 50 x 0.20 = 58.5, arrondi à 58,
Balanced.
Capacité
Exige au moins l’un deannual_income, net_liquid_assets, total_net_worth. Sans aucun, score et band valent null. Avec un ou deux, le score est calculé et missing liste les autres. Un montant manquant compte pour une valeur de 0, qui tombe dans la tranche la plus basse (sous-score 12 ou 15), donc une réponse manquante tire le score vers le bas. Les valeurs sont lues à partir de chaînes comme 84000, 150,000, $1.2M ou 84k.
Exemple : revenu 84 000 (35), liquidités 20 000 (12), valeur nette 60 000 (15) donne 10.5 + 4.2 + 5.25 = 19.95, arrondi à 20,
Low. Les montants de l’exemple sont lus en MAD. Le moteur lit les montants comme de simples nombres, avec des tranches fixes qui ne dépendent pas de la devise : 84 000 donne le même score dans toute devise.
L’API ne convertit pas les devises. Les tranches sont dans l’unité que vous envoyez.
Risque de conformité
Les points s’additionnent à partir du profil et du verdict.
Une politique de l’espace de travail peut abaisser le plafond de Low (1 par défaut) et celui de Medium (3 par défaut), jamais les relever.
factors liste chaque contribution en mots, par exemple Flag: <label> (<detail>) ou Verification failed: <label> (<detail>).
Les vérifications info n’ajoutent rien. Notez qu’un avertissement compte même si le client ne peut pas le corriger, comme completeness sous 80 pour cent : un dossier maigre marque un point.
Niveaux géographiques
Dérivés des listes publiques du GAFI au 19 juin 2026 (FATF_LISTS_AS_OF). L’ensemble est un instantané dans le code et il est mis à jour après chaque plénière du GAFI. Les codes sont ISO alpha-2. Quelques codes alpha-3 et noms sont compris (IRN, iran, usa, canada). Tout le reste compte comme standard.
Un pays prohibited seul marque 6, ce qui donne High. N’écrivez pas cette table en dur dans votre application : elle change à chaque publication du GAFI.
Adéquation
La première règle qui correspond l’emporte.Suitable est un indicateur pour un conseiller, pas une détermination réglementaire d’adéquation. C’est la firme qui rend cette détermination.
Exemples détaillés
Un dossier complet et propre donne :suitability est Blocked — document verification failed, et risk_level indique toujours Balanced.
Exemple de requête
documents: [] et require_documents: false, l’exemple ci-dessus n’a aucune vérification de document, donc le risque de conformité dépend de l’avertissement completeness et de la ligne de filtrage de votre environnement. Les risk_profile et capacity attendus sont les mêmes que ci-dessus.
Résumé des webhooks
L’événementkyc.case_assessed transporte risk_level et suitability dans son résumé verdict. Là, risk_level est compliance_risk.level (Low, Medium, High), pas la bande de tolérance au risque. Voir Webhooks.