# Denylist tokens

Denylisting tokens blocks them from visibility in Ripple Custody. The API method depends on the token's current state.

## How it works

When you denylist a token:

1. The token's `lock` status changes to `Locked`
2. The token is hidden from standard UI views
3. The token cannot be used in new transfer orders
4. Existing balances remain but are not displayed


## Choose the right intent

| Current state | Intent to use | Supports bulk? |
|  --- | --- | --- |
| Unclassified | `v0_ValidateTickers` with `lock: Locked` | Yes |
| Allowlisted | `v0_LockTicker` | No |


## Denylist from Unclassified

To denylist tokens that have not been reviewed, use the `v0_ValidateTickers` intent with `lock: Locked`.

### Prerequisites

| Prerequisite | Additional information |
|  --- | --- |
| Token details including ID and ledger | [View tokens](/products/custody/v1.34/api/accounting-entities/token-management/view) |
| API authentication | [Authentication](/products/custody/v1.34/api/authentication) |
| A new intent ID in UUID format |  |


### Payload example


```json
{
  "payload": {
    "tickers": [
      {
        "id": "spam-token-uuid",
        "ledgerId": "ethereum-mainnet",
        "kind": "Contract",
        "name": "Spam Token",
        "decimals": 18,
        "symbol": "SPAM",
        "lock": "Locked",
        "ledgerDetails": {
          "properties": {
            "address": "0x...",
            "type": "ERC20"
          }
        }
      }
    ],
    "type": "v0_ValidateTickers"
  }
}
```

### Payload fields

| Field | Type | Required | Description |
|  --- | --- | --- | --- |
| `tickers` | array | Yes | Array of tokens to denylist |
| `tickers[].id` | UUID | Yes | Token ID from [Get ticker](https://docs.ripple.com/products/custody/api/reference/openapi/tickers/getticker) |
| `tickers[].ledgerId` | string | Yes | Ledger identifier |
| `tickers[].kind` | string | Yes | `Native` or `Contract` |
| `tickers[].name` | string | Yes | Token display name |
| `tickers[].decimals` | integer | Yes | Decimal precision |
| `tickers[].symbol` | string | Yes | Token ticker symbol |
| `tickers[].lock` | string | Yes | Set to `Locked` for denylisting |
| `tickers[].ledgerDetails` | object | Yes | Ledger-specific token details |
| `type` | string | Yes | Must be `v0_ValidateTickers` |


You can denylist multiple unclassified tokens in a single intent by including multiple objects in the `tickers` array.

## Denylist from Allowlisted

To denylist tokens that are currently allowlisted, use the `v0_LockTicker` intent.

### Prerequisites

| Prerequisite | Additional information |
|  --- | --- |
| Token ID and current revision | [View tokens](/products/custody/v1.34/api/accounting-entities/token-management/view) |
| API authentication | [Authentication](/products/custody/v1.34/api/authentication) |
| A new intent ID in UUID format |  |


### Payload example


```json
{
  "payload": {
    "type": "v0_LockTicker"
  },
  "reference": {
    "id": "ticker-uuid",
    "revision": 1
  }
}
```

### Payload fields

| Field | Type | Required | Description |
|  --- | --- | --- | --- |
| `payload.type` | string | Yes | Must be `v0_LockTicker` |
| `reference.id` | UUID | Yes | Token ID from [Get ticker](https://docs.ripple.com/products/custody/api/reference/openapi/tickers/getticker) |
| `reference.revision` | integer | Yes | Current token revision (from the ticker response) |


`v0_LockTicker` only supports one token per intent. To denylist multiple allowlisted tokens, submit individual intents for each token.

The token is denylisted when the intent is successfully approved and executed. The token is hidden from standard views.

## Verify the result

After the intent is executed, verify the token is denylisted:


```http
GET /v1/tickers?validationStatus=Validated&lock=Locked
```

See [List tickers](https://docs.ripple.com/products/custody/api/reference/openapi/tickers/gettickers) for the complete API reference.

## Related topics

- [Token Management concepts](/products/custody/v1.34/concepts/token-management)
- [View tokens](/products/custody/v1.34/api/accounting-entities/token-management/view)
- [Restore tokens](/products/custody/v1.34/api/accounting-entities/token-management/restore)
- [Allowlist tokens](/products/custody/v1.34/api/accounting-entities/token-management/allowlist)
- [Request a change with an intent](/products/custody/v1.34/resources/tutorials/intent)
- [API reference: List tickers](https://docs.ripple.com/products/custody/api/reference/openapi/tickers/gettickers)
- [API reference: Get ticker](https://docs.ripple.com/products/custody/api/reference/openapi/tickers/getticker)