Get Started in 3 Steps
Get Your API Key
Sign up and get your API key from the dashboard:
Go to depo.to/dashboard
Sign up for an account
Navigate to API Keys section
Click “Create API Key”
Copy your key (starts with dp_)
Save your API key securely - it will only be shown once!
Understand Address Groups
An address group is a collection of deposit addresses across 5 blockchains, all linked to your Base wallet. When you create an address group, you specify:
Target Chain - Must be "base" (only supported destination)
Target Address - Your Base wallet address
Target Asset - Must be "USDC" (only supported asset)
You receive 5 deposit addresses (Ethereum, Arbitrum, Optimism, Polygon, Solana) that all bridge to your Base address.
Learn More Deep dive into address groups
Call the API
Generate your first address group: curl -X POST https://api.depo.to/wallet/create \
-H "Content-Type: application/json" \
-H "x-api-key: dp_your_api_key_here" \
-d '{
"targetChain": "base",
"targetAddress": "0x742d35Cc6634C0532925a3b844Bc9e7595f0bEb",
"targetAsset": "USDC"
}'
Response: {
"success" : true ,
"message" : "Deposit addresses created successfully" ,
"addressGroup" : {
"id" : "507f1f77bcf86cd799439013" ,
"targetChain" : "base" ,
"targetAddress" : "0x742d35Cc6634C0532925a3b844Bc9e7595f0bEb" ,
"targetAsset" : "USDC"
},
"depositAddresses" : [
{
"chainId" : "ethereum" ,
"chainName" : "Ethereum" ,
"address" : "0x1234567890123456789012345678901234567890" ,
"asset" : "USDC"
},
{
"chainId" : "arbitrum" ,
"chainName" : "Arbitrum" ,
"address" : "0x1111222233334444555566667777888899990000" ,
"asset" : "USDC"
},
{
"chainId" : "optimism" ,
"chainName" : "Optimism" ,
"address" : "0x9999888877776666555544443333222211110000" ,
"asset" : "USDC"
},
{
"chainId" : "polygon" ,
"chainName" : "Polygon" ,
"address" : "0x9abcdef1234567890abcdef1234567890abcdef1" ,
"asset" : "USDC"
},
{
"chainId" : "solana" ,
"chainName" : "Solana" ,
"address" : "7K8nW2PQ9yXmKhJ5vL4tR6sU1oN3pM2qA8bC9dE0fG1h" ,
"asset" : "USDC"
}
]
}
🎉 You’re Done!
You now have 5 deposit addresses (Ethereum, Arbitrum, Optimism, Polygon, Solana). Display them to your users and they can send USDC from any of these chains!
What Happens Next?
1. Display Addresses
2. User Sends USDC
3. Automatic Bridging
4. Funds Arrive on Base
Show all addresses to your users: data . depositAddresses . forEach (({ chainName , address , asset }) => {
console . log ( `
Chain: ${ chainName }
Address: ${ address }
Asset: ${ asset }
[Copy] [QR Code]
` );
});
User picks their preferred blockchain and sends USDC to that address. Please note that the minimum deposit is $10 or equivalent in the source asset. Smaller deposits will not be processed. Make sure to inform your users about this.
depo.to detects the deposit and automatically bridges to Base 💰 Deposit detected: 100 USDC on Polygon
🌉 Bridging to Base...
✅ Complete! (1-15 minutes)
USDC appears at your Base address ✅ ~99.5 USDC received (minus bridge fees)
📍 On Base network
📬 At 0x742d35Cc6634C0532925a3b844Bc9e7595f0bEb
No additional API calls needed - The monitoring and bridging happen automatically every 5 minutes in the background!
Integration Example
Here’s a complete example showing address group creation and display:
import { useState } from 'react' ;
import QRCode from 'qrcode.react' ;
function CryptoPayment ({ userBaseAddress }) {
const [ depositAddresses , setDepositAddresses ] = useState ( null );
const [ loading , setLoading ] = useState ( false );
async function generateAddresses () {
setLoading ( true );
const response = await fetch ( 'https://api.depo.to/wallet/create' , {
method: 'POST' ,
headers: {
'Content-Type' : 'application/json' ,
'x-api-key' : process . env . NEXT_PUBLIC_DEPOTO_API_KEY
},
body: JSON . stringify ({
targetChain: 'base' ,
targetAddress: userBaseAddress ,
targetAsset: 'USDC'
})
});
const data = await response . json ();
setDepositAddresses ( data . depositAddresses );
setLoading ( false );
}
if ( loading ) return < div > Generating addresses... </ div > ;
if ( ! depositAddresses ) {
return < button onClick = { generateAddresses } > Generate Deposit Addresses </ button > ;
}
return (
< div >
< h2 > Send USDC from any supported chain </ h2 >
< p > All deposits will arrive on Base network </ p >
< div className = "address-grid" >
{ depositAddresses . map (({ chainId , chainName , address , asset }) => (
< div key = { chainId } className = "address-card" >
< h3 > { chainName } </ h3 >
< p > Asset: { asset } </ p >
< QRCode value = { address } size = { 200 } />
< code > { address } </ code >
< button onClick = { () => navigator . clipboard . writeText ( address ) } >
Copy Address
</ button >
</ div >
)) }
</ div >
</ div >
);
}
Check Supported Chains
See all available blockchains:
curl https://api.depo.to/chains
Common Use Cases
// At checkout, generate addresses for this order
const payment = 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 { depositAddresses , addressGroup } = await payment . json ();
// Store with order
order . addressGroupId = addressGroup . id ;
order . depositAddresses = depositAddresses ;
order . status = 'awaiting_payment' ;
// Display to customer
showPaymentOptions ( depositAddresses );
// When user signs up, create their deposit addresses
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 { depositAddresses , addressGroup } = await response . json ();
// Save with user profile
user . addressGroupId = addressGroup . id ;
user . depositAddresses = depositAddresses ;
// Show in user dashboard
displayDepositAddresses ( depositAddresses );
// Generate payment addresses for invoice
const invoice = {
id: 'INV-001' ,
amount: 500 ,
currency: 'USDC'
};
const payment = 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: companyBaseWallet ,
targetAsset: 'USDC'
})
});
const { depositAddresses } = await payment . json ();
// Send invoice with payment options
sendInvoice ( invoice , {
amount: 500 ,
currency: 'USDC' ,
paymentAddresses: depositAddresses ,
message: 'Pay USDC from any supported chain - funds arrive on Base'
});
Next Steps