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

# Make a Cross-Border Payout

> Register a destination bank account, lock in an exchange rate, and send stablecoin that lands as fiat in another country.

This quickstart takes an approved customer from a destination bank account to
a completed international payout: register the account, get a quote, and
create the transfer.

## Before you begin

Complete the [shared setup steps](/docs/quickstarts): get your API keys,
configure webhooks, and get your customer through compliance approval.
Cross-border payouts also need the separate payments verification described
in [Payments Compliance](/docs/payments-compliance), since Rain gates money
movement independently from card-issuing approval.

<Steps>
  <Step title="Create a payment account">
    Register your customer's destination bank account as a payment account.
    The required fields vary by destination country; this example registers a
    Colombian account.

    ```bash theme={null}
    curl -X POST https://api.rain.xyz/v1/payment-accounts \
      -H "Api-Key: YOUR_API_KEY" \
      -H "Content-Type: application/json" \
      -d '{
        "type": "externalFiatAccount",
        "userId": "11111111-1111-1111-1111-111111111111",
        "nickname": "Maria Colombia Account",
        "externalFiatAccount": {
          "currency": "cop",
          "rail": "co_ach",
          "thirdParty": false,
          "beneficiaryType": "individual",
          "beneficiaryFirstName": "Maria",
          "beneficiaryLastName": "Garcia",
          "beneficiaryAddress": {
            "line1": "Calle 100 #15-20",
            "city": "Bogota",
            "region": "Bogota D.C.",
            "postalCode": "110111",
            "countryCode": "CO"
          },
          "bankName": "Bancolombia",
          "accountNumber": "12345678901"
        }
      }'
    ```

    See [Create a Payment Account](/reference/paymentaccounts/create-a-payment-account)
    for the full request reference, and [Offramps with Transfers](/docs/transfers)
    for the required fields for Mexico and Brazil.
  </Step>

  <Step title="Create a quote">
    Request a quote for the amount your customer wants to send. A quote locks
    in the exchange rate and fees until the time in its `expiresAt` field.

    ```bash theme={null}
    curl -X POST https://api.rain.xyz/v1/quotes \
      -H "Api-Key: YOUR_API_KEY" \
      -H "Content-Type: application/json" \
      -d '{
        "userId": "11111111-1111-1111-1111-111111111111",
        "source": {
          "amount": "100",
          "currency": "usdc",
          "rail": "base"
        },
        "destination": {
          "currency": "cop",
          "rail": "co_ach",
          "address": {
            "type": "paymentAccount",
            "id": "f47ac10b-58cc-4372-a567-0e02b2c3d479"
          }
        }
      }'
    ```

    ```json Response theme={null}
    {
      "id": "8a2b3c4d-5e6f-7081-abcd-ef1234567890",
      "source": {
        "amount": "100",
        "currency": "usdc",
        "rail": "base"
      },
      "destination": {
        "amount": "415000",
        "currency": "cop",
        "rail": "co_ach",
        "address": {
          "type": "paymentAccount",
          "id": "f47ac10b-58cc-4372-a567-0e02b2c3d479"
        }
      },
      "exchangeRate": 4200,
      "fees": {
        "rain": {
          "currency": "usdc",
          "amount": "1",
          "amountUSD": "1"
        },
        "sender": {
          "currency": "usdc",
          "amount": "0.5",
          "amountUSD": "0.5"
        }
      },
      "expiresAt": "2026-08-27T10:45:00.000Z"
    }
    ```

    Show your customer the exchange rate, fees, and destination amount before
    they confirm. See [Create a Quote](/reference/quotes/create-a-quote) for
    the full reference.
  </Step>

  <Step title="Create a transfer">
    If your customer accepts the quote, create a transfer from it. Every
    transfer request needs a `refundAddress`, the onchain address Rain sends
    funds back to if the transfer fails, and a unique `idempotency-key` header
    so a retried request doesn't create a duplicate transfer.

    ```bash theme={null}
    curl -X POST https://api.rain.xyz/v1/transfers \
      -H "Api-Key: YOUR_API_KEY" \
      -H "Content-Type: application/json" \
      -H "idempotency-key: unique-request-id-12345" \
      -d '{
        "quoteId": "8a2b3c4d-5e6f-7081-abcd-ef1234567890",
        "refundAddress": "0x1234567890abcdef1234567890abcdef12345678"
      }'
    ```

    The response includes a `depositAddress`: the onchain address your
    customer sends stablecoin to.

    ```json Response theme={null}
    {
      "id": "1234abcd-5678-7091-9ef0-23456789abcd",
      "type": "transfer",
      "transfer": {
        "userId": "11111111-1111-1111-1111-111111111111",
        "status": "pending",
        "quoteId": "8a2b3c4d-5e6f-7081-abcd-ef1234567890",
        "expiresAt": "2026-08-27T11:40:00.000Z",
        "depositAddress": {
          "type": "onchain",
          "address": "0xabcdef1234567890abcdef1234567890abcdef12"
        }
      }
    }
    ```

    See [Create a Transfer](/reference/transfers/create-a-transfer) for the
    full request and response reference.

    <Warning>
      The `depositAddress` is unique to this transfer. Only send the exact
      source amount and currency (for example, 100 USDC on Base) to this
      address. Sending other tokens or the wrong amount can cause a failed
      transfer or a loss of funds.
    </Warning>
  </Step>

  <Step title="Funds arrive">
    Once your customer sends stablecoin to the deposit address, Rain converts
    it and pays out to the destination bank account you registered in step 1,
    no additional API call needed.

    Rain notifies you as the transfer progresses through the
    `transactionTransfer` webhooks. See [Transaction Webhooks](/docs/transaction)
    for the full lifecycle, payload, and transfer status values.
  </Step>
</Steps>

## What's next

<Columns cols={3}>
  <Card title="Offramps with Transfers" icon="money-bill-transfer" href="/docs/transfers">
    See the full guide, including field requirements for Mexico and Brazil,
    error handling, and best practices.
  </Card>

  <Card title="Payments Compliance" icon="shield-check" href="/docs/payments-compliance">
    Understand account-owner verification, transaction monitoring, and
    on-chain screening.
  </Card>

  <Card title="Transaction Webhooks" icon="bell" href="/docs/transaction">
    Track a transfer from creation through settlement.
  </Card>
</Columns>
