Revoke a record your organisation authenticated
Marks a record your organisation authenticated as no longer in good standing, and anchors that decision to Hedera.
Revocation is permanent. It cannot be undone, by you or by us. The
record is not removed — a Hedera message cannot be withdrawn — and
verification continues to report it, with a revoked verdict and the
reason you gave.
The credential must carry records:revoke
This scope is granted only when you ask for it as you mint a credential. A credential that can authenticate documents cannot revoke them unless you requested both, and a credential minted without it never gains the scope — mint a new one.
Ask for it on the credentials you intend to revoke with, and not on the
ones your batch jobs carry. A credential holding this scope can revoke
any record your organisation authenticated, including records
created by a different credential. That is what makes it the right tool
after a credential is lost: mint a new credential with records:revoke
and clean up with it.
A credential granted records:revoke also carries records:write.
There is no revoke-only credential, so a key you mint to clean up after
an incident can also authenticate documents as your organisation —
protect it as a signing key, and revoke it when the cleanup is done.
A test-prefixed credential can be granted this scope, exactly as a
live credential can, and it revokes only its own organisation's
sandbox records. Naming a live recordId finds nothing to revoke and
answers 404, and the same is true in reverse — a live credential
naming a sandbox recordId also gets 404.
What you can revoke
Records your organisation authenticated through this API. Documents a person authenticated in the Audrie app are not revocable here — only that signer can revoke those, from the app.
Revoking is not a way to correct a mistake in the document itself. A
corrected document is a new document with a new hash: authenticate the
new one, and revoke the old one as SUPERSEDED.
Errors
A 403 has two causes, and they read differently. A credential without
records:revoke is told so, and the message names the scope. Otherwise
the record is not one your organisation can revoke — and that answer
deliberately does not distinguish a record belonging to another
organisation from one a person authenticated in the Audrie app.
A 409 has two causes and does not distinguish them. Do not retry
blindly: if the record is already revoked, retrying never succeeds,
because revocation is permanent. If its anchor has not yet reached
consensus, retry once POST /v1/verifications reports verified_org —
or, for a test key's own sandbox record, sandbox. That call is also
how you tell the two apart — an already-revoked record reports
revoked, with a live or a test key.
apiKeyAuthorizationBearer <aud_{live|test}_<keyId:16><secret:32><crc:6>>Authorization: Bearer aud_live_…
Optional on POST /v1/verifications, which answers without any
credential. Required to list or read verifications back.
Send exactly one Authorization header. A credential that is present and
does not work is refused rather than downgraded to the anonymous tier.
Issue a key in the portal under Settings → Organisation → API credentials; it is shown once, at creation.
Three scopes exist. verifications:read covers every verification
operation and is on every key. records:write covers
POST /v1/records, and records:revoke covers
POST /v1/records/{recordId}/revoke. Both are granted to a live or a
test credential alike, on an organisation that holds the
organisation-issued authentication add-on at the moment the key is
minted; records:revoke is granted only when you ask for it. Scopes
are fixed then and never widen afterwards, because a credential's
recorded scopes are what an auditor reads to know what that key could
do on a given date. A test key's records:write and records:revoke
reach sandbox records only: signed with the organisation's sandbox key,
anchored on Hedera's test network, and never a live record. A key minted
without a scope never gains it; mint a new one. Buying the add-on later
means minting a new key too; the old one keeps verifying.
Scopes, rotation, revocation, the live and test prefixes and what to
do about a leaked key:
https://audrie.io/docs/authentication
recordId*stringThe recordId returned when the document was authenticated. UUID.
uuidapplication/json- body
reason*stringWhy the record is being revoked. It is recorded in the ledger message and reported to anyone who verifies the document, so choose the one that is true.
The reason decides how a verifier should read the revocation.
Revoking as SUPERSEDED does not suggest the original was
improperly authenticated; KEY_COMPROMISE does.
| Value | Meaning | What a verifier should conclude |
|---|---|---|
SUPERSEDED | A newer document replaces this one. | The document was validly authenticated. Look for the replacement. |
ERROR_IN_DOCUMENT | The document contains an error. | The document was validly authenticated, and its contents are wrong. |
KEY_COMPROMISE | The signing key may be in someone else's hands. | Treat the authentication itself as untrustworthy. |
PRIVILEGE_WITHDRAWN | The authority to authenticate this document was withdrawn. | The signer was not entitled to authenticate it. |
AFFILIATION_CHANGED | The signer's relationship to the organisation changed. | The document was validly authenticated at the time. |
CESSATION_OF_OPERATION | The organisation or service has stopped operating. | The document was validly authenticated at the time. |
CERTIFICATE_HOLD | Temporarily withdrawn pending a decision. | Do not rely on it for now. |
UNSPECIFIED | No reason given. | Nothing beyond the fact of revocation. |
OTHER | A reason outside this list. | Nothing beyond the fact of revocation. |
"SUPERSEDED""ERROR_IN_DOCUMENT""KEY_COMPROMISE""PRIVILEGE_WITHDRAWN""AFFILIATION_CHANGED""CESSATION_OF_OPERATION""CERTIFICATE_HOLD""UNSPECIFIED""OTHER"The record is revoked and the decision has been submitted to Hedera.
Verification reports revoked for this record from now on.
application/json- response
The outcome of a revocation.
recordId*stringThe record that was revoked. UUID.
uuidcurl -X POST 'https://api.audrie.io/v1/records/497f6eca-6276-4993-bfeb-53cbbbba6f08/revoke' \ -H 'Content-Type: application/json' \ -d '{ "reason": "SUPERSEDED"}'{ "recordId": "9a1b7c3d-4e5f-4a6b-8c9d-0e1f2a3b4c5d"}