Receive DC API verification response
POST/v2/config/digital-wallet/openid/sdjwt/verification/history/:presentationExchangeId/receive
Receives an OpenID4VP Authorization Response that the W3C Digital Credentials API (DC API) delivered for a verification request.
The verifier frontend calls navigator.credentials.get() of the browser with the request in dcApiRequest. The browser sends the request to the wallet of the holder, and the wallet returns a credential response. The frontend forwards that response to this operation.
The server finds the verification record by presentationExchangeId, decrypts the response for dc_api.jwt, parses the VP Token (OpenID4VP 1.0 section 8.1), checks it against the DCQL query of the presentation definition, verifies the credentials and stores the result.
Use this operation only when the presentation definition sets responseMode to dc_api or dc_api.jwt, or uses the iso18013_7_annex_c version. For direct_post and direct_post.jwt the wallet posts the response to the verifier itself.
Request
Path Parameters
Unique identifier of the verification exchange record: the presentationExchangeId property of the record.
- application/json
Body
required
The body must hold response, vp_token, or both. The field names are case-sensitive and lowercase. The server refuses any other field. Do not send the presentation submission: the server derives it from the DCQL query and from the structure of vp_token.
For responseMode = dc_api.jwt, the server searches for the JWE in response and in vp_token, and it also unwraps a JSON string that holds one of these keys. For responseMode = dc_api, the server reads vp_token first and falls back to response. For iso18013_7_annex_c, send response with the base64url encoded response of the wallet.
- response (string)
- vp_token (object)
For responseMode = dc_api.jwt: JWE compact serialization (five base64url segments separated by .) that the wallet returned. The server decrypts it with the encryption key that it made for this verification record, and reads vp_token from the decrypted payload.
For responseMode = dc_api (alternative form): a JSON-encoded string whose decoded form is {"vp_token": { ... }}.
For iso18013_7_annex_c: the base64url encoded response of the wallet.
vp_token objectrequired
Map of each DCQL credential query identifier to the Verifiable Presentations of the wallet. The encoding of each presentation follows the credential format (dc+sd-jwt, mso_mdoc, jwt_vc_json).
Send a parsed JSON object or a JSON-encoded string. The server parses a string value.
Map of each DCQL credential query identifier to the Verifiable Presentations of the wallet. The encoding of each presentation follows the credential format (dc+sd-jwt, mso_mdoc, jwt_vc_json).
Send a parsed JSON object or a JSON-encoded string. The server parses a string value.
Responses
- 200
- 400
- 401
- 404
- 500
The server processed the DC API response.
This body is not the verification history shape that the other verifier operations return. It is the stored verification record. The token properties use snake_case (vp_token_request, vp_token_response, and so on) and organisationId is the identifier of the digital wallet of the organisation. To read the record in the usual shape, call GET /v3/config/digital-wallet/openid/sdjwt/verification/history/{presentationExchangeId} after this call.
Response Headers
- application/json
- Schema
- Example (from schema)
Schema
Identifier of the verification record. This value equals the presentationExchangeId.
Identifier of the digital wallet of the organisation.
Identifier of the presentation definition that this verification uses.
State value of the Authorization Request.
Full Authorization Request. This is a signed JWT, or a URI with the request parameters.
Authorization Request URI for a QR code or a deep link. Empty for DC API response modes.
Verifiable Presentation tokens that the wallet sent.
presentationSubmission objectnullable
Presentation Submission that the server derived from the DCQL query and the structure of the VP Token.
Presentation Submission that the server derived from the DCQL query and the structure of the VP Token.
Possible values: [request_sent, request_received, presentation_acked]
Lifecycle status of the verification exchange. The value is presentation_acked after a good DC API response.
Result of the verification of the Verifiable Presentation.
holder objectnullable
Metadata about the holder, for example the name from the client metadata.
Metadata about the holder, for example the name from the client metadata.
Decoded credentials that the holder presented.
Validation result for each credential in the presentation.
Identifier of the credential issuance exchange that this verification started.
transactionData objectnullable
Transaction data that the holder approved.
Transaction data that the holder approved.
Base64url encoding of the transaction data that the Authorization Request holds.
Cryptographic nonce of the Authorization Request.
Possible values: [vp_token, device_response]
OAuth 2.0 response type of the Authorization Request.
Possible values: [redirect_uri, did, verifier_attestation, x509_san_dns, x509_hash]
Client ID scheme of the Authorization Request.
Possible values: [dc_api, dc_api.jwt]
Response mode of the Authorization Request. This operation accepts only dc_api and dc_api.jwt, and no value for iso18013_7_annex_c.
Verifier Attestation JWT that the server sent to the holder.
URI that the wallet opens after it posts the Authorization Response. Not used for DC API response modes.
true when the wallet must encrypt the Authorization Response as a JWE.
Possible values: [version_01, iso18013_7_annex_c]
OpenID4VP version that the presentation definition uses.
Files that the verification made, for example signed and unsigned PDF documents.
dcApiRequest objectnullable
Request object for the W3C Digital Credentials API, with one shape for Chrome and one for Safari.
Request object for the W3C Digital Credentials API, with one shape for Chrome and one for Safari.
Possible values: [openid4vp-v1-unsigned, openid4vp-v1-signed, org-iso-mdoc]
Exchange protocol identifier for the W3C Digital Credentials API.
presentationDefinitionSnapshot objectnullable
Copy of the presentation definition at the time of the request.
Copy of the presentation definition at the time of the request.
Key identifier of the key that signed the Authorization Request.
Format of the key that signed the Authorization Request.
true when the signed PDF holds a visible signature stamp.
Possible values: >= 4, <= 4
Page coordinates of the signature in the signed PDF, as [x1, y1, x2, y2] in points.
dataAgreement objectnullable
Data agreement that gives the terms for this verification exchange.
Data agreement that gives the terms for this verification exchange.
Unix timestamp in seconds when the server made this record.
Unix timestamp in seconds when the server last changed this record.
{
"id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"organisationId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"presentationDefinitionId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"vp_token_request_state": "string",
"vp_token_request": "string",
"vp_token_qr_code": "string",
"vp_token_response": [
"string"
],
"presentationSubmission": {},
"status": "request_sent",
"verified": true,
"holder": {},
"presentation": [
{}
],
"presentationValidity": [
{}
],
"credentialExchangeId": "string",
"transactionData": {},
"transactionDataBase64": "string",
"nonce": "string",
"responseType": "vp_token",
"clientIdScheme": "redirect_uri",
"responseMode": "dc_api",
"verifierAttestation": "string",
"directPostRedirectUri": "string",
"requiresEncryption": true,
"version": "version_01",
"files": [
{}
],
"dcApiRequest": {},
"dcApiProtocol": "openid4vp-v1-unsigned",
"presentationDefinitionSnapshot": {},
"cryptographicKeyIdentifier": "string",
"cryptographicKeyFormat": "string",
"signatureStamp": true,
"signatureCoordinate": [
0
],
"dataAgreement": {},
"createdAt": 0,
"updatedAt": 0
}
The body is missing, is not valid JSON or has an unknown field, the response mode of the record is not a DC API mode, response and vp_token are both missing or unreadable, no encryption key belongs to the record, the JWE decryption failed, the VP Token structure does not match the DCQL query, or the VP Token validation failed.
Response Headers
- application/json
- Schema
- Example (from schema)
- Example
Schema
{
"errorCode": 400,
"errorDescription": "Bad input parameter"
}
{
"errorCode": 400,
"errorDescription": "Verification record response mode is direct_post, not a DC API mode"
}
Unauthorized.
Response Headers
- application/json
- Schema
- Example (from schema)
Schema
{
"errorCode": 400,
"errorDescription": "Bad input parameter"
}
No verification exchange record has the supplied presentationExchangeId, or the record is deleted.
Response Headers
- application/json
- Schema
- Example (from schema)
Schema
{
"errorCode": 400,
"errorDescription": "Bad input parameter"
}
Internal server error.
Response Headers
- application/json
- Schema
- Example (from schema)
Schema
{
"errorCode": 400,
"errorDescription": "Bad input parameter"
}