Transfer from balance
You can pay for a transfer directly from your organisation's balance. Funds are taken from your balance once the transfer is created.
Requirements
- The quote's source is a supported balance asset: USDC or USDT on Ethereum, Polygon or Solana, or USDT on Tron.
- You hold an active deposit address on that network.
- Your balance of that asset on that network covers the source amount. Assets and networks are not pooled.
Create in the dashboard
- Start a New transfer, from the dashboard home or from a customer's page, and choose the customer.
- On Get a quote, pick the stablecoin and network you want to send from, and the currency to pay out in.
- If you hold a balance in that asset on that network, a switch appears above the amount. Select Use balance instead of Fund transfer. It shows your balance of that asset, and is disabled if the balance is zero.
- Enter the amount. It cannot exceed your balance, and the dashboard shows how much will be left after the transfer.
- Enter the Destination details and create the transfer.
No deposit address is shown. Funds are taken from your balance once the transfer is created.
Create via the API
Request a quote exactly as you would normally, then pass funding_source when creating the transfer.
Request
POST /api/v1/transfer
Idempotency-Key: <unique-idempotency-key>{
"quote_id": "550e8400-e29b-41d4-a716-446655440000",
"customer_id": "550e8400-e29b-41d4-a716-446655440001",
"funding_source": "prefund_balance",
"destination": {
"type": "bank",
"account_holder_name": "Nikos Papadopoulos",
"iban": "GR1601101250000000012300695",
"bank_name": "National Bank of Greece",
"bank_country": "GR",
"currency": "EUR",
"swift_code": "ETHNGRAA"
}
}Response
{
"id": "550e8400-e29b-41d4-a716-446655440002",
"tenant_id": "550e8400-e29b-41d4-a716-446655440003",
"customer_id": "550e8400-e29b-41d4-a716-446655440001",
"quote_id": "550e8400-e29b-41d4-a716-446655440000",
"type": "offramp",
"status": "created",
"origin": "api",
"created_at": "2026-09-16T04:12:08Z",
"updated_at": "2026-09-16T04:12:08Z",
"source": {
"amount": "1000.000000",
"currency": "usdt",
"network": "polygon",
"funding_source": "prefund_balance"
},
"source_deposit_instructions": null,
"destination": {
"account_holder_name": "Nikos Papadopoulos",
"iban": "GR1601101250000000012300695",
"bank_name": "National Bank of Greece",
"bank_country": "GR",
"currency": "EUR"
},
"exchange_rate": 0.922
}Two things to note in the response:
source.funding_sourceisprefund_balance. This marks the transfer as paid from your balance.source_deposit_instructionsisnull. There is nothing to collect, so there is no address to show anyone. Do not present a deposit target for these transfers. Thesourceobject is where the amount and asset taken from your balance are reported.
Once the transfer is created, your balance is debited and the transfer proceeds to conversion and payout.
Errors
Balance funding is checked before the transfer is created. Each of these failures returns 422, with the code as a prefix of message:
{
"statusCode": 422,
"error": "Unprocessable Entity",
"message": "PREFUND_INSUFFICIENT_BALANCE: polygon prefund balance is lower than the transfer source amount"
}| Code | Meaning |
|---|---|
PREFUND_INSUFFICIENT_BALANCE | Your balance of the source asset on the source network is below the source amount. Top up, or send a smaller amount. |
PREFUND_UNSUPPORTED_ASSET | The quote's source is not a supported balance asset. |
PREFUND_WALLET_NOT_ACTIVE | You have no active deposit address on the source network. |
PREFUND_TRANSFERS_NOT_ENABLED | Paying transfers from your balance is not enabled for your organisation. |
PREFUND_NOT_ENABLED | Balances are not enabled for your organisation. |
PREFUND_UNSUPPORTED_ROUTE | This corridor cannot be paid from a balance. |