state |
Meaning |
What to do |
waiting |
started, no answer yet |
keep polling; the box does this for you |
verified |
the wallet’s answer passed every check; claims holds the fields |
read it on your server with the secret key and continue |
failed |
an answer arrived but did not pass; error says why |
show a retry; log error |
cancelled |
the holder dismissed the request in the wallet |
offer to try again |
expired |
the request window passed, or the session id is unknown |
the box shows Refresh and starts a new session |
Common error values on failed:
error contains |
Cause |
Fix |
issuer or trust |
the credential’s issuer is not on your tenant’s list |
ask us to add the issuer, or the holder has a credential from an unexpected issuer |
signature |
the issuer signature or the device signature did not verify |
an old or tampered wallet build; retry with a current wallet |
expired |
the credential itself has expired |
the holder needs a renewed credential |
docType |
the wallet answered with a different document type |
the holder picked the wrong card; ask again |
Rules: an expired session never becomes verified (HTTP 410); a second submission returns the first
result; a late “closed” never overrides a result; unknown ids read as expired.
decision |
Meaning |
What the operator does |
ACCEPT |
signature valid, issuer trusted, within validity, not revoked |
proceed; compare the portrait |
REJECT |
one of those failed; reason says which |
refuse; the reason is shown on the result screen |
INCONCLUSIVE |
the checks passed but the revocation status could not be established (offline, no status data) |
follow your policy: accept, retry online, or refuse |
Session states before the result: AwaitingEngagement → Connecting → Verifying → Done or Failed
(Bluetooth dropped, the holder cancelled, no matching credential).
| Where |
State |
Meaning |
| Issuing |
SdkResult.Failure from previewOffer / issueFromOffer |
the offer is invalid, expired, or the issuer refused; error.message says which |
| Presenting |
PresentmentState.Failed with DECLINED |
the holder chose not to share, or backed out of the face check |
| Presenting |
PresentmentState.Failed with UNSUPPORTED |
no held credential matches the request |
| Presenting |
PresentmentState.Failed with FACE_CHECK_FAILED |
the live face did not match the credential’s photo (after the allowed tries); nothing was shared |
| Presenting |
PresentmentState.Failed with FACE_CHECK_UNAVAILABLE |
the face check could not run: no usable photo on the credential, no camera, or camera access refused; nothing was shared |
| Preparing |
SdkResult.Failure from prepareForSharing with FACE_CHECK_UNAVAILABLE |
the credential’s photo has no usable face; warn the holder before they need to share |