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

# Crypto on-ramping

> Buy stablecoins (USDT or USDC) with your Breet USD balance and send them to any external wallet address.

Use your Breet USD balance to purchase stablecoins and send them to any external wallet address. This is ideal for businesses that collect revenue in local currency (NGN or GHS), convert it to USD, and need to pay overseas suppliers, fund wallets, or move value on-chain.

<Frame>
  <img src="https://mintcdn.com/breet/J6zC5wwtYMVDa-9u/images/ONE.webp?fit=max&auto=format&n=J6zC5wwtYMVDa-9u&q=85&s=bf7bdc53e7cd55804e4a73860fa74382" alt="ONE" width="2048" height="1068" data-path="images/ONE.webp" />
</Frame>

## How it works

<Steps>
  <Step title="Fund your USD balance">
    Your Breet account holds funds in USD. You can build up your USD balance in two ways:

    * **Convert your existing NGN or GHS balance** to USD from the dashboard under **Settings > Crypto Settings** — this is the primary on-ramp path
    * **Receive crypto deposits** that automatically convert to USD (see the [off-ramping](/use-cases/offramp) or [fintech](/use-cases/fintech) use cases)
  </Step>

  <Step title="Call the Withdraw (Stablecoins) endpoint">
    Use [`POST /payments/withdraw/address`](/api-reference/withdrawals/withdraw-stable-coins) to initiate a stablecoin purchase. Specify the amount in USD, the destination wallet address, the token (USDT or USDC), and the blockchain network.
  </Step>

  <Step title="Breet sends the stablecoins">
    Breet deducts the amount (plus network fee) from your USD balance and sends the stablecoins to the specified wallet address on the chosen network.
  </Step>

  <Step title="Confirm delivery via webhook">
    Breet sends a `withdrawal.completed` [webhook](/webhooks) once the transaction is confirmed on-chain. Listen for this event to update your system.
  </Step>
</Steps>

## Initiate a stablecoin withdrawal

```bash theme={null}
curl -X POST "https://api.breet.io/v1/payments/withdraw/address" \
  -H "x-app-id: YOUR_APP_ID" \
  -H "x-app-secret: YOUR_APP_SECRET" \
  -H "X-Breet-Env: production" \
  -H "Content-Type: application/json" \
  -d '{
    "amount": 500,
    "walletAddress": "0x1234...abcd",
    "token": "USDT",
    "network": "TRC20",
    "externalId": "purchase-order-7891"
  }'
```

| Parameter       | Description                                                                              |
| --------------- | ---------------------------------------------------------------------------------------- |
| `amount`        | Amount in USD to spend on stablecoins                                                    |
| `walletAddress` | Destination wallet address for the stablecoins                                           |
| `token`         | `USDT` or `USDC`                                                                         |
| `network`       | Blockchain network: `ERC20`, `TRC20`, `BSC`, `SOL`, or `TON` (USDC not supported on TON) |
| `externalId`    | Your unique reference for this transaction (for tracking and deduplication)              |

<Tip>
  Call [`GET /payments/supported-assets-info`](/api-reference/assets/fetch-withdrawal-assets) to see which tokens, networks, and fees are currently available before initiating a withdrawal. See the [supported assets](/supported-assets) page for the full list.
</Tip>

## What Breet handles

* Deducting the USD amount from your balance
* Sending stablecoins to the destination wallet on the specified network
* Handling blockchain transaction broadcasting and confirmation
* Sending [webhook](/webhooks) notifications for withdrawal status changes (`withdrawal.pending`, `withdrawal.completed`, `withdrawal.rejected`)

## What you handle

* Ensuring your Breet USD balance has sufficient funds
* Collecting and validating the destination wallet address
* Choosing the appropriate token and network for your use case
* Listening for webhook events to confirm delivery
* Communicating transaction status to your users or internal systems

## Example user journey

1. A Nigerian e-commerce company sends Naira to their Breet balance using their assign virtual account number.
2. The company converts their NGN balance to USD from the Breet dashboard.
3. On Friday, the company needs to pay an overseas supplier \$200,000 for inventory. The supplier accepts USDT on TRC20.
4. Their backend calls `POST /payments/withdraw/address` with the supplier's wallet address, amount 200,000, token USDT, network TRC20, and an `externalId` matching the purchase order.
5. Breet deducts 200,002 USD (plus a small network fee of \$2) from the company's balance and sends 200,000 USDT to the supplier's wallet.
6. Breet sends a `withdrawal.completed` webhook to the company's server.
7. The company's system marks the purchase order as paid and notifies the supplier.

## FAQ

<AccordionGroup>
  <Accordion title="Which stablecoins can I buy?">
    USDT and USDC. See the [supported assets](/supported-assets) page for the full list of available tokens and networks.
  </Accordion>

  <Accordion title="Which networks are supported?">
    ERC20 (Ethereum), TRC20 (Tron), BSC (BNB Smart Chain), SOL (Solana), and TON (The Open Network). Note that USDC is not available on TON.
  </Accordion>

  <Accordion title="How do I check my USD balance?">
    You can view your balance on the [Breet API Dashboard](https://partners.breet.io) or call [`GET /integration`](/api-reference/account/fetch-account-details) to check your balance programmatically.
  </Accordion>

  <Accordion title="How do I get USD into my Breet account?">
    There are two ways: (1) receive crypto deposits that automatically convert to USD when your wallet currency is set to USD, or (2) convert your existing NGN or GHS balance to USD from the dashboard.
  </Accordion>

  <Accordion title="Are there fees for stablecoin withdrawals?">
    Yes. Each withdrawal incurs a network fee that varies by blockchain. Call [`GET /payments/supported-assets-info`](/api-reference/assets/fetch-withdrawal-assets) to see current fees per token and network.
  </Accordion>

  <Accordion title="How do I track the withdrawal status?">
    Use the `externalId` you provided when creating the withdrawal. Listen for [webhooks](/webhooks) (`withdrawal.pending`, `withdrawal.completed`, `withdrawal.rejected`) or call [`GET /payments/withdrawal/{id}`](/api-reference/withdrawals/fetch-withdrawal-by-id) to check the status.
  </Accordion>
</AccordionGroup>
