Skip to main content
When a verification ends as declined or resubmission_requested, its reason field names why, in the verification object and in the webhook. For every other status reason is null, and so is it on the resubmission_requested a facial age estimation sends when it asks for an ID. A verification carries one reason: the most important of what went wrong. A selfie that is unclear and also looks like a photo of a screen is reported as the screen, not as unclear.

Using the reasons

  • Declined is final, whatever the code. Usually the check found something a new photo would not fix. But when the attempts run out, the verification is declined with the last attempt’s reason, which may be a code from the retake family below. Never offer a retry on declined. Don’t wait for verification.attempts.exhausted to spot a run-out either: it is listed below, but a verification that runs out of attempts carries its last attempt’s reason.
  • Resubmission requested means the person can still fix it. The widget already asks them to retake the image, so you rarely need to show the reason yourself.
  • Map codes to your own messages where you need them, and treat a code you do not know as a generic failure: new codes are added as checks improve.
  • The code’s first segment tells you which step failed: selfie, document, verification (a rule about the whole verification) or aml (the blocklist). Document codes name the side next when it matters, as in document.front.glare.high.

All reasons

Blocklist

Document

Selfie

Verification