Issuing credentials to GOV.UK Wallet
GOV.UK Wallet will support multiple credential formats to represent government documents. These documents can be:
- mdoc based credentials for the digital driving licence
- other Verifiable Credentials (VCs), including W3C Verifiable Credential Data Model 2.0 and later other formats allowing selective disclosure of attributes
GOV.UK Wallet follows the OpenID Connect for Verifiable Credential Issuance (OIDC4VCI) open standard for its issuance flow.
Your team or department can start issuing credentials to GOV.UK Wallet by following this documentation.
Understand GOV.UK Wallet’s credential exchange flow
This diagram shows the exchange of a credential between a government service and GOV.UK Wallet. Below the diagram is an explanation of each step in the process.
User authenticates with GOV.UK One Login to use your service
- Your user accesses your service.
- Your service authenticates the user with GOV.UK One Login.
- Your service fetches the user’s
walletSubjectId
from the GOV.UK One Login/userinfo
API.
There is detailed guidance on how GOV.UK One Login works in the GOV.UK One Login technical documentation.
Your service issues a credential offer
- Your service generates a credential offer. Included in this offer is a pre-authorised code signed by your service.
- Your service renders the credential offer to the user as a QR code or deep-link.
- The user opens the app.
- The app prompts the user to authenticate with GOV.UK One Login.
- The user who authenticated with your service in a web browser is authenticated with GOV.UK One Login in the app.
- The user scans the QR code or opens the deep link. This action passes the credential offer to GOV.UK Wallet.
Your service publishes metadata about the credentials it publishes
- GOV.UK Wallet sends a GET request to your
/.well-known/openid-credential-issuer
endpoint to fetch your metadata. - Your service returns its metadata.
- GOV.UK Wallet calls GOV.UK One Login to exchange the pre-authorised code in the credential offer for an access token.
- GOV.UK One Login sends a GET request to your
/.well-known/jwks.json
endpoint to fetch your public keys, which verify the signature on the pre-authorised code issued by your service. - Your service returns its public keys as a JSON Web Key Set (JWKS).
- GOV.UK One Login verifies the pre-authorised code content and its signature.
- GOV.UK One Login issues an access token that you can trust when GOV.UK Wallet calls your service to redeem it.
- GOV.UK Wallet generates a proof of possession for the key material.
- GOV.UK Wallet sends a POST request to your
/credential
endpoint to request the credential. This request includes the access token issued by GOV.UK One Login (as a bearer token in the authorization header) and the proof of possession generated by GOV.UK Wallet.
Your service issues a credential
- Your service sends a GET request to the GOV.UK One Login
/.well-known/jwks.json
to fetch its public keys, which verify the signature on the access token issued by GOV.UK One Login. - GOV.UK One Login returns its public keys as a JSON Web Key Set (JWKS).
- Your service verifies the content and signature of the access token and the proof of possession.
- Your service compares the
walletSubjectId
in the access token’ssub
claim with thewalletSubjectId
retrieved in step 3. If they are the same, this provides assurance that you are issuing the credential to a digital wallet that is logged in as the rightful holder. - Your service builds and signs the credential, and binds it to the did:key provided in the proof of possession to make sure the credential can only be used by the device it is issued to.
- Your service returns the device-bound credential to GOV.UK Wallet.
- GOV.UK Wallet sends a GET request to your
/.well-known/did.json
endpoint to fetch your DID document. The DID document contains your public key which is required to verify the signature on the credential issued by your service. - Your service returns its DID document.
- GOV.UK Wallet verifies the content and signature of the credential.
- GOV.UK Wallet stores the credential.
GOV.UK Wallet notifies your service
The following steps are optional. If you do not offer a /notification
endpoint then GOV.UK Wallet will not send a notification.
- GOV.UK Wallet sends a POST request to your
/notification
endpoint to notify your service. This notification will confirm whether GOV.UK Wallet successfully stored the credential, or failed to store it. - Your service records the notification.
- Your service returns an empty response to GOV.UK Wallet.
This page was last reviewed on 14 May 2025.
It needs to be reviewed again on 14 November 2025
.
This page was set to be reviewed before 14 November 2025.
This might mean the content is out of date.