For the complete documentation index, see llms.txt. This page is also available as Markdown.

Issuing Credentials

This guide explains how to issue a verifiable credential from the operator panel: pick an assigned schema, fill in the claim values, create a credential offer, and hand it to a holder as a QR code or deep link—or claim it directly into one of your cloud wallets.

Every credential offer is an OpenID4VCI pre-authorized offer. The offer is delivered as an openid-credential-offer://... URI (rendered as a QR code), which a compatible wallet scans to collect the credential.


Open the Issue form

  1. From the Sidebar Menu, open Issuers and select the Issuer you want to issue from.

  2. On the Issuer detail page, open the Schemas tab. The Assigned schemas section lists every schema bound to this Issuer, grouped by name and credential type, with one row per version.

  3. Find the schema version you want and click Issue credential. Note: the button is enabled only for Published schema versions; draft versions cannot be issued.

Issuer detail Schemas tab with Issue credential button
Issuer detail — the Schemas tab with an assigned schema and the Issue credential button

Fill in the claim fields

The Issue Credential form is generated automatically from the schema's claim definitions. Each property becomes an input, required fields are marked, and field titles and descriptions come from the schema.

  1. Enter a value for every required claim (for example employee_id, full_name, department). Optional claims left blank are omitted from the credential.

  2. Click Generate offer to create the offer.

Issue Credential form with claim inputs
The Issue Credential form with claim inputs filled in

Share the credential offer

After the offer is created, a QR Code panel appears next to the form with the offer rendered as a scannable image. From this panel you can:

  • Scan the QR code with a wallet to collect the credential.

  • Download the QR code as a PNG.

  • Print the QR code.

  • Copy offer URL to copy the raw openid-credential-offer://... URI for sharing through another channel.

QR Code panel with Download, Print, Copy offer URL
The QR Code panel with Download, Print, and Copy offer URL

What gets sent

Issuing from the form creates the offer via the credential-offers endpoint of the selected Issuer.

Endpoint

POST /issuers/{issuerDid}/credential-offers/qr-code

Request Body

  • credentialConfigurationIds: the credential configuration to issue, in the form Name@Version:format (e.g. EmployeeBadge@1:sd-jwt). The panel resolves this from the schema version you selected.

  • issuanceMetadata.claimsByConfigurationId: the claim values you entered, keyed by the same configuration id.

The qr-code endpoint returns a PNG image of the QR code, with the offer URI in the X-Credential-Offer-Uri response header (and X-Pin when a PIN is required). The plain-JSON variant, POST /issuers/{issuerDid}/credential-offers, returns the offer details directly:

Response Body

  • credentialOfferUri: the openid-credential-offer://... URI behind the QR code.

  • issuanceSessionId: the id of the issuance session created for this offer; track its progress under the Issuer's Issuance Sessions tab.

  • userPin: present only when the offer requires a PIN (see below).


Track issuance sessions

Every offer creates an issuance session, listed under the Issuer's Issuance Sessions tab as a table of Session ID, State, and Created/Expires timestamps. Opening a session's Session Dashboard side panel re-displays the offer QR code for an active session, offers Copy offer URL, lists the issued credentials of a completed session, and lets you claim the offer straight into a cloud wallet.


SD-JWT VC and JWT-VC-JSON

A schema can be published in two credential formats, and each format produces its own credential configuration id:

  • SD-JWT VC — configuration id ends in :sd-jwt (e.g. EmployeeBadge@1:sd-jwt). SD-JWT credentials support selective disclosure, so the holder can later reveal individual claims to a verifier instead of the whole credential. The claims a schema marks as selectively disclosable are defined when the schema is created.

  • JWT-VC-JSON — configuration id ends in :jwt-vc-json (e.g. EmployeeBadge@1:jwt-vc-json). The credential is a single signed JWT with all claims always present.

Pick the configuration that matches how the credential will be used: choose SD-JWT VC when holders need to share claims minimally, or JWT-VC-JSON for a simpler all-or-nothing credential.

The Issue Credential form resolves the credential configuration id automatically from the schema version you selected and issues that configuration; for a schema published in both formats, the panel picks one configuration for you. To issue a specific format, call POST /issuers/{issuerDid}/credential-offers with the exact credentialConfigurationIds you want (for example EmployeeBadge@1:jwt-vc-json).


PIN-protected offers

A credential offer can require the holder to enter a short transaction PIN before the credential is released. This binds collection to someone who has both the QR code and the PIN, which you can deliver over a separate channel.

When an offer requires a PIN, the offer is created with requirePin: true, the response includes a userPin value, and the QR-code response carries the PIN in the X-Pin header. Share that PIN with the holder out of band.

PIN-protected offers are created through the API: send requirePin: true in the body of POST /issuers/{issuerDid}/credential-offers (or its /qr-code variant). The Issue Credential form always creates offers without a PIN.


Claim into a cloud wallet

Instead of handing the QR code to an external wallet, you can claim the offer directly into one of your own cloud wallet holders—useful for testing an end-to-end flow.

  1. In the QR Code panel, find the Claim with wallet section.

  2. Select a holder from the Wallet dropdown (the list shows the holders you have created).

  3. Click Claim.

The panel sends the offer URI to the selected holder, which collects the credential into its wallet. On success you are taken to that holder's Credentials view, where the new credential appears.

Claim with wallet section
The Claim with wallet section with the holder dropdown and Claim button
Holder details Credentials tab with the claimed credential
The holder's Credentials view after a successful claim, with the credential's raw JSON

Endpoint

POST /holders/{holderId}/process

Request Body

Response Body

If you need to claim into a holder that does not yet exist, create one first from the Holders section, then return to the offer and select it in the Wallet dropdown.

Holders list with Dashboard and Claim credential actions
The Holders screen — each holder offers a Dashboard and a Claim credential action

Last updated