Skip to main content

Get Started in 3 Steps

1

Get Your API Key

Sign up and get your API key from the dashboard:
  1. Go to depo.to/dashboard
  2. Sign up for an account
  3. Navigate to API Keys section
  4. Click “Create API Key”
  5. Copy your key (starts with dp_)
Save your API key securely - it will only be shown once!
2

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
3

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?

Show all addresses to your users:
data.depositAddresses.forEach(({ chainName, address, asset }) => {
  console.log(`
    Chain: ${chainName}
    Address: ${address}
    Asset: ${asset}
    [Copy] [QR Code]
  `);
});
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:
React Example
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