Present Credentials
When a verifier asks a holder to prove something, the holder responds with a verifiable presentation — a package of one or more stored credentials, signed by the holder, that satisfies the verifier's request. The SVX Wallet handles this with the OpenID4VP flow.
Presenting a credential is a sequence of three calls, each returning a state value that links the steps of a single flow; pass it to the next call:
Register the verifier's authorization request.
Set credentials — choose which stored credentials answer the request, and which claims to disclose.
Submit the presentation to the verifier.
Prerequisites
An access token — all requests require a
Bearertoken. See Using the Wallet API.An existing wallet, identified by its
walletId. See Manage Wallets.At least one stored credential that satisfies the verifier's request, together with the holder key it is bound to. Credentials are added to a wallet by receiving or importing them — see Add Credentials to a Wallet.
1. Register the authorization request
A presentation begins with an authorization request from a verifier, typically delivered as an openid-vc:// URI (for example, encoded in a QR code) containing a request_uri. Register it with the wallet to start the flow.
Endpoint
POST /wallets/{walletId}/sendRequest
{
"authorization_request_uri": "openid-vc://?request_uri=https://verifier.example.com/oidc/presentations/requests/dd85a4cc-cea8-4bbe-9349-00615540177e/jwt"
}Response
The wallet resolves and verifies the request and returns the state along with the verifier's requirements. The presentation_definition describes which credentials and claims are requested; its input_descriptors[].id values identify each requested credential and are used in the next step.
Note DCQL requests: a verifier may instead express its requirements using DCQL, in which case the response carries a
dcql_queryrather than apresentation_definition. The flow is identical; you simply match credentials against the DCQL credential query in the next step (see below).
2. Set the credentials to present
Choose which stored credential answers each part of the request and which claims to reveal. Find a suitable credential among the wallet's stored credentials with GET /wallets/{walletId}/credentials (see Credentials), and use its id and the kid of the key it is bound to.
Each entry links a stored credential to a requested credential. For a Presentation Exchange request, match on input_descriptor_id (the id from the request's input_descriptors). For a DCQL request, match on credential_query_id instead.
Endpoint
Request
input_descriptor_id– the requested credential this entry answers (usecredential_query_idfor DCQL requests)credential.id– the wallet'sidfor the stored credential to presentcredential.kid– the holder key the credential is bound to, used to sign the presentationcredential.claims_to_disclose– the claims to reveal
Note Selective disclosure: for
dc+sd-jwtcredentials, only the claims listed inclaims_to_discloseare revealed to the verifier; all other claims stay hidden. When the request setslimit_disclosuretorequired, you must disclose no more than the requested claims. Formats without selective disclosure (such asjwt_vc_json) are presented in full regardless of this field.
Response
The wallet records the selection and echoes it back; submission_status remains pending until you submit.
3. Submit the presentation
Build the verifiable presentation from the selected credentials, sign it, and send it to the verifier.
Endpoint
Request
Response
submission_status reports the outcome — success once the verifier accepts the presentation, or failed if it is rejected. If the verifier returns a redirect target, it is included as redirect_uri.
You can review in-progress and completed flows for a wallet with GET /wallets/{walletId}/send, or a single flow with GET /wallets/{walletId}/send/{state}.
Last updated