Docs
Issuance

Issuance API

Issue verifiable credentials to wallets using OpenID for Verifiable Credential Issuance (OID4VCI)

The Issuance API lets you create and deliver verifiable credentials to digital wallets using the OpenID for Verifiable Credential Issuance (OID4VCI) protocol.

How it works

  1. You create a credential offer specifying the template and claim values
  2. The wallet scans the offer URI (QR code or deep link)
  3. The wallet authenticates and exchanges the offer for an access token
  4. The wallet requests the credential using the access token
  5. The API signs and returns the credential

Grant types

Two authentication flows are supported:

FlowUse caseHAIP required
Pre-authorized codeServer-to-server, known holderYes
Authorization codeUser-driven, PAR + PKCEYes

Both can be included in the same credential offer. The wallet chooses which to use.

Endpoints

API endpoints (requires API key)

MethodPathAuthDescription
POST/oid4vci/offersSecret keyCreate a credential offer

Protocol endpoints (no API key)

These are called by wallets. You don't interact with them directly:

MethodPathDescription
GET/.well-known/openid-credential-issuerCredential issuer metadata
GET/.well-known/oauth-authorization-serverAuthorization server metadata
POST/oid4vci/parPushed Authorization Request
GET/POST/oid4vci/authorizeAuthorization endpoint
POST/oid4vci/tokenToken endpoint
POST/oid4vci/credentialCredential endpoint
POST/oid4vci/nonceNonce endpoint
POST/oid4vci/deferredDeferred credential endpoint
GET/oid4vci/offers/:idGet offer details
GET/oid4vci/offers/:id/statusGet offer status, returns { "status": "..." }

Supported formats

FormatDescription
mso_mdocISO 18013-5 mobile documents
dc+sd-jwtSD-JWT Verifiable Credentials

Security features

  • DPoP (RFC 9449): Sender-constrained access tokens
  • PKCE (RFC 7636): Proof Key for Code Exchange with S256
  • Wallet attestation: Optional. When a wallet supplies an attest_jwt_client_auth client assertion it is verified, but requests without one are accepted (the authorization server advertises both none and attest_jwt_client_auth)
  • Key attestation: Bind credentials to hardware-backed keys
  • Nonce binding: Prevent replay attacks on credential requests