Skip to main content
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 dans values. 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.
Si 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 de annual_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 :
Le même dossier avec une carte nationale expirée (les échecs critiques ajoutent 3 points chacun et forcent High) :
Son suitability est Blocked — document verification failed, et risk_level indique toujours Balanced.

Exemple de requête

Avec 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énement kyc.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.