# Balances & funding

## Read balances

```bash
curl https://api.niripay.com/api/v1/merchant/crypto/balances \
  -H "Authorization: Bearer YOUR_API_KEY"
```

The response has a `status` / `data` envelope. `data` includes `currency`, `network`, `enabled`, and a `providers` map.

| Provider balance field | Meaning |
| --- | --- |
| `available` | Spendable balance; zero when the provider is blocked |
| `reserved` | Funds reserved for operations |
| `pending_confirmation` | Receipts awaiting confirmation |
| `pending_collection` | Receipts awaiting collection |
| `frozen` | Non-spendable net total: frozen receipts plus blocked available funds |
| `frozen_receipts` | Expected net value of frozen receipts |
| `frozen_receipts_gross` | Gross value of frozen receipts |
| `blocked_available` | Available funds restricted by a provider block |
| `blocked` | Whether the provider is blocked |

The frozen breakdown fields are components, not additional balances to sum. Operating capital and internal collections are excluded from merchant-facing history.

## Retrieve top-up instructions

```bash
curl -X POST https://api.niripay.com/api/v1/merchant/crypto/topup \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{}'
```

This returns reusable USDT top-up instructions in the same instruction structure as [customer addresses](/crypto-addresses/), with top-up purpose and no customer association. Creating instructions does not transfer funds.

## Fund one wallet for a payout

One enabled wallet must cover the amount and fee. Balances cannot be combined across wallets. INR balances cannot fund USDT payouts.

This API is separate from the admin-approved [USDT-to-INR top-up workflow](/settlements/).
