Check a credential’s status
The Status List Service hosts all status lists publicly. Each list is a signed JSON web token (JWT). You can verify the JWT’s signature by accessing the Status List Service’s JSON web key set (JWKS) hosted at https://crs.account.gov.uk/.well-known/jwks.json (production) or https://crs.integration.account.gov.uk/.well-known/jwks.json (integration).
There are two formats that the Status List Service supports: Bitstring status lists and Token status lists.
You can use the status list uri in the credential to check a credential’s status.
Each status at a specific index in the status list uses 2 bits. Each status index may contain one of the following bit combinations:
00(VALID). Represents a valid credential01(INVALID). Represents a credential that has been permanently revoked (marked as invalid)10(NOT USED). Currently not used11(NOT USED). Currently not used
Bitstring status list
Status lists where the URI path begins with /b/ are Bitstring status lists that follow the W3C Bitstring Status List specification.
For consistency between the two different lists that the status list service publishes, the Status List Service uses the more complex implementation of Bitstring status lists.
Technical details
Endpoint URI
The URI path for the Bitstring status list endpoint is /b/{statusListIdentifier}. It is presented as a GET request, where:
brepresents the type of status list:BitstringStatusListstatusListIdentifierrepresents an ID for a specific status list
Bitstring status list request example
Below is an example of the /b/{statusListIdentifier} request:
GET /b/A671FED3E9AD HTTP/1.1
Host: crs.account.gov.uk
Accept: application/json
Request Response
Header
The JWT response header will contain the following:
{
"alg": "ES256",
"kid": "12",
"typ": "vc+jwt"
}
| Parameter | Description |
|---|---|
alg |
alg stands for ‘algorithm’. This value will be returned as ES256. This is the algorithm used to encode the JWT. |
kid |
kid stands for ‘key ID’. This key ID represents a key in the Status List Service’s JWKS which can be used to verify the JSON web signature (JWS). |
typ |
typ stands for ‘type’. This is the type of the status list. It is vc+jwt for Bitstring status lists. |
Payload
The JWT response payload for a Bitstring status list will contain the following:
{
"@context": [
"https://www.w3.org/ns/credentials/v2",
"https://www.w3.org/ns/credentials/examples/v2"
],
"id": "https://crs.account.gov.uk/b/A671FED3E9AD",
"type": [
"VerifiableCredential",
"BitstringStatusListCredential"
],
"issuer": "https://crs.account.gov.uk/",
"validFrom": "2025-10-01T14:00:00Z",
"validUntil": "2025-10-08T14:00:00Z",
"credentialSubject": {
"id": "https://crs.account.gov.uk/b/A671FED3E9AD#list",
"type": "BitstringStatusList",
"statusSize": 2,
"statusPurpose": "message",
"statusMessage": [
{
"status": "0x0",
"message": "VALID"
},
{
"status": "0x1",
"message": "INVALID"
}
],
"encodedList": "uH4sIAAAAAAAAA3MUBABJTAvCAgAAAA",
"ttl": "3600"
}
}
| Parameter | Description |
|---|---|
id |
A unique URL that represents this status list. |
type |
The type of credential. |
issuer |
The URL of this status list credential’s issuer. |
validFrom |
The earliest point in time at which the status list is valid. |
validUntil |
The latest point in time at which the status list is valid. |
credentialSubject |
The status list subject about which the claims below are made. |
credentialSubject.id |
A unique URI that represents this status list. |
credentialSubject.type |
The type of credential. This will be BitstringStatusList. |
credentialSubject.statusSize |
The size of the status list in bits. |
credentialSubject.statusPurpose |
The purpose of the status list, as described in statusMessage. |
credentialSubject.statusMessages |
This is an array of objects, which each contain a status and a message. |
credentialSubject.statusMessages.status |
This represents the status value in the status list. It is a hexadecimal string, and will be "0x0" or "1x1". |
credentialSubject.statusMessages.message |
The status message representing the status value. This will be "VALID" or "INVALID". |
credentialSubject.encodedList |
This is a multibase-encoded base64url (with no padding) representation of the GZIP-compressed bitstring values for the associated range of verifiable credential status values. |
Token status list
Status lists where the URI path begins with /t/ are Token status lists that follow the IETF Token Status List specification.
Technical details
Endpoint URI
The URI path for the Token status list endpoint is /t/{statusListIdentifier}. It is presented as a GET request, where:
trepresents the type of status list:TokenStatusListstatusListIdentifierrepresents an ID for a specific status list
Token Status List Request Example
Below is an example of the /t/{statusListIdentifier} request:
GET /t/A671FED3E9AD HTTP/1.1
Host: crs.account.gov.uk
Accept: application/statuslist+jwt
Request Response
Header
The JWT response header will contain the following:
{
"alg": "ES256",
"kid": "12",
"typ": "statuslist+jwt"
}
| Parameter | Description |
|---|---|
alg |
alg stands for ‘algorithm’. This value will be returned as ES256. This is the algorithm used to encode the JWT. |
kid |
kid stands for ‘key ID’. This key ID represents a key in the Status List Service’s JWKS which can be used to verify the JSON web signature (JWS). |
typ |
typ stands for ‘type’. This is the type of the status list. This will be statuslist+jwt for a Token status list. |
Payload
The JWT response payload for a Token status list will contain the following:
{
"exp": 2291720170,
"iat": 1686920170,
"iss": "https://crs.account.gov.uk",
"status_list": {
"bits": 2,
"lst": "eNpzdAEAAMgAhg"
},
"sub": "https://crs.account.gov.uk/b/A671FED3E9AD",
"ttl": 43200
}
| Parameter | Description |
|---|---|
exp |
exp stands for ‘expiry’. This is the expiry of the subject credential. |
iat |
iat stands for ‘issued at’. This is the timestamp the subject credential was originally issued at. |
iss |
iss stands for ‘issuer’. This is the URL of the credential issuer service operated by the organisation sharing the credential. |
status_list.bits |
The number of bits that represent a status. |
status_list.lst |
lst stands for ‘list’. This is an encoded version of this status list. |
sub |
sub stands for ‘subject’. This is the URI of the status list that was in the original HTTP request. |
ttl |
ttl stands for ‘time-to-live’. This is the lifetime of the cached version of this status list. Status lists are updated at regular and set intervals. |
JSON Web Key Set (JWKS)
The JWKS endpoint exposes the Status List Service’s public cryptographic keys in JSON Web Key Set (JWKS) format. You can use a public key to verify the signature of a status list. This verification lets you make sure that the status list was published by the Status List Service and it has not been tampered with.
Technical details
Endpoint location
The JWKS is publicly accessible at the standardised location /.well-known/jwks.json on the Status List Service domain.
Response format
The endpoint must return a 200 OK HTTP status code and a valid JSON response that follows the JWKS specification defined in RFC 7517. Each key within the JWKS is represented as a JSON Web Key (JWK) object. The JWKS usually contains only one key, but it can contain two keys during a key rotation overlap period.
The JWK for an elliptic curve public key based on the P-256 curve must include the following parameters:
| Parameter | Definition |
|---|---|
kty |
The family of cryptographic algorithms used with the key. This must be EC. |
kid |
A unique identifier for a specific key within the set. This value will be referenced in the status list JWT header to show which key must be used for verification. This parameter is important for associating the correct public key with the status list being verified. |
crv |
The cryptographic curve used with the key. This must be P-256. |
x |
The “x” coordinate for the elliptic curve point. |
y |
The “y” coordinate for the elliptic curve point. |
alg |
The cryptographic algorithm used with the key. This must be ES256. |
use |
The intended use of the key. This must be sig to indicate the key can be used to verify the signature. |
JWKS example
Below is an example of a JWKS containing one elliptic curve public key based on the P-256 curve:
{
"keys": [
{
"kty": "EC",
"use": "sig",
"crv": "P-256",
"kid": "5dcbee863b5d7cc30c9ba1f7393dacc6c16610782e4b6a191f94a7e8b1e1510f",
"x": "6jCKX_QRrmTeEJi-uiwcYqu8BgMgl70g2pdAst24MPE",
"y": "icPzjbSk6apD_SNvQt8NWOPlPeGG4KYU55GfnARryoY",
"alg": "ES256"
}
]
}