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

# Stablecoin/crypto deposits

> Take a stablecoin from a wallet on any supported chain and settle it where you want it, non-custodially.

A crypto deposit is the simplest way money comes in: the user already holds a
stablecoin somewhere, and we route it to where you want it. Cross-chain is handled
for you - the user does not bridge, swap, or hold a second gas token.

<Warning>
  **Production on this deployment, real money.** There is no crypto sandbox: the
  transaction you build moves real funds the moment the user signs it, and every
  hash you see is a real one. Try it with a small amount.
</Warning>

## Before you start

* An API key and the `/v1` prefix - see [Authentication](/api-reference/authentication).
* The destination you want money to land on: a chain and a token, both named in
  full. Read the ones your key may use from
  [`GET /v1/config`](/api-reference/configuration/what-this-key-may-use).
* A frontend that can ask the user's wallet to sign. We hand back an unsigned
  transaction; submitting it is yours.

## What it does

* **Any supported source chain and token.** The user picks what they hold.
* **One landing spot you control.** Any chain and token your key is enabled for;
  the quote names both.
* **Non-custodial throughout.** The transaction we hand back is unsigned and the
  user's wallet signs it. Funds never sit with us between the payer and you.
* **Exact-in or exact-out.** Pin the amount the payer spends, or the amount that
  must land - the second is what a fixed price needs.

## The flow

<Steps>
  <Step title="Price it">
    `POST /v1/deposit/quote` with the source, the destination, and the amount.
    See [Quote a deposit](/api-reference/crypto-deposits/quote-a-cross-chain-deposit).
  </Step>

  <Step title="Build the transaction">
    `POST /v1/deposit/transaction` with that quote. You get an unsigned
    transaction, preceded by an approval when the token allowance is short.
    See [Build the transaction](/api-reference/crypto-deposits/build-the-unsigned-transaction-for-a-quote).
  </Step>

  <Step title="Let the user sign">
    Your frontend submits it from the user's wallet. Nothing reaches us here.
  </Step>

  <Step title="Track it">
    `POST /v1/deposit/status` with the receipt, or take a
    [webhook](/webhooks) instead of polling.
    See [Check status](/api-reference/crypto-deposits/where-a-submitted-deposit-is-by-receipt).
  </Step>
</Steps>

<Warning>
  **A quote lives five minutes.** Build the transaction from a fresh one - past that
  the request is refused with a quote-expired error rather than silently repriced, so
  the user never signs a number they were not shown.
</Warning>

## Exact-in and exact-out

`exact-in` means the payer spends exactly the amount you named and whatever arrives,
arrives. `target-out` means a fixed figure has to land and the payer's side flexes
to cover it. Collecting a set price - an invoice, a checkout total - is the
exact-out case.

## Naming the destination

Name both `destination.chain` and `destination.token`, never one alone: a chain
without its token address is refused rather than guessed. Your key also has to be
enabled for that chain, otherwise the quote comes back `403 chain_not_allowed`
instead of a quote you could not have used.

## Fees

The crypto path is priced per route on the quote, and the quote is the whole price:
`outAmount` is what lands, and the difference from what the payer spends is the
route cost. There is no separate settlement or bridging charge, and an on-chain
destination carries no network or withdrawal fee on our side. Routes are priced live,
so the same corridor can cost differently minute to minute - quote in the direction
that matters to you. The structure is on [Fees](/fees).

## Where to go next

* Build your own UI on it: [Server-side integration](/integration/api).
* Drop in the ready-made flow: [Rheon SDK](/integration/sdk).
* Which chains and tokens are open: [Coverage](/coverage).
