Skip to main content

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

1

Create Address Group

Call the API to generate addresses:
POST /wallet/create
{
  "targetChain": "base",
  "targetAddress": "0x742d35Cc6634C0532925a3b844Bc9e7595f0bEb",
  "targetAsset": "USDC"
}
2

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"
    },
    ...
  ]
}
3

Display to Users

Show all, or part of the addresses in your UI - users pick their preferred chain and send USDC to that address
4

Automatic Detection

depo.to monitors all addresses every 5 minutes for USDC deposits
5

Automatic Bridging

When USDC is sent to any address, it’s automatically bridged to Base via the integrated bridge providers
6

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)

Address Group Lifecycle

1

Creation

Address group is created via POST /wallet/create API callReturns deposit addresses for all supported source chains
2

Active Monitoring

All deposit addresses are automatically monitored every 5 minutes for USDC depositsNo action needed from you
3

Deposit Received

User sends USDC to any of the deposit addressesdepo.to detects the deposit in the next monitoring cycle (within 5 minutes)
4

Automatic Bridging

depo.to initiates bridge transfer to the destination address via the integrated bridge providersStatus: processing
5

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'
  };
}