Skip to main content

Overview

Once you’ve picked a preset (see Browse credential presets), issue against it by passing the preset id along with the user’s data. This guide uses didx:basic-identity, an sd-jwt credential with attributes firstName and lastName.
If no preset matches the shape you need, see Custom credential template. For everything else, use a preset.

Endpoint

Request

Request body

The body has a single top-level field, credentials, which is an array. Each entry describes one credential to issue as part of this issuance. The most common case is a single-entry array; pass more than one to bundle multiple credentials into the same offer.

Reference kinds

reference is an opaque selector the platform resolves to the template it issues from. It splits on the first colon only, so the value may itself contain colons, as preset ids and credential types both do. The platform rejects unknown kinds rather than guessing. A ~ prefix marks a private preset. It’s part of the id, so pass it verbatim: presetId:~acme:internal-badge.
The older top-level presetId and credentialTemplateId fields still work but are deprecated. Pass exactly one of reference, presetId, or credentialTemplateId per entry. Supplying more than one returns a 400. New integrations should use reference.

Response

HTTP 201 Created What you get back is an issuance resource. The issuance represents the offer interaction itself, the protocol for getting credentials into the user’s wallet, and it carries the credential resources it produces inside credentials[]. The next page, Issuance vs credential, goes into the resource split in detail. For now, the short version is that the top-level id belongs to the offer flow, and each credentials[].id is a credential you’ll act on later.

Key response fields

The top-level id and the inner credentials[].id are different resources with different endpoints. Capture both now, because recovering them later is more work. See the next section, Issuance vs credential.

Deliver the offer

Get the credential offer to the user. There are two options:
  1. By email, username, or other identifier: Deliver via identifier.
  2. As a QR code or deeplink rendered in your own UI: Deliver out of band.