Skip to main content
After creating a wallet, fund it by sending USDC to the wallet’s deposit addresses.

Fund the wallet

The wallet creation response includes depositAddresses — one address per supported chain. Send USDC to the address on your preferred chain.
to:    0x21246509968c4d24611f414560971AEc2e3A079B
chain: ethereum
token: USDC

Minimum amounts

There is no minimum deposit amount. However, small deposits may remain as undeployed cash if deploying them into yield positions is not economically efficient (considering gas costs, minimum trade sizing, and protocol constraints). This threshold varies by market conditions but is typically around $50–100 of USDC.

Sandbox

  • Use the explicit sandbox key depositAddresses.ethereum_sepolia. Fund it with Sepolia USDC from the Circle faucet.

Deposit lifecycle

StatusTerminalMeaning
processingNoGround detected the inbound USDC transaction for a workflow-idle wallet or is processing the finalized deposit
completedYesDeposit finalized and posted; wallet balances updated
failedYesDeposit processing failed
Processing deposits are informational until finality. They can appear in deposit and activity APIs shortly after the source wallet broadcasts the transfer when the destination wallet has no active Ground-managed workflow, but they are not included in balance.totalUsd, balance.withdrawableUsd, or positions until ledger posting completes. Wallets with active rebalances, withdrawals, or protocol workflows may wait until final attribution before a deposit appears. As deposits settle, the wallet’s balance.totalUsd and positions update. Deployment follows the wallet’s current strategy using the yield sources returned by the live catalog for that environment.

Deposit response

{
  "id": "2a3ad0af-11b3-41d5-96c5-2b9d8799f1e2",
  "amount": "50000.000000",
  "chain": "ethereum",
  "token": "usdc",
  "fromAddress": "0x742d35Cc6634C0532925a3b844Bc454e4438f44e",
  "txHash": "0xabc123def456789012345678901234567890abcdef1234567890abcdef123456",
  "status": "completed",
  "createdAt": "2026-02-05T09:30:00.000Z",
  "completedAt": "2026-02-05T09:45:00.000Z"
}
FieldDescription
idUnique deposit identifier; when backed by an observed onchain event, the same ID is used from processing through completed
amountDeposit amount as a fixed-precision decimal string
chainSource chain
tokenDeposited token (usdc)
fromAddressSender address (when available)
txHashOnchain transaction hash
statusCurrent status (see lifecycle table above)
createdAtWhen the deposit was first detected
completedAtWhen the deposit finalized and posted (null while processing)

List deposits

curl "$BASE_URL/v2/wallets/$WALLET_ID/deposits?limit=25" \
  -H "Authorization: Bearer $GROUND_API_TOKEN"
{
  "data": [
    {
      "id": "2a3ad0af-11b3-41d5-96c5-2b9d8799f1e2",
      "amount": "50000.000000",
      "chain": "ethereum",
      "token": "usdc",
      "fromAddress": "0x742d35Cc6634C0532925a3b844Bc454e4438f44e",
      "txHash": "0xabc123def456789012345678901234567890abcdef1234567890abcdef123456",
      "status": "completed",
      "createdAt": "2026-02-05T09:30:00.000Z",
      "completedAt": "2026-02-05T09:45:00.000Z"
    }
  ],
  "nextCursor": null
}
Supports cursor-based pagination. See API Conventions.

Fetch a deposit by ID

curl "$BASE_URL/v2/wallets/$WALLET_ID/deposits/$DEPOSIT_ID" \
  -H "Authorization: Bearer $GROUND_API_TOKEN"

Look up by transaction hash

curl "$BASE_URL/v2/wallets/$WALLET_ID/deposits/lookup?txHash=$TX_HASH" \
  -H "Authorization: Bearer $GROUND_API_TOKEN"
Optionally scope to a specific chain:
curl "$BASE_URL/v2/wallets/$WALLET_ID/deposits/lookup?txHash=$TX_HASH&chain=arbitrum" \
  -H "Authorization: Bearer $GROUND_API_TOKEN"

Deposit webhooks

Subscribe to portfolio_wallet.deposit.status_changed for real-time deposit tracking. See Webhooks.

Next steps