> ## 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.

# Off-ramp

> Turn stablecoins into fiat - to a card, to a bank account, or out of a virtual account.

The off-ramp is the outgoing direction: a user hands over stablecoins and money arrives
in a currency they spend. The incoming direction is covered by
[Virtual accounts](/products/virtual-accounts) and
[Bank transfers](/api-reference/bank-transfers/onboard-a-bank-transfer-user).

Three shapes, picked by where the money has to land:

| Shape | Money lands on | Use it when |
| - | - | - |
| **Card payout** | The card a user already holds | Fastest to the end user, no bank details collected |
| **Bank payout** | Any bank account you name | The user is paid out once, or irregularly |
| **Virtual account payout** | A bank account, funded from a virtual account | The user already banks with you through a virtual account |

## The order is the same everywhere

Every off-ramp shape runs quote, then execute, then status. The quote holds a rate for a
short window; executing inside that window is what locks it.

<Steps>
  <Step title="Quote">
    Ask what a payout costs. Anonymous, no user needed - the price can be shown
    before anyone commits.
  </Step>

  <Step title="Execute">
    Name the user, the destination, and the quote. We answer with a deposit
    address and the exact amount to send.
  </Step>

  <Step title="Send the stablecoins">
    The user's wallet sends the quoted amount to that address. Nothing is
    custodial before this point and nothing is signed by us.
  </Step>

  <Step title="Status">
    Poll, or take the webhook. A payout moves through `pending`, `converting`,
    `sent`, then `settled`.
  </Step>
</Steps>

<Warning>
  **Send the exact quoted amount to the exact address.** A short send converts at
  whatever arrived and pays out less; an overpayment is returned to the sending
  wallet minus network cost. The address is single-use and tied to one payout -
  reusing it for a second payout has no order to attribute the money to.
</Warning>

## Which one needs which permission

Off-ramp endpoints are granted per product on your API key, like every other
vertical - see [Authentication](/api-reference/authentication). A key without the
permission gets `403 permission_denied` rather than a quote.

| Product on your key | Unlocks |
| - | - |
| `cards` | [Quote](/api-reference/cards/quote-a-card-payout) and [create](/api-reference/cards/create-a-card-payout) a card payout, alongside card payments |
| `bank` | [Quote](/api-reference/bank-transfers/quote-a-bank-payout) and [create](/api-reference/bank-transfers/create-a-bank-payout) a bank payout, alongside bank transfers in |
| `virtual-accounts` | [Pay out from a virtual account](/api-reference/virtual-accounts/pay-out-from-a-virtual-account) |

## Identity

An off-ramp transfer is a transfer to a named person, so it needs the same shared identity
result as the incoming direction - see [Rheon ID](/concepts/customers-and-identity). A user you have
already onboarded for deposits can be paid out without onboarding again; pass the
same `accountId`.

Both shapes use the same Rheon ID result. Where a rail needs an extra document
beyond it, the payout is refused naming what is missing rather than failing
silently.

## Fees

Two components, both returned by the quote: the partner's fee and your markup.
Fees are inside the quoted amount, never added on top - the same convention as
[card payments](/api-reference/cards/display-quote-for-a-card-purchase). Rails differ enough that quoting each
amount beats extrapolating a percentage; a flat minimum dominates small payouts.
How the layers are built is on [Fees](/fees).

Read [Coverage](/coverage) for which currencies and rails are open, and
[GET /v1/payment-methods](/api-reference/reference/which-ways-in-and-out-are-open-for-a-country) for what a
given country can actually receive today.
