Eligibility Registers
Request Removal
Queue a wallet for removal from a profile eligibility register
POST
/
customers
/
api
/
eligibility
/
removals
curl -X POST "https://api.trusset.org/customers/api/eligibility/removals" \
-H "Content-Type: application/json" \
-H "X-API-Key: trusset_your_key_here" \
-d '{
"profileKey": "PROFESSIONAL",
"walletAddress": "0x06DAf160e10be3BE6b5b30491102Ef7E34B7b98D",
"reason": "MANUAL",
"note": "Client requested reclassification as retail"
}'
const response = await fetch('https://api.trusset.org/customers/api/eligibility/removals', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'X-API-Key': 'trusset_your_key_here'
},
body: JSON.stringify({
profileKey: 'PROFESSIONAL',
walletAddress: '0x06DAf160e10be3BE6b5b30491102Ef7E34B7b98D',
reason: 'MANUAL',
note: 'Client requested reclassification as retail'
})
});
const { data } = await response.json();
{
"success": true,
"data": {
"admission": {
"id": "cmgdz6t3y0009l40a1d5f8g2h",
"profileKey": "PROFESSIONAL",
"profileName": "Professional",
"registryAddress": "0x4f2A9c81D06e3b75A1C8E24D9B07f56E3a1d8C90",
"walletAddress": "0x06DAf160e10be3BE6b5b30491102Ef7E34B7b98D",
"customerId": "cmgdv9j4d0003l30a6p8r2s4u",
"status": "REMOVAL_PENDING",
"source": "API",
"sourceRef": null,
"lapsed": false,
"current": true,
"requirementsHash": "0x8919ea37bac1f44ea0e8a37529be970cb49e9779ebd4c4e98490cfd754e9d390",
"dueAt": "2027-10-02T14:08:11.000Z",
"admittedTxHash": "0x5de1122479f288ddb475ee4df5a105a8d6f201fe2b3328061ea29a37941c837d",
"admittedAt": "2026-10-02T14:08:11.000Z",
"removalReason": "MANUAL",
"removalTxHash": null,
"removedAt": null,
"signedBy": "0xCD92134767aEC2562be15d2a2062A082dA17dD84",
"error": null,
"createdAt": "2026-10-02T13:55:37.104Z",
"updatedAt": "2026-10-05T11:20:40.316Z"
},
"cancelled": false
},
"error": null,
"metadata": {
"requestId": "550e8400-e29b-41d4-a716-446655440000",
"timestamp": "2026-10-05T11:20:40.330Z"
}
}
Queues the removal of a wallet from the eligibility register of one verification profile. Nothing is written on chain here. The admission turns
An admission still waiting to be signed is cancelled instead, since it never reached the register. Trusset queues removals on its own as well, for a revoked identity, a rejected review, a newly blocked country and a lapsed admission.
REMOVAL_PENDING until your wallet signs the removal through Build Removal and Confirm Removal. See Eligibility registers.
Until the removal is signed and mined, the wallet stays on the register, and every lending market and vault that reads the register keeps admitting it. Build and sign the removal promptly.
Body Parameters
string
The profile, by key. Matched exactly, then in upper and lower case. Send this or
profileId.string
The profile, by
id. Used instead of profileKey when both are sent.string
required
The wallet to remove,
0x followed by 40 hex characters.string
default:"MANUAL"
LAPSED, REVOKED, REJECTED, COUNTRY_BLOCKED or MANUAL, in any case. Any other value is recorded as MANUAL. It is kept as the admission’s removalReason.string
A note kept in the audit log when a removal is queued, up to 300 characters.
What comes back
Every outcome answers200.
| The admission was | Now | Response |
|---|---|---|
ADMITTED | REMOVAL_PENDING | cancelled: false |
PENDING | CANCELLED | cancelled: true |
REMOVAL_PENDING | Unchanged | alreadyPending: true |
Response Fields
object
Show child attributes
Show child attributes
object
The admission after the request, as on List Admissions.
boolean
true when a waiting admission was cancelled, false when a removal was queued. Absent with alreadyPending.boolean
Present and
true when a removal was already waiting.curl -X POST "https://api.trusset.org/customers/api/eligibility/removals" \
-H "Content-Type: application/json" \
-H "X-API-Key: trusset_your_key_here" \
-d '{
"profileKey": "PROFESSIONAL",
"walletAddress": "0x06DAf160e10be3BE6b5b30491102Ef7E34B7b98D",
"reason": "MANUAL",
"note": "Client requested reclassification as retail"
}'
const response = await fetch('https://api.trusset.org/customers/api/eligibility/removals', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'X-API-Key': 'trusset_your_key_here'
},
body: JSON.stringify({
profileKey: 'PROFESSIONAL',
walletAddress: '0x06DAf160e10be3BE6b5b30491102Ef7E34B7b98D',
reason: 'MANUAL',
note: 'Client requested reclassification as retail'
})
});
const { data } = await response.json();
{
"success": true,
"data": {
"admission": {
"id": "cmgdz6t3y0009l40a1d5f8g2h",
"profileKey": "PROFESSIONAL",
"profileName": "Professional",
"registryAddress": "0x4f2A9c81D06e3b75A1C8E24D9B07f56E3a1d8C90",
"walletAddress": "0x06DAf160e10be3BE6b5b30491102Ef7E34B7b98D",
"customerId": "cmgdv9j4d0003l30a6p8r2s4u",
"status": "REMOVAL_PENDING",
"source": "API",
"sourceRef": null,
"lapsed": false,
"current": true,
"requirementsHash": "0x8919ea37bac1f44ea0e8a37529be970cb49e9779ebd4c4e98490cfd754e9d390",
"dueAt": "2027-10-02T14:08:11.000Z",
"admittedTxHash": "0x5de1122479f288ddb475ee4df5a105a8d6f201fe2b3328061ea29a37941c837d",
"admittedAt": "2026-10-02T14:08:11.000Z",
"removalReason": "MANUAL",
"removalTxHash": null,
"removedAt": null,
"signedBy": "0xCD92134767aEC2562be15d2a2062A082dA17dD84",
"error": null,
"createdAt": "2026-10-02T13:55:37.104Z",
"updatedAt": "2026-10-05T11:20:40.316Z"
},
"cancelled": false
},
"error": null,
"metadata": {
"requestId": "550e8400-e29b-41d4-a716-446655440000",
"timestamp": "2026-10-05T11:20:40.330Z"
}
}
Error Codes
| Code | HTTP | Cause |
|---|---|---|
INVALID_ADDRESS | 400 | walletAddress is not a valid address, or is the zero address |
PROFILE_NOT_FOUND | 404 | Neither profileId nor profileKey names a profile of your instance |
NOT_ADMITTED | 404 | The wallet has no admission under the profile’s register, or it is already REMOVED or CANCELLED |
ELIGIBILITY_REGISTER_NOT_SET | 409 | The profile has no eligibility register |
RATE_LIMIT_EXCEEDED | 429 | Your instance went over its budget of 120 eligibility requests per minute |
REQUEST_REMOVAL_FAILED | 500 | The removal could not be recorded |
⌘I
curl -X POST "https://api.trusset.org/customers/api/eligibility/removals" \
-H "Content-Type: application/json" \
-H "X-API-Key: trusset_your_key_here" \
-d '{
"profileKey": "PROFESSIONAL",
"walletAddress": "0x06DAf160e10be3BE6b5b30491102Ef7E34B7b98D",
"reason": "MANUAL",
"note": "Client requested reclassification as retail"
}'
const response = await fetch('https://api.trusset.org/customers/api/eligibility/removals', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'X-API-Key': 'trusset_your_key_here'
},
body: JSON.stringify({
profileKey: 'PROFESSIONAL',
walletAddress: '0x06DAf160e10be3BE6b5b30491102Ef7E34B7b98D',
reason: 'MANUAL',
note: 'Client requested reclassification as retail'
})
});
const { data } = await response.json();
{
"success": true,
"data": {
"admission": {
"id": "cmgdz6t3y0009l40a1d5f8g2h",
"profileKey": "PROFESSIONAL",
"profileName": "Professional",
"registryAddress": "0x4f2A9c81D06e3b75A1C8E24D9B07f56E3a1d8C90",
"walletAddress": "0x06DAf160e10be3BE6b5b30491102Ef7E34B7b98D",
"customerId": "cmgdv9j4d0003l30a6p8r2s4u",
"status": "REMOVAL_PENDING",
"source": "API",
"sourceRef": null,
"lapsed": false,
"current": true,
"requirementsHash": "0x8919ea37bac1f44ea0e8a37529be970cb49e9779ebd4c4e98490cfd754e9d390",
"dueAt": "2027-10-02T14:08:11.000Z",
"admittedTxHash": "0x5de1122479f288ddb475ee4df5a105a8d6f201fe2b3328061ea29a37941c837d",
"admittedAt": "2026-10-02T14:08:11.000Z",
"removalReason": "MANUAL",
"removalTxHash": null,
"removedAt": null,
"signedBy": "0xCD92134767aEC2562be15d2a2062A082dA17dD84",
"error": null,
"createdAt": "2026-10-02T13:55:37.104Z",
"updatedAt": "2026-10-05T11:20:40.316Z"
},
"cancelled": false
},
"error": null,
"metadata": {
"requestId": "550e8400-e29b-41d4-a716-446655440000",
"timestamp": "2026-10-05T11:20:40.330Z"
}
}
