The Wallet Inbox
The inbox is the attended counterpart to direct issue.
When you push a credential offer to a wallet without directIssue=true, the wallet does
not accept it automatically. Instead it stores the offer as an inbox item that the holder can
review and accept later.
Direct issue vs. inbox
Both use the same OIDC offer endpoint, the only difference is the directIssue flag:
| Direct issue | Inbox | |
|---|---|---|
| Request | POST /api/oidc/offer/{key}?directIssue=true&credential_offer_uri=... | POST /api/oidc/offer/{key}?credential_offer_uri=... |
| User interaction | None, accepted unattended | Holder reviews and accepts in the wallet |
| Trust requirement | Issuer must be a trusted contact with directIssueAllowed = true | None, the holder decides |
| Result | Credential appears immediately (if trusted) | Offer waits in the inbox until the holder acts |
Choose direct issue when provisioning a wallet you control (such as during onboarding). Choose the inbox when the holder should stay in control of what enters their wallet.
Item lifecycle
When an offer is delivered without directIssue, the wallet stores it as an inbox item that
moves through these states:
- NEW, just received, not yet viewed. Counts towards the unread badge.
- READ, the holder has opened the item.
- PROCESSED, the offer has been accepted (or dismissed) and needs no further action.