Stablecoins

Transfer funds to USDC & USDT wallets globally.

Stablecoins enable you to transact & hold digital currency globally using blockchain technology. Using this feature, customers can make transfers and complete transactions to and from their preferred wallet address.

📘

New to stablecoins or blockchain technology? Read our introduction to wallets, transfers and crypto-based settlements here.

Using this feature, you can complete fiat-to-stablecoin or stablecoin-to-fiat conversions and make stablecoin-to-stablecoin transfers. Flutterwave supports ONLY USDC/ USDT transactions on the Polygon network.


Quickstart

Let's configure your integration to make a quick USDC transfer to another address.

  1. Convert funds from your favourite fiat wallet to your USDC wallet.
curl --location 'https://api.flutterwave.com/v3/transfers' \
--header 'Authorization: Bearer YOUR-SECRET-KEY' \
--header 'Content-Type: application/json' \
--data '
{
    "account_bank": "flutterwave",
    "account_number": "10024361", // replace this with your Merchant ID.
    "debit_currency": "NGN",
    "amount": 1,
    "currency": "USDC"
}'

{
    "status": "success",
    "message": "Transfer Queued Successfully",
    "data": {
        "id": 254859,
        "account_number": 50537494,
        "bank_code": "flutterwave",
        "full_name": "Testing Settlement ",
        "created_at": "2026-01-23T08:03:34.000Z",
        "currency": "USDC",
        "debit_currency": "NGN",
        "amount": 1,
        "fee": 0.02,
        "status": "NEW",
        "reference": "e543beaedb80afc6",
        "meta": {
            "AccountId": 702952,
            "merchant_id": "00702952"
        },
        "narration": "Tada Tada",
        "complete_message": "",
        "requires_approval": 0,
        "is_approved": 1,
        "bank_name": "wallet"
    }
}


  1. Specify the recipient wallet and initiate the transfer.
curl --location 'https://api.flutterwave.com/v3/transfers' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer YOUR-SECRET-KEY' \
--data '
{
    "account_bank": "POLYGON",
    "account_number": "0xd0c7XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", //Specify the recipient's wallet address.
    "amount": 1,
    "currency": "USDC",
    "debit_currency": "USDC"
}'

{
    "status": "success",
    "message": "Transfer Queued Successfully",
    "data": {
        "id": 254858,
        "account_number": "0xd0c7XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
        "bank_code": "POLYGON",
        "full_name": "POLYGON0xd0c7XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
        "created_at": "2026-01-23T08:00:45.000Z",
        "currency": "USDC",
        "debit_currency": "USDC",
        "amount": 1,
        "fee": 0.03,
        "status": "NEW",
        "reference": "5e8312771aca2947",
        "meta": null,
        "narration": "Tada!",
        "complete_message": "",
        "requires_approval": 0,
        "is_approved": 1,
        "bank_name": "POLYGON"
    }
}


  1. Verify the transfer status.

Prerequisites

To use this successfully, you must:

  1. Retrieve your API keys from your dashboard.
  2. Use an approved F4B account i.e. your account must be live and approved for production transactions.
  3. Ensure that your balance have enough funds for the transfers.
  4. Whitelist your IP addresses.

Supported Wallets & Networks

Your Flutterwave stablecoin wallets can only make transfers to other USDT/USDC wallets on the Polygon network. Transfer attempts to wallets on Tron, Solana, Stellar or other similar networks will fail.

{
    "status": "error",
    "message": "Unsupported or unknown network specified.",
    "data": null
}


Wallet funding and Source wallets

To make successful transfers, you must have sufficient funds to complete the transactions. There are two ways to do this:

  1. Funding your USDT/USDC wallet using either your NGN or USD balance. Fund conversion from any other fiat balance would fail.
  2. Specify a fiat balance as your debit_currency when initiating your transfers. See example below.
curl --location 'https://api.flutterwave.com/v3/transfers' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer YOUR-SECRET-KEY' \
--data '
{
    "account_bank": "POLYGON",
    "account_number": "0xd0c7XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", 
    "amount": 1,
    "currency": "USDC",
    "debit_currency": "NGN" //Supported values:NGN, USD
}'


Transaction fees

You'll need to retrieve the transaction fees before initiating your transfers. Query the transaction fees endpoint using the amount and stablecoin to get the current fees.

curl --location 'https://api.flutterwave.com/v3/transfers/fee?amount=50&currency=USDT&type=crypto' \
--header 'Authorization: Bearer YOUR-SECRET-KEY'
{
    "status": "success",
    "message": "Transfer fee fetched",
    "data": [
        {
            "currency": "USDT",
            "fee_type": "value",
            "fee": 1.5
        }
    ]
}

Unlike fiat transfers, the transfer fee is removed from the transfer amount; e.g., for a 50 USDT transfer with a 1.5 USDT fee, the recipient receives 48.5 USDT (the remainder after the fee has been deducted from the transfer). For these types of transfers, a flat rate of USDT 1.5 is applied to the transfer.

For cross-currency transfers, i.e. transfers whose debit_currency is fiat, the fee is debited from your fiat balance, not your stablecoin balance. These transfers have a percentage-based fee to account for changes in exchange rates.

curl --location 'https://api.flutterwave.com/v3/transfers/fee?amount=50&currency=USDT&type=crypto&debit_currency=NGN' \
--header 'Authorization: Bearer YOUR-SECRET-KEY'
{
    "status": "success",
    "message": "Transfer fee fetched",
    "data": [
        {
            "currency": "USDT",
            "fee_type": "percentage",
            "fee": 0.75,
            "fee_amount_in_fiat_currency": 1062.585,
            "fee_amount_in_crypto_currency": 0.75,
            "amount_minus_fee": 49.25
        }
    ]
}

Best Practices

  1. Always verify the recipient's wallet address. It should be accurate and operate on the Polygon network.
  2. Query and calculate the transfer fees before you initiate a transfer. Fees are deducted from the transfer amount.
  3. Configure alerts on your account to prevent your wallet balance from running out.