OpenID for Verifiable Credentials (OpenID4VC)
What it is
OpenID for Verifiable Credentials (OpenID4VC) is a family of OpenID Foundation protocols that move verifiable credentials between issuers, wallets, and verifiers. If DIDs and the VC data model are the nouns of decentralized identity, OpenID4VC is the verbs: how a credential gets issued to a wallet and later presented to a verifier. It builds on OAuth 2.0 and OpenID Connect, so identity teams reuse authorization servers, libraries and threat models they already know.
The core decision for practitioners in 2026 is simple: implement the 1.0 Final specs profiled by HAIP, not the dozens of earlier drafts that early wallets shipped.
Status (November 2026)
| Specification | Status | Date |
|---|---|---|
| OpenID4VP 1.0 | Final | 9 July 2025 |
| OpenID4VCI 1.0 | Final | 16 September 2025 |
| HAIP 1.0 | Final | 24 December 2025 |
| Security and Trust in OpenID4VC | Working Group Draft | |
| OpenID4VP over BLE | Draft | |
| SIOPv2 | Implementer's Draft (Connect WG) |
The Digital Credentials Protocols working group lists formal security analyses of OpenID4VP (July 2025) and of OpenID4VCI and OpenID4VP (October 2023). The OpenID Foundation publishes errata-corrected text at the base URL and keeps the approved text at the -final URL.
How issuance works (OpenID4VCI 1.0)
The wallet is an OAuth client; the credential issuer is a resource server that may also run the authorization server.
- Credential offer. The issuer gives the wallet an offer by value (in a URI or QR code) or by reference (an HTTPS URL the wallet fetches). It lists credential configuration IDs and the grants available.
- Authorization. Either the authorization code flow (a normal OAuth request, optionally with PKCE, PAR and an
issuer_statelinking it to the offer) or the pre-authorized code flow, where the issuer already authenticated the user out of band and hands over a short-lived single-use code. An optional transaction code (tx_code) sent through a second channel limits the damage of a leaked offer. - Proof of possession. The wallet gets a fresh
c_noncefrom the nonce endpoint and signs it with the key the credential will be bound to. Proof types arejwt,di_vpandattestation(a key attestation). - Credential endpoint. The wallet calls it with the access token and proof and receives one or more credentials. Batch issuance returns several copies with different keys so each presentation can use a fresh one. Deferred and notification endpoints handle slow issuance and lifecycle feedback.
Appendix A covers W3C VCs (JWT and Data Integrity variants), ISO mdoc (ISO/IEC 18013-5) and IETF SD-JWT VC.
How presentation works (OpenID4VP 1.0)
A verifier, say a bank onboarding a customer, sends an authorization request with response_type=vp_token, a mandatory nonce, and a DCQL query listing the credentials and claims it needs and, optionally, trusted_authorities naming acceptable issuers. The verifier identifies itself with a client identifier prefix: redirect_uri, x509_san_dns, x509_hash, verifier_attestation, openid_federation or decentralized_identifier, with origin reserved for the Digital Credentials API.
- Same device: redirects, with the response in the fragment by default.
- Cross device: a QR code carries a request URI; the wallet fetches the signed request and posts the response with
direct_post, or encrypted withdirect_post.jwt. - Browser: Appendix A runs the same request through the W3C Digital Credentials API, which registers
openid4vp-v1-unsigned,-signedand-multisignedprotocol identifiers.
The wallet returns presentations bound to the nonce, with selective disclosure so only the requested claims leave the device.
What HAIP pins down
HAIP 1.0 turns options into rules:
| Area | HAIP requirement |
|---|---|
| Formats | SD-JWT VC (dc+sd-jwt) or ISO mdoc (mso_mdoc); ecosystems pick |
| Crypto | ES256 mandatory; SHA-256 digests; ECDH-ES P-256 with A128GCM or A256GCM for response encryption |
| Issuance | Authorization code flow, FAPI 2.0 security (PKCE S256, PAR, RFC 9207 iss), DPoP-bound tokens, wallet attestation at PAR and token endpoints, key attestations |
| Presentation | DCQL; signed requests with x509_hash; direct_post.jwt or dc_api.jwt; key binding JWT on every holder-bound SD-JWT VC |
| Revocation | Token Status List for SD-JWT VC, unique unpredictable index per credential |
Two caveats from the profile itself: it references pre-final drafts (SD-JWT VC draft-13, Token Status List draft-14) on purpose, and conforming to it is not enough on its own to reach eIDAS level of assurance high; additional measures outside its scope are needed.
Who implements it
-
walt.id: feature list shows OID4VCI 1.0 and OID4VP 1.0, with deprecated services still covering OID4VCI drafts 11 and 13 and OID4VP drafts 14 and 20.
-
Procivis: standards page lists OpenID4VCI 1.0, OpenID4VP 1.0, OpenID4VP over BLE, and a proprietary OpenID4VP-over-MQTT adaptation.
-
MATTR: docs start with the OID4VCI pre-authorized code flow and remote verification over OID4VP.
-
Microsoft Entra Verified ID: its standards page links OpenID4VCI draft 11, SIOPv2 and DIF Presentation Exchange v2.0.0, which predates the 1.0 and HAIP choices.
-
Google Wallet: accepts mdoc IDs over OpenID4VP 1.0.
-
Talao: its site describes issuance and presentation "through OID4VCI and OID4VP" for SD-JWT VC, mdoc and W3C credentials; it does not state a version.
Compare options in best verifiable credential platforms.
Security and privacy pitfalls
- Draft drift. "Supports OID4VP" can mean draft 14, draft 20 or 1.0, and they do not interoperate. Ask for the version and the HAIP conformance result.
- Pre-authorized code theft. Anyone holding the offer can redeem the code. Require
tx_codefor anything sensitive and keep code lifetimes short. - Cross-device phishing. A QR code can be relayed from an attacker's session to a victim. HAIP makes same-device redirects mandatory and says verifiers must reject presentations when the wallet does not return to the original session; the Digital Credentials API adds origin information the wallet can show.
- Unauthenticated verifiers.
redirect_uriclient IDs prove nothing about who is asking. Use signed requests withx509_hashor a verifier attestation so the wallet can display and enforce who receives data. - Replay and linkability. Enforce the
nonce, reject reused key binding, and use batch-issued credentials once each so verifiers cannot correlate users by a stable signature or key. - Treating SIOPv2 as done. It is still an Implementer's Draft; few production wallets depend on it.
How it connects
OpenID4VC carries SD-JWT VC and W3C VCs and mDLs. Issuer and verifier identifiers can be X.509 certificates or DIDs. The EU Architecture and Reference Framework names OpenID4VP over the Digital Credentials API, ISO/IEC 18013-7 over the API, and OpenID4VP with a custom URI scheme as presentation options for the EUDI Wallet.
Related
Guides: verifiable credentials implementation guide, choosing a decentralized identity platform, what is decentralized identity. Standards: Verifiable Credentials, DID, mDL, eIDAS 2 / EUDI Wallet, FAPI, OAuth 2.1. Glossary: OpenID4VCI, OpenID4VP, verifiable presentation, SD-JWT. Vendors: decentralized identity.
Who wrote it
OpenID4VP and OpenID4VCI are edited by Kristina Yasuda, Torsten Lodderstedt, and Tobias Looker. More in the experts directory.
OpenID for Verifiable Credentials (OpenID4VC): frequently asked questions
- Are OpenID4VCI and OpenID4VP final?
- Yes. OpenID for Verifiable Presentations 1.0 was published as a Final specification on 9 July 2025, and OpenID for Verifiable Credential Issuance 1.0 on 16 September 2025, both from the OpenID Foundation's Digital Credentials Protocols working group. The High Assurance Interoperability Profile (HAIP) 1.0 followed on 24 December 2025. SIOPv2 is still at Implementer's Draft.
- What is HAIP?
- The OpenID4VC High Assurance Interoperability Profile 1.0 narrows OpenID4VCI and OpenID4VP to one interoperable set of choices: SD-JWT VC or ISO mdoc credentials, ES256 signatures, the authorization code flow with PKCE, PAR and DPoP for issuance, wallet attestation, DCQL queries, signed requests with the x509_hash client identifier, encrypted responses, and Token Status List for revocation. It does not by itself achieve eIDAS level of assurance high.
- What is the difference between OpenID4VCI and OpenID4VP?
- OpenID4VCI is issuance: the wallet acts as an OAuth client and receives a credential from the issuer's credential endpoint. OpenID4VP is presentation: a verifier sends a request, and the wallet returns a vp_token containing presentations of the requested credentials. A wallet usually needs both.
- Does OpenID4VP replace DIF Presentation Exchange?
- In 1.0, verifiers describe what they want with the Digital Credentials Query Language (DCQL), and HAIP requires DCQL. Some products built on earlier drafts still use Presentation Exchange; Microsoft Entra Verified ID, for example, lists Presentation Exchange v2.0.0 as its query language.
- Can OpenID4VP work in a browser?
- Yes. OpenID4VP 1.0 Appendix A defines use over the W3C Digital Credentials API, where the browser passes the request to a wallet and reports the verifier's origin. Google's developer documentation says Google Wallet accepts ISO mdoc digital IDs over OpenID4VP 1.0 through the API in Chrome.
Related on Start with Identity
- GuideReusable Identity and KYC with Verifiable Credentials
The clearest enterprise ROI for decentralized identity is reusable KYC: verify a person once, issue a credential, and let them reuse it. How it works, what it s
- ArticleVerifiable Credentials Use Cases: Where They Actually Pay Off in 2026
The verifiable credential use cases that deliver real value in 2026: reusable KYC, government wallets, workforce credentials, education, healthcare, and supply
- BlogW3C publishes Verifiable Credentials Data Model 2.0 as a Recommendation
VC Data Model 2.0 reached W3C Recommendation on 15 May 2025, moving verifiable credentials from a promising draft to a standard the W3C recommends for wide depl
- Blog26,400 working cloud and AI credentials found in public Gitee repositories
A researcher scanned 7.25 million public repositories on Gitee, China's largest Git platform, and found 26,400 unique credentials that still worked, led by Alib
- BlogAccess broker k0t breached FortiGate and GlobalProtect edges and exposed more than 70,000 credentials
Group-IB and NyxLab reported on October 21 that k0t, a likely initial access broker, broke into Fortinet and Palo Alto edge devices with known CVEs and brute fo
- GlossaryClient Credentials Grant
An OAuth 2.0 flow where an application authenticates as itself, with no user present, to obtain an access token. The standard pattern for machine-to-machine acc