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

# Crypto deposits

> Accept crypto on EVM chains and Solana with reusable deposit addresses that convert funds to one target asset.

Crypto deposits give a Privy wallet reusable deposit addresses. Users send supported tokens on supported chains to these addresses. Privy then swaps or bridges the funds into one target asset and delivers them to the wallet.

With crypto deposits, an app can accept many assets across chains while holding a single stablecoin balance, such as PathUSD on Tempo. Privy orchestrates deposit detection, conversion, and delivery.

## How crypto deposits work

```mermaid theme={"system"}
flowchart LR
    send[User sends crypto] --> receive[Source wallet receives funds]
    receive --> convert[Privy swaps or bridges]
    convert --> deliver[Destination wallet receives the target asset]
```

Every crypto deposit involves three pieces:

| Term | Meaning |
| - | - |
| **Destination wallet** | The wallet where converted funds end up. Your app chooses it when creating the deposit account. |
| **Source wallet** | The wallet that first receives a deposit. Funds arriving here trigger a [wallet automation](https://docs.privy.io/wallets/automations/overview.md) that converts them. |
| **Deposit address** | The address of the source wallet. Your app shows this address to users as the place to send funds. |

1. Your app [creates a crypto deposit account](https://docs.privy.io/wallets/funding/crypto-deposits/create-deposit-account.md) for a destination wallet. The request names the assets to accept and the asset to deliver.
2. Privy returns one deposit address for each source chain family, EVM or Solana.
3. A user sends a supported asset to a deposit address.
4. Privy converts the funds and delivers the target asset to the destination wallet.

## Where deposit addresses live

By default, Privy creates a separate source wallet for the depositing user in each chain family. The source wallet's address is the deposit address. Privy reuses this wallet for later requests on the same route.

Alternatively, the destination wallet can be its own source wallet. The deposit address is then the destination wallet's own address, and Privy converts funds in place. This only works when the destination is in the same chain family as the deposit. The `deposit_address_strategy` option controls this choice:

| Strategy | Deposit address |
| - | - |
| `dedicated` (default) | Always a separate source wallet. |
| `prefer_destination` | The destination wallet's address for its own chain family. If the destination wallet was exported, Privy uses a separate source wallet. |
| `require_destination` | The destination wallet's address for its own chain family. If the destination wallet was exported, the request fails. |

Other chain families always use separate source wallets. For example, with an Ethereum destination wallet, Solana deposits still go to a separate Solana source wallet.

Learn about [deposit address behavior](https://docs.privy.io/wallets/funding/crypto-deposits/create-deposit-account.md#deposit-address-behavior), including what happens when your app changes strategies.

## SDK support

| Operation | React | React Native | NodeJS | REST API |
| - | - | - | - | - |
| [Create a deposit account](https://docs.privy.io/wallets/funding/crypto-deposits/create-deposit-account.md) | Experimental (3.46.0+) | Experimental (0.75.0+) | Stable (0.32.0+) | Stable |
| [Quote a route](https://docs.privy.io/wallets/funding/crypto-deposits/quotes.md) | Experimental (3.46.0+) | Experimental (0.75.0+) | Stable (0.35.0+) | Stable |
| [Track orders](https://docs.privy.io/wallets/funding/crypto-deposits/orders.md) | Experimental (3.46.0+) | Experimental (0.75.0+) | Stable (0.35.0+) | Stable |

React requires `@privy-io/react-auth`, React Native requires `@privy-io/expo`, and NodeJS requires `@privy-io/node`. The `deposit_address_strategy` option requires `@privy-io/node` 0.35.0 or later. Experimental interfaces may change without a major SDK version bump.

Apps on other platforms can integrate with the REST API directly. Each guide includes REST examples.

To show a prebuilt deposit UI in React or React Native, use the [deposit modal](https://docs.privy.io/wallets/funding/use-deposit-funds.md).

## Supported assets

Crypto deposits support major assets through Privy's [canonical asset aliases](#canonical-asset-aliases), including USDC, USDT, ETH, and SOL. They also support many long-tail assets identified by an EVM token contract address or Solana token mint address.

When funds arrive at a deposit address, Privy fetches a quote and forwards the funds to the destination when a liquidity pathway is available. Recognizing an asset or matching it with an `all` or `exclude` filter does not guarantee that it can be converted to every destination.

To check whether a specific source asset, destination asset, and chain pair is currently supported, [request a deposit quote](https://docs.privy.io/wallets/funding/crypto-deposits/quotes.md). A successful quote confirms that a route is available at that time and returns its estimated output. Route availability and liquidity can change before a later deposit.

### Canonical asset aliases

Privy supports the following well-known assets natively on the chains where they are available.

| Asset | API value |
| - | - |
| OUSD | `ousd` |
| USDC | `usdc` |
| USDC.e | `usdc_e` |
| USDT | `usdt` |
| USDT0 | `usdt0` |
| USDB | `usdb` |
| USDG | `usdg` |
| pathUSD | `pathusd` |
| EURC | `eurc` |
| ETH | `eth` |
| SOL | `sol` |
| POL | `pol` |
| TRX | `trx` |

> [!TIP]
>
> For the most up-to-date list of Privy's well-known assets and the specific chains where they are
> available, visit the [**Asset
> watchlist**](https://dashboard.privy.io/apps?page=settings\&tab=token-watchlist) section of the
> Privy Dashboard.

## Supported chains

Crypto deposit addresses use [wallet automations](https://docs.privy.io/wallets/automations/configuration.md#supported-chains) to detect incoming deposits on the following mainnet chains:

| Chain | CAIP-2 identifier |
| - | - |
| Tempo | `eip155:4217` |
| Ethereum | `eip155:1` |
| Base | `eip155:8453` |
| Polygon | `eip155:137` |
| Arbitrum | `eip155:42161` |
| Optimism | `eip155:10` |
| BNB Smart Chain | `eip155:56` |
| Monad | `eip155:143` |
| Solana | `solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp` |
| Robinhood Chain | `eip155:4663` |
| Plasma | `eip155:9745` |
| MegaETH | `eip155:4326` |

This table describes deposit detection. Conversion also requires an available liquidity pathway and [app-pays gas sponsorship](https://docs.privy.io/wallets/funding/crypto-deposits/setup.md) on the source chain. Use the [deposit quote API](https://docs.privy.io/api-reference/crypto-deposits/quote.md) to check a specific source asset, destination asset, and chain pair.

### Destination-only chains

Some chains are currently available only as crypto deposit destinations. Privy does not detect deposits on these chains, but can deliver converted funds to them. The destination must be an EVM wallet.

| Chain | Chain alias | CAIP-2 identifier |
| - | - | - |
| Hyperliquid HyperCore | `hypercore` | `eip155:1337` |
| Hyperliquid HyperEVM | `hyperevm` | `eip155:999` |

On HyperCore, `usdc` delivers into the perps USDC balance. To deliver into spot USDC or another HyperCore token, set `destination.asset` to its Hyperliquid token ID, such as `0x6d1e7cde53ba9467b783cb7c530ce054` for spot USDC. [Request a deposit quote](https://docs.privy.io/wallets/funding/crypto-deposits/quotes.md) to confirm that a route exists.

## Pricing and quotes

[Request a deposit quote](https://docs.privy.io/wallets/funding/crypto-deposits/quotes.md) for current pricing on a specific asset pair, chain pair, and deposit amount. The quote's estimated output previews the amount delivered after conversion.

Deposit quotes are indicative. Creating a reusable address does not lock a price for future deposits. Pricing and liquidity can change before a deposit is converted, so fetch a fresh quote when showing a deposit estimate.

## Gas and fee sponsorship

Gas sponsorship and swap provider fee sponsorship cover different costs. Configure them separately on the app's [**Fee sponsorship**](https://dashboard.privy.io/apps?page=fee-sponsorship) page in the Privy Dashboard.

| Setting | What the app pays for | Guide |
| - | - | - |
| **Sponsor gas fees** | Network transaction fees on the selected chains. Gas sponsorship alone does not cover swap provider fees. | [Gas sponsorship setup](https://docs.privy.io/wallets/gas-and-asset-management/gas/setup.md) |
| **Sponsor swap provider fees** | Provider fees for supported transfers, swaps, and crypto deposits, rather than deducting those fees from the delivered amount. | [Fee sponsorship and fixed rates](https://docs.privy.io/wallets/actions/transfer/fixed-rates.md) |

Without swap provider fee sponsorship, provider fees are paid from the transferred or swapped amount. Provider fee sponsorship is configured per app and applies to all supported routes, rather than individual users or executions.

Sponsorship does not expand supported assets, chains, or routes. Sponsored costs use the account's [shared prepaid credit balance or postpaid billing](https://docs.privy.io/wallets/gas-and-asset-management/usage-billing/overview.md). Postpaid billing is available on the Enterprise plan.

Crypto deposits **require app-pays gas sponsorship on every source chain**. Source wallets usually hold no native gas token, so Privy pays the gas to move deposits out of them. User-pays mode does not satisfy this requirement.

Swap provider fee sponsorship is optional. Without it, conversion or bridging fees can still be deducted from the delivered amount. Follow the [crypto deposit setup guide](https://docs.privy.io/wallets/funding/crypto-deposits/setup.md) to enable the required settings.

## Getting started

> [card] [Set up crypto deposits](https://docs.privy.io/wallets/funding/crypto-deposits/setup.md)
>
> Enable app-pays gas sponsorship on source chains

> [card] [Create a deposit account](https://docs.privy.io/wallets/funding/crypto-deposits/create-deposit-account.md)
>
> Get deposit addresses for a destination wallet

> [card] [Quote a route](https://docs.privy.io/wallets/funding/crypto-deposits/quotes.md)
>
> Preview the delivered amount before a deposit

> [card] [Track orders](https://docs.privy.io/wallets/funding/crypto-deposits/orders.md)
>
> Optionally check conversion status after a deposit

> [card] [Deposit modal](https://docs.privy.io/wallets/funding/use-deposit-funds.md)
>
> Show a prebuilt deposit UI in React or React Native
