> ## Documentation Index
> Fetch the complete documentation index at: https://docs.rheon.io/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.
