Issue deferred credential
PUT/v2/config/digital-wallet/openid/sdjwt/credential/history/:credentialExchangeId
Updates a credential exchange record. Used to issue a credential via the OID4VCI Deferred Credential Endpoint by providing the credential claims for a pending issuance.
Request
Path Parameters
Unique identifier of the credential exchange record tracking a single OID4VCI credential issuance lifecycle.
- application/json
Body
required
Credential claims for the pending deferred issuance. The credential field is mandatory and must not be an empty object. The issuer refuses any other field in the body.
- Default (all fields)
- IETF SD-JWT VC
- ISO 18013-5 mDoc/mDL
- W3C VC (JWT)
credential objectrequired
Credential object for the OID4VCI Deferred Credential Endpoint. Use credentialSubject.credentialSubject for W3C VC (JWT) format, or claims for IETF SD-JWT VC and ISO 18013-5 mDoc/mDL formats. Add id to name the entry of credentialDefinitions that the claims fill.
credentialSubject object
claims object
Credential object for the OID4VCI Deferred Credential Endpoint. Use credentialSubject.credentialSubject for W3C VC (JWT) format, or claims for IETF SD-JWT VC and ISO 18013-5 mDoc/mDL formats. Add id to name the entry of credentialDefinitions that the claims fill.
credential objectrequired
Credential object for deferred issuance in IETF SD-JWT VC (dc+sd-jwt) format. Contains the id from the credentialDefinitions array and claims as flat key-value pairs.
The id field from a specific entry in the credentialDefinitions array of the create credential definition response.
claims object
Flat key-value pairs representing the credential claims for IETF SD-JWT VC format. Keys are claim names (e.g. given_name, birthdate), values are the claim data.
Flat key-value pairs representing the credential claims for IETF SD-JWT VC format. Keys are claim names (e.g. given_name, birthdate), values are the claim data.
Credential object for deferred issuance in IETF SD-JWT VC (dc+sd-jwt) format. Contains the id from the credentialDefinitions array and claims as flat key-value pairs.
credential objectrequired
Credential object for deferred issuance in ISO 18013-5 mDoc/mDL (mso_mdoc) format. Contains the id from the credentialDefinitions array and claims namespaced under the doctype.
The id field from a specific entry in the credentialDefinitions array of the create credential definition response.
claims object
Claims namespaced under the ISO 18013-5 mDoc/mDL doctype (e.g. eu.europa.ec.eudi.pid.1). The top-level key is the doctype namespace containing the data elements as key-value pairs.
Claims namespaced under the ISO 18013-5 mDoc/mDL doctype (e.g. eu.europa.ec.eudi.pid.1). The top-level key is the doctype namespace containing the data elements as key-value pairs.
Credential object for deferred issuance in ISO 18013-5 mDoc/mDL (mso_mdoc) format. Contains the id from the credentialDefinitions array and claims namespaced under the doctype.
credential objectrequired
Credential object for deferred issuance in W3C VC (JWT) (jwt_vc_json) format. Contains the id from the credentialDefinitions array and the claims in credentialSubject.credentialSubject.
The id field from a specific entry in the credentialDefinitions array of the create credential definition response.
credentialSubject object
The credential below $.vc. Put the subject claims in its member credentialSubject, at the paths of the configuration: the issuer refuses any other member.
credentialSubject object
The subject claims as key-value pairs.
The subject claims as key-value pairs.
Credential object for deferred issuance in W3C VC (JWT) (jwt_vc_json) format. Contains the id from the credentialDefinitions array and the claims in credentialSubject.credentialSubject.
Responses
- 200
- 400
- 401
- 500
Credential history updated successfully
Response Headers
- application/json
- Schema
- Example (from schema)
Schema
- Array [
- ]
- Array [
- ]
- Array [
- ]
credentialHistory object
Updated credential exchange record. The credential is now available at the OID4VCI Deferred Credential Endpoint. The issuer keeps the stored values of credentialOffer, did, jti, preAuthorisedCode, authorisationCode and userPin, and does not refresh them on this operation.
Identifier of the credential exchange record. This field holds the same value as CredentialExchangeId.
Unique identifier for the credential exchange record, tracking the full lifecycle of a single OID4VCI credential issuance.
Camel-case alias of CredentialExchangeId. The server sets both fields to the same value. Use this field in new integrations.
Identifier of the organisation that issues the credential.
Identifier of the OpenID wallet deployment that processes this exchange.
Identifier of the data agreement that governs this issuance. The field is empty when the issuance uses a credential definition instead of a data agreement.
dataAttributeValues object[]required
Attribute values supplied for a data agreement based issuance. The field is null when the issuance uses a credential definition.
Name of the data attribute, as defined in the data agreement.
Value of the data attribute for this holder.
When true, the issuer makes this attribute selectively disclosable.
Indicates whether the holder opened the credential offer.
Indicates whether the holder called the OID4VCI Token Endpoint for this exchange.
Possible values: [``, InTime, Deferred]
Issuance mode used for this exchange. InTime means the credential was issued immediately via the OID4VCI Credential Endpoint. Deferred means the credential is pending via the Deferred Credential Endpoint.
When true, the issuance used the OID4VCI Pre-Authorized Code Flow. When false, the Authorization Code Flow was used.
The OID4VCI Credential Offer URI sent to the holder to start the issuance flow.
Credential offer endpoint of the holder wallet. The issuer sends the Credential Offer to this URL for issuer-initiated issuance.
Possible values: [``, pending, ready]
Processing status of the credential. pending means the credential is being prepared. ready means it is available for the holder to retrieve.
Possible values: [``, offer_sent, offer_received, token_issued, credential_issued, credential_acked, credential_accepted, credential_deleted, issuance_denied]
Lifecycle status of the credential exchange in the OID4VCI protocol flow: offer_sent (Credential Offer sent to holder), offer_received (holder scanned or received the offer), token_issued (issuer released an access token), credential_issued (credential issued via Credential Endpoint), credential_acked (holder acknowledged receipt), credential_accepted (holder accepted credential), credential_deleted (holder deleted credential), issuance_denied (issuer denied issuance).
Value of the OID4VCI issuer_state parameter. The issuer uses it to bind the Authorization Request to this exchange.
State value of the OAuth 2.0 Authorization Request that the wallet sent.
State value that the issuer returns together with the authorisation code.
OAuth 2.0 authorisation code issued for the Authorization Code Flow.
Pre-authorised code issued for the OID4VCI Pre-Authorized Code Flow.
Acceptance token that the holder uses to poll the OID4VCI Deferred Credential Endpoint.
PKCE code challenge that the wallet sent in the Authorization Request, as defined in RFC 7636.
PKCE code challenge method, for example S256.
Redirect URI that the wallet registered for the Authorization Code Flow.
Client identifier of the holder's wallet, typically a DID or URL. Provided during the OID4VCI Token Request.
Decentralized Identifier of the issuer that signs the credential.
Transaction code (tx_code) for the Pre-Authorized Code Flow.
Unix timestamp (in seconds) when this exchange record was created.
Unix timestamp (in seconds) when this exchange record was last modified.
Unix timestamp (in seconds) when the issuer signed the credential of this record: the last re-issuance, else the first issuance. A record without a credential yet shows its last update. The list operation sorts on this field.
When true, the issuer makes the data agreement attributes selectively disclosable in the issued credential.
credential objectrequired
The credential payload being issued. Contains type and credentialSubject for W3C VC (JWT) format, or vct/doctype and claims for IETF SD-JWT VC / ISO 18013-5 mDoc/mDL formats.
The credential payload being issued. Contains type and credentialSubject for W3C VC (JWT) format, or vct/doctype and claims for IETF SD-JWT VC / ISO 18013-5 mDoc/mDL formats.
disclosureMapping objectrequired
Selective disclosure mapping for IETF SD-JWT VC credentials. Each entry maps a claim path to its disclosure setting.
Selective disclosure mapping for IETF SD-JWT VC credentials. Each entry maps a claim path to its disclosure setting.
Label of the credential definition or data agreement that this issuance uses.
Identifier of the credential definition that this issuance uses.
URL of an external credential definition that this issuance uses.
Identifier of a presentation definition required for dynamic credential requests.
Identifier of the presentation exchange session linked to a dynamic credential request.
holder objectrequired
Metadata about the credential holder obtained during the OID4VCI exchange. The issuer returns only the name field. The default value before the holder starts the flow is Unknown.
Identifier of the holder, typically a DID or display name resolved from wallet client metadata.
Possible values: [``, vc+sd-jwt, vp+sd-jwt, dc+sd-jwt, jwt_vc_json, jwt_vc, mso_mdoc]
Credential format used for this issuance. jwt_vc_json is W3C VC (JWT). dc+sd-jwt is IETF SD-JWT VC. mso_mdoc is ISO 18013-5 mDoc/mDL. Records created by earlier releases can also hold the legacy values vc+sd-jwt, vp+sd-jwt and jwt_vc.
Indicates whether revocation is enabled for the issued credential.
Possible values: [``, Operational, Revoked]
Current revocation status: Operational (valid) or Revoked (permanently invalidated). The field is empty when the credential definition does not support revocation.
OAuth 2.0 client assertion JWT provided by the holder's wallet for client authentication.
Type of the client assertion token, for example urn:ietf:params:oauth:client-assertion-type:jwt-bearer.
Indicates whether the holder's client assertion JWT was verified.
Wallet Unit Attestation (WUA) credential presented by the holder, certifying the wallet instance is genuine.
Proof of Possession for the Wallet Unit Attestation.
Indicates whether the Wallet Unit Attestation was verified.
walletUnitValidity object[]required
Array of wallet unit validity records containing attestation and proof of possession verification status.
attestation object
Wallet unit attestation verification status.
Indicates whether the attestation has expired.
Indicates whether the attestation has been revoked.
Indicates whether the attestation was verified.
proofOfPossession object
Proof of possession verification status.
Indicates whether the proof of possession has expired.
Indicates whether the proof of possession was verified.
Unix timestamp (in seconds) when the wallet unit validity was validated.
The signed credential token (JWT, SD-JWT, or mDoc) issued to the holder.
cnf objectrequired
Confirmation claim (cnf) containing the holder's public key JWK for key binding.
Confirmation claim (cnf) containing the holder's public key JWK for key binding.
JWT Token Identifier (jti), unique identifier for the issued credential token.
Proof JWT provided by the holder in the OID4VCI Credential Request, demonstrating key possession.
Type of the proof provided in the Credential Request (e.g. jwt).
Indicates whether the issuer verified the holder's proof of key possession.
decodedWalletUnitAttestation objectrequired
Decoded payload of the holder's Wallet Unit Attestation credential.
Decoded payload of the holder's Wallet Unit Attestation credential.
keyAttestationResult object
Result of the check of the key attestation that the holder sent, when there was one.
Result of the check of the key attestation that the holder sent, when there was one.
Identifier of the key attestation that the holder sent, when there was one.
batchCredentials object[]
The credentials of a batch issuance, one entry for each credential. The issuer leaves the field out when the record has no batch.
The signed credential.
cnf object
Confirmation claim with the holder key of this credential.
Confirmation claim with the holder key of this credential.
Unique identifier of this credential.
Identifier of the status list that holds the status of this credential.
Index of this credential in its status list.
Possible values: [Operational, Revoked]
Revocation status of this credential. Change it with batchIndex in the update credential revocation status operation.
Identifier of the key attestation of this credential.
Identifier that the wallet sends to the OID4VCI Notification Endpoint for this credential.
Start of the validity of this credential.
End of the validity of this credential.
true for a credential of an earlier batch that a re-issuance replaced. The issuer leaves the field out when it is false.
Unix timestamp (in seconds) of the first issuance. 0 when it is not known.
Number of re-issuances of the credential of this record.
Unix timestamp (in seconds) of the last re-issuance. 0 when there is none.
Human-readable reason why the issuer denied the credential issuance request.
Array of previously issued credential tokens that have expired.
Array of decoded expired credential payloads.
transactionData object
Transaction data bound to this issuance, as defined in the OpenID4VP transaction data extension. This is the only field that the issuer leaves out when it has no value.
Transaction data bound to this issuance, as defined in the OpenID4VP transaction data extension. This is the only field that the issuer leaves out when it has no value.
credentialResponseEncryption objectrequired
Encryption parameters that the wallet requests for the OID4VCI Credential Response. The field is null when the wallet asks for a plain response.
JWE key management algorithm, for example ECDH-ES.
JWE content encryption algorithm, for example A128GCM.
jwk object
Public JSON Web Key that the issuer uses to encrypt the Credential Response.
Public JSON Web Key that the issuer uses to encrypt the Credential Response.
Encryption parameters that the wallet requests for the OID4VCI Credential Response. The field is null when the wallet asks for a plain response.
issuerTrustServiceProvider objectrequired
Trust service provider record of the issuer, resolved from the trust list.
Trust service provider record of the issuer, resolved from the trust list.
holderTrustServiceProvider objectrequired
Trust service provider record of the holder, resolved from the trust list.
Trust service provider record of the holder, resolved from the trust list.
Identifier of the individual recipient the credential offer was sent to.
Mapper identifier linking the credential offer to an external individual record.
Minimum polling interval (in seconds) for the OID4VCI Deferred Credential Endpoint.
When true, the issuer adds a visible signature stamp to the issued document.
Possible values: >= 4, <= 4
Position of the signature stamp on the document page, given as four pixel coordinates.
Identifier of the key that signs the credential. The issuer leaves the field out when it has no value.
Format of the signing key: x509 or did:key. The issuer leaves the field out when it has no value.
credentialDefinitionSnapshot object
Copy of the credential definition at the time of the issuance. The issuance uses this copy, so a later change of the credential definition does not change this exchange.
Copy of the credential definition at the time of the issuance. The issuance uses this copy, so a later change of the credential definition does not change this exchange.
Identifier of the external OpenID provider of the credential definition, when it has one.
true when a wallet started this issuance with a pushed authorisation request.
Identifier of the reused credential offer that made this record, when the credential definition sets supportCredentialOfferReuse. Empty in other cases.
Identifier of the user that started this issuance, when known.
{
"credentialHistory": {
"id": "3a1f0c62-8f9a-4a17-9a4a-2f0f1c9d6a11",
"CredentialExchangeId": "3a1f0c62-8f9a-4a17-9a4a-2f0f1c9d6a11",
"credentialExchangeId": "3a1f0c62-8f9a-4a17-9a4a-2f0f1c9d6a11",
"organisationId": "string",
"openIdOrganisationId": "string",
"dataAgreementId": "string",
"dataAttributeValues": [
{
"name": "string",
"value": "string",
"limitedDisclosure": true
}
],
"isAccessed": true,
"isTokenAccessed": true,
"issuanceMode": "",
"isPreAuthorised": true,
"credentialOffer": "openid-credential-offer://?credential_offer_uri=https://api.igrant.io/...",
"credentialOfferEndpoint": "string",
"credentialStatus": "",
"status": "",
"issuerState": "string",
"authorisationRequestState": "string",
"authorisationCodeState": "string",
"authorisationCode": "string",
"preAuthorisedCode": "string",
"acceptanceToken": "string",
"codeChallenge": "string",
"codeChallengeMethod": "string",
"redirectUri": "string",
"clientId": "string",
"did": "string",
"userPin": "string",
"createdAt": 1750000000,
"updatedAt": 1750000600,
"issuanceDate": 1750000600,
"limitedDisclosure": true,
"credential": {},
"disclosureMapping": {},
"credentialLabel": "string",
"credentialDefinitionId": "string",
"credentialDefinitionUri": "string",
"presentationDefinitionId": "string",
"presentationExchangeId": "string",
"holder": {
"name": "Unknown"
},
"credentialFormat": "dc+sd-jwt",
"supportRevocation": true,
"revocationStatus": "",
"clientAssertion": "string",
"clientAssertionType": "string",
"clientAssertionVerified": true,
"walletUnitAttestation": "string",
"walletUnitAttestationPoP": "string",
"walletUnitAttestationVerified": true,
"walletUnitValidity": [
{
"attestation": {
"isExpired": true,
"isRevoked": true,
"isVerified": true
},
"proofOfPossession": {
"isExpired": true,
"isVerified": true
},
"validatedAt": 0
}
],
"credentialToken": "string",
"cnf": {},
"jti": "string",
"proof": "string",
"proofType": "string",
"proofVerified": true,
"decodedWalletUnitAttestation": {},
"keyAttestationResult": {},
"keyAttestationId": "string",
"batchCredentials": [
{
"credentialToken": "string",
"cnf": {},
"jti": "string",
"credentialRevocationStatusListId": "string",
"credentialRevocationStatusListIndex": 0,
"revocationStatus": "Operational",
"keyAttestationId": "string",
"notificationId": "string",
"validFrom": "string",
"validUntil": "string",
"archived": true
}
],
"issuedAt": 0,
"refreshCount": 0,
"lastRefreshedAt": 0,
"issuanceDeniedReason": "string",
"expiredCredentialTokens": [
"string"
],
"expiredCredentials": [
{}
],
"transactionData": {},
"credentialResponseEncryption": {
"alg": "string",
"enc": "string",
"jwk": {}
},
"issuerTrustServiceProvider": {},
"holderTrustServiceProvider": {},
"individualId": "string",
"mapperId": "string",
"credentialResponseInterval": 0,
"signatureStamp": true,
"signatureCoordinate": [
0
],
"cryptographicKeyIdentifier": "string",
"cryptographicKeyFormat": "string",
"credentialDefinitionSnapshot": {},
"oidcProviderId": "string",
"isWalletInitiated": true,
"reusedCredentialOfferId": "string",
"userId": "string"
}
}
The request is invalid. The issuer returns this status when no record matches credentialExchangeId, when credential is missing or empty, when the exchange uses the InTime issuance mode, when the claims do not match the credential configuration, when the body has an unknown field, or when the exchange is a dynamic credential request whose linked presentation is not yet verified. You can only update a record that uses the Deferred issuance mode.
Response Headers
- application/json
- Schema
- Example (from schema)
Schema
{
"errorCode": 400,
"errorDescription": "Bad input parameter"
}
Unauthorized
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"
}