Credential Status

Unlike the Enterprise Stack, where we offer a credential status service to allow you to create, manage and serve status lists to enable credential revocation - within the Community Stack you are responsible for hosting and managing the status lists yourself.

However, you are still able to embed the status information within a credential profile or credential offer override like so:

Profile Configuration

Bitstring Status List with W3C JWT

{
  "profileId": "openBadgeCredential-with-status",
  "name": "Open Badge Credential with Revocation",
  "credentialConfigurationId": "OpenBadgeCredential_jwt_vc_json",
  "issuerKey": { "type": "jwk", ... },
  "issuerDid": "did:key:...",
  "credentialData": { ... },
  "credentialStatus": {
    "id": "https://issuer.example.com/status/1#94567",
    "type": "BitstringStatusListEntry",
    "statusPurpose": "revocation",
    "statusListIndex": "94567",
    "statusListCredential": "https://issuer.example.com/status/1"
  }
}

Token Status List with IETF SD-JWT

{
  "profileId": "identity-sdjwt-with-status",
  "name": "Identity Credential with Status",
  "credentialConfigurationId": "identity_credential",
  "issuerKey": { "type": "jwk", "..." },
  "issuerDid": "did:key:...",
  "credentialData": {
    "vct": "https://example.com/identity/1",
    "given_name": "John",
    "family_name": "Smith",
    "birthdate": "1980-01-01"
  },
  "credentialStatus": {
    "status_list": {
      "idx": 12345,
      "uri": "https://issuer.example.com/status/sdjwt/1"
    }
  }
}

Token Status List with mDocs

{
  "profileId": "mdl-with-status",
  "name": "Mobile Driving License with Status",
  "credentialConfigurationId": "org.iso.18013.5.1.mDL",
  "issuerKey": { "type": "jwk", "..." },
  "issuerDid": "did:key:...",
  "credentialData": {
    "org.iso.18013.5.1": {
      "family_name": "Smith",
      "given_name": "John",
      "birth_date": "1980-01-01"
    }
  },
  "credentialStatus": {
    "status_list": {
      "idx": 94567,
      "uri": "https://issuer.example.com/status/mdoc/1"
    }
  }
}

Credential Offer Override

Bitstring Status List with W3C JWT

{
  "profileId": "openBadgeCredential",
  "authMethod": "PRE_AUTHORIZED",
  "runtimeOverrides": {
    "credentialStatus": {
      "id": "https://issuer.example.com/status/2#12345",
      "type": "BitstringStatusListEntry",
      "statusPurpose": "suspension",
      "statusListIndex": "12345",
      "statusListCredential": "https://issuer.example.com/status/2"
    }
  }
}

Token Status List with IETF SD-JWT

{
  "profileId": "identityCredentialSdJwt",
  "authMethod": "PRE_AUTHORIZED",
  "runtimeOverrides": {
    "credentialStatus": {
      "status_list": {
        "idx": 12345,
        "uri": "https://issuer.example.com/status/sdjwt/2"
      }
    }
  }
}

Token Status List with mDocs

{
  "profileId": "isoMdl",
  "authMethod": "PRE_AUTHORIZED",
  "runtimeOverrides": {
    "credentialStatus": {
      "status_list": {
        "idx": 12345,
        "uri": "https://issuer.example.com/status/mdoc/2"
      }
    }
  }
}

Batch Issuance

Issuer2 does not allocate a new status index per holder proof. If an offer item includes credentialStatus and the wallet sends several proofs in proofs.jwt, every issued copy embeds the same status entry.

To issue the same profile twice with different status entries, put two items in credentials[] (each with its own runtimeOverrides.credentialStatus) and have the wallet request authorization_details at the token endpoint, then use credential_identifier on each Credential Request. See Create an Offer.

Last updated on September 30, 2026