Credential status profile walkthroughs
This page turns the format matrix into four implementation lanes. Each lane identifies the design binding, OID4VCI format, status-list proof, credential reference, hosted media type, and verification result that must agree.
Start with Credentials, status, and trust if the trust model, key provider, or credential format has not been selected. Use Developer Console when you are ready to execute the matching folder in the downloadable collection.
The invariant to preserve
| Profile | OID4VCI format | Status create fields | Credential status reference | Public response |
|---|---|---|---|---|
| SD-JWT VC | dc+sd-jwt | token_status_list + jwt | status.status_list.uri + idx | application/statuslist+jwt |
| ISO mDoc | mso_mdoc | token_status_list + cwt + mdocProfile: status_list | MSO status_list.uri + idx | application/statuslist+cwt |
| VCDM 1.1 JWT | jwt_vc_json | bitstring_status_list + vc+jwt | credentialStatus.statusListCredential + statusListIndex | application/vc+jwt |
| VCDM 2.0 JWT | jwt_vc_json-ld | bitstring_status_list + vc+jwt | credentialStatus.statusListCredential + statusListIndex | application/vc+jwt |
The list specification, signing envelope, credential format, and HTTP media type are separate fields that together form one profile. A verifier must reject a JWT where CWT is expected, an mdoc status object on a W3C credential, or a Token Status reference where StatusList2021 was configured.
Common preparation
Before running any lane:
- Resolve the tenant API bases from the connected environment rather than hard-coding deployment hosts.
- Create the credential design and its stable OID4VCI
credentialConfigurationId. - Configure the exact KMS provider id and provider-native alias used for credential and status signing.
- Establish the verifier's trust-domain attachment and admissions.
- Create the status list before issuance, then retain the returned list id, public URI, and allocated entry index.
- Prove the public response and its media type without sending a management bearer token to the public endpoint.
1. SD-JWT VC with JWT Token Status List
Use this lane when selective disclosure and JSON claim paths are required. The status list is an IETF Token Status List signed as a compact JWT.
Configure and inspect
- Admin Console
- Request, response & Scalar
Create or inspect the design under Resources > Credential Designs. Confirm SD_JWT_VC, the vct, claim disclosure policy, and the OID4VCI configuration id.

Create the list under Resources > Status Lists > Lists. In its detail page, confirm Token Status List, JWT, one bit per status, and the intended public URI.

The captures below expose their own Request, Response, and API reference tabs. Compare the returned URI and proof format with the design and issuer configuration.
- Overview
- Request
- Response
Create EuPid SD-JWT design
Endpoint: POST /api/credential-design/v1/designs/credentials
Captured response: 201 Created
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.
- 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.
- 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.
Issue and evaluate
- Admin Console
- Captured issuance
Use Open Protocols > Credential Issuer > Test to resolve the design and status selection before running. Inspect the returned credential rather than relying on a green session badge.

- Overview
- Request
- Response
Create EuPid offer
Endpoint: POST /api/oid4vci/v1/backend/credential/offers
Captured response: 201 Created
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.
- Overview
- Request
- Response
Request EuPid credential
Endpoint: POST /oid4vci/acme/oid4vci/credential
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.
Decode the issuer-signed SD-JWT payload and locate status.status_list.uri and status.status_list.idx. The verifier fetches that URI with Accept: application/statuslist+jwt, validates the list JWT and issuer, decompresses the one-bit list, and evaluates the bit at idx. Disclosure validation, holder binding, issuer trust, and status evaluation remain independent checks.
2. ISO mDoc with CWT Token Status List
Use this lane for mso_mdoc. The credential is CBOR-based, and the status publication is raw COSE/CWT bytes—not a JWT string inside JSON.
Configure and inspect
- Admin Console
- Request, response & Scalar
Confirm the design's docType and namespaced element identifiers. In KMS, confirm that the signing key, DSC certificate, and x5chain describe the intended chain to an admitted IACA.


- Overview
- Request
- Response
Create Mdl mdoc design
Endpoint: POST /api/credential-design/v1/designs/credentials
Captured response: 201 Created
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.
The create operation contains the named mdoc CWT status list example. Inspect it in Scalar and confirm token_status_list, cwt, mdocProfile: status_list, and bitsPerStatus: 1.
Issue and evaluate
- Admin Console
- Captured issuance
Use the issuer testing surface and then inspect the status-list Token tab. The hosted response must be application/statuslist+cwt with raw COSE_Sign1 bytes.

- Overview
- Request
- Response
Create Mdl offer
Endpoint: POST /api/oid4vci/v1/backend/credential/offers
Captured response: 201 Created
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.
- Overview
- Request
- Response
Request Mdl credential
Endpoint: POST /oid4vci/acme/oid4vci/credential
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.
Decode the credential as CBOR and inspect the issuer-signed MSO status projection. Its URI and index join the credential to the CWT list. A verifier must validate issuer authentication and DSC/IACA trust, device or holder authentication as required, the CWT signature and certificate, CWT freshness, and the indexed bit.
Do not base64-decode a JWT example and call it CWT. The protected COSE header, CWT integer claim labels, profile payload, and public content type are part of the contract. Read mDoc VICAL and CWT status for the separate VICAL trust lane.
3. W3C VCDM 1.1 in JWT with StatusList2021
Use jwt_vc_json and the VCDM 1.1 context. Status is expressed by a StatusList2021 entry in credentialStatus, while the public list is a signed W3C credential.
- Admin Console
- Request contract
- Response & verification
- Scalar status API
In the credential-design workbench, confirm the VCDM 1.1 @context, the intended credential type, JSON claim paths, and the OID4VCI configuration id. In the status-list create screen, select the W3C bitstring/StatusList2021 option and JWT VC proof.


In the credential-design Scalar operation, select VCDM 1.1 employee credential. It binds the VCDM 1.1 context to the EmployeeCredentialV11 configuration. In the status-list operation, select VCDM 1.1 StatusList2021 and confirm bitstring_status_list with vc+jwt.
The issued JWT VC must decode to VCDM 1.1 content and contain credentialStatus.type: StatusList2021Entry, a decimal statusListIndex, and the public statusListCredential URI. Fetch that URI with Accept: application/vc+jwt, validate the list credential, and evaluate its encoded bitstring.
No VCDM 1.1 runtime capture is embedded on this page. The response shape here is a contract statement, not runtime provenance; use the collection and retain a sanitized capture when proving a deployment.
4. W3C VCDM 2.0 in JWT with StatusList2021
Use jwt_vc_json-ld and the VCDM 2.0 context. Although the status-entry mechanics match the VCDM 1.1 lane, the credential format, context, and semantics do not.
- Admin Console
- Request contract
- Response & verification
- Scalar status API
Confirm the design resolves with the VCDM 2.0 context and that issuer metadata advertises jwt_vc_json-ld. A configuration advertised only as jwt_vc_json is the wrong lane even if both use JWT serialization.

Select VCDM 2.0 employee credential in the credential-design operation and VCDM 2.0 StatusList2021 in the status-list operation. Use a separate list correlation id when the populations or verifier policies are separate.
The issued JWT must decode to the VCDM 2.0 context and carry a StatusList2021 credentialStatus object. Its list URI remains version-neutral; the VCDM version belongs to the issued credential and issuer metadata.
No VCDM 2.0 runtime capture is embedded on this page. Preserve the actual request, response, decoded credential, public list response, and verification result when claiming runtime completion.
Revoke, refresh, and prove rejection
The status URI and credential signature remain stable when an entry changes. Only the signed status-list publication changes. Write the transition through the management API, wait according to the declared cache policy, fetch the public artifact again, and verify the same credential.
- Admin Console
- Captured transition
Use Resources > Status Lists > Lists, open the list, and inspect Entries. Confirm the exact index before changing it.

- 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.
- 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.
- 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.
For every profile, prove all of these boundaries:
- the valid credential verifies before the transition;
- the status URI and index in the credential exactly match the managed list entry;
- the public response media type matches the selected proof format;
- the status artifact's issuer or certificate is independently trusted;
- the same credential is rejected after revocation and a genuine refresh;
- unavailable, expired, malformed, wrong-type, and wrong-issuer lists fail closed; and
- reactivation, if policy permits it, is observed only after a newly signed list is fetched.
Execute the customer-neutral request set
Download EDK Credential Status Profiles. Its first four folders follow this page in order and contain issuance, status transition, and public fetch requests for each profile. The fifth folder contains optional Azure KMS, BYOK, and BYOC mutations; those requests are disabled by default.
The collection is executable material, not evidence by itself. Retain sanitized outputs from the environment under test and keep private credentials in an approved secret mechanism rather than collection variables.