Configure the test
These examples usecurl and jq. Confirm the active credential definition and
policy with the testbed operator. The pension profile uses the example IDs below;
other profiles use the same endpoints with their own definition, claims and policy.
X-Authbound-Key, X-Authbound-Publishable-Key, or Authorization
on either creation request. Supplied credentials are validated normally, including
empty or invalid values; they do not opt into keyless access.
1. Issue a credential
This synthetic payload matches the pension definition in the SDK example. UseInTime issuance: the claims are supplied now, so no later administrative
update is needed.
OFFER_URI with your wallet, or encode that exact URI as a QR code using a
local QR renderer and scan it. Accept the credential in the wallet. Treat the
offer URI as private; do not send it to an online QR service. The wallet completes
the OpenID4VCI token and credential exchange with the issuer.
Offer responses retain their existing camelCase fields, including id,
offerUri, offerQrUri and expiresAt. Issuance status/list/update/cancel APIs
remain keyed. For a keyless test, confirm that the credential appears in the
wallet, then present it below.
2. Create a verification
CLIENT_TOKEN private: anyone who
has it can read this session until the token expires (default 15 minutes).
Knowing the verification ID alone does not grant access.
For ACTION_KIND=qr, render ACTION_DATA exactly as a local QR code and scan it;
for link, open the exact value with the wallet. request_blob and dc_api
require their corresponding wallet integration and must not be converted into
invented deep links. Do not fetch a one-time request URI before the wallet does.
Approve the presentation in the wallet.
3. Check status and retrieve the result
Poll the session with its bearer token; no publishable key is needed in enabled keyless testbed mode. Send the token in a header, never in a URL. Avoid shell tracing (set -x) and keep these variables out of logs.
created, awaiting_user,
awaiting_provider or processing. Stop for failed, canceled or expired.
Only after status is verified, retrieve the signed result:
verified;
it does not return a successful result for failed or unfinished sessions.
Limits and errors
Anonymous creation does not reuse
Idempotency-Key: each retry can create a new
offer or session. Keep the first successful response. Listing records, managing
definitions/policies, canceling sessions and other administrative operations still
require a key. The active wallet trust profile determines which credentials can
be issued and verified; keyless access does not bypass wallet proof or trust checks.