> ## Documentation Index
> Fetch the complete documentation index at: https://docs.kirafin.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Crypto inbound

> Fund a USD virtual account by sending USDC or USDT.

Your customers can fund their `fiat` virtual account with stablecoins. Each open account has a permanent deposit address on every supported network. When your customer sends USDC or USDT to that address, Kira receives it, converts it to dollars and credits the dollar amount to the account. The deposit shows up in the same list as bank transfers.

The account only ever holds dollars. The address does not change unless Kira replaces it, so your customer can save it and reuse it.

> [!NOTE]
>
> Crypto inbound is turned on per client. Until then, accounts have no deposit addresses. Once they are on, every open `fiat` account gets them. To turn them on, contact your Kira representative.
>
> Deposit addresses are only issued to accounts whose user is based outside the United States. Accounts for users in the United States or its territories do not get them.

## Where the addresses are

[Get a virtual account](https://docs.kirafin.ai/api-reference/virtual-accounts/get-a-virtual-account.md) returns them in `crypto_addresses`, one entry per network. The field is absent while the account has none. The dashboard shows the same addresses on the account as **Crypto Transfer**, next to the bank details.

### When an address is replaced

The account gets a new address on the same network at once, and for 30 days that entry's `notice` names the address it replaced, shortened, and the date:

```
This address replaced TD5gsC…ZKYp4E on 2026-10-15. Funds sent to the previous address are not credited; send only to this one.
```

Show `notice` to your customer whenever it is present. [Get a virtual account](https://docs.kirafin.ai/api-reference/virtual-accounts/get-a-virtual-account.md) describes it, and `notices`, which carries the same texts one by one so you can show them apart.

An `ethereum` entry is the account's Polygon address, so replacing either retires both. The new Polygon address is listed on `ethereum` too while the account stays enabled for Ethereum; otherwise the account keeps only its `polygon` entry.

A deposit detected on the replaced address within 30 minutes of the replacement is credited as usual. One detected later is not credited: it ends `FAILED` with `failure_reason` `retired_address`.

## Networks, tokens and minimums

| Network | Tokens it accepts | Minimum deposit |
| - | - | - |
| `tron` | `USDT` | 3.5 |
| `solana` | `USDC`, `USDT` | 1 |
| `polygon` | `USDC`, `USDT` | 1 |
| `ethereum` | `USDC` | 1 |

The minimum is in tokens, and one token counts as one dollar. A deposit of exactly the minimum is accepted.

`ethereum` is available only for USDC and only on accounts enabled for it; to enable it, contact your Kira representative. Any other token sent through Ethereum is not detected and is not credited. Its address is the account's Polygon address: the same address receives through both networks. A deposit on Ethereum is taken once its block is 12 blocks deep, a few minutes after it is detected.

> [!WARNING]
>
> **Send to the Polygon address only through the networks the account lists.** The same address exists on Ethereum and Base. When the account has an `ethereum` entry, USDC sent through Ethereum is credited like any other deposit; without one, nothing sent through Ethereum is detected. Nothing sent through Base is ever detected. Each entry carries this as its `notice`, written to be shown to your customer.

## What happens to a deposit

| Stage | `status` | Webhook | `events` stage |
| - | - | - | - |
| The transfer is detected on the network | `PENDING` | — | `received` |
| Compliance reviews the transaction | `KYT_PENDING` | — | `under_review` |
| Compliance approves it | `PENDING` | `virtual_account.deposit_funds_received` | `approved` |
| It is being converted to dollars | `PENDING` | `virtual_account.deposit_funds_in_transit` | `in_transit` |
| The dollars are on the account | `COMPLETED` | `virtual_account.deposit_funds_in_destination` | `credited` |

Every crypto inbound is reviewed by compliance before it moves, and is announced [the way every deposit is](https://docs.kirafin.ai/lifecycles/deposit.md#what-announces-it).

If a deposit is not credited, [When a deposit is not credited](#when-a-deposit-is-not-credited) says why and whether the stablecoins can be returned.

[Get a deposit](https://docs.kirafin.ai/api-reference/virtual-accounts/get-a-deposit.md) reads one by the `deposit_id` every webhook carries, with its stages in `events`.

## What you are charged

A crypto inbound carries the inbound fee, the conversion fee and the rail fee of its network, priced when it arrives. [How you're charged](https://docs.kirafin.ai/overview/how-you-are-charged.md) explains each one, the rate and `depeg_cost`.

A deposit stopped before it was priced (`below_minimum`, `unsupported_token`, `retired_address`) has no `quotation`, and its `net_amount` shows the tokens that arrived.

## When a deposit is not credited

The deposit ends `FAILED`, or `KYT_REJECTED` when compliance declined it, and `virtual_account.deposit_funds_failed` says why in `failure_reason`. [Virtual account values](https://docs.kirafin.ai/reference/virtual-accounts/values.md#deposit-failure_reason) lists every reason.

A deposit stopped before review (`below_minimum`, `unsupported_token`, `fees_exceed_amount`, `retired_address`) sends only `virtual_account.deposit_funds_failed`. A declined one also sends only `virtual_account.deposit_funds_failed`, with `compliance_review`: it is the first notice for that deposit, and it tells you the stablecoins can be returned.

The stablecoins are not credited and not sent back on their own.

## Getting the stablecoins back

A deposit that compliance declined (`KYT_REJECTED`) or that failed with `processing_failed` can be returned. Ask Kira, and name the wallet on the same network that should receive it. Kira sends the tokens there, keeps a return fee, and the deposit becomes `REFUNDED`.

`virtual_account.deposit_funds_refunded` confirms it, with the wallet, the transaction, the amount and the fee in `return_details`. [Notification examples](https://docs.kirafin.ai/webhooks/notification-examples.md) shows one.

For any other deposit that was not credited, contact Kira.

Send only the tokens in the table above. Any other token is not credited.

> **[Inbound transaction or deposit](https://docs.kirafin.ai/lifecycles/deposit.md)**
>
> Every deposit's states and webhooks, whatever the rail.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.