KYC Proofs
Revoke Claim
Revoke a claim on the registry
POST
/
customers
/
api
/
identity
/
revoke-claim
curl -X POST "https://api.trusset.org/customers/api/identity/revoke-claim" \
-H "X-API-Key: trusset_your_key_here" \
-H "Content-Type: application/json" \
-d '{"walletAddress": "0xabCDeF0123456789AbcdEf0123456789aBCDEF01", "claimType": "AML"}'
const url = 'https://api.trusset.org/customers/api/identity/revoke-claim';
const headers = { 'X-API-Key': 'trusset_your_key_here', 'Content-Type': 'application/json' };
const body = { walletAddress: '0xabCDeF0123456789AbcdEf0123456789aBCDEF01', claimType: 'AML' };
const { data } = await fetch(url, { method: 'POST', headers, body: JSON.stringify(body) }).then(r => r.json());
const tx = await signer.sendTransaction(data.transaction);
await tx.wait();
await fetch(url, { method: 'POST', headers, body: JSON.stringify({ ...body, txHash: tx.hash }) });
{
"success": true,
"data": {
"action": "SIGN_TRANSACTION",
"transaction": { "to": "0xEf244c4Bd4d71Bd9A30EDF6Edef7CCC72642291a", "data": "0x..." },
"functionName": "revokeClaim",
"description": "Revoke AML claim for 0xabCDeF0123456789AbcdEf0123456789aBCDEF01",
"registerKind": "TRUSSET",
"walletAddress": "0xabCDeF0123456789AbcdEf0123456789aBCDEF01",
"claimType": "AML",
"confirmWith": {
"endpoint": "POST /customers/api/identity/revoke-claim",
"field": "txHash"
}
},
"error": null,
"metadata": {
"requestId": "550e8400-e29b-41d4-a716-446655440000",
"timestamp": "2026-09-06T12:00:00.000Z"
}
}
{
"success": true,
"data": {
"walletAddress": "0xabCDeF0123456789AbcdEf0123456789aBCDEF01",
"claimType": "AML",
"txHash": "0xd402612bae9f7c3018d5a64b0f9e28c7135ad60897e4b2f150c3a8e6d7b409f1",
"gasUsed": "48119"
},
"error": null,
"metadata": {
"requestId": "550e8400-e29b-41d4-a716-446655440000",
"timestamp": "2026-09-06T12:00:00.000Z"
}
}
Revokes one claim slot on the registry. It works on any slot, including the four filled from proofs.
For a proof-backed claim, prefer Revoke Proof. It does the same revocation and two things more. It checks the slot on the Trusset register, and deletes the ledger row that recorded which proof backed the slot. Both endpoints record the revocation once in your instance’s verification history as a
The confirm leg does not check which slot was revoked, and
claimType in the answer echoes your request. On the Trusset register it checks that a revokeClaim for this wallet was mined on this instance’s register. On an ERC-3643 register any mined revokeClaimBySignature, or a removeClaim on this wallet’s ONCHAINID, is accepted.REVOKE_CLAIM entry.
Body Parameters
string
required
The subject.
string | integer
required
The slot to revoke, as a name or an integer index from 0 to 7.
string
Send it to confirm. Omit it to receive the calldata.
string
ERC-3643 register only. The instance wallet you will send the revocation from, echoed back as
signerAddress.Sign and confirm
On the Trusset register the calldata callsrevokeClaim on the register, which needs a wallet holding KYC_PROVIDER_ROLE. Any holder of that role can revoke any slot, whoever filed it. The API checks that one of your instance’s wallets holds the role, and refuses with KYC_PROVIDER_ROLE_MISSING otherwise. On the Trusset ID Register it also refuses with IDENTITY_HELD_BY_ANOTHER_ISSUER when the wallet’s identity was registered by a wallet that is not one of your instance’s, and the confirm leg requires a transaction signed by a verified wallet of your instance (UNAUTHORIZED_SIGNER). The register reverts the call when the slot holds no active claim.
On an ERC-3643 register the calldata calls revokeClaimBySignature on the trusted issuer that signed the claim. The claim stays on the ONCHAINID, and List Claims stops returning it once the issuer reports it invalid. A slot with no claim is refused up front with CLAIM_NOT_FOUND, and the role check becomes an agent check on the register.
The confirm leg does not check who signed.
Response Fields
object
Show child attributes
Show child attributes
string
SIGN_TRANSACTION. Calldata leg only.object
The unsigned call, as
to and data. Calldata leg only.string
revokeClaim, or revokeClaimBySignature on an ERC-3643 register. Calldata leg only.string
TRUSSET or TREX. Calldata leg only.string
ERC-3643 register only: the subject’s ONCHAINID. Calldata leg only.
string
ERC-3643 register only: the claim being revoked. Calldata leg only.
string
The subject, checksummed.
string
The slot, by name. On the confirm leg it echoes the request.
string
The confirmed transaction. Confirm leg only.
string
Gas used. Confirm leg only.
object
{ endpoint, field: "txHash" }. Calldata leg only.curl -X POST "https://api.trusset.org/customers/api/identity/revoke-claim" \
-H "X-API-Key: trusset_your_key_here" \
-H "Content-Type: application/json" \
-d '{"walletAddress": "0xabCDeF0123456789AbcdEf0123456789aBCDEF01", "claimType": "AML"}'
const url = 'https://api.trusset.org/customers/api/identity/revoke-claim';
const headers = { 'X-API-Key': 'trusset_your_key_here', 'Content-Type': 'application/json' };
const body = { walletAddress: '0xabCDeF0123456789AbcdEf0123456789aBCDEF01', claimType: 'AML' };
const { data } = await fetch(url, { method: 'POST', headers, body: JSON.stringify(body) }).then(r => r.json());
const tx = await signer.sendTransaction(data.transaction);
await tx.wait();
await fetch(url, { method: 'POST', headers, body: JSON.stringify({ ...body, txHash: tx.hash }) });
{
"success": true,
"data": {
"action": "SIGN_TRANSACTION",
"transaction": { "to": "0xEf244c4Bd4d71Bd9A30EDF6Edef7CCC72642291a", "data": "0x..." },
"functionName": "revokeClaim",
"description": "Revoke AML claim for 0xabCDeF0123456789AbcdEf0123456789aBCDEF01",
"registerKind": "TRUSSET",
"walletAddress": "0xabCDeF0123456789AbcdEf0123456789aBCDEF01",
"claimType": "AML",
"confirmWith": {
"endpoint": "POST /customers/api/identity/revoke-claim",
"field": "txHash"
}
},
"error": null,
"metadata": {
"requestId": "550e8400-e29b-41d4-a716-446655440000",
"timestamp": "2026-09-06T12:00:00.000Z"
}
}
{
"success": true,
"data": {
"walletAddress": "0xabCDeF0123456789AbcdEf0123456789aBCDEF01",
"claimType": "AML",
"txHash": "0xd402612bae9f7c3018d5a64b0f9e28c7135ad60897e4b2f150c3a8e6d7b409f1",
"gasUsed": "48119"
},
"error": null,
"metadata": {
"requestId": "550e8400-e29b-41d4-a716-446655440000",
"timestamp": "2026-09-06T12:00:00.000Z"
}
}
Error Codes
| Code | HTTP | Cause |
|---|---|---|
INVALID_ADDRESS | 400 | walletAddress is missing or malformed |
INVALID_CLAIM_TYPE | 400 | claimType is not a slot name or an index from 0 to 7 |
INVALID_TX | 400 | txHash is not a 32-byte hex hash |
TX_REVERTED | 400 | The transaction reverted |
TX_WRONG_TARGET | 400 | The transaction was not sent to this instance’s register |
TX_WRONG_FUNCTION | 400 | The transaction does not call a revocation function |
TX_TARGET_MISMATCH | 400 | The confirmed transaction targets a different wallet |
KYC_PROVIDER_ROLE_MISSING | 403 | None of your instance’s wallets holds KYC_PROVIDER_ROLE on the register. Calldata leg only |
IDENTITY_HELD_BY_ANOTHER_ISSUER | 403 | Trusset ID Register: the identity was registered by a wallet that is not one of your instance’s. Calldata leg only |
UNAUTHORIZED_SIGNER | 403 | Trusset ID Register, confirm leg: the transaction was not signed by a verified wallet of your instance |
REGISTRY_AGENT_MISSING | 403 | ERC-3643 register: none of your instance’s wallets is an agent of the register. Calldata leg only |
TX_NOT_FOUND | 404 | The transaction is not mined yet |
CLAIM_NOT_FOUND | 404 | ERC-3643 register: the wallet’s ONCHAINID carries no claim in that slot |
OWN_REGISTRY_NOT_CONFIGURED | 409 | The instance is bound to its own register but has no valid register address |
CHAIN_UNAVAILABLE | 503 | ERC-3643 register: the transaction could not be read |
REGISTRY_PROBE_FAILED | 503 | The interface of the instance’s own register could not be read |
REVOKE_CLAIM_FAILED | 400 or 500 | A chain call failed (400), or the request failed unexpectedly (500) |
⌘I
curl -X POST "https://api.trusset.org/customers/api/identity/revoke-claim" \
-H "X-API-Key: trusset_your_key_here" \
-H "Content-Type: application/json" \
-d '{"walletAddress": "0xabCDeF0123456789AbcdEf0123456789aBCDEF01", "claimType": "AML"}'
const url = 'https://api.trusset.org/customers/api/identity/revoke-claim';
const headers = { 'X-API-Key': 'trusset_your_key_here', 'Content-Type': 'application/json' };
const body = { walletAddress: '0xabCDeF0123456789AbcdEf0123456789aBCDEF01', claimType: 'AML' };
const { data } = await fetch(url, { method: 'POST', headers, body: JSON.stringify(body) }).then(r => r.json());
const tx = await signer.sendTransaction(data.transaction);
await tx.wait();
await fetch(url, { method: 'POST', headers, body: JSON.stringify({ ...body, txHash: tx.hash }) });
{
"success": true,
"data": {
"action": "SIGN_TRANSACTION",
"transaction": { "to": "0xEf244c4Bd4d71Bd9A30EDF6Edef7CCC72642291a", "data": "0x..." },
"functionName": "revokeClaim",
"description": "Revoke AML claim for 0xabCDeF0123456789AbcdEf0123456789aBCDEF01",
"registerKind": "TRUSSET",
"walletAddress": "0xabCDeF0123456789AbcdEf0123456789aBCDEF01",
"claimType": "AML",
"confirmWith": {
"endpoint": "POST /customers/api/identity/revoke-claim",
"field": "txHash"
}
},
"error": null,
"metadata": {
"requestId": "550e8400-e29b-41d4-a716-446655440000",
"timestamp": "2026-09-06T12:00:00.000Z"
}
}
{
"success": true,
"data": {
"walletAddress": "0xabCDeF0123456789AbcdEf0123456789aBCDEF01",
"claimType": "AML",
"txHash": "0xd402612bae9f7c3018d5a64b0f9e28c7135ad60897e4b2f150c3a8e6d7b409f1",
"gasUsed": "48119"
},
"error": null,
"metadata": {
"requestId": "550e8400-e29b-41d4-a716-446655440000",
"timestamp": "2026-09-06T12:00:00.000Z"
}
}
