Skip to main content

Credential States

Credentials in the system have a state that reflects where they are in the lifecycle and their current validity status.

State diagram

States

StateDescription
CREATEDCredential has been created but not yet shared with a holder.
PENDINGCredential has been shared; a valid offer URL exists and is awaiting the holder.
OFFEREDHolder's wallet has requested the issuance token; exchange is in progress.
ACCEPTEDHolder has accepted the credential; it is active and valid.
SUSPENDEDCredential has been temporarily invalidated by the issuer; can be reactivated.
REVOKEDCredential has been permanently invalidated.
INTERACTION_EXPIREDThe share URL has expired before the holder accepted.
REJECTEDHolder deleted the credential after acceptance.
ERRORAn error occurred during the issuance exchange.

Offer expiration

A credential offer enters INTERACTION_EXPIRED state when its share URL has expired and can no longer be used by the holder. To refresh an expired offer, call the share endpoint again to generate a new URL.

The share URL validity period is set by the preAuthorizedCodeExpiresIn parameter in your issuance protocol configuration. This parameter is required for credential offers.

Issuance notifications

The system pairs each credential issuance with a notification_id. Enabled wallets use the notification endpoint — for example /ssi/openid4vci/final-1/{id}/notification — to report the outcome of an offer:

  • credential_accepted
  • credential_failure
  • credential_deleted