# Money representation (/concepts/money)



<!-- generated from docs/wallet-api/QUICKSTART.md §3 — edit THAT file -->

**Every amount is a decimal STRING. Never a JSON number.**

1 ETH is `1000000000000000000` wei, which is larger than JavaScript's
`Number.MAX_SAFE_INTEGER` (2^53 ≈ 9.007e15). Parsing it as a number silently
corrupts it. Use `BigInt`, `decimal.Decimal`, `BigDecimal` — whatever your
language offers — end to end.

Every balance is returned in both forms so you never have to convert yourself:

```json
{
  "asset": { "chain": "bsc", "symbol": "USDT", "decimals": 18, "contract": "0x55d3…" },
  "available": "1500000000000000000",
  "available_decimal": "1.5",
  "locked": "0",
  "total": "1500000000000000000"
}
```

## ⚠ USDT and USDC on BSC have 18 decimals. Everywhere else, 6. [#-usdt-and-usdc-on-bsc-have-18-decimals-everywhere-else-6]

This is a real property of those token contracts, not our choice.

| Chain                                                           | USDT decimals | `"1000000"` means       |
| --------------------------------------------------------------- | ------------- | ----------------------- |
| Ethereum, Tron, Solana, Polygon, Arbitrum, Base, Avalanche, TON | 6             | 1 USDT                  |
| **BSC**                                                         | **18**        | **0.000000000001 USDT** |

Because getting this wrong is a 12-orders-of-magnitude error, `POST /v1/payouts`
&#x2A;*requires you to echo the asset's `decimals`** and returns
`400 decimals_mismatch` (with both values) if it disagrees. Read `decimals` from
`GET /v1/chains`. Never hardcode 6.
