The decision
Approved
Every applicable check ran and none rejected. May still carry warnings.
Rejected
At least one check rejected. Every reason is listed.
Undetermined
The analysis could not run. A system condition, not a verdict on the person.
Warnings and informational findings never move the decision. There is no score, no threshold, no grey zone: a single rejecting finding rejects.
Issues
Each finding is an issue with four parts:Three kinds of issue
Fixed-type issues always have the same type. An expired document is always a rejection; a skipped face comparison on a first transaction is always informational. Policy-driven issues take their type from your configuration. An emulator detection is a rejection if you configured it that way, a warning if you chose that, and is not reported at all if you chose to ignore it. This is how you tune strictness without changing code. Advisory issues tell you about the analysis itself rather than the person: a rule that could not be evaluated because a signal was missing, a configuration that is valid but probably not what you meant, a comparison that was skipped. They are warnings or informational and never block. The full catalogue of codes is in the API Reference under Issue codes.All checks run to completion
chmod does not stop at the first rejection. If a document is expired and the surname does not match and the device is an emulator, you get all three findings at once. You never have to resubmit to discover the next problem, and your operators see the whole picture on the first look.Block statuses
Alongside the overall decision, each analysed area reports its own status so you can see where a rejection came from without scanning every code:
Device, customer and configuration findings belong to no area. They sit in the issue list and affect the decision directly.
Acting on the result
Group findings by what can be done about them, not by which check produced them:What to show the person
The message on each finding is written for your engineers and operators. It is precise about which check failed — which is exactly what a fraudster wants to know, and more than a genuine user needs. Map codes to your own copy instead:
A genuine user with a bad photo gets actionable guidance. A fraudster gets nothing useful.

