openapi: 3.0.0 servers: - url: https://verifier.qa.veres.app/verifiers/z1A45ZhWEGMeibHrB15nv8Gk6 description: Veres Verifier (Quality Assurance) info: version: "0.9-unstable" title: Verifiable Credential API for Lifecycle Management description: Provides the data model and HTTP APIs to issue, verify, present, and manage data used in the Verifiable Credentials ecosystem. 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-ccg/vcalm paths: /credentials/issue: post: summary: Issues a credential and returns it in the response body. tags: - Credentials security: - networkAuth: [] - oAuth2: [] - zCap: [] operationId: issueCredential x-expectedCaller: "Issuer Coordinator" description: Issues a credential and returns it in the response body. requestBody: content: application/json: schema: $ref: "#/components/schemas/IssueCredentialRequest" description: Parameters for issuing the credential. responses: "201": description: Credential successfully issued! content: application/json: schema: $ref: "#/components/schemas/IssueCredentialResponse" "400": description: > The request could not be processed due to one of the following reasons: - The provided value of 'issuer' does not match the expected configuration. - Another condition that results in a Bad Request. /credentials/status: post: summary: Updates the status of an issued credential tags: - Credentials security: - networkAuth: [] - oAuth2: [] - zCap: [] operationId: updateCredentialStatus x-expectedCaller: "Issuer Service" description: Updates the status of an issued credential. requestBody: content: application/json: schema: $ref: "#/components/schemas/UpdateCredentialStatusRequest" description: Parameters for updating the status of the issued credential. responses: "200": description: Credential status successfully updated "400": description: Bad Request "404": description: Credential not found /workflows: post: summary: Creates a new workflow and returns location of workflow metadata in a response header. tags: - Credentials security: - networkAuth: [] - oAuth2: [] - zCap: [] operationId: createWorkflow description: Creates a new workflow and returns location of workflow metadata in a response header. x-expectedCaller: Administrators requestBody: content: application/json: schema: $ref: "#/components/schemas/CreateWorkflowRequest" responses: "201": description: Workflow successfully created (with data) headers: Location: schema: type: string format: uri description: The HTTP URL used to retrieve workflow metadata. example: https://issuer.example.com/workflows/123 "204": description: Workflow successfully created (without data) headers: Location: schema: type: string format: uri description: The HTTP URL used to retrieve workflow metadata. example: https://issuer.example.com/workflows/123 "400": description: Invalid input "401": description: Not Authorized "500": description: Internal Error /workflows/{localWorkflowId}: get: summary: Gets the configuration of an existing workflow and returns it in the response body. tags: - Credentials security: - networkAuth: [] - oAuth2: [] - zCap: [] operationId: getWorkflowConfiguration description: Gets the configuration of an existing workflow and returns it in the response body. x-expectedCaller: Administrators parameters: - $ref: "./components/parameters/path/LocalWorkflowId.yml" responses: "200": description: Workflow configuration retrieved! content: application/json: schema: $ref: "#/components/schemas/GetWorkflowResponse" "400": description: Invalid input "401": description: Not Authorized "500": description: Internal Error /workflows/{localWorkflowId}/exchanges: post: summary: Creates a new exchange and returns location of exchange metadata in a response header. tags: - Credentials security: - networkAuth: [] - oAuth2: [] - zCap: [] operationId: createExchange description: Creates a new exchange and returns location of exchange metadata in a response header. x-expectedCaller: Owner Coordinator parameters: - $ref: "./components/parameters/path/LocalWorkflowId.yml" requestBody: content: application/json: schema: $ref: "#/components/schemas/CreateExchangeRequest" responses: "201": description: Exchange successfully created (with data) headers: Location: schema: type: string format: uri description: The HTTP URL used to retrieve exchange metadata. example: https://issuer.example.com/workflows/123/exchanges/abc "204": description: Exchange successfully created (without data) headers: Location: schema: type: string format: uri description: The HTTP URL used to retrieve exchange metadata. example: https://issuer.example.com/workflows/123/exchanges/abc "400": description: Invalid input "401": description: Not Authorized "500": description: Internal Error /workflows/{localWorkflowId}/exchanges/{localExchangeId}: get: summary: Gets the state of an existing exchange and returns it in the response body. tags: - Credentials security: - networkAuth: [] - oAuth2: [] - zCap: [] operationId: getExchangeConfiguration description: Gets the configuration of an existing exchange and returns it in the response body. x-expectedCaller: Owner Coordinator parameters: - $ref: "./components/parameters/path/LocalWorkflowId.yml" - $ref: "./components/parameters/path/LocalExchangeId.yml" responses: "200": description: Exchange configuration retrieved! content: application/json: schema: $ref: "#/components/schemas/GetExchangeResponse" "400": description: Invalid input "401": description: Not Authorized "500": description: Internal Error post: summary: Participate in an exchange. Posting an empty body will start the exchange or return what the exchange is expecting to complete the next step. Posting a Verifiable Presentation Request will result in either a 4xx error or one of the following - a Verifiable Presentation or Verifiable Presentation Request that conforms to the client's request. If a Verifiable Presentation is sent, an additional Verifiable Presentation Request may also be sent to continue the exchange. tags: - Credentials security: - networkAuth: [] - oAuth2: [] - zCap: [] operationId: participateInExchange description: Participate in an exchange. Posting an empty body will start the exchange or return what the exchange is expecting to complete the next step. x-expectedCaller: Anyone parameters: - $ref: "./components/parameters/path/LocalWorkflowId.yml" - $ref: "./components/parameters/path/LocalExchangeId.yml" requestBody: content: application/json: schema: oneOf: - type: object properties: verifiablePresentationRequest: $ref: "./components/VerifiablePresentationRequest.yml#/components/schemas/VerifiablePresentationRequest" - type: object properties: verifiablePresentation: $ref: "./components/VerifiablePresentation.yml#/components/schemas/VerifiablePresentation" responses: "200": description: Exchange progressed. content: application/json: schema: $ref: "#/components/schemas/ExchangeParticipationResponse" "400": description: Invalid input "401": description: Not Authorized "500": description: Internal Error /workflows/{localWorkflowId}/exchanges/{localExchangeId}/protocols: get: summary: Gets the supported protocols for interacting with a specific exchange. tags: - Exchanges security: - networkAuth: [] - oAuth2: [] - zCap: [] operationId: getSupportedProtocolsConfiguration description: Gets the supported protocols for interacting with a specific exchange. x-expectedCaller: - Verification Coordinator - Holder Coordinator parameters: - $ref: "./components/parameters/path/LocalWorkflowId.yml" - $ref: "./components/parameters/path/LocalExchangeId.yml" responses: "200": description: Protocols understood by the exchange. content: application/json: schema: $ref: "#/components/schemas/GetExchangeProtocolsResponse" "400": description: Invalid input "401": description: Not Authorized "500": description: Internal Error /credentials/{id}: get: tags: - Credentials security: - networkAuth: [] - oAuth2: [] - zCap: [] summary: Gets a credential or verifiable credential by ID. To get a credential that does not have credential.id set but has an associated credentialId value, pass credentialId instead. x-expectedCaller: "Issuer Coordinator" operationId: getCredential parameters: - $ref: "./components/parameters/path/ObjectId.yml" responses: "200": description: Credential retrieved content: application/json: schema: oneOf: - $ref: "./components/VerifiableCredentialResponse.yml#/components/schemas/VerifiableCredentialResponse" "400": description: Bad Request "401": description: Not Authorized "404": description: Credential not found "410": description: Gone! There is no data here "418": description: I'm a teapot - MUST not be returned outside of pre-arranged scenarios between both parties delete: tags: - Credentials security: - networkAuth: [] - oAuth2: [] - zCap: [] summary: Deletes a credential or verifiable credential by ID. To delete a credential that does not have credential.id set but has an associated credentialId value, pass credentialId instead. x-expectedCaller: - Issuer Coordinator - Holder Coordinator operationId: deleteCredential parameters: - $ref: "./components/parameters/path/ObjectId.yml" responses: "202": description: Credential deleted - this is a 202 by default as soft deletes and processing time are assumed "400": description: Bad Request "401": description: Not Authorized "404": description: Credential not found "410": description: Gone! There is no data here /credentials/derive: post: tags: - Credentials security: - networkAuth: [] - oAuth2: [] - zCap: [] summary: Derives a credential and returns it in the response body. operationId: deriveCredential description: Derives a credential and returns it in the response body. x-expectedCaller: "Holder Coordinator" requestBody: content: application/json: schema: $ref: "#/components/schemas/DeriveCredentialRequest" description: Parameters for deriving the credential. responses: "201": description: Credential derived successfully. content: application/json: schema: $ref: "#/components/schemas/DeriveCredentialResponse" "400": description: Invalid Request /presentations/{id}: get: tags: - Presentations summary: Gets a presentation or verifiable presentation by ID security: - networkAuth: [] - oAuth2: [] - zCap: [] operationId: getPresentation x-expectedCaller: "Holder Coordinator" parameters: - $ref: "./components/parameters/path/ObjectId.yml" responses: "200": description: Credential retrieved content: application/json: schema: oneOf: - $ref: "./components/Presentation.yml#/components/schemas/Presentation" - $ref: "./components/VerifiablePresentation.yml#/components/schemas/VerifiablePresentation" "400": description: Bad Request "401": description: Not Authorized "404": description: Presentation not found "410": description: Gone! There is no data here delete: tags: - Presentations summary: Deletes a presentation or verifiable presentation by ID security: - networkAuth: [] - oAuth2: [] - zCap: [] operationId: deletePresentation x-expectedCaller: "Holder Coordinator" parameters: - $ref: "./components/parameters/path/ObjectId.yml" responses: "202": description: Presentation deleted - this is a 202 by default as soft deletes and processing time are assumed "400": description: Bad Request "401": description: Not Authorized "404": description: Presentation not found "410": description: Gone! There is no data here /presentations: get: tags: - Presentations summary: Gets list of presentations or verifiable presentations security: - networkAuth: [] - oAuth2: [] - zCap: [] operationId: getPresentations x-expectedCaller: "Holder Coordinator" parameters: - in: query name: type schema: type: array items: type: string pattern: "(presentations|verifiablepresentations|all)" responses: "200": description: Presentations retrieved content: application/json: schema: type: array description: The Presentations items: anyOf: - $ref: "./components/Presentation.yml#/components/schemas/Presentation" - $ref: "./components/VerifiablePresentation.yml#/components/schemas/VerifiablePresentation" "400": description: Bad Request "401": description: Not Authorized "410": description: Gone! There is no data here post: summary: Creates a presentation and returns it in the response body. tags: - Presentations security: - networkAuth: [] - oAuth2: [] - zCap: [] operationId: createPresentation x-expectedCaller: "Holder Coordinator" description: Creates a presentation and returns it in the response body. requestBody: content: application/json: schema: $ref: "#/components/schemas/CreatePresentationRequest" description: Parameters for creating the presentation. responses: "201": description: Presentation successfully created! content: application/json: schema: $ref: "#/components/schemas/CreatePresentationResponse" "400": description: invalid input! /exchanges: get: summary: Provides a discovery endpoint for the exchanges supported by this server endpoint. tags: - Exchanges security: - networkAuth: [] - oAuth2: [] - zCap: [] operationId: discoverExchanges description: This endpoint returns an array of the exchange-ids (path endpoints) supported by this server, and the associated protocol supported by each exchange endpoint. The list supports pagination. Clients consuming this list and wishing to use an exchange endpoint MUST recognize and support the protocol identified in the value field. Clients are not expected to dynamically process the protocol specified. parameters: - name: index in: query description: The starting index for the list that is meaningful to the server. If omitted, the server must assume the start of the list. required: false schema: type: string - name: limit in: query description: The maximum number of items to return in the response. If omitted, the service should return all remaining items from the start index. required: false schema: type: number responses: "200": description: A map of the exchange-id endpoints to protocols those exchanges support. content: application/json: schema: required: - count - index - total - exchanges properties: count: type: number description: The number of elements returned in the array. total: type: number description: The total number of elements available. exchanges: type: array items: type: object properties: id: type: string description: the path name of the exchange endpoint. May be a UUID. type: type: string description: MUST be a string that references the protocol supported on that endpoint. index: type: object properties: self: type: string description: The index position of the start of the returned list. Examples could be a numerical value, a URL, or a value meaningful to the server. next: type: string description: The index position for the next set of results (i.e., index of the end of this list). Examples could be a numerical value, a URL, or a value meaningful to the server. example: { "count": 3, "total": 8, "exchanges" : [ { "id" : "credential-refresh", "type": "CredentialRefresh2020" }, { "id": "34901-18388409-1939", "type" : "PresentationExchange1.0", }, { "id" : "salad", "type" : "https://example.com/oas/my-salad.yml" }], "index": { "self": "0", "next" : "3" } } "400": description: invalid input /exchanges/{exchange-id}: post: summary: Initiates an exchange of information. tags: - Exchanges security: - networkAuth: [] - oAuth2: [] - zCap: [] operationId: initiateExchange description: A client can use this endpoint to initiate an exchange of a particular type. The client can include HTTP POST information related to the details of exchange it would like to initiate. If the server understands the request, it returns a Verifiable Presentation Request. A request that the server cannot understand results in an error. parameters: - $ref: "./components/parameters/path/ExchangeId.yml" requestBody: description: Information related to the type of exchange the client would like to start. content: application/json: schema: anyOf: - { "type": "object", "description": "Data necessary to initiate the exchange." } - $ref: "#/components/schemas/NotifyPresentationAvailableRequest" responses: "200": description: Proceed with exchange. content: application/json: schema: $ref: "#/components/schemas/VerifiablePresentationRequestBody" "400": description: Request is malformed. content: application/json: schema: $ref: "#/components/schemas/ErrorResponse" /credentials/verify: post: summary: Verifies a verifiableCredential and returns a verificationResult in the response body. tags: - Credentials security: - networkAuth: [] - oAuth2: [] - zCap: [] operationId: verifyCredential x-expectedCaller: "Verification Coordinator" description: Verifies a verifiableCredential and returns a verificationResult in the response body. requestBody: content: application/json: schema: oneOf: - $ref: "#/components/schemas/VerifyCredentialRequest" - $ref: "#/components/schemas/VerifyEnvelopedCredentialRequest" description: Parameters for verifying a verifiableCredential. responses: "200": description: Verifiable Credential successfully verified! content: application/json: schema: $ref: "#/components/schemas/VerifyCredentialResponse" "400": description: invalid input! /presentations/verify: post: summary: Verifies a Presentation and all Verifiable Credentials it contains, returning detailed verification results. tags: - Presentations security: - networkAuth: [] - oAuth2: [] - zCap: [] operationId: verifyPresentation x-expectedCaller: "Verification Coordinator" description: | Verifies a verifiablePresentation and, by default, all verifiable credentials contained within it. The verification process includes verifying the presentation's own proof (including domain and challenge validation, if provided); verifying each contained verifiable credential's proof, status, and validity period(s); and checking that the holder in the presentation matches the verification method used in the presentation's proof. Business rule validation (such as verifying that credential subjects match the presentation holder) is outside the scope of this verification endpoint and should be performed by the calling application. The API is compositional: when credential verification is disabled or limited via implementation-specific options, individual credentials can be verified separately using the /credentials/verify endpoint. Given the possibility of denial of service, buffer overflow, or other attacks, an implementation is permitted to apply rate limits or otherwise restrict requests against this API endpoint as needed, using a 413, 429, or other response error code as appropriate. requestBody: content: application/json: schema: oneOf: - $ref: "#/components/schemas/VerifyPresentationRequest" - $ref: "#/components/schemas/ProoflessVerifyPresentationRequest" - $ref: "#/components/schemas/VerifyEnvelopedPresentationRequest" description: Parameters for verifying a verifiablePresentation. responses: "200": description: | Verification process completed successfully. The response body contains detailed results indicating whether the presentation and its contained credentials passed or failed verification. A 200 status indicates the verification process itself succeeded, regardless of whether the presentation and/or credentials were determined to be valid or invalid. content: application/json: schema: $ref: "#/components/schemas/VerifyPresentationResponse" "400": description: | Invalid or malformed input that prevented the verification process from being performed. This indicates issues with the request format, structure, or parameters, rather than verification failures. "413": description: Payload too large "429": description: Request rate limit exceeded. /challenges: post: summary: Passing an empty body to this endpoint creates and returns a challenge string in the response body. security: - networkAuth: [] - oAuth2: [] - zCap: [] operationId: challenge x-expectedCaller: "Verification Coordinator" description: Creates a challenge to be used as `options.challenge` in future requests. responses: "200": description: Challenge created content: application/json: schema: $ref: "#/components/schemas/CreateChallengeResponse" "400": description: Invalid or malformed input /interaction/{interactionId}: get: summary: Retrieve available interaction protocols from the interaction originator. tags: - Interactions - Credentials - Exchanges security: - networkAuth: [] - oAuth2: [] - zCap: [] operationId: startInteraction description: Retrieve available interaction protocols from the interaction originator. x-expectedCaller: Anyone with provided URL parameters: - in: path name: interactionId required: true schema: oneOf: - type: string - type: integer description: The unique interaction identifier for the current interaction. - in: query name: iuv required: true schema: type: string enum: ["1"] description: Informs a reader of the Interaction URL of the Interaction API version, and allows for quick disambiguation of the URL when scanned from a QR Code. requestBody: description: A request for the protocols object to negotiate an interaction protocol. content: application/json: schema: $ref: "#/components/schemas/Protocols" responses: "200": description: The protocols object with the advertised interaction protocol options. content: application/json: schema: $ref: "#/components/schemas/Protocols" "400": description: Invalid or malformed input "401": description: Not Authorized "500": description: Internal Error /{inviteId}/invite-request/response: post: summary: Provides a location for a particular invitation response to be submitted to the by the entity trying to start an interaction. When an implementer has implemented the full specification, it is expected that the {inviteId} parameter will be equivalent to the {exchangeId}. tags: - Interactions - Invite Request - Exchanges security: - networkAuth: [] - oAuth2: [] - zCap: [] operationId: receiveInvitationResponse description: Ths endpoint is one of the ones expected to be included as a fully formed URL in the protocols object returned by the /interaction/{interactionId} endpoint. x-expectedCaller: Whoever POSTed to the URL containing /interaction/{interactionId} parameters: - in: path name: inviteId required: true schema: oneOf: - type: string - type: integer description: The unique inviteId that the interaction requester uses to select the invite response protocol from the set of advertised options. When an implementer has implemented the full specification, this value will be an {exchangeId}, and that the invite-request/response endpoint lives on the Workflow Service. requestBody: description: The inviteResponse object provides a URL to continue the interaction, a purpose for the interaction, and an ID to reference the interaction by (mostly for debug purposes). content: application/json: schema: $ref: "#/components/schemas/InviteResponse" responses: "200": description: The inviteResponse object has been injested and was understood. This does not mean an interaction will continue, only that the inviteResponse was understood. "400": description: Invalid or malformed input. components: securitySchemes: $ref: "./components/SecuritySchemes.yml#/components/securitySchemes" schemas: UpdateCredentialStatusRequest: type: object required: ['credentialId', 'credentialStatus', 'status'] additionalProperties: false description: Credential status information to be updated. properties: credentialId: type: string description: Identifies the credential (the identifier does not have to appear in the VC itself). credentialStatus: type: object description: Identifies the specific status list entry to update. required: ['type', 'statusPurpose'] additionalProperties: false properties: id: type: string type: type: string statusPurpose: type: string statusListIndex: type: string statusListCredential: type: string status: type: boolean description: Specifies the new status. indexAllocator: type: string description: For services to use which indexes are being used/assigned to VCs. example: { "credentialId": "0fc754bc-fc32-46a0-aec1-a5ef385e7ea0", "credentialStatus": { "type": "BitstringStatusList", "statusPurpose": "revocation" }, "status": True } IssueCredentialRequest: type: object properties: credential: $ref: "./components/Credential.yml#/components/schemas/UnsecuredCredential" options: $ref: "./components/IssueCredentialOptions.yml#/components/schemas/IssueCredentialOptions" IssueCredentialResponse: type: object properties: IssueCredentialResponse: $ref: "./components/VerifiableCredentialResponse.yml#/components/schemas/VerifiableCredentialResponse" CreateWorkflowRequest: type: object additionalProperties: false description: Object containing information for creating a workflow. properties: id: type: string description: The ID that will be used for the created workflow. Passing an ID is OPTIONAL. initialStep: type: string description: The step from the above set that the exchange starts on. Passing intialStep is REQUIRED. controller: type: string description: An OPTIONAL property that specifies the root controller of the instance, which can be used by systems supporting authorization mechanisms like Authorization Capabilities (ZCAPs), which rely on object capabilities. This value can be used in conjunction with the authorization property to simultaneously allow other authorization mechanisms. authorization: type: object description: An OPTIONAL property that specifies authorization scheme information for the endpoint, such as an OAuth2 configuration. properties: oauth2: type: object description: OAuth2 configuration. properties: issuerConfigUrl: type: string description: OAuth2 issuer config URL. credentialTemplates: type: array description: One or more VC templates for issuance. Passing credentialTemplates is OPTIONAL. items: type: object properties: type: type: string description: The type of template. template: type: string description: The template itself. steps: type: object description: One or more steps required to complete an exchange on the workflow. Passing the steps object is REQUIRED. The keys are one or more step names, where each STEP_NAME is replaced by the name of a step (such as request-employee-id), and the values are step configurations. properties: STEP_NAME: $ref: "#/components/schemas/WorkflowStep" GetWorkflowResponse: type: object additionalProperties: false description: Object containing information about a workflow. properties: id: type: string description: The ID that will be used for the created workflow. Passing an ID is OPTIONAL. initialStep: type: string description: The step from the above set that the exchange starts on. Passing intialStep is REQUIRED. controller: type: string description: The controller of the instance. Passing controller is OPTIONAL. authorization: type: object description: Authorization scheme information (e.g., OAuth2 configuration). Passing authorization is OPTIONAL. properties: oauth2: type: object description: OAuth2 configuration. properties: issuerConfigUrl: type: string description: OAuth2 issuer config URL. credentialTemplates: type: array description: One or more VC templates for issuance. Passing credentialTemplates is OPTIONAL. items: type: object properties: type: type: string description: The type of template. template: type: string description: The template itself. steps: type: object description: One or more steps required to complete an exchange on the workflow. The keys are one or more step names, where each STEP_NAME is replaced by the name of a step (such as request-employee-id), and the values are step configurations. properties: STEP_NAME: $ref: "#/components/schemas/WorkflowStep" CreateExchangeRequest: type: object description: Object containing information about the exchange to be created. properties: expires: type: string description: The date and time (expressed as an XML Schema dateTimeStamp) that the exchange expires. variables: $ref: "#/components/schemas/ExchangeVariables" openId: type: object description: Optional parameters to enable OID4* protocol for delivery. ExchangeParticipationResponse: type: object description: Either what the exchange is expecting next or a result of the exchange. oneOf: - type: object properties: verifiablePresentationRequest: $ref: "./components/VerifiablePresentationRequest.yml#/components/schemas/VerifiablePresentationRequest" - type: object properties: verifiablePresentation: $ref: "./components/VerifiablePresentation.yml#/components/schemas/VerifiablePresentation" - type: object properties: redirectUrl: type: string description: The URL the exchange wishes to redirect the client to. GetExchangeProtocolsResponse: type: object additionalProperties: false description: Object containing information about the protocols that can be used to perform a specific exchange. properties: protocols: type: object description: An object containing one or more protocols that can be used to perform the specific exchange. properties: interact: type: string description: A URL that can be used during exchange flows with a human in the loop. See the section on the interact URL format for more details. vcapi: type: string description: The URL to use when initiating a VC API exchange. OID4VP: type: string description: The URL to use when initiating an OID4VP presentation. OID4VCI: type: string description: The URL to use when initiating an OID4VCI issuance. GetExchangeResponse: type: object additionalProperties: false description: Object containing information about an active exchange. properties: id: type: string description: The local exchange ID that identifies the exchange. sequence: type: integer description: A sequence number for the exchange. Set to 0 on creation. expires: type: string description: The date and time (expressed as an XML Schema dateTimeStamp) that the exchange expires. step: type: string description: The current step in the exchange. state: type: string description: The status ("pending" | "active" | "complete" | "invalid") of the exchange, set to "pending" on creation. lastError: $ref: "#/components/schemas/ExchangeError" variables: $ref: "#/components/schemas/ExchangeVariables" WorkflowStep: type: object description: Object containing information about a workflow step. oneOf: - $ref: "#/components/schemas/StepData" - type: object properties: stepTemplate: $ref: "#/components/schemas/StepTemplate" StepTemplate: type: object additionalProperties: false description: A template for a workflow step. Either this must be present or the other step data must be present, but not both sets. properties: type: type: string description: The type of template. template: type: string description: The step template. StepData: type: object additionalProperties: false description: Step data to be included if a template is not used. properties: createChallenge: type: boolean description: An optional step directive that tells the exchange to handle challenge management via a VC API verifier service it has a zcap for. verifiablePresentationRequest: $ref: "./components/VerifiablePresentationRequest.yml#/components/schemas/VerifiablePresentationRequest" presentationSchema: oneOf: - type: object description: A JSON Schema describing the validation to be performed on the presentation. properties: type: type: string description: The value MUST be JsonSchema. jsonSchema: type: object description: The JSON Schema object to use when validating the presentation. - type: object description: An alternate presentation schema format to use when validating a presentation in the current step. Additional properties are expected for a specific presentation schema type, but are beyond the scope of this specification. properties: type: type: string description: The type of presentation schema mechanism to use when validating the presentation. verifyPresentationResponseSchema: oneOf: - type: object description: A JSON Schema describing the validation to be performed on the result of verifying the presentation. properties: type: type: string description: The value MUST be JsonSchema. jsonSchema: type: object description: The JSON Schema object to use when validating the result of verifying the presentation. - type: object description: An alternate presentation schema format to use on the result of verifying a presentation in the current step. Additional properties are expected for a specific presentation schema type, but are beyond the scope of this specification. properties: type: type: string description: The type of presentation schema mechanism to use when validating the result of verifying the presentation. nextStep: type: string description: The name of the next step in the sequence. Passing nextStep is OPTIONAL. This field MUST NOT be present on the final step configuration. openId: type: object description: Optional information to trigger OID4VP properties: createAuthorizationRequest: type: string description: If present, identifies the name of the template variable (in variables for an exchange) that the auto-generated OID4VP Authorization Request will be stored in for subsequent use in the exchange. Either this or authorizationRequest MUST be present, but not both. The value of the named variable can be lazily generated when the Authorization Request is required, i.e., after the client of the exchange chooses to use the OID4VP protocol. This feature allows the Authorization Request to be generated by reusing values, e.g., a Verifiable Presentation Request, that only need to be specified once across multiple protocol offerings. authorizationRequest: type: object description: If present, an OID4VP Authorization Request for subsequent use in the exchange. Either this or createAuthorizationRequest MUST be present, but not both. ExchangeError: type: object description: An error encountered throughout the course of an exchange. properties: message: type: string description: A message describing an exchange error. status: type: integer description: A status number describing an exchange error. ExchangeVariables: type: object description: Variables needed for an exchange. properties: results: type: object description: Results from each step of an exchange. properties: STEP_NAME: $ref: "#/components/schemas/ExchangeStepResults" ExchangeStepResults: type: object description: Results from a step of an exchange. properties: verifiablePresentation: $ref: "./components/VerifiablePresentation.yml#/components/schemas/VerifiablePresentation" DeriveCredentialRequest: type: object properties: verifiableCredential: $ref: "./components/VerifiableCredential.yml#/components/schemas/VerifiableCredential" options: $ref: "./components/DeriveCredentialOptions.yml#/components/schemas/DeriveCredentialOptions" DeriveCredentialResponse: $ref: "./components/VerifiableCredential.yml#/components/schemas/VerifiableCredential" CreatePresentationRequest: type: object properties: presentation: $ref: "./components/Presentation.yml#/components/schemas/Presentation" options: $ref: "./components/PresentCredentialOptions.yml#/components/schemas/PresentCredentialOptions" CreatePresentationResponse: type: object properties: verifiablePresentation: type: object description: A JSON-LD Verifiable Presentation with a proof. oneOf: - $ref: "./components/VerifiablePresentation.yml#/components/schemas/VerifiablePresentation" - $ref: "./components/EnvelopedVerifiablePresentation.yml#/components/schemas/EnvelopedVerifiablePresentation" NotifyPresentationAvailableRequest: type: object properties: query: type: object description: See https://w3c-ccg.github.io/vp-request-spec/#format properties: type: type: string description: "The type of query the server should reply with." credentialQuery: type: object description: "Details of the client's available presentation" example: { "query": [ { "type": "RequestQueryByFrame", "credentialQuery": [ { "type": [ "VerifiableCredential", "CommercialInvoiceCertificate", ], "reason": "Wallet XYZ is ready to selectively disclose new credentials.", }, ], }, ], } ErrorResponse: $ref: "./components/ErrorResponse.yml#/components/schemas/ErrorResponse" StorePresentationRequest: $ref: "./components/VerifiablePresentation.yml#/components/schemas/VerifiablePresentation" VerifiablePresentationRequestBody: type: object properties: verifiablePresentationRequest: $ref: "./components/VerifiablePresentationRequest.yml#/components/schemas/VerifiablePresentationRequest" VerifiablePresentationBody: type: object properties: verifiablePresentation: $ref: "./components/VerifiablePresentation.yml#/components/schemas/VerifiablePresentation" VerifyCredentialRequest: type: object properties: verifiableCredential: $ref: "./components/VerifiableCredential.yml#/components/schemas/VerifiableCredential" options: $ref: "./components/VerifyCredentialOptions.yml#/components/schemas/VerifyCredentialOptions" VerifyEnvelopedCredentialRequest: type: object properties: verifiableCredential: $ref: "./components/EnvelopedVerifiableCredential.yml#/components/schemas/EnvelopedVerifiableCredential" options: $ref: "./components/VerifyCredentialOptions.yml#/components/schemas/VerifyCredentialOptions" VerifyCredentialResponse: $ref: "./components/VerifyCredentialResult.yml#/components/schemas/VerificationResult" VerifyPresentationRequest: type: object properties: verifiablePresentation: $ref: "./components/VerifiablePresentation.yml#/components/schemas/VerifiablePresentation" options: $ref: "./components/VerifyPresentationOptions.yml#/components/schemas/VerifyPresentationOptions" VerifyEnvelopedPresentationRequest: type: object properties: verifiablePresentation: $ref: "./components/EnvelopedVerifiablePresentation.yml#/components/schemas/EnvelopedVerifiablePresentation" options: $ref: "./components/VerifyPresentationOptions.yml#/components/schemas/VerifyPresentationOptions" ProoflessVerifyPresentationRequest: type: object properties: presentation: $ref: "./components/Presentation.yml#/components/schemas/Presentation" VerifyPresentationResponse: $ref: "./components/VerifyPresentationResult.yml#/components/schemas/VerificationResult" CreateChallengeResponse: $ref: "./components/Challenge.yml#/components/schemas/CreateChallengeResult" Protocols: type: object description: Object containing the available options for continuing the current interaction. properties: inviteRequest: type: string description: A URL that is intended to take the initiating user of the current interaction to a website to continue the interaction beyond this API. example: https://website.example/invitation/87654321/invite-request/response vcaml: type: string description: A VC-API exchange URL that will allow the initiating user of the current interaction to continue with a VC-API credential exchange. example: https://vcapi.example/workflows/z1A1FjMfnG/exchanges/z19mxakBFecZ otherFutureAPI: type: string description: A URL that is intended to take the initiating user of the current interaction to some other, as yet to be defined, API to continue the interaction and credential exchange. example: https://otherFutureAPI.example/collection/0987 oneOf: - required: - inviteRequest - required: - vcalm InviteResponse: type: object description: Object for a continuation URL for an interaction, along with a purpose for a given interaction. required: - url - purpose - referenceId properties: url: type: string description: A URL where the recipient can continue the interaction, should they choose. example: https://website.example/checkout/8372974 purpose: type: string description: A reason for the interaction that is human readable and usable in a concent interaction with the user recieving the inviteResponse object. example: "Checkout at ShopCo" referenceId: type: string description: An ID used to reference this particular inviteResponse, mostly for debug purposes. example: 417bcaf2-14d9-11f0-99d7-9f094678517b