GET /v3/session/<id>/decision/ and every Didit webhook.
All Status Values
Every status is an exact string returned by the Didit API and webhooks. Always use strict string matching (e.g.,
=== "In Review") in your code — these values are case-sensitive and include spaces. The Kyc Expired value also uses a single capital K (not KYC).Session Statuses
Not Started — "Not Started"
Not Started — "Not Started"
API value:
"Not Started"The session has been created via the API but the user has not opened the verification link yet.- What to do: Wait for the user to begin, or send a reminder if too much time passes.
- Transitions to:
"In Progress","Expired"
In Progress — "In Progress"
In Progress — "In Progress"
API value:
"In Progress"The user has opened the link and is actively completing verification steps (document capture, liveness, etc.).- What to do: No action needed — the user is working through the flow.
- Transitions to:
"Approved","Declined","In Review","Abandoned"
Approved — "Approved"
Approved — "Approved"
API value:
"Approved"All verification checks passed successfully. The user’s identity has been verified.A reviewer can also link same-person KYC verifications during approval using link_to_session_id and a nonblank link_reason. Approval and linking succeed together. Grouping does not merge profiles or biometric data; deleting a verification removes it from the group. An already-approved session can gain a first link without another status event or email, and a same-group retry creates no additional link audit.- What to do: Grant the user access, update their profile, and store the decision data.
- Webhook includes: Full
decisionobject with all feature results. - Transitions to:
"Kyc Expired"(when the verified document’s expiry date passes — the default unless Expiration mode is Allow expired for that country and document type). A reviewer or the update-status endpoint can also set it to"Declined"or"Resubmitted".
Declined — "Declined"
Declined — "Declined"
API value:
"Declined"One or more verification checks failed. The user did not pass verification.- What to do: Notify the user. Optionally request a resubmission if the issue is fixable.
- Webhook includes: Full
decisionobject with warnings explaining the failure. - Transitions to:
"Resubmitted"(if a reviewer requests it). A reviewer or the update-status endpoint can also set it to"Approved".
In Review — "In Review"
In Review — "In Review"
API value:
"In Review"Automated checks flagged warnings that need human review. A compliance reviewer must make the final decision.- What to do: A reviewer should open the session in the Console and approve, decline, or request resubmission.
- Webhook includes: Full
decisionobject with warnings. - Transitions to:
"Approved","Declined","Resubmitted"
Awaiting User — "Awaiting User"
Awaiting User — "Awaiting User"
API value:
"Awaiting User"Used in KYB (business verification) sessions when the Key People step has submitted the list of parties and spawned child KYC / KYB sessions. The parent session waits until all required parties complete their individual verification.- What to do: Monitor the child KYC session statuses. Once all required parties finish (approved, declined, or expired), the parent session automatically re-aggregates to its final status.
- Webhook includes: The current list of parties and their child session statuses.
- Transitions to:
"Approved","Declined","In Review"(once all child sessions are terminal) - Transitions from:
"In Progress"(after the Key People step is submitted) - Note: If a child KYC session is resubmitted, the parent returns to
"Awaiting User"until the resubmitted session completes. A"Declined"KYB Registry Check takes precedence over"Awaiting User".
Resubmitted — "Resubmitted"
Resubmitted — "Resubmitted"
API value:
"Resubmitted"A reviewer has requested that the user redo specific verification steps (e.g., retake a blurry document photo).- What to do: Wait for the user to complete the resubmitted steps. The system will automatically re-evaluate.
- Webhook includes:
resubmit_infoobject with the list of features to redo and reasons. - Transitions to:
"Approved","Declined","In Review", or"Abandoned"when the session window ends before the person redoes the steps.
Expired — "Expired"
Expired — "Expired"
API value:
"Expired"The session timed out before the user opened the verification link.- What to do: Create a new session and send the user a fresh link.
- Terminal status — no further transitions.
Abandoned — "Abandoned"
Abandoned — "Abandoned"
API value:
"Abandoned"The user started but did not finish the verification within the allowed timeframe.- What to do: Send a reminder or create a new session.
- No automatic transitions. A reviewer, or
PATCH /v3/session/{sessionId}/update-status/, can still set it to"Approved","Declined"or"Resubmitted".
KYC Expired — "Kyc Expired"
KYC Expired — "Kyc Expired"
API value:
"Kyc Expired"The document verified during the session has passed its own expiry date. The trigger is that date, not a window measured from approval, and no warning is sent beforehand.- What to do: Ask the user to re-verify with a new session.
status.updateddelivers the transition, and the ID verification result carries aDOCUMENT_EXPIREDwarning. - Controlled by: the Expiration mode of that country and document type in ID verification → Additional settings by country & document type — Reject expired (the default) monitors the document, Allow expired means the session never moves here.
- No automatic transitions. A reviewer, or
PATCH /v3/session/{sessionId}/update-status/, can still set it to"Approved","Declined"or"Resubmitted".
Status Transitions
Lifecycle diagram
Terminal vs Non-Terminal
Handling Statuses in Your Code
Use webhooks or the Retrieve Session API to react to status changes.Resubmission
The Resubmitted status lets your compliance team give users a second chance without creating a new session.1
Reviewer initiates resubmission
From the Console, open an
In Review or Declined session and click Request Resubmission. Select which steps need to be redone.2
Previous data is archived
The system resets the selected features and marks prior data as
previous_attempt — preserving the full audit trail.3
User is notified
If an email is available, the user receives a localized email with a direct link to resume.
4
User redoes specific steps
The user only repeats the steps that were flagged — not the entire verification.
5
System re-evaluates
Once complete, the session automatically transitions to
"Approved", "Declined", or "In Review".Resubmission Webhook Payload
reasons maps each resubmitted node_id to the warning code of the most relevant log on that step (the same codes the decision reports), so you can map it to your own copy. It is also the code the hosted flow’s resubmission screen and the resubmission email localize for the user, except for warnings that would reveal a screening or fraud signal (duplicates, AML, blocklist, cross-organization checks, location integrity and similar): for those the person sees a generic reason, and resubmit_info.reasons in your webhook always carries the real code. A step with no recorded warning has no entry.
Which Features Can Be Resubmitted?
Any feature with a non-approved status: Declined, In Review, Not Finished, Not Started, or Expired.Best Practices
Monitor In Review
Set up alerts (email or Slack) in your Didit Console to get notified when sessions need manual review.
Prefer Resubmission
If the issue is fixable (blurry photo, wrong document side), request a resubmission instead of declining. This improves conversion.
Track Drop-offs
High Abandoned or Expired rates may indicate UX friction. Consider adjusting session TTL or improving user guidance.
Idempotent Handlers
Webhooks may be retried. Use
session_id as a unique key to ensure you process each status change only once.