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, revoked credentials, DCQL mismatch)

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, revoked credentials, or DCQL mismatches)

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"
}

Further reading