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

  1. Create virtual account - Specify input method and output destination
  2. Receive unique details - Get dedicated bank account, IBAN, or crypto address
  3. Customer deposits - Funds sent to the unique receiving details
  4. 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

MethodEndpointPurpose
POST/virtual_accountsCreate new virtual account
GET/virtual_accountsList 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

FieldTypeRequiredDescription
destinationstringCrypto address or recipient ID for settlement
schemaInstringInput payment method (bank_sepa, bank_us, evm, tron)
currencyInstringInput currency (EUR, USD, USDC, USDT)
railOutstringSettlement rail (ethereum, polygon, sepa, ach)
currencyOutstringOutput currency (USDC, EURC, EUR, USD)
referencestringYour 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 depositors
  • nonce - 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

ParameterTypeDescription
destinationstringFilter by settlement destination
schemaInstringFilter by input payment method
currencyInstringFilter by input currency
railOutstringFilter by settlement rail
currencyOutstringFilter by output currency
referencestringFilter 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")'