Each version has its own permanent URL, and a change is a new URL rather than an edit.
A credential names the version it was issued against in credentialSchema.id, so an
older version stays served for as long as anything pins it. Nothing here is withdrawn when a
newer version ships.
The engine compares credentialSchema.id against a caller-supplied allowlist by
exact string equality and does not fetch the document. Which version a verifier accepts is a
decision made in its configuration, not one made here.
| Version | State | Notes |
|---|---|---|
| v2.7.json | Current | Highest published version. Requires credentialStatus. |
| v2.6.json | Published | Requires credentialStatus. |
| v2.5.json | Published | Requires credentialStatus. |
| v2.4.json | Published | Last version that does not require credentialStatus. |
| v2.3.json | Published | — |
| v2.2.json | Reserved | Never released. A parked draft whose number was reserved, kept permanently resolvable because published credentials pin it. It imposes no constraints, so validating against it succeeds vacuously. Validate substantive requirements against the version the issuer references. |
| v2.1.json | Published | — |
| v2.json | Published | — |
This list is checked against the directory on every build by
scripts/check-schema-index.mjs, so a version that ships without appearing here
fails rather than going unlisted.