What is an Address Group?
An address group is a collection of deposit addresses across multiple blockchains (Ethereum, Arbitrum, Optimism, Polygon, Solana…), all linked to a Base network destination for USDC.
When you create an address group, you specify:
Target Chain - Must be "base" (only supported destination for now)
Target Address - Your Base wallet address (e.g. 0x742d35Cc6634C0532925a3b844Bc9e7595f0bEb)
Target Asset - Must be "USDC" (only supported asset)
How It Works
Create Address Group
Call the API to generate addresses: POST /wallet/create
{
"targetChain" : "base",
"targetAddress" : "0x742d35Cc6634C0532925a3b844Bc9e7595f0bEb",
"targetAsset" : "USDC"
}
Receive Deposit Addresses
Get deposit addresses for all supported source chains: {
"depositAddresses" : [
{
"chainId" : "ethereum" ,
"chainName" : "Ethereum" ,
"address" : "0x1234..." ,
"asset" : "USDC"
},
{
"chainId" : "solana" ,
"chainName" : "Solana" ,
"address" : "7K8nW2P..." ,
"asset" : "USDC"
},
...
]
}
Display to Users
Show all, or part of the addresses in your UI - users pick their preferred chain and send USDC to that address
Automatic Detection
depo.to monitors all addresses every 5 minutes for USDC deposits
Automatic Bridging
When USDC is sent to any address, it’s automatically bridged to Base via the integrated bridge providers
Receive USDC on Base
All deposits arrive at the destination address as USDC (minus bridge, gas, & swap fees, typically 1-15 minutes)
Use Cases
One address group per user // When user signs up
const response = await fetch ( 'https://api.depo.to/wallet/create' , {
method: 'POST' ,
headers: {
'Content-Type' : 'application/json' ,
'x-api-key' : API_KEY
},
body: JSON . stringify ({
targetChain: 'base' ,
targetAddress: user . baseWalletAddress ,
targetAsset: 'USDC'
})
});
const { addressGroup , depositAddresses } = await response . json ();
// Store with user
user . addressGroupId = addressGroup . id ;
user . depositAddresses = depositAddresses ;
Best for: Repeat user deposits and wallet funding (e.g. within dApps)One address group per payment // At checkout
const response = await fetch ( 'https://api.depo.to/wallet/create' , {
method: 'POST' ,
headers: {
'Content-Type' : 'application/json' ,
'x-api-key' : API_KEY
},
body: JSON . stringify ({
targetChain: 'base' ,
targetAddress: merchantBaseWallet ,
targetAsset: 'USDC'
})
});
const { addressGroup , depositAddresses } = await response . json ();
// Link to order
order . addressGroupId = addressGroup . id ;
order . depositAddresses = depositAddresses ;
Best for: E-commerce, invoices, one-time payments
Address Group Lifecycle
Creation
Address group is created via POST /wallet/create API call Returns deposit addresses for all supported source chains
Active Monitoring
All deposit addresses are automatically monitored every 5 minutes for USDC deposits No action needed from you
Deposit Received
User sends USDC to any of the deposit addresses depo.to detects the deposit in the next monitoring cycle (within 5 minutes)
Automatic Bridging
depo.to initiates bridge transfer to the destination address via the integrated bridge providers Status: processing
Bridge Complete
USDC arrives at the destination address (typically 1-15 minutes) Status: completed
Address groups remain active indefinitely - they can receive multiple deposits over time.
Best Practices
Addresses don’t change - cache them to reduce API calls: const cache = new Map ();
function getCachedAddresses ( groupId ) {
if ( ! cache . has ( groupId )) {
cache . set ( groupId , fetchAddresses ( groupId ));
}
return cache . get ( groupId );
}
Save address group IDs in your database: // Link to user/order/invoice
{
userId : '123' ,
depoToGroupId : 'group_abc123' ,
createdAt : '2025-01-31'
}
Show users all available chains: addresses . forEach ( addr => {
console . log ( `
${ addr . chainName }
${ addr . address }
[Copy] [QR Code]
` );
});
Per-user for deposit accounts
Per-transaction for one-time payments
Example Integration
Complete example showing address group creation and display:
async function setupCryptoPayment ( orderId , orderAmount ) {
// 1. Create address group
const response = await fetch ( 'https://api.depo.to/wallet/create' , {
method: 'POST' ,
headers: {
'Content-Type' : 'application/json' ,
'x-api-key' : process . env . DEPOTO_API_KEY
},
body: JSON . stringify ({
targetChain: 'base' ,
targetAddress: merchantBaseWallet ,
targetAsset: 'USDC'
})
});
const { addressGroup , depositAddresses } = await response . json ();
// 2. Display to user
return {
orderId ,
amount: orderAmount ,
currency: 'USDC' ,
addressGroupId: addressGroup . id ,
paymentOptions: depositAddresses . map (({ chainId , chainName , address , asset }) => ({
chainId ,
chainName ,
address ,
asset ,
qrCode: generateQRCode ( address )
})),
instructions: 'Send USDC from any supported chain - funds will arrive on Base'
};
}