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

# Sell stablecoins

<Warning>
  **v1 (legacy).** This page documents the API before the v2 update. The v1
  format is not enabled for new accounts and must be enabled on your account by
  your account manager. New integrations should use the
  [current documentation](/introduction). To update an existing integration,
  follow the [migration guide](/migration).
</Warning>

### Requirements to start the flow.

<CardGroup cols={2}>
  <Card title="API key" icon="shield-keyhole">
    Have an API key ([Tutorial here](/quickstart#api-key-generation)).
  </Card>
</CardGroup>

### <Icon icon="arrow-progress" iconType="solid" /> Order flow

The process of selling stablecoins is done through the following steps:

<Steps>
  <Step title="Register the receiving bank account">
    Before creating an order, you need to register the bank account that will receive the funds. This only needs to be done once per bank account-currency pair, so you can skip this step if the account is already registered.

    Send the `country` and `fiat` of the account along with its details, which are `bankName`, `accountHolderName` and `accountNumber`, plus the identifier your country uses, such as `CLABE` in Mexico or `CCI` in Peru. Keep the `id` from the response, since that is what you pass as `payoutBankAccountId` when creating the order.

    <Card title="Go to create a new bank account" icon="square-code" href="/v1/api-reference/bank-accounts/create-a-bank-account" />
  </Step>

  <Step title="Create a quote">
    You can create as many quotes as necessary before creating an order. Specify what you are selling with the `side`, `crypto`, `fiat` and `country` fields, then specify the size with either `amountCrypto`, if you know how much crypto you want to sell, or `amountFiat`, if you know how much fiat you want to receive.

    For example, to sell \$150,000 USDC (Solana) for MXN:

    ```json theme={null}
    {
      "side": "sell",
      "crypto": "SOL_USDC_PTHX",
      "fiat": "MXN",
      "country": "MX",
      "amountCrypto": 150000
    }
    ```

    The response tells you what you would get. Check `amountFiat` for the fiat you will receive and `netPrice` for the all-in price including taxes and fees. Keep the `id`, since that is the `quoteId` you pass when creating the order.

    Quotes expire. The `expiresAt` field is the date and time after which the quote can no longer be used to create an order, and the window is short, so read that field rather than assuming a fixed duration.

    <Card title="Go to create quote endpoint" icon="square-code" href="/v1/api-reference/quotes/create-quote" />

    <Card title="Learn more about how quotes work" icon="file-invoice-dollar" href="/v1/quotes" />
  </Step>

  <Step title="Create order">
    Once you are satisfied with a quote, you can create an order for the quoted amount. Pass the quote through the `quoteId` field, and make sure to pass the ID for the bank account to which you would like to receive the funds through the `payoutBankAccountId` field. The quote must not have expired.

    <Card title="Go to create order" icon="square-code" href="/v1/api-reference/orders/create-order" />
  </Step>

  <Step title="Wait for the order to be ready to accept your payment">
    Poll the order or subscribe to our webhooks. Wait for the order to have a status of `awaitingPayment`. Until then there is nothing for you to do, and the intermediate statuses do not require any action.
    Remember to add the `payoutBankAccountId` field when creating the order in the previous step. Otherwise, the resulting status will be `awaitingBankPayoutDetails`, which means Rio has nowhere to send the fiat.

    <Card title="Go to check order status" icon="square-code" href="/v1/api-reference/orders/get-order" />
  </Step>

  <Step title="Pay for the order  (skip if placing the order in our sandbox environment)">
    Please send the amount specified in the `amountCrypto` field of the order object to the address specified in the `blockchainAddress` field of the `paymentInstructions` field of the order.

    The payment instructions are part of the order itself, so there is no separate endpoint to call. Get the order and read its `paymentInstructions` field. Read the address from each order rather than reusing one you saved earlier, since the address you are given can differ between orders.

    <Warning>
      If you are selling USDC (Stellar), you must include the memo specified in
      the `blockchainMemo` field of the `paymentInstructions` field of the
      order. Failure to include the memo will result in the payment not being
      credited to your order and your funds may be permanently lost.
    </Warning>
  </Step>

  <Step title="Confirm payment (optional)">
    This final step is only necessary to simulate a successful payment in our sandbox environment. In production Rio detects the incoming transfer on its own.

    <Card title="Go to confirm payment" icon="square-code" href="/v1/api-reference/crypto-payments/check-crypto-payment" />
  </Step>

  <Step title="Wait for funds">
    Rio will send the funds to your bank account in the next few minutes. The order ends up in `complete`, and you can see the details of the transfer in its `payoutsSent` field.
  </Step>
</Steps>

#### <Icon icon="check-to-slot" iconType="solid" /> Poll order status or subscribe to webhooks

<Card title="Go to check order status" icon="square-code" href="/v1/api-reference/orders/get-order" />

<Card title="Go to register a webhook" icon="arrow-progress" href="/v1/workflows/register-webhook">
  Subscribe to `orders` webhooks to get order updates pushed to you instead of
  polling.
</Card>

<Note>
  **Disclaimer**: All technical documentation is subject to the terms and
  conditions, which apply supplementarily and take precedence over the
  documentation.
</Note>


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