Documentation Index
Fetch the complete documentation index at: https://docs.beltic.com/llms.txt
Use this file to discover all available pages before exploring further.
Overview
Revocation flips a single bit in your organisation’s Status List 2021 bitstring. Verifiers — including the Beltic verify endpoint and any offline verifier — see the revocation on their next bitstring fetch. There’s no per-credential round-trip; revocation propagation is bounded by the bitstring’s cache TTL.Prerequisites
- A Beltic API key with
credentials:revokepermission - The
credential_idof the credential you want to revoke
Step 1: Send the Revoke Request
reason field is optional but recommended. Use it for audit context — common values are key_rotation, compromised, policy_change, user_request, error.
Step 2: Inspect the Response
status is now revoked, and the bit at status_list_index in your org’s bitstring has been flipped. The signed JWT itself is still cryptographically valid — revocation is a separate signal that lives outside the signature.
How Verifiers See the Change
Revocation propagates through the status list, not through the credential itself:Beltic flips the bit
POST /revoke writes the updated bitstring to S3 at the public status-list URL (/.well-known/status-lists/v1).Verifiers fetch the bitstring
Every verify call fetches (or uses a cached copy of) the org’s status list. Cache-Control on the response is 60 seconds by default.
Revocation Is Permanent
Revoked credentials cannot be un-revoked. The bit stays flipped for the lifetime of the credential, and the slot is not reused — Status List 2021’s protocol guarantees that a bit, once set, stays set. If you need to issue a fresh credential for the same subject, callPOST /v1/credentials again with the same subject and claims. The new credential gets its own credential ID and its own status-list slot.
Suspension vs Revocation
Status List 2021 supports two distinct lifecycle states beyondactive and expired:
| Status | Bit state | Semantics |
|---|---|---|
active | Unset | Credential is valid |
suspended | Set (and reversible internally) | Temporarily invalid; can be reactivated |
revoked | Set | Permanently invalid |
expired | n/a | Past its exp claim |
revoked via the public revoke endpoint. Suspension is reserved for internal administrative use (e.g. a fraud hold) and surfaces on verify as reason: "revoked" with status: "suspended" in the response so callers can distinguish.
Auditing Revocations
Every revoke call writes an immutable audit event with thecredential.revoked action. Query it via:
prev_hash + row_hash pair for tamper detection. See the audit-events endpoint reference for the full shape.
Error Codes
| HTTP | Code | Cause |
|---|---|---|
| 404 | not_found | Credential ID doesn’t exist in your org |
| 409 | conflict | Credential is already revoked or already expired |
| 403 | forbidden | API key lacks credentials:revoke |
Next Steps
Issue a Replacement
Mint a new credential for the same subject.
Verify a Credential
Confirm a credential is or isn’t revoked.