Skip to main content
Version: v4

Request presentations with OpenID4VP

Your agent acts as the OpenID4VP verifier: it builds the authorization request, receives the wallet's response, verifies the SD-JWT, and runs the full trust decision on the credential's issuer before your backend sees anything.

Prerequisites​

  • An active Verifier accreditation for the schema, with the agent as VS operator.
  • OpenID4VC enabled.

Steps​

1. Create a request​

curl -s -X POST http://127.0.0.1:3000/v2/openid4vc/presentation-request -H 'content-type: application/json' -d '{
"jsonSchemaCredentialId": "https://ecosystem.example/vt/schemas-membership-jsc.json",
"requestedClaims": ["memberName", "memberId"],
"queryLanguage": "dcql",
"requestSigner": "x5c"
}' | jq

url is the authorization request URL for the wallet; proofExchangeId identifies the session. queryLanguage is DCQL or Presentation Exchange depending on the wallet population; requestSigner is x5c (your verifier certificate) or did.

2. The wallet's side​

The wallet resolves your DID, checks you are trusted and accredited to verify this schema (Q1 and Q3), shows the Proof-of-Trust, and the person chooses what to share.

3. Read the result​

curl -s http://127.0.0.1:3000/v2/openid4vc/presentations/<proofExchangeId> | jq '{state, verdict: .trust.verdict, claims: .disclosedClaims, evidence: .trust.evidence}'

Or wait for openid4vc.presentations.state-updated. Act only on TRUSTED_AUTHORIZED; see the trust decision for the other verdicts.

Verify​

Request the DemoCredential of the playground ecosystem from a wallet that received it from the accredited demo issuer: the verdict is TRUSTED_AUTHORIZED and the claims are disclosed. Request it with an agent that holds no verifier accreditation: the wallet refuses before anything reaches you.

Next​