Status lists and revocation
When a credential can be revoked (or suspended), holders and verifiers need a public, cacheable way to learn the current status without calling your private APIs. A status list is a large array of compact status values, packaged as a signed token that verifiers fetch by URI. Each issued credential carries a pointer: which list, and which index in that list.
Operators create and size lists before issuance. The issuer allocates indexes when credentials are issued. Later, an operator or automation updates the value at an index (for example revoked). The next published token reflects that change.
Whether any list already exists depends on product onboarding and sample data. Empty is normal for a clean production tenant.
Audience: tenant admin (or platform operator in a tenant context).
Prerequisites: Onboard a tenant. Issuance of revocable credentials also needs a working issuer, a signing identity for the list (see Keys and DID), and designs that put a status claim on the VC.
Reference: Status lists
APIs: Status list management, Status list hosting.
Guide variables useful for live Run: statusListId, statusListIndex, signing key alias, public list URI.
How it fits issuance
- Create a status list with enough capacity for expected credentials and a public URI verifiers can reach.
- Configure issuance (design / issuer settings) so each revocable credential gets a status claim pointing at that URI and an allocated index.
- When you must revoke or suspend, update that index (by index or by business entry key).
- Verifiers refresh the hosted token and read the bit(s) at the index.
Do not reuse indexes across unrelated credentials. Capacity is finite: plan length for growth, not only the first pilot.
Select the status representation deliberately
StatusList2021/W3C Bitstring Status List and the IETF Token Status List are different wire representations. The list's specification, purposes, bit width, proof format, hosting mode, and public URI must agree with the credential format and verifier ecosystem.
| Choice | Use when | Verify in the walkthrough |
|---|---|---|
| W3C Bitstring / StatusList2021 | The credential profile and verifier expect a VC-oriented bitstring status list | List type, bitstring/VC-JWT publication, status reference, and verifier refresh |
| IETF Token Status List | The wallet/verifier ecosystem expects a compact status token | Token status-list type, JWT or CWT proof, public fetch, cache TTL, and status transition |
JWT, CWT, and VC-JWT describe the published proof/container, not three interchangeable list semantics. Use the exact content type and proof format advertised by the configured list. Revoke, suspend, and reactivate update the list entry; they do not rewrite the credential signature, so verification must fetch or refresh the current published token before deciding.
For complete issuer-to-verifier request chains, including SD-JWT VC, CWT/mDoc, and W3C VCDM 1.1/2.0 StatusList2021 examples, see Credential status profile walkthroughs.
CWT status list for an mdoc
For an ISO mdoc status reference, create a one-bit Token Status List with the
cwt proof format and the status_list mdoc profile:
POST /api/statuslist/v1/statuslists
Content-Type: application/json
{
"correlationId": "mdoc-revocation",
"spec": "token_status_list",
"proofFormat": "cwt",
"mdocProfile": "status_list",
"issuer": "https://issuer.example.com",
"signingKeyMode": "x5c",
"kmsResourceHandle": "krh_example_mdoc_status",
"kmsKeyAlias": "mdoc-status-signing",
"statusListUri": "https://issuer.example.com/public/statuslists/mdoc-revocation",
"purposes": ["revocation"],
"length": 256,
"bitsPerStatus": 1
}
The public URL returns raw application/statuslist+cwt bytes containing a
COSE_Sign1 CWT. It is not a compact JWT and is not base64 text at the HTTP
boundary. The mdoc MSO points to that stable URI and an allocated index, for
example { "status_list": { "idx": 42, "uri": "https://issuer.example.com/public/statuslists/mdoc-revocation" } }.
The CWT protected header carries the media type, algorithm, and the required
certificate chain; its inner one-bit payload uses bits and lst.
The repository's focused CWT tests cover signing, hosting, resolution, revocation, identifier-list uniqueness, protected-type rejection, algorithm rejection, and fail-closed unavailable publication. See mDoc VICAL and CWT status for the complete use case and mDoc second-edition use cases for the DeviceRequest/DeviceResponse/MSO examples.
List status lists
The inventory shows list slug (correlation id), specification, purposes (revocation, suspension, and so on), proof format, hosting mode, remaining capacity, and last update. Filter by spec or purpose when many lists exist. Open a row for overview, entry updates, and the signed token.
Navigation: Resources > Status Lists > Lists
Deep link: #resource=statuslists&rarea=lists
An empty list only means none were created yet. If the product reports that an OID4VCI issuer is not configured, fix issuer setup before creating lists.
- Admin Console
- REST API

Validation example (sanitized tenant):

Management API (tenant token):
- Overview
- Request
- Response
List status lists
Endpoint: GET /api/statuslist/v1/statuslists
Captured response: 200 OK
This captured endpoint is shown from the E2E run; it is not mapped to one of the generated EDK REST API reference pages.
Connect an environment to rewrite this call to real service bases and run it.
Create a status list
Create before you issue revocable credentials that need a place to allocate indexes. Defaults below match a common IETF Token Status List setup; adjust for your threat model and wallet ecosystem.
| Decision | Why it matters |
|---|---|
| List slug (correlation id) | Stable business id. Often appears in the public path. Hard to rename once credentials point at the URI. |
| Registered issuer | DID (or product-equivalent) that signs or is bound as the list issuer in metadata. Must match what verifiers expect. |
| Specification | Token Status List vs bitstring list (and related). Pick what your wallets and verifiers implement. |
| Purposes | Revocation alone is 1-bit friendly. Suspension typically needs at least 2 bits per status so values can distinguish valid / revoked / suspended. |
| Proof format | JWT, CWT, or VC-JWT for the published token. Must match verifier support. |
| Length | Number of indexes. Under-sizing forces a second list mid-lifecycle. Over-sizing wastes storage and publish cost. |
| Bits per status | 1 for simple revoke/valid; 2+ for suspension or multi-value status. |
| Hosting mode | Hosted: platform publishes at a derived public URI. Export: you host the token yourself and supply the external URI. |
| TTL | How long caches may treat a fetched token as fresh. Too long delays visibility of revocations; too short increases load. |
Indexes for issued credentials are allocated by the issuer at issue time (often non-sequential) so list position does not leak issuance order.
The create capture may use template placeholders ({{tenantStatusListApiBaseUrl}}, ...). With a connected environment, substitute via guide variables or edit the request on the Request tab before Run.
- Admin Console
- REST API
New status list opens the create dialog. Fill slug, issuer, purposes, capacity, and hosting, then create. The console opens the new list detail when creation succeeds.

- Overview
- Request
- Response
Create token status list
Endpoint: POST /api/statuslist/v1/statuslists
Captured response: 409 Conflict
This captured endpoint is shown from the E2E run; it is not mapped to one of the generated EDK REST API reference pages.
Connect an environment to rewrite this call to real service bases and run it.
Inspect a list (Overview)
Overview is the operational identity of the list: internal id, slug, spec, purposes, proof format, hosting, issuer DID, capacity, content type, and public URI. Copy the public URI into credential status claims and into any design or issuer config that must reference this list.
Capacity shows how many slots remain. When remaining capacity is low, plan a new list and cut over issuance before you run out.
- Admin Console
- REST API
Open a list row. Overview is the default tab.

- Overview
- Request
- Response
Get token status list
Endpoint: GET /api/statuslist/v1/statuslists/00000000-0000-4000-8000-000000000000
Captured response: 200 OK
This captured endpoint is shown from the E2E run; it is not mapped to one of the generated EDK REST API reference pages.
Connect an environment to rewrite this call to real service bases and run it.
Entries: lookup, revoke, reactivate, suspend
The Entries tab is where operators change a credential's status after issuance.
- Locate the entry by status-list index (from the credential status claim) or by entry business key when your issuer stored one.
- Lookup to see the current value.
- Apply an action: revoke, reactivate (clear revocation when the product allows), or suspend when bits-per-status supports it.
For a typical 1-bit revocation list: value 1 means revoked, 0 means valid (or unused). Unallocated indexes are intentionally hard to distinguish from valid zeros on the public read path, which limits probing.
Revocation is a security action. Prefer automation with audit over ad-hoc console use in production, but the console is valid for break-glass and lab work.
- Admin Console
- REST API

Revoke (value 1):
- Overview
- Request
- Response
Revoke a status entry
Endpoint: POST /api/statuslist/v1/statuslists/00000000-0000-4000-8000-000000000000/status
Captured response: 200 OK
This captured endpoint is shown from the E2E run; it is not mapped to one of the generated EDK REST API reference pages.
Connect an environment to rewrite this call to real service bases and run it.
Reactivate (value 0):
- Overview
- Request
- Response
Reactivate the status entry
Endpoint: POST /api/statuslist/v1/statuslists/00000000-0000-4000-8000-000000000000/status
Captured response: 200 OK
This captured endpoint is shown from the E2E run; it is not mapped to one of the generated EDK REST API reference pages.
Connect an environment to rewrite this call to real service bases and run it.
Read entry (management API; authenticated):
- Overview
- Request
- Response
Read status entry
Endpoint: GET /api/statuslist/v1/statuslists/00000000-0000-4000-8000-000000000000/entries/42
Captured response: 200 OK
This captured endpoint is shown from the E2E run; it is not mapped to one of the generated EDK REST API reference pages.
Connect an environment to rewrite this call to real service bases and run it.
Signed token and public hosting
Verifiers do not call the management API. They fetch the signed status list token from the public URI (no bearer). That surface must stay available independently of the Admin Console, and it should be cache-friendly within the TTL you chose.
Signed token in the console shows the current published token and content type so operators can debug publish failures without leaving the product. Prefer the public URL for real verifier checks.
- Admin Console
- REST API
Public URI is on Overview. Token payload is under Signed token.

Unauthenticated host fetch (walkthrough capture):
- Overview
- Request
- Response
Fetch hosted status list token
Endpoint: GET /public/statuslists/eupid-revocation
Captured response: 200 OK
This captured endpoint is shown from the E2E run; it is not mapped to one of the generated EDK REST API reference pages.
Connect an environment to rewrite this call to real service bases and run it.
After status lists
- Point credential designs / issuer issuance config at the list slug or public URI as your product expects
- Issue credentials so indexes are allocated
- Verify credentials including status checks
- Automate revoke/reactivate against the management API for production operations