Skip to main content

Callback events

The Truvity EUDIW Connector delivers callback events to your callback endpoint during verification and issuance flows. Verification callbacks are sent at the end of the flow. Issuance callbacks are sent at multiple points—when the offer is created and when the flow completes. The status field indicates the outcome.

Verification callback events

The connector delivers a Presented Credentials Event at the end of each presentation flow.

Verification event statuses

StatusDescription
FULFILLEDVerification succeeded and credentials are available in the event payload
REJECTEDThe wallet declined the presentation request
EXPIREDThe session expired before the wallet responded
PROCESSING_ERRORInternal processing failure (decryption, state validation)
VERIFICATION_FAILEDCredential verification failed (invalid signatures, DCQL mismatch, transaction data hash failures)

Verification payload fields by status

The event payload contains different fields depending on the status value.

FieldFULFILLEDREJECTEDEXPIREDPROCESSING_ERRORVERIFICATION_FAILED
statusAlwaysAlwaysAlwaysAlwaysAlways
stateAlwaysAlwaysAlwaysAlwaysAlways
credentialsPresentAbsentAbsentAbsentAbsent
credentialsRawPresentAbsentAbsentAbsentAbsent
errorDetailsAbsentPresentAbsentPresentPresent
responseCodeSame-device onlyAbsentAbsentAbsentAbsent

errorDetails field

The errorDetails field provides context for non-success statuses.

StatuserrorDetails contents
REJECTEDThe wallet's OAuth 2.0 error code and optional description (for example, access_denied or access_denied: User canceled)
PROCESSING_ERRORA human-readable description of the internal error (for example, decryption errors or state validation failures)
VERIFICATION_FAILEDCredential verification failure details (for example, invalid signatures, DCQL mismatches, or transaction data hash failures)

responseCode field

For same-device flows, the event includes a responseCode field. The wallet redirects the user's browser back to your app with this code as a query parameter, allowing you to correlate the browser redirect with the callback event.

Issuance callback events

The connector delivers Issuance Events at various points during the issuance flow.

Issuance event statuses

StatusDescription
OFFER_CREATEDCredential offer was created successfully
ISSUEDCredential successfully issued to the wallet
FAILEDIssuance failed (issuer unavailable, internal error)
EXPIREDSession TTL expired before the wallet completed the flow

The OFFER_CREATED status is informational—it confirms the offer was created and the session is active. Use it for audit logging or to start a timeout timer in your backend.

Issuance payload fields by status

FieldOFFER_CREATEDISSUEDFAILEDEXPIRED
eventIdAlwaysAlwaysAlwaysAlways
statusAlwaysAlwaysAlwaysAlways
offerIdAlwaysAlwaysAlwaysAlways
errorDetailsAbsentAbsentPresentAbsent
  • eventId (string)—correlation key tied to the offer lifecycle. Set to the same value as offerId, allowing you to group all status transitions for a single offer. To deduplicate retries of the same callback delivery, combine eventId with status.
  • status (string)—one of OFFER_CREATED, ISSUED, FAILED, or EXPIRED
  • offerId (string)—correlation with the original offer
  • errorDetails (string, nullable)—present for FAILED status, describes the failure reason

Issuance payload examples

OFFER_CREATED:

{
"eventId": "abc123def456",
"status": "OFFER_CREATED",
"offerId": "abc123def456"
}

ISSUED:

{
"eventId": "abc123def456",
"status": "ISSUED",
"offerId": "abc123def456"
}

FAILED:

{
"eventId": "abc123def456",
"status": "FAILED",
"offerId": "abc123def456",
"errorDetails": "issuer service error: signing key validation failed"
}

EXPIRED:

{
"eventId": "abc123def456",
"status": "EXPIRED",
"offerId": "abc123def456"
}

Credential object fields

Each entry in the credentials map (present on FULFILLED events) is keyed by the credential ID from the DCQL query. Each value is an array of credential objects with the following fields.

FieldTypeDescription
issuerstringThe value of the credential's iss claim
claimsobjectThe disclosed claims requested in the DCQL query, keyed by claim name
signatureIsValidbooleanWhether the credential's cryptographic signature is valid
kbSignatureIsValidbooleanWhether the key binding signature is valid. Present when the credential includes a key binding proof
kbKeyIdstringThe key identifier from the key binding proof. Present when kbSignatureIsValid is true
validFromstringISO 8601 timestamp from the credential's iat claim. Present when the credential includes an issued-at time
validUntilstringISO 8601 timestamp from the credential's exp claim. Present when the credential includes an expiration time
supportRevocationbooleanWhether the credential includes a Status List revocation entry
isRevokedbooleanWhether the credential has been revoked via Status List. Present when supportRevocation: true
supportTrustAnchorbooleanWhether the credential was signed with an X.509 certificate chain (x5c header). When true, the isTrusted and isCertificateRevoked fields are also present
isTrustedbooleanWhether the certificate chain terminated at a configured trust anchor and the last certificate's signature was verified against it. Present when supportTrustAnchor: true. false when trust anchor verification is off. See Revocation mechanisms
isCertificateRevokedbooleanWhether any certificate in the issuer's X.509 chain was found on a CRL. Present when supportTrustAnchor: true. false when trust anchor verification is off. See Revocation mechanisms
transactionDataHashesarrayHashes of transaction data included in the presentation. Present when the presentation request included transaction data

Raw credential object fields

Each entry in the credentialsRaw map (present on FULFILLED events) uses the same key structure as credentials. Each value is an array of raw credential objects with the following fields.

FieldTypeDescription
claimsstringBase64-encoded JSON containing the disclosed claims from the credential. Decode from base64 and then parse as JSON to access claim values
issuerstringThe value of the credential's iss claim. Present when the credential includes an issuer
validFromstringISO 8601 timestamp from the credential's iat claim. Present when the credential includes an issued-at time
validUntilstringISO 8601 timestamp from the credential's exp claim. Present when the credential includes an expiration time
kbKeyIdstringThe key identifier from the key binding proof. Present when the credential includes a key binding proof
transactionDataHashesarrayBase64url-encoded transaction data hashes from the credential. Present when the credential includes transaction data

Further reading