Overview

Credential Offers are the mechanism for initiating credential issuance in the Issuer2 API. An offer is created from a credential profile and generates an OID4VCI credential offer URL that can be claimed by any compliant wallet.

What is a Credential Offer?

A credential offer is a one-time or limited-use invitation for a wallet to receive a credential. When you create an offer, you specify:

  • Profile – The credential profile to use as the base configuration
  • Authentication Method – Pre-authorized or authorization code flow
  • Delivery Mode – Credential offer by reference or by value
  • Expiration – How long the offer remains valid
  • Runtime Overrides – Any profile values to override for this specific offer

Offer Flow

  1. Create Offer – Call the offers endpoint with a profile ID
  2. Share URL – Send the credential offer URL to the user (QR code, deep link, etc.)
  3. Wallet Claims – User's wallet resolves the offer and receives the credential

Authentication Methods

MethodDescriptionUse Case
PRE_AUTHORIZEDNo user authentication requiredKnown users, pre-verified data
AUTHORIZEDUser must authenticate via IdPUnknown users, dynamic data collection

Pre-Authorized Code Flow

The pre-authorized flow is simpler and faster:

  • Issuer creates offer with all credential data
  • User scans QR code or clicks link
  • Wallet receives credential immediately (optionally with PIN)

Authorization Code Flow

The authorization code flow supports user authentication:

  • Issuer creates offer (optionally with partial data)
  • User scans QR code or clicks link
  • Wallet redirects to IdP for authentication
  • ID token claims are mapped to credential data
  • Wallet receives credential

Offer Delivery Modes

ModeDescription
BY_REFERENCEOffer URL contains a reference; wallet fetches full offer from issuer (default)
BY_VALUEFull credential offer is embedded in the URL

BY_REFERENCE is recommended for most use cases as it keeps URLs shorter and allows the issuer to track when offers are resolved.

API Endpoints

Create a Credential Offer

curl -X POST 'http://localhost:7002/issuer2/credential-offers' \
  -H 'Content-Type: application/json' \
  -d '{
    "profileId": "university-degree",
    "authMethod": "PRE_AUTHORIZED"
  }'

Response:

{
  "offerId": "abc123-def456-ghi789",
  "profileId": "university-degree",
  "authMethod": "PRE_AUTHORIZED",
  "expiresAt": 1704067500000,
  "credentialOffer": "openid-credential-offer://?credential_offer_uri=http%3A%2F%2Flocalhost%3A7002%2Fopenid4vci%2Fcredential-offer%3Fid%3Dabc123-def456-ghi789"
}

List Sessions

curl -X GET 'http://localhost:7002/issuer2/sessions'

Get Session Details

curl -X GET 'http://localhost:7002/issuer2/sessions/{sessionId}'

Using the Credential Offer

The credentialOffer URL in the response can be:

  1. Displayed as QR Code – User scans with their wallet app
  2. Sent as Deep Link – User clicks link on mobile device
  3. Embedded in Email/Message – User clicks to open in wallet

When the wallet resolves this URL, it will:

  1. Fetch the full credential offer from the issuer
  2. Display the credential details to the user
  3. Request the credential using the appropriate flow

Next Steps

Last updated on June 15, 2026