# Supported coins

The coins that can be paid right now, the network each is sent on, and the lowest price a charge in each can have. Read it from the API rather than hard-coding it: coins are added, and a minimum moves with the market.

## The coins on offer

In live mode, with prices in USD at the moment this page was loaded.

| Asset | Coin | Network | Confirmations | Lowest price |
| --- | --- | --- | --- | --- |
| `BTC` | Bitcoin | Bitcoin | 2, about 20 minutes | $0.01 |
| `LTC` | Litecoin | Litecoin | 3, about 8 minutes | $0.01 |
| `DOGE` | Dogecoin | Dogecoin | 10, about 10 minutes | $0.01 |
| `BCH` | Bitcoin Cash | Bitcoin Cash | 2, about 20 minutes | $0.01 |
| `ETH` | Ether | Ethereum | 6, about a minute | $0.01 |
| `SOL` | Solana | Solana | 32, under a minute | $0.01 |
| `BNB` | BNB | BNB Chain | 15, under a minute | $0.01 |
| `USDT` | Tether USD | Ethereum (ERC-20) | 6, about a minute | $10.00 |
| `USDC` | USD Coin | Ethereum (ERC-20) | 6, about a minute | $10.02 |
| `USDT_BSC` | Tether USD | BNB Chain (BEP-20) | 15, under a minute | $0.01 |
| `USDC_BSC` | USD Coin | BNB Chain (BEP-20) | 15, under a minute | $0.01 |

## The asset object

| Field | Type | Description |
| --- | --- | --- |
| `id` | string | What the API calls the coin: pass it as asset when you create a charge. The same coin on another network is another asset, so USDT is Tether on Ethereum and USDT_BSC is Tether on BNB Chain. |
| `object` | "asset" | The kind of object. |
| `name, ticker` | string | The coin's name and symbol. Assets of the same coin share them, and a price. |
| `network` | string | The network the customer has to send it on. In test mode, the test network. |
| `contract_address` | string\|null | The token's contract on that network, or null for a network's own coin. |
| `decimals` | integer | The decimal places the coin has on its network. |
| `required_confirmations, confirmation_wait` | integer, string | How many confirmations a payment needs before it counts, and about how long that takes, in words. |
| `accepted` | boolean | Whether your account takes it right now, which needs a payout address for that network. These are the coins listed under meta.accepted_assets on GET /v1/account. |
| `currency` | string | The currency exchange_rate and minimum_price are in: ?currency= when you pass it, otherwise your account's default. |
| `exchange_rate` | string\|null | What one unit of the coin is worth in that currency right now, or null while no rate is available. A charge locks the rate when it is created. |
| `minimum_amount` | string\|null | The least a charge in it can come to, in the coin itself, or null when the coin has no minimum of its own. |
| `minimum_price` | string\|null | The lowest price a charge in it can have right now, in that currency: 0.01 for a coin with no minimum of its own, or null while a coin with one has no rate. |

## Endpoints

- GET `/v1/assets` List every coin that can be paid in the key's mode. Pass ?currency= to choose the currency of the prices; an unknown one answers 422. The list is not paged.

```bash
curl "https://api.velirapay.com/v1/assets?currency=EUR" \
  -H "Authorization: Bearer vp_live_…"
```

**Response**

```json
{
  "data": [
    {
      "id": "BTC", "object": "asset", "name": "Bitcoin", "ticker": "BTC", "network": "Bitcoin",
      "contract_address": null, "decimals": 8,
      "required_confirmations": 2, "confirmation_wait": "about 20 minutes",
      "accepted": true, "currency": "EUR", "exchange_rate": "68527.48",
      "minimum_amount": null, "minimum_price": "0.01"
    },
    {
      "id": "USDT", "object": "asset", "name": "Tether USD", "ticker": "USDT", "network": "Ethereum (ERC-20)",
      "contract_address": "0xdAC17F958D2ee523a2206206994597C13D831ec7", "decimals": 6,
      "required_confirmations": 6, "confirmation_wait": "about a minute",
      "accepted": false, "currency": "EUR", "exchange_rate": "0.8709",
      "minimum_amount": "10", "minimum_price": "8.71"
    }
  ],
  "meta": { "mode": "live", "currencies": ["USD", "EUR", "GBP", "CAD", "AUD", "CHF", "TRY"] }
}
```

## Minimums

USDT and USDC on Ethereum start at 10 of the token, because paying one out costs enough in gas that a smaller payment would leave you with little. Any other coin can be charged from 0.01 of your currency.

A minimum is in the coin, so minimum_price moves a little with the market: leave some room rather than pricing right on it. It applies to what the customer pays, after any coupon.

POST /v1/charges below a coin's minimum answers 422 under errors.asset. A payment link or an invoice whose price cannot reach it simply does not offer that coin at checkout.

## Test mode

With a vp_test_ key, the list holds the coins that can be paid on the test networks, and network names the test network. BNB Chain has no test mode, so its coins are only listed in live mode.

[See how to charge a customer →](https://velirapay.com/docs/charge-a-customer)
