Walk the issuance chain
Task: see every credential ever issued at one DID, in order. Every re-issuance (new key, changed scopes, renewal) produces a new credential instance with its own id; the new one names its predecessor in previousCredentialId.
Start from the current credential
curl -s https://api.aria.bar/v1/aids/<did> | python3 -c 'import sys,json; d=json.load(sys.stdin); print(d["id"])'You should see a URL of the form https://api.aria.bar/v1/credentials/<uuid>. That UUID is the credential instance; UUIDv7, so it sorts chronologically.
Fetch an instance and its predecessor
curl -s https://api.aria.bar/v1/credentials/<uuid> | python3 -c '
import sys, json
d = json.load(sys.stdin)["data"]
print("did:", d["did"])
print("active:", d["isActive"], "· valid:", d["validFrom"], "->", d["validUntil"])
print("previous:", d["previousCredentialId"])
print("revocation:", d["revocation"])'You should see the instance's metadata and, in previous, either another UUID or null. Follow previous until null: that is the first credential ever issued at the DID. Today most chains have length one; a re-issuance is what makes them longer.
Read the ledger for the same identifier
The Trust Ledger records the lifecycle events — issuance, renewal, suspension, revocation — hash-chained and without personal data (§7).
curl -s https://api.aria.bar/v1/audit/<did> | python3 -c '
import sys, json
for e in json.load(sys.stdin)["events"]:
print(e["occurredAt"], e["eventType"], e["payload"].get("credentialId"))'You should see at least one aid.issued line with the same credential id you started from. The MCP tool get_audit_trail returns the same record (H6).