After creating a wallet, fund it by sending USDC to the wallet’s deposit addresses.
Ground currently supports deposits in usdc only. usdt and dai
are not supported deposit tokens.
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
| Status | Terminal | Meaning |
|---|
processing | No | Deployment into yield positions in progress |
completed | Yes | Fully deployed; wallet balances updated |
failed | Yes | Deposit processing failed |
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"
}
| Field | Description |
|---|
id | Unique deposit identifier |
amount | Deposit amount as a fixed-precision decimal string |
chain | Source chain |
token | Deposited token (usdc) |
fromAddress | Sender address (when available) |
txHash | Onchain transaction hash |
status | Current status (see lifecycle table above) |
createdAt | When the deposit was first detected |
completedAt | When fully deployed (null if in progress) |
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