Virtual accounts
Generate dedicated receiving account details that automatically convert deposits between currencies and settlement methods. Provide customers with unique bank accounts, IBANs, and crypto addresses for seamless payment experiences.
Overview
Virtual accounts create dedicated receiving details (bank accounts, crypto addresses) that automatically convert incoming deposits to your preferred settlement currency and method. Each virtual account is unique to a specific customer or use case, enabling automatic payment attribution without manual reference matching.
Key Features:
- Automatic conversion - Deposits convert instantly to your chosen settlement currency
- Unique attribution - Each virtual account maps to specific customers or purposes
- Multi-modal support - Fiat, crypto, and cross-network conversions
- Real-time settlement - Automatic delivery to your specified destination
Use Cases:
- Fiat-to-crypto on-ramps - Bank deposits auto-convert to stablecoins
- Cross-currency settlement - Accept one fiat currency, settle in another
- Crypto bridging - Receive on one network, settle on another network
- Crypto liquidation - Accept crypto deposits, settle to fiat accounts
How Virtual Accounts Work
- Create virtual account - Specify input method and output destination
- Receive unique details - Get dedicated bank account, IBAN, or crypto address
- Customer deposits - Funds sent to the unique receiving details
- Automatic conversion - System converts and delivers to your settlement destination
Virtual Account Types
Fiat-to-Crypto On-Ramps
Accept traditional currency deposits, deliver stablecoins to crypto addresses.
Examples:
- EUR → USDC: Provide IBAN for Euro deposits, receive USDC on Ethereum
- USD → USDC: Provide ACH details for Dollar deposits, receive USDC on Polygon
- GBP → USDC: Provide UK account for Pound deposits, receive USDC
Cross-Currency Settlement
Accept deposits in one fiat currency, settle to recipients in another currency.
Examples:
- MXN → EUR: Accept Mexican Peso deposits, settle Euros to European recipients
- USD → GBP: Accept Dollar deposits, settle Pounds to UK recipients
- Any supported pair: Automatic FX conversion with instant settlement
Crypto Bridging
Accept crypto deposits on one network, deliver to addresses on different networks.
Examples:
- USDT Tron → USDC Arbitrum: Accept USDT on Tron, deliver USDC on Arbitrum
- USDC Polygon → USDC Ethereum: Cross-network stablecoin conversion
- Multi-network support: Bridge between supported blockchain networks
Crypto Liquidation
Accept cryptocurrency deposits, automatically convert and settle to fiat accounts.
Examples:
- USDC → USD: Accept USDC deposits, settle USD to bank accounts
- USDT → EUR: Accept USDT deposits, settle EUR to SEPA recipients
- Automatic liquidation: Real-time crypto-to-fiat conversion
API Endpoints
Method | Endpoint | Purpose |
---|---|---|
POST | /virtual_accounts | Create new virtual account |
GET | /virtual_accounts | List virtual accounts with filtering |
GET | /virtual_accounts/* | Get virtual account by key |
Create Virtual Account
Generate dedicated receiving details with automatic conversion to your settlement method.
POST /virtual_accounts
Request Parameters
Field | Type | Required | Description |
---|---|---|---|
destination | string | ✅ | Crypto address or recipient ID for settlement |
schemaIn | string | ✅ | Input payment method (bank_sepa, bank_us, evm, tron) |
currencyIn | string | ✅ | Input currency (EUR, USD, USDC, USDT) |
railOut | string | ✅ | Settlement rail (ethereum, polygon, sepa, ach) |
currencyOut | string | ✅ | Output currency (USDC, EURC, EUR, USD) |
reference | string | ✅ | Your unique reference for tracking |
Examples
EUR to USDC On-Ramp:
curl -X POST https://api.due.network/v1/virtual_accounts \
-H "Authorization: Bearer your_api_key" \
-H "Due-Account-Id: your_account_id" \
-H "Content-Type: application/json" \
-d '{
"destination": "0x742d35Cc6665C6c175E8c7CaB7CeEf5634123456",
"schemaIn": "bank_sepa",
"currencyIn": "EUR",
"railOut": "ethereum",
"currencyOut": "USDC",
"reference": "customer_alice_eur_onramp"
}'
USDT Tron to USDC Arbitrum Bridge:
curl -X POST https://api.due.network/v1/virtual_accounts \
-H "Authorization: Bearer your_api_key" \
-H "Due-Account-Id: your_account_id" \
-H "Content-Type: application/json" \
-d '{
"destination": "0xabcdef1234567890abcdef1234567890abcdef12",
"schemaIn": "tron",
"currencyIn": "USDT",
"railOut": "arbitrum",
"currencyOut": "USDC",
"reference": "customer_tron_arbitrum_bridge"
}'
USDC to USD Liquidation:
curl -X POST https://api.due.network/v1/virtual_accounts \
-H "Authorization: Bearer your_api_key" \
-H "Due-Account-Id: your_account_id" \
-H "Content-Type: application/json" \
-d '{
"destination": "{recipient_id}",
"schemaIn": "evm",
"currencyIn": "USDC",
"railOut": "ach",
"currencyOut": "USD",
"reference": "crypto_profits_liquidation"
}'
Response
{
"ownerId": "{account_id}",
"destinationId": "0x742d35Cc6665C6c175E8c7CaB7CeEf5634123456",
"schemaIn": "bank_sepa",
"currencyIn": "EUR",
"railOut": "ethereum",
"currencyOut": "USDC",
"nonce": "customer_alice_eur_onramp",
"details": {
"IBAN": "DE89370400440532013000",
"bankName": "Due Payments Europe",
"beneficiaryName": "Due Payments Europe"
},
"isActive": true,
"createdAt": "2024-03-15T10:30:00Z"
}
Key Response Fields:
destinationId
- Settlement destination (crypto address or recipient ID)details
- Receiving account details to share with depositorsnonce
- Your reference for tracking (internally stored as unique identifier)isActive
- Whether the virtual account accepts deposits
List Virtual Accounts
Retrieve virtual accounts with optional filtering by configuration or reference.
curl -H "Authorization: Bearer your_api_key" \
-H "Due-Account-Id: your_account_id" \
"https://api.due.network/v1/virtual_accounts?currencyIn=EUR&railOut=ethereum"
Query Parameters
Parameter | Type | Description |
---|---|---|
destination | string | Filter by settlement destination |
schemaIn | string | Filter by input payment method |
currencyIn | string | Filter by input currency |
railOut | string | Filter by settlement rail |
currencyOut | string | Filter by output currency |
reference | string | Filter by your reference |
Get Virtual Account
Retrieve details for a specific virtual account by its unique key.
curl -H "Authorization: Bearer your_api_key" \
-H "Due-Account-Id: your_account_id" \
https://api.due.network/v1/virtual_accounts/customer_alice_eur_onramp
Discovering Available Configurations
Use the channels endpoint to find supported input and output combinations.
# Get available static deposit methods
curl -H "Authorization: Bearer your_api_key" \
-H "Due-Account-Id: your_account_id" \
https://api.due.network/v1/channels | jq '.[] | select(.type == "static_deposit")'
# Get available settlement methods (withdrawal type)
curl -H "Authorization: Bearer your_api_key" \
-H "Due-Account-Id: your_account_id" \
https://api.due.network/v1/channels | jq '.[] | select(.type == "withdrawal")'
Updated 4 days ago