When a session never finishes
Abandoned, Expired and stuck In Progress sessions all mean the person never completed the flow - here's how to tell which, and the usual causes worth fixing.
Expired = they never opened the link. Abandoned = they opened it and walked away. In Progress = they're still in it. None of these has a verification decision, and none of them is billed for steps that never ran.
A session that never reaches a decision ends in one of three states, and they mean different things.
| Status | What happened | What to do |
|---|---|---|
| Expired | The link timed out before it was ever opened | Create a new session with a fresh link |
| Abandoned | They started but didn't finish in time | Remind them, or create a new session |
| In Progress | They're partway through right now | Nothing - it isn't stuck |
Expired and Abandoned are both terminal: they won't become Approved later.
#In Progress is not stuck
A session sitting at In Progress for a long time almost always means exactly what it says - the person opened the link and hasn't finished. There's no queue behind it and nothing to release. It will move on its own when they complete the remaining steps, or become Abandoned if they don't.

- Filter by status to separate In Progress from Abandoned and Expired.
- Status tells you whether the person is still going or has already given up.
- Add the columns that show where they stopped.
#Why people abandon, in the order it usually happens
The document step. Most drop-off is here. Common causes worth checking:
- Your workflow doesn't accept the document the person actually holds, so they get stuck at document selection. See why a document type was rejected.
- The back side is required but the document they have doesn't carry the data on the back.
- Auto-capture never fires in poor lighting and they give up rather than switching to upload.
The camera step. If the camera never opens, the causes are almost always environmental:
- An in-app browser inside another app (a chat app's built-in browser, for example) that restricts camera access. Opening the link in the phone's real browser fixes it.
- Camera permission previously denied for that site, which the person then has to re-grant in browser settings.
- Another app or tab already holding the camera. On some devices a microphone permission request can also block the camera.
Language. If the flow appears in a language the person doesn't read, they leave. The UI auto-detects the browser locale and falls back to English. If your users are in a market where the browser locale isn't reliable, set the language explicitly when you create the session. See setting the verification language.
Flow length. Every additional step costs conversion. A questionnaire with twenty fields in the middle of an onboarding flow is a common abandonment point - and unlike the document step, it's entirely under your control.
#Finding out where they dropped
Analytics in the console shows the funnel step by step, so you can see which step loses people rather than guessing. See reading your analytics.
On an individual session, the per-check results show which steps completed - the last completed step is where the person stopped.
#Reminders
If you passed contact details when creating the session, you can send the person a reminder rather than starting over. A new session is the right move only when the original expired unopened or is genuinely stale.
#What it costs you
Nothing for the steps that never ran. Billing happens per completed feature, so an abandoned session bills only the features that actually finished before the person left. A session that expired unopened costs nothing at all.
#If a session finished but your side never heard about it
That is a different problem, and a much more common one than it looks: the verification completed, the console shows the final status, but your backend never got the update. That is a webhook delivery issue, not an abandoned session. See when a webhook never arrives.
