# Supported Tokens

The exchange uses three token types for deposits, market identity, and margin accounting.

## Token Types

### Concrete Token

A concrete token is an ERC-20 asset. It has an onchain token address. Its configuration can allow deposits and withdrawals.

MeridianUSD is the exchange USD settlement token. It wraps an approved USD asset for exchange accounting.

### Virtual Token

A virtual token is a name with no ERC-20 address and no account balance. It identifies an asset that cannot be deposited or withdrawn.

For example, a perpetual base asset can be virtual because the trader does not own or transfer the reference asset.

### Synthetic Token

A synthetic token is an internal balance that has a concrete backing token. It has an exchange accounting address, but that address is not an ERC-20 contract.

Meridian uses synthetic quote tokens to create isolated margin pools. A synthetic token cannot be deposited or withdrawn directly.

## List Tokens

```bash
curl 'https://api.meridiantest.net/v1/token?order=asc&limit=100'
```

Important response fields include:

| Field             | Meaning                                                                  |
| ----------------- | ------------------------------------------------------------------------ |
| `id`              | Token UUID.                                                              |
| `name`            | Exchange token name.                                                     |
| `address`         | Accounting address or zero address for a virtual token.                  |
| `lzOftAddress`    | LayerZero OFT or adapter address, or zero address if none is configured. |
| `backingTokenId`  | Concrete backing-token UUID for a synthetic token, when applicable.      |
| `erc20Name`       | ERC-20 name for a concrete token.                                        |
| `erc20Symbol`     | ERC-20 symbol for a concrete token.                                      |
| `erc20Decimals`   | Native ERC-20 decimals.                                                  |
| `depositEnabled`  | Whether new deposits are accepted.                                       |
| `withdrawEnabled` | Whether withdrawals are accepted.                                        |
| `depositFee`      | Deposit fee in token units.                                              |
| `withdrawFee`     | Withdrawal fee in token units.                                           |
| `minDeposit`      | Minimum deposit in token units.                                          |

Check the live schema because optional fields depend on the token type.

## Isolated-Margin Conversion

Related concrete and synthetic quote-token balances can be converted 1:1 in exchange D9 units. See [Token Conversions](/developer-guides/trading-api/token-conversions) for valid paths, signing, and status tracking.

## Precision

The exchange uses nine-decimal fixed precision, also called D9, for internal amounts. HTTP responses return decimal strings.

Signed API messages use D9 integers. For example:

```text
1.5 exchange units = 1500000000 D9 units
```

Onchain ERC-20 transfers use the token's native decimals. For an 18-decimal token:

```text
1 token = 1000000000000000000 native units
1000 tokens = 1000000000000000000000 native units
```

Do not use binary floating-point values to build signed amounts. Use integer arithmetic or a decimal library.

See [Token Transfers](/developer-guides/trading-api/token-transfers) for deposit and withdrawal flows.
