status field of a verification tells you where it is. Your integration mostly needs the final ones, which arrive by webhook.
Notes
documents_requiredonly 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 isresubmission_requestedwithreason: null, so a handler must accept anullreason on that status.reviewmeans 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 inreviewtoday, but handle the status anyway.resubmission_requestedis not final. The person retakes what failed in a new attempt of the same verification. Attempts are limited: when they run out the verification isdeclined, andreasonis the last attempt’s reason, not a separate code. Treatdeclinedas final whatever the code.abandonedandexpiredare 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 withGET /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.