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.

Short answer

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.

StatusWhat happenedWhat to do
ExpiredThe link timed out before it was ever openedCreate a new session with a fresh link
AbandonedThey started but didn't finish in timeRequest resubmission or create a new session
In progressThey're partway through right nowNothing - it isn't stuck

An Abandoned session can be resubmitted so the person can redo selected steps in the same session. If the link expired before it was opened, create a new session instead. Keep processing status updates after resubmission.

#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.

Two things follow that people ask about every week:

  • You can't manually review an In progress session. There is no decision to make yet, because the checks haven't all run. The way to move it is to contact the person and ask them to reopen the same link and finish the remaining steps; the link keeps working until the session's time window ends.
  • You can't cancel it either. There is no "close" action for a Not started or In progress session. It ends on its own when the window expires, or you delete it - and deletion is permanent, so only do that when you genuinely want the record gone.

#How long the window is

Each workflow sets how long an unfinished session stays open: from 1 hour to 4 weeks, and 7 days unless you changed it (session_expiration_time in the workflow settings, in seconds).

An Abandoned session can be resubmitted so the person can redo selected steps in the same session. If the link expired before it was opened, create a new session instead. Keep processing status updates after resubmission.

The verifications list in the Didit console filtered by status
Unfinished sessions are found by filtering, not by waiting.

#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

While the session hasn't expired, the person can still finish it from the same link, so send them that link again 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.

Still stuck? Talk to a human.

Include your organization ID and the session ID you are asking about.

Contact support