15.3. Credential Issuance Endpoints¶
15.3.1. Credential Offer Endpoint¶
The Credential Offer endpoint of a Wallet is used by Credential Issuer to interact with the User to initiate a Credential Issuance. The custom URL scheme openid-credential-offer://
MUST be used.
15.3.1.1. Credential Offer¶
The Credential Offer made by Credential Issuer consists of a single URI query parameter credential_offer
. The Credential Offer URL MAY be included in a QR Code or in an html page with an href button and MUST contain the following mandatory parameters:
Claim |
Description |
Reference |
---|---|---|
credential_issuer |
It MUST be set with an HTTPS URL that uniquely identifies the Credential Issuer. The Wallet uses this parameter value to obtain the Credential Issuer's metadata. |
Section 4.1.1 of [OpenID4VCI]. |
credential_configuration_ids |
Array of Strings, each of them specifying a unique identifier of the Credential being described in the |
Section 4.1.1 of [OpenID4VCI]. |
grants |
It MUST contain
|
Section 4.1.1 of [OpenID4VCI]. |
15.3.1.2. Credential Offer Response¶
No response is expected from the Wallet.
15.3.4. Token endpoint¶
The token endpoint is used by the Wallet Instance to obtain an Access Token by presenting an authorization grant, as defined in RFC 6749. The Token Endpoint is a protected endpoint with a client authentication based on the model defined in OAuth 2.0 Attestation-based Client Authentication [OAUTH-ATTESTATION-CLIENT-AUTH ].
15.3.4.1. Token Request¶
The request to the Credential Issuer Token endpoint MUST be an HTTP request with method POST, with the body message encoded in application/x-www-form-urlencoded
format. The Wallet Instance sends the Token endpoint request with OAuth-Client-Attestation
and OAuth-Client-Attestation-PoP
as header parameters according to OAUTH-ATTESTATION-CLIENT-AUTH.
The Token endpoint is protected with OAuth 2.0 Attestation-based Client Authentication [OAUTH-ATTESTATION-CLIENT-AUTH], therefore the request to the Credential Issuer authorization endpoint MUST use the following HTTP Headers parameters OAuth-Client-Attestation as OAuth-Client-Attestation-PoP as defined in the "Pushed Authorization Request (PAR) Endpoint".
The Token endpoint issues DPoP tokens, therefore it is REQUIRED that the request includes in its HTTP header the DPoP proof parameter.
The Authorization Server MUST validate the DPoP proof received at the Token endpoint, according to RFC 9449 Section 4.3. This mitigates the misuse of leaked or stolen Access Tokens/Refresh Tokens at the Credential/Token endpoint. If the DPoP proof is invalid, the Token endpoint returns an error response, according to Section 5.2 of [RFC 6749] with invalid_dpop_proof
as the value of the error parameter.
The token request contains the following claims:
Claim |
Description |
Reference |
---|---|---|
grant_type |
REQUIRED. It MUST be set to |
[RFC 6749]. |
code |
REQUIRED only if the grant type is |
[RFC 6749]. |
redirect_uri |
REQUIRED only if the grant type is |
[RFC 67491]. |
code_verifier |
REQUIRED only if the grant type is |
Proof Key for Code Exchange by OAuth Public Clients. It MUST NOT be present if grant type is |
refresh_token |
REQUIRED only if the grant type is |
[RFC 6749]. |
scope |
OPTIONAL only if the grant type is |
[RFC 6749]. |
A DPoP Proof JWT is included in the HTTP request using the DPoP
header parameter containing a DPoP JWT.
The JOSE header of a DPoP JWT MUST contain at least the following parameters:
JOSE header |
Description |
Reference |
---|---|---|
typ |
It MUST be equal to |
|
alg |
A digital signature algorithm identifier such as per IANA "JSON Web Signature and Encryption Algorithms" registry. It MUST be one of the supported algorithms in Section Cryptographic Algorithms and MUST NOT be set to |
[RFC 7515]. |
jwk |
It represents the public key chosen by the Wallet Instance, in JSON Web Key (JWK) [RFC 7517] format that the Access Token MUST be bound to, as defined in [RFC 7515] Section 4.1.3. It MUST NOT contain a private key. |
The payload of a DPoP JWT Proof MUST contain the following claims:
Claim |
Description |
Reference |
---|---|---|
jti |
Unique identifier for the DPoP proof JWT. The value SHOULD be set using a UUID v4 value according to [RFC 4122]. |
[RFC 7519. Section 4.1.7]. |
htm |
The value of the HTTP method of the request to which the JWT is attached. |
[RFC 9110. Section 9.1]. |
htu |
The HTTP target URI, without query and fragment parts, of the request to which the JWT is attached. |
[RFC 9110. Section 7.1]. |
iat |
UNIX Timestamp with the time of JWT issuance, coded as NumericDate as indicated in RFC 7519. |
[RFC 7519. Section 4.1.6]. |
15.3.4.2. Token Response¶
If the Token Request is successfully validated, the Authorization Server provides an HTTP Token Response with a 200 (OK) status code. The Token Response contains the following claims.
Claim |
Description |
Reference |
---|---|---|
access_token |
REQUIRED. The DPoP-bound Access Token, in signed JWT format, allows accessing the Credential Endpoint for obtaining the Credential. |
[RFC 6749]. |
refresh_token |
OPTIONAL. The DPoP-bound Refresh Token, in signed JWT format, which can be used to obtain a new Access Token at the Credential Issuer Token Endpoint. |
[RFC 6749]. |
token_type |
REQUIRED. Type of Access Token returned. It MUST be equal to |
[RFC 6749]. |
expires_in |
REQUIRED. Expiry time of the Access Token in seconds. |
[RFC 6749]. |
authorization_details |
REQUIRED when
|
[OpenID4VCI]. |
If any errors occur during the validation of the Token Request, the Authorization Server MUST return an error response as defined in RFC 6749#section-5.2. The response MUST use the HTTP Content-Type set to application/json and MUST include the following parameters:
error. The error code.
error_description. Text in human-readable form providing further details to clarify the nature of the error encountered.
Below is a non-normative example of an error response.
HTTP/1.1 401 Unauthorized
Content-Type: application/json;charset=UTF-8
Cache-Control: no-store
Pragma: no-cache
{
"error": "invalid_client",
"error_description": "Client authentication failed"
}
In the following table are listed HTTP Status Codes and related error codes that are supported for the error response:
Status Code |
error code |
Description |
---|---|---|
400 Bad Request [REQUIRED] |
|
The Credential Issuer cannot fulfill the request because of missing parameters, invalid parameters or request malformed. (RFC 6749#section-5.2). |
400 Bad Request [REQUIRED] |
|
The Credential Issuer cannot fulfill the request because the provided authorization code or Refresh Token is invalid, expired, revoked, or does not match the redirection URI used in the authorization request, or was issued to another client. (RFC 6749#section-5.2). |
400 Bad Request [REQUIRED] |
|
The Credential Issuer cannot fulfill the request because the authorization grant type is not supported. (RFC 6749#section-5.2). |
400 Bad Request [REQUIRED] |
|
The Credential Issuer cannot fulfill the request because of invalid DPoP proof. Section 5 of [RFC 9449]. |
401 Unauthorized [REQUIRED] |
|
The Credential Issuer cannot fulfill the request because of invalid parameters Client Authentication failed (for example in case of unknown client, no parameters Client Authentication included, or unsupported authentication method). (RFC 6749#section-5.2). |
500 Internal Server Error [REQUIRED] |
|
The Credential Issuer encountered an internal problem. |
503 Service Unavailable [REQUIRED] |
|
The Credential Issuer is temporary unavailable. |
504 Gateway Timeout [OPTIONAL] |
- |
The Credential Issuer cannot fulfill the request within the defined time interval. |
15.3.4.3. Access Token¶
A DPoP-bound Access Token is provided by the Credential Issuer Token endpoint as a result of a successful token request. The Access Token is encoded in JWT format, according to [RFC 7519]. The Access Token MUST have at least the following mandatory claims and it MUST be bound to the public key that is provided by the DPoP proof. This binding can be accomplished based on the methodology defined in Section 6 of (RFC 9449).
The DPoP JWT contains the following JOSE header parameters and claims.
JOSE header |
Description |
Reference |
---|---|---|
typ |
REQUIRED. It MUST be equal to |
[RFC 7515]. |
alg |
REQUIRED. A digital signature algorithm identifier such as per IANA "JSON Web Signature and Encryption Algorithms" registry. It MUST be one of the supported algorithms in Section Cryptographic Algorithms and MUST NOT be set to |
[RFC 7515]. |
kid |
REQUIRED. Unique identifier of the |
Claim |
Description |
Reference |
---|---|---|
iss |
REQUIRED. It MUST be an HTTPS URL that uniquely identifies the Credential Issuer. The Wallet Instance MUST verify that this value matches the Credential Issuer where it has requested the credential. |
|
sub |
REQUIRED. It identifies the subject of the JWT. It MUST be set to the value of the |
|
client_id |
REQUIRED. The identifier for the Wallet Instance that requested the Access Token; it MUST be equal to the to kid of the public key of the Wallet Instance specified into the Wallet Attestation ( |
|
aud |
REQUIRED. It MUST be set to the identifier of the Credential Issuer. |
[RFC 9068]. |
iat |
REQUIRED. UNIX Timestamp with the time of JWT issuance, coded as NumericDate as indicated in RFC 7519. |
|
exp |
REQUIRED. UNIX Timestamp with the expiry time of the JWT, coded as NumericDate as indicated in RFC 7519. |
|
jti |
OPTIONAL. It MUST be a String in uuid4 format. Unique Token ID identifier that the RP SHOULD use to prevent reuse by rejecting the Token ID if already processed. |
|
cnf |
REQUIRED. It MUST contain a jkt claim being JWK SHA-256 Thumbprint Confirmation Method. The value of the jkt member MUST be the base64url encoding (as defined in [RFC 7515]) of the JWK SHA-256 Thumbprint of the DPoP public key (in JWK format) to which the Access Token is bound. |
15.3.4.4. Refresh Token¶
A DPoP-bound Refresh Token is provided by the Credential Issuer Token endpoint as a result of a successful token request. The Refresh Token is encoded in JWT format, according to [RFC 7519]. The Refresh Token MUST have at least the following mandatory claims and it MUST be bound to the public key that is provided by the DPoP proof. This binding can be accomplished based on the methodology defined in Section 6 of (RFC 9449).
The DPoP JWT MUST contain the following JOSE header parameters and claims.
JOSE header |
Description |
Reference |
---|---|---|
typ |
It MUST be equal to |
[RFC 7515]. |
alg |
A digital signature algorithm identifier such as per IANA "JSON Web Signature and Encryption Algorithms" registry. It MUST be one of the supported algorithms in Section Cryptographic Algorithms and MUST NOT be set to |
[RFC 7515]. |
kid |
Unique identifier of the |
Claim |
Description |
Reference |
---|---|---|
iss |
It MUST be an HTTPS URL that uniquely identifies the Credential Issuer. The Wallet Instance MUST verify that this value matches the Credential Issuer where it has requested the Credential. |
|
sub |
It identifies the subject of the JWT. It MUST be set to the value of the |
|
client_id |
The identifier for the Wallet Instance that requested the Access Token; it MUST be equal to the to kid value identifying the public key used in the Wallet Instance, used in the Wallet Attestation ( |
|
aud |
It MUST be set to the identifier of the Credential Issuer. |
[RFC 9068]. |
iat |
UNIX Timestamp with the time of JWT issuance, coded as NumericDate as indicated in RFC 7519. |
|
nbf |
UNIX Timestamp with the time before which the JWT MUST NOT be accepted for processing, coded as NumericDate as indicated in RFC 7519. It SHOULD be set to the |
[RFC 7519. Section 4.1.7]. |
exp |
UNIX Timestamp with the expiry time of the JWT, coded as NumericDate as indicated in RFC 7519. |
|
jti |
It MUST be a String in uuid4 format. Unique Token ID identifier that the RP SHOULD use to prevent reuse by rejecting the Token ID if already processed. |
|
cnf |
It MUST contain a jkt claim being JWK SHA-256 Thumbprint Confirmation Method. The value of the jkt member MUST be the base64url encoding (as defined in [RFC 7515]) of the JWK SHA-256 Thumbprint of the DPoP public key (in JWK format) to which the Access Token is bound. |
15.3.5. Nonce Endpoint¶
The Nonce Endpoint provides a c_nonce
value useful to create a proof of possession of key material for the request to the Credential Endpoint, as defined in Section 7 of OpenID4VCI.
15.3.5.1. Nonce Request¶
The request for a nonce MUST be an HTTP POST without a body addressed to the Credential Issuer Nonce Endpoint mapped in the Credential Issuer Metadata.
15.3.5.2. Nonce Response¶
Nonce Response to the Wallet Instance MUST be sent using application/json media type. In case of Nonce Request successful, the Credential Issuer MUST return HTTP response with a 200 (OK) status code.
As defined in Section 7.2 of OpenID4VCI, the Credential Issuer MUST make the response uncacheable by adding a Cache-Control
header field valued with no-store.
The Nonce Response contains the following parameter:
Claim |
Description |
Reference |
---|---|---|
c_nonce |
REQUIRED. String containing the nonce value. This value MUST be unpredictable. |
Section 7.2 of [OpenID4VCI]. |
15.3.6. Credential endpoint¶
The Credential Endpoint issues a Credential upon the presentation of a valid Access Token, as defined in OpenID4VCI.
15.3.6.1. Credential Request¶
The Wallet Instance when requests the Digital Credential to the Credential endpoint, MUST use the following parameters in the message body of the HTTP POST request, using the application/json media type.
The Credential endpoint MUST accept and validate the DPoP proof sent in the DPoP HTTP Header parameter, according to the steps defined in (RFC 9449) Section 4.3. The DPoP proof in addition to the values that are defined in the Token Endpoint section MUST contain the following claim:
ath: hash value of the Access Token encoded in ASCII. The value MUST use the base64url encoding (as defined in Section 2 of RFC 7515) with the SHA-256 algorithm.
Warning
The Wallet Instance MUST create a new DPoP proof for the Credential request and MUST NOT use the previously created proof for the Token Endpoint.
Claim |
Description |
Reference |
---|---|---|
credential_identifier |
REQUIRED when an Authorization Details of type openid_credential was returned from the Token Response. It MUST NOT be used otherwise. This MUST be set with one of the value obtained in the |
Section 8.2 of [OpenID4VCI]. |
credential_configuration_id |
REQUIRED if |
Section 8.2 of [OpenID4VCI]. |
proof |
REQUIRED. JSON object containing proof of possession of the key material the issued Credential shall be bound to. The proof object MUST contain the following mandatory claims:
|
[OpenID4VCI]. |
transaction_id |
REQUIRED only in case of deferred flow. String identifying a deferred issuance transaction. It MUST NOT be present in immediate flow |
Section 9.1 of [OpenID4VCI]. |
The JWT proof type MUST contain the following parameters for the JOSE header and the JWT body:
JOSE Header |
Description |
Reference |
---|---|---|
alg |
A digital signature algorithm identifier such as per IANA "JSON Web Signature and Encryption Algorithms" registry. It MUST be one of the supported algorithms in Section Cryptographic Algorithms and MUST NOT be set to |
[OpenID4VCI], [RFC 7515], [RFC 7517]. |
typ |
It MUST be set to openid4vci-proof+jwt. |
[OpenID4VCI], [RFC 7515], [RFC 7517]. |
jwk |
Representing the public key chosen by the Wallet Instance, in JSON Web Key (JWK) [RFC 7517] format that the Digital Credential shall be bound to, as defined in Section 4.1.3 of [RFC 7515]. |
[OpenID4VCI], [RFC 7515], [RFC 7517]. |
Claim |
Description |
Reference |
---|---|---|
iss |
The value of this claim MUST be the client_id of the Wallet Instance. |
[OpenID4VCI], [RFC 7519, Section 4.1.1]. |
aud |
It MUST be set to the identifier of the Credential Issuer. |
[OpenID4VCI]. |
iat |
UNIX Timestamp with the time of JWT issuance, coded as NumericDate as indicated in RFC 7519. |
[OpenID4VCI], [RFC 7519. Section 4.1.6]. |
nonce |
The value type of this claim MUST be a string, where the value is a c_nonce provided by the Credential Issuer in the Nonce Response. |
[OpenID4VCI]. |
15.3.6.2. Credential Response¶
Credential Response to the Wallet Instance MUST be sent using application/json media type. If the Credential Request is successfully validated, and the Credential is immediately available, the Credential Issuer MUST return HTTP response with a 200 (OK) status code. If the Credential is not available and the deferred flow is supported by the Credential Issuer, an HTTP status code 202 MUST be returned.
The Credential Response contains the following parameters:
Claim |
Description |
Reference |
---|---|---|
credentials |
REQUIRED if
|
Section 8.3, Annex A2.4 and Annex A3.4 of [OpenID4VCI]. |
lead_time |
REQUIRED if |
This Specification. |
notification_id |
OPTIONAL. String identifying an issued Credential that the Wallet includes in the Notification Request as defined in Section Notification Request. It MUST NOT be present if the |
Section 8.3 of [OpenID4VCI]. |
transaction_id |
REQUIRED if |
Section 8.3 of [OpenID4VCI]. |
In case of the Credential Request does not contain a valid Access Token, the Credential Endpoint returns an error response such as defined in Section 3 of [RFC 6750]. If any other error occurs, the Credential Issuer MUST return an error response as defined in Section 8.3.1 of [OpenID4VCI]. The response MUST use the content type application/json and MUST include the following parameters:
error. The error code.
error_description. Text in human-readable form providing further details to clarify the nature of the error encountered.
Below is a non-normative example of an error response.
HTTP/1.1 400 Bad Request
Content-Type: application/json
Cache-Control: no-store
{
"error": "invalid_proof",
"error_description": "The proof field is not present or the provided key proof is invalid or not bound to a nonce provided by the Credential Issuer."
}
In the following table are listed HTTP Status Codes and related error codes that are supported for the error response:
Status Code |
error code |
Description |
---|---|---|
400 Bad Request [REQUIRED] |
|
The Credential Issuer cannot fulfill the request because of missing parameters, invalid parameters or request malformed. Section 8.3.1 of [OpenID4VCI]. |
400 Bad Request [REQUIRED] |
|
The Credential Issuer cannot fulfill the request because the requested Credential type is not supported. Section 8.3.1 of [OpenID4VCI]. |
400 Bad Request [REQUIRED] |
|
The Credential Issuer cannot fulfill the request because the requested Credential Format is not supported. Section 8.3.1 of [OpenID4VCI]. |
400 Bad Request [REQUIRED] |
|
The Credential Issuer cannot fulfill the request because the |
400 Bad Request [REQUIRED] |
|
The Credential Issuer cannot fulfill the request because the |
400 Bad Request [REQUIRED] |
|
The Credential Issuer cannot fulfill the request because the encryption parameters in the Credential Request are invalid or missing. Section 8.3.1 of [OpenID4VCI]. |
400 Bad Request [REQUIRED] |
|
The Credential Request has not been accepted by the Credential Issuer. Section 8.3.1 of [OpenID4VCI]. |
400 Bad Request [REQUIRED] |
|
Only in case of deferred flow. The Credential Issuer cannot fulfill the request because the Credential is not yet available for the issuance. Section 9.3 of [OpenID4VCI]. |
400 Bad Request [REQUIRED] |
|
Only in case of deferred flow. The Credential Issuer cannot fulfill the request because the Credential Request contains an invalid |
400 Bad Request [REQUIRED] |
|
The Credential Issuer cannot fulfill the request because of invalid DPoP proof. Section 7 of [RFC 9449]. |
500 Internal Server Error [REQUIRED] |
|
The Credential Issuer encountered an internal problem. |
503 Service Unavailable [REQUIRED] |
|
The Credential Issuer is temporary unavailable. |
504 Gateway Timeout [OPTIONAL] |
- |
The Credential Issuer cannot fulfill the request within the defined time interval. |
15.3.7. Deferred Endpoint¶
Credential Issuers MAY support the Deferred Endpoint aiming to satify the cases where an immediate issuance might be not possible, due to errors during the communication between the Credential Issuer and the Authentic Source (for example the Authentic Source is temporarily unavailable, etc.) or due to administrative or technical processes.
In the case where the Authentic Source and the Credential Issuer are both enabled to use PDND, what is described in Section Authentic Sources MUST apply.
The following requirements apply:
The Deferred Credential request MAY also happen several days after the initial Credential request.
The User MUST be informed that the Credential is available and ready to be issued.
The Wallet Provider MUST NOT be informed about which Credential is available to be issued or which Credential Issuer the User needs to contact.
The Wallet Instance MUST be informed about the amount of time to wait before making a new Credential request.
As, in general, an unavailability may be an unexpected event, the Credential Issuer MUST be able to switch on the fly between a immediate and an deferred flow. This decision MUST be taken after the authorization step.
If Credential Issuers, supporting this flow, are not able to immediately issue a requested Credential, they MUST provide the Wallet Instance with an HTTP Credential Response cointaining the amount of time to wait before making a new Credential request and an identifier of the deferred issuance transaction (transaction_id). The HTTP status code MUST be 202 (see Section 15.3.3 of [RFC 9110]). Below a non-normative example is given.
HTTP/1.1 202 Accepted
Content-Type: application/json
Cache-Control: no-store
{
"transaction_id": "8xLOxBtZp8",
"lead_time": 864000
}
The Wallet Instance MUST use the value given in the lead_time parameter to inform the User when the Credential becomes available (e.g. using a local notification triggered by the lead_time time value). Credential Issuers MAY send a notification to the User through a communication channel (e.g. email address), if previously provided by the User to the Credential Issuer.
15.3.7.1. Deferred Request¶
Upon receipt of the notification (by the Wallet Instance and/or by the Credential Issuer), the User accesses the Wallet Instance.
The Wallet Instance MUST present to the Deferred Endpoint an Access Token that is valid for the issuance of the Digital Credential previously requested at the Credential Endpoint.
If the lead_time
parameter value results as less than the expiration time set for the Access Token, the Wallet Instance SHOULD use the Access Token. Otherwise, the Wallet Instance MAY obtain a new Access Token following the Refresh Token flow (see Section Refresh Token Flow for more details). If the Refresh Token flow fails, the Wallet Instance needs to submit a new authentication request.
The Deferred Credential Request MUST be an HTTP POST request. It MUST be sent using the application/json
media type.
The following parameter is used in the Deferred Credential Request:
transaction_id
: REQUIRED. String identifying a Deferred Issuance transaction.
The Credential Issuer MUST invalidate the transaction_id
after the Credential for which it was meant has been obtained by the Wallet Instance.
The following is a non-normative example of a Deferred Credential Request:
POST /credential HTTP/1.1
Host: eaa-provider.example.org
Content-Type: application/json
Authorization: DPoP Kz~8mXK1EalYznwH-LC-1fBAo.4Ljp~zsPE_NeO.gxU
DPoP: eyJ0eXAiOiJkcG9wK2p3dCIsImFsZyI6IkVTMjU2IiwiandrIjp7Imt0eSI6Ik
VDIiwieCI6Imw4dEZyaHgtMzR0VjNoUklDUkRZOXpDa0RscEJoRjQyVVFVZldWQVdCR
nMiLCJ5IjoiOVZFNGpmX09rX282NHpiVFRsY3VOSmFqSG10NnY5VERWclUwQ2R2R
1JEQSIsImNydiI6IlAtMjU2In19.eyJqdGkiOiJlMWozVl9iS2ljOC1MQUVCIiwiaHRtIj
oiR0VUIiwiaHR1IjoiaHR0cHM6Ly9yZXNvdXJjZS5leGFtcGxlLm9yZy9wcm90ZWN0Z
WRyZXNvdXJjZSIsImlhdCI6MTU2MjI2MjYxOCwiYXRoIjoiZlVIeU8ycjJaM0RaNTNF
c05yV0JiMHhXWG9hTnk1OUlpS0NBcWtzbVFFbyJ9.2oW9RP35yRqzhrtNP86L-Ey71E
OptxRimPPToA1plemAgR6pxHF8y6-yqyVnmcw6Fy1dqd-jfxSYoMxhAJpLjA
{
"transaction_id": "8xLOxBtZp8"
}
15.3.7.2. Deferred Response¶
The Deferred Credential Response MUST be sent using the application/json` media type. If the Digital Credential is available, the Deferred Credential Response MUST use the credentials
and notification_id
parameters as defined in Section Credential Response. If the Deferred Credential Request is invalid or the Digital Credential is not available, the Deferred Credential Error Response MUST be sent to the Wallet Instance according to Section 9.3 of OpenID4VCI.
15.3.8. Notification endpoint¶
The Notification Endpoint is used by the Wallet to notify the Credential Issuer of certain events for issued Credentials, such as if the Credential was successfully stored in the Wallet Instance.
To uphold privacy, the event_description
in the notification SHOULD NOT contain any information that could disclose User behavior or reveal the status of the personal device (e.g., storage space full).
This endpoint MUST be protected using a DPoP Access Token. TLS for the confidentiality of the HTTP transport is REQUIRED according to Section 10 of [OpenID4VCI].
15.3.8.1. Notification Request¶
The Notification Request MUST be an HTTP POST using the application/json media type with the following parameters.
Claim |
Description |
Reference |
---|---|---|
notification_id |
REQUIRED. It MUST be equal to the |
Section 10.1 of [OpenID4VCI]. |
event |
REQUIRED. Type of the notification event. It MUST be a case sensitive string and it MUST support the following values:
|
Section 10.1 of [OpenID4VCI]. |
event_description |
OPTIONAL. Human-readable ASCII [USASCII] text providing additional information, used to inform about the event that occurred. Values for the event_description parameter MUST NOT include characters outside the set %x20-21 / %x23-5B / %x5D-7E. |
Section 10.1 of [OpenID4VCI]. |
15.3.8.2. Notification Response¶
The Notification Response MUST be use an HTTP status code 204 (No Content), as recommended in Section 10.2 of [OpenID4VCI].
In case of errors, what is described in Section 10.3 of [OpenID4VCI] MUST apply.
In case of the Notification Request does not contain a valid Access Token, the Notification Endpoint returns an error response such as defined in Section 3 of [RFC 6750]. If any other error occurs, the Credential Issuer MUST return an error response as defined in Section 10.3 of [OpenID4VCI]. The response MUST use the content type application/json and MUST include the following parameters:
error. The error code.
error_description. Text in human-readable form providing further details to clarify the nature of the error encountered.
Below is a non-normative example of an error response.
HTTP/1.1 400 Bad Request
Content-Type: application/json
Cache-Control: no-store
{
"error": "invalid_notification_id",
"error_description": "The notification_id field is not valid"
}
In the following table are listed HTTP Status Codes and related error codes that are supported for the error response:
Status Code |
error code |
Description |
---|---|---|
400 Bad Request [REQUIRED] |
|
The Credential Issuer cannot fulfill the request because of invalid |
400 Bad Request [REQUIRED] |
|
The Credential Issuer cannot fulfill the request because of missing parameters, invalid parameter or request malformed. Section 10.3 of [OpenID4VCI]. |
500 Internal Server Error [REQUIRED] |
|
The Credential Issuer encountered an internal problem. |
503 Service Unavailable [REQUIRED] |
|
The Credential Issuer is temporary unavailable. |
504 Gateway Timeout [OPTIONAL] |
- |
The Credential Issuer cannot fulfill the request within the defined time interval. |