Skip to main content
The status field of a verification tells you where it is. Your integration mostly needs the final ones, which arrive by webhook.

Notes

  • documents_required only happens on Facial age estimation workspaces, when the selfie can’t confirm 18+. GET /v1/verifications/{id} reports it while the person adds an ID in the same verification. The webhook for this step is resubmission_requested with reason: null, so a handler must accept a null reason on that status.
  • review means a person on your team decides in the console; the decision webhook follows when they do, with no fixed time. In a test workspace every submission stops here until you set the outcome: see Sandbox and test data. A live verification is decided automatically and doesn’t stop in review today, but handle the status anyway.
  • resubmission_requested is not final. The person retakes what failed in a new attempt of the same verification. Attempts are limited: when they run out the verification is declined, and reason is the last attempt’s reason, not a separate code. Treat declined as final whatever the code.
  • abandoned and expired are set by a daily job, so they can arrive up to a day after the seven days have passed.
  • A final status can still change when someone on your team corrects a decision by hand in the console. The webhook for the new status carries manual_moderation.

Reading the status

Rely on the webhook, and fetch the verification with GET /v1/verifications/{id} when you need the current state, for example when the person returns to your site before the webhook arrived. Do not poll in a tight loop: see Rate limiting.