From 54c59641e5f02ee44adab570293dac4b968e0df8 Mon Sep 17 00:00:00 2001 From: eric-schuh Date: Tue, 18 Aug 2026 10:07:54 -0700 Subject: [PATCH 1/3] Adding credentialOffers as an optional response parameter when participating in an exchange. --- components/VerifiablePresentationRequest.yml | 51 ++++++++++++++++++++ 1 file changed, 51 insertions(+) diff --git a/components/VerifiablePresentationRequest.yml b/components/VerifiablePresentationRequest.yml index 770f6093..6c4bf92f 100644 --- a/components/VerifiablePresentationRequest.yml +++ b/components/VerifiablePresentationRequest.yml @@ -99,6 +99,43 @@ components: "serviceEndpoint": type: string description: A URL that can be utilized for interacting with the service for the purposes of responding to the Verifiable Presentation Request. + "credentialOffer": + type: array + description: An optional parameter that informs a recipient which potential VCs might be issued if the VPR is responded to. This can also be used by a responder o provide their own VPR with preferencial constraints as to which VC(s) they would prefer to receive. + items: + type: object + properties: + "mediaType": + type: string + description: The media type of the envelope format. + example: [{"mediaType": "application/vc"}] + "credential": + type: object + description: A minimally contextualized set of type information that informs the recipient what is being offered. + properties: + "@context": + type: array + description: The JSON-LD context of the credential. + items: + type: string + "type": + type: array + description: The JSON-LD type of the credential. + items: + type: string + "proof": + type: array + description: Results from verifying the proof objects if any. + items: + type: object + description: Information about what proofs are used by the VC being described. + properties: + "type": + type: string + description: The type of proof that will be used. + "cryptosuite": + type: string + description: The cryptosuite used by the proof. example: { "query": [{ @@ -126,6 +163,20 @@ components: }], "challenge": "3182bdea-63d9-11ea-b6de-3b7c1404d57f", "domain": "edu.example", + "credentialOffer": [{ + "mediaType": "application/vc", + "credential": { + "@context": [ + "https://www.w3.org/ns/credentials/v2", + "https://www.w3.org/ns/credentials/examples/v2" + ], + "type": "ExampleAlumniCredential", + "proof": [{ + "type": "DataIntegrityProof", + "cryptosuite": "bbs-2023" + }] + } + }], "interact": { "service": [{ "type": "UnmediatedPresentationService2021", From 430556a5f166868573e9e2a87b61eb511098b115 Mon Sep 17 00:00:00 2001 From: eric-schuh Date: Tue, 1 Sep 2026 12:55:39 -0700 Subject: [PATCH 2/3] Apply @TallTed's editorial changes Co-authored-by: Ted Thibodeau Jr --- components/VerifiablePresentationRequest.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/components/VerifiablePresentationRequest.yml b/components/VerifiablePresentationRequest.yml index 6c4bf92f..51d47a8f 100644 --- a/components/VerifiablePresentationRequest.yml +++ b/components/VerifiablePresentationRequest.yml @@ -98,10 +98,10 @@ components: type: string "serviceEndpoint": type: string - description: A URL that can be utilized for interacting with the service for the purposes of responding to the Verifiable Presentation Request. + description: A URL that can be used for interacting with the service for the purpose of responding to the Verifiable Presentation Request. "credentialOffer": type: array - description: An optional parameter that informs a recipient which potential VCs might be issued if the VPR is responded to. This can also be used by a responder o provide their own VPR with preferencial constraints as to which VC(s) they would prefer to receive. + description: An optional parameter that informs a recipient which potential VC(s) might be issued if the VPR is responded to. A responder can also use this to provide their own VPR with preferential constraints on the VC(s) they would prefer to receive. items: type: object properties: @@ -125,10 +125,10 @@ components: type: string "proof": type: array - description: Results from verifying the proof objects if any. + description: Results, if any, of verifying the proof objects. items: type: object - description: Information about what proofs are used by the VC being described. + description: Information about the proofs used by the VC being described. properties: "type": type: string From 0b0346aee4a1c3507fe725f4a754e17b30502a76 Mon Sep 17 00:00:00 2001 From: eric-schuh Date: Tue, 8 Sep 2026 12:21:24 -0700 Subject: [PATCH 3/3] Correct mediaType description Was envelope now credential format. Co-authored-by: Dave Longley --- components/VerifiablePresentationRequest.yml | 364 +++++++++---------- 1 file changed, 182 insertions(+), 182 deletions(-) diff --git a/components/VerifiablePresentationRequest.yml b/components/VerifiablePresentationRequest.yml index 51d47a8f..9204ddbc 100644 --- a/components/VerifiablePresentationRequest.yml +++ b/components/VerifiablePresentationRequest.yml @@ -1,186 +1,186 @@ -openapi: 3.0.0 -info: - version: "0.0.3-unstable" - title: VC API - description: This is an Experimental Open API Specification for the [VC Data Model](https://www.w3.org/TR/vc-data-model/). - license: - name: W3C Software and Document License - url: http://www.w3.org/Consortium/Legal/copyright-software. - contact: - name: GitHub Source Code - url: https://github.com/w3c/vcalm -paths: -components: - schemas: - VerifiablePresentationRequest: - type: object - description: A Verifiable Presentation Request. - properties: - "query": - type: array - description: A set of one or more queries sent by the requester. - items: - type: object - properties: - "type": - type: array - description: The type of the query. - items: - type: string - "credentialQuery": - type: object - description: For QueryByExample queries, specifies the credential request details. - properties: - "reason": - type: string - description: A human-readable explanation for why the credential is being requested. - "example": - type: object - description: An example of the credential being requested. - "acceptedIssuers": - type: array - description: Accepted issuers for the requested credential. - items: - type: object - properties: - "issuer": - type: string - "acceptedCryptosuites": - type: array - description: Cryptographic proof suites the verifier will accept. Each element SHOULD be an object with a cryptosuite property referencing a Data Integrity cryptosuite name or Ed25519Signature2020 for legacy (for backwards compatibility, string values MAY also be used and are to be interpreted as the cryptosuite name). This enables the holder to select an appropriate proof format. This property MAY be used independently of acceptedEnvelopes, which is only applicable to enveloped credentials. - items: - oneOf: - - type: string - description: A cryptosuite name (shorthand for an object with cryptosuite). - example: ["eddsa-rdfc-2022", "bbs-2023", "ecdsa-sd-2023", "Ed25519Signature2020"] - - type: object - properties: - "cryptosuite": - type: string - description: The name of the cryptosuite. - example: [{"cryptosuite": "eddsa-rdfc-2022"}, {"cryptosuite": "bbs-2023"}, {"cryptosuite": "ecdsa-sd-2023"}, {"cryptosuite": "Ed25519Signature2020"}] - "acceptedEnvelopes": - type: array - description: Envelope formats the verifier will accept. Each element SHOULD be an object with a mediaType property referencing the media type for the envelope (for backwards compatibility, string values MAY also be used and are to be interpreted as the media type). This enables the holder to provide credentials in formats other than the default Data Integrity format. This property MAY be used independently of acceptedCryptosuites, which is only applicable to JSON-LD credentials signed with an acceptable cryptosuite. - items: - oneOf: - - type: string - description: A media type string (shorthand for an object with mediaType). - example: ["application/jwt", "application/vc+sd-jwt"] - - type: object - properties: - "mediaType": - type: string - description: The media type of the envelope format. - example: [{"mediaType": "application/jwt"}, {"mediaType": "application/vc+sd-jwt"}] - "challenge": - type: string - description: A challenge, intended to prevent replay attacks, provided by the requester that is typically expected to be included in the Verifiable Presentation response. - "domain": - type: string - description: A domain, intended to prevent replay attacks, provided by the requester that is typically expected to be included in the Verifiable Presentation response. - items: - type: string - "interact": - type: array - description: A list of interaction mechanisms that are supported by the server. - items: - type: object - properties: - "service": - type: object - description: A service that is supported by the server that is capable of receiving a response to the Verifiable Presentation Request. - properties: - "type": - type: array - description: The type of the service. - items: - type: string - "serviceEndpoint": - type: string +openapi: 3.0.0 +info: + version: "0.0.3-unstable" + title: VC API + description: This is an Experimental Open API Specification for the [VC Data Model](https://www.w3.org/TR/vc-data-model/). + license: + name: W3C Software and Document License + url: http://www.w3.org/Consortium/Legal/copyright-software. + contact: + name: GitHub Source Code + url: https://github.com/w3c/vcalm +paths: +components: + schemas: + VerifiablePresentationRequest: + type: object + description: A Verifiable Presentation Request. + properties: + "query": + type: array + description: A set of one or more queries sent by the requester. + items: + type: object + properties: + "type": + type: array + description: The type of the query. + items: + type: string + "credentialQuery": + type: object + description: For QueryByExample queries, specifies the credential request details. + properties: + "reason": + type: string + description: A human-readable explanation for why the credential is being requested. + "example": + type: object + description: An example of the credential being requested. + "acceptedIssuers": + type: array + description: Accepted issuers for the requested credential. + items: + type: object + properties: + "issuer": + type: string + "acceptedCryptosuites": + type: array + description: Cryptographic proof suites the verifier will accept. Each element SHOULD be an object with a cryptosuite property referencing a Data Integrity cryptosuite name or Ed25519Signature2020 for legacy (for backwards compatibility, string values MAY also be used and are to be interpreted as the cryptosuite name). This enables the holder to select an appropriate proof format. This property MAY be used independently of acceptedEnvelopes, which is only applicable to enveloped credentials. + items: + oneOf: + - type: string + description: A cryptosuite name (shorthand for an object with cryptosuite). + example: ["eddsa-rdfc-2022", "bbs-2023", "ecdsa-sd-2023", "Ed25519Signature2020"] + - type: object + properties: + "cryptosuite": + type: string + description: The name of the cryptosuite. + example: [{"cryptosuite": "eddsa-rdfc-2022"}, {"cryptosuite": "bbs-2023"}, {"cryptosuite": "ecdsa-sd-2023"}, {"cryptosuite": "Ed25519Signature2020"}] + "acceptedEnvelopes": + type: array + description: Envelope formats the verifier will accept. Each element SHOULD be an object with a mediaType property referencing the media type for the envelope (for backwards compatibility, string values MAY also be used and are to be interpreted as the media type). This enables the holder to provide credentials in formats other than the default Data Integrity format. This property MAY be used independently of acceptedCryptosuites, which is only applicable to JSON-LD credentials signed with an acceptable cryptosuite. + items: + oneOf: + - type: string + description: A media type string (shorthand for an object with mediaType). + example: ["application/jwt", "application/vc+sd-jwt"] + - type: object + properties: + "mediaType": + type: string + description: The media type of the envelope format. + example: [{"mediaType": "application/jwt"}, {"mediaType": "application/vc+sd-jwt"}] + "challenge": + type: string + description: A challenge, intended to prevent replay attacks, provided by the requester that is typically expected to be included in the Verifiable Presentation response. + "domain": + type: string + description: A domain, intended to prevent replay attacks, provided by the requester that is typically expected to be included in the Verifiable Presentation response. + items: + type: string + "interact": + type: array + description: A list of interaction mechanisms that are supported by the server. + items: + type: object + properties: + "service": + type: object + description: A service that is supported by the server that is capable of receiving a response to the Verifiable Presentation Request. + properties: + "type": + type: array + description: The type of the service. + items: + type: string + "serviceEndpoint": + type: string description: A URL that can be used for interacting with the service for the purpose of responding to the Verifiable Presentation Request. - "credentialOffer": - type: array + "credentialOffer": + type: array description: An optional parameter that informs a recipient which potential VC(s) might be issued if the VPR is responded to. A responder can also use this to provide their own VPR with preferential constraints on the VC(s) they would prefer to receive. - items: - type: object - properties: - "mediaType": - type: string - description: The media type of the envelope format. - example: [{"mediaType": "application/vc"}] - "credential": - type: object - description: A minimally contextualized set of type information that informs the recipient what is being offered. - properties: - "@context": - type: array - description: The JSON-LD context of the credential. - items: - type: string - "type": - type: array - description: The JSON-LD type of the credential. - items: - type: string - "proof": - type: array + items: + type: object + properties: + "mediaType": + type: string + description: The media type of the credential format. + example: [{"mediaType": "application/vc"}] + "credential": + type: object + description: A minimally contextualized set of type information that informs the recipient what is being offered. + properties: + "@context": + type: array + description: The JSON-LD context of the credential. + items: + type: string + "type": + type: array + description: The JSON-LD type of the credential. + items: + type: string + "proof": + type: array description: Results, if any, of verifying the proof objects. - items: - type: object + items: + type: object description: Information about the proofs used by the VC being described. - properties: - "type": - type: string - description: The type of proof that will be used. - "cryptosuite": - type: string - description: The cryptosuite used by the proof. - example: - { - "query": [{ - "type": "DIDAuthentication" - }, { - "type": "QueryByExample", - "credentialQuery": { - "reason": "We need to see your existing University Degree credential.", - "example": { - "@context": [ - "https://www.w3.org/ns/credentials/v2", - "https://www.w3.org/ns/credentials/examples/v2" - ], - "type": "UniversityDegreeCredential" - }, - "acceptedCryptosuites": [ - {"cryptosuite": "eddsa-rdfc-2022"}, - {"cryptosuite": "ecdsa-rdfc-2019"}, - {"cryptosuite": "bbs-2023"} - ], - "acceptedEnvelopes": [ - {"mediaType": "application/jwt"} - ] - } - }], - "challenge": "3182bdea-63d9-11ea-b6de-3b7c1404d57f", - "domain": "edu.example", - "credentialOffer": [{ - "mediaType": "application/vc", - "credential": { - "@context": [ - "https://www.w3.org/ns/credentials/v2", - "https://www.w3.org/ns/credentials/examples/v2" - ], - "type": "ExampleAlumniCredential", - "proof": [{ - "type": "DataIntegrityProof", - "cryptosuite": "bbs-2023" - }] - } - }], - "interact": { - "service": [{ - "type": "UnmediatedPresentationService2021", - "serviceEndpoint": "https://edu.example/workflows/123456/presentations" - }] - } - } + properties: + "type": + type: string + description: The type of proof that will be used. + "cryptosuite": + type: string + description: The cryptosuite used by the proof. + example: + { + "query": [{ + "type": "DIDAuthentication" + }, { + "type": "QueryByExample", + "credentialQuery": { + "reason": "We need to see your existing University Degree credential.", + "example": { + "@context": [ + "https://www.w3.org/ns/credentials/v2", + "https://www.w3.org/ns/credentials/examples/v2" + ], + "type": "UniversityDegreeCredential" + }, + "acceptedCryptosuites": [ + {"cryptosuite": "eddsa-rdfc-2022"}, + {"cryptosuite": "ecdsa-rdfc-2019"}, + {"cryptosuite": "bbs-2023"} + ], + "acceptedEnvelopes": [ + {"mediaType": "application/jwt"} + ] + } + }], + "challenge": "3182bdea-63d9-11ea-b6de-3b7c1404d57f", + "domain": "edu.example", + "credentialOffer": [{ + "mediaType": "application/vc", + "credential": { + "@context": [ + "https://www.w3.org/ns/credentials/v2", + "https://www.w3.org/ns/credentials/examples/v2" + ], + "type": "ExampleAlumniCredential", + "proof": [{ + "type": "DataIntegrityProof", + "cryptosuite": "bbs-2023" + }] + } + }], + "interact": { + "service": [{ + "type": "UnmediatedPresentationService2021", + "serviceEndpoint": "https://edu.example/workflows/123456/presentations" + }] + } + }