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 usesdidx:basic-identity, an sd-jwt credential with attributes firstName and lastName.
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
Deliver the offer
Get the credential offer to the user. There are two options:- By email, username, or other identifier: Deliver via identifier.
- As a QR code or deeplink rendered in your own UI: Deliver out of band.

