Wallet Get
Read the addresses and balances of a user's wallet across every supported network.
POST /api/wallet/get
Returns the API key user's wallet — addresses per network and the latest known balance for each asset. Use it to power dashboards, deposit screens, and pre-flight checks before a transfer or payout.
Balances are read from Hodle's synced view — the same numbers the wallet UI shows. To force a fresh on-chain read, pass
sync: true.
Request
The API key identifies the owner. Pass walletId to read a specific wallet created by the API, and subAccountId when it belongs to a customer. Without walletId, addresses and balances use the existing per-network selection. The same fields are accepted as query parameters on GET /api/wallet.
curl --request POST \
--url https://api.hodle.com.br/api/wallet/get \
--header "Authorization: Bearer $API_KEY" \
--header "Content-Type: application/json" \
--data '{ "sync": false }'const res = await fetch('https://api.hodle.com.br/api/wallet/get', {
method: 'POST',
headers: {
Authorization: `Bearer ${process.env.HODLE_API_KEY}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({ sync: false }),
})
const data = await res.json()import os, requests
res = requests.post(
"https://api.hodle.com.br/api/wallet/get",
headers={
"Authorization": f"Bearer {os.environ['HODLE_API_KEY']}",
"Content-Type": "application/json",
},
json={"sync": False},
)
data = res.json()Parameters
| Field | Type | Required | Description |
|---|---|---|---|
walletId | string | No | Wallet ID returned as data.id by /api/wallet/create. Must belong to the selected owner/subaccount; unknown, removed or foreign IDs return 404. |
subAccountId | string | No | Owned subaccount containing the wallet. Omit for the API key owner’s own wallet. |
sync | boolean | No | If true, fetches a fresh balance from each chain before returning. Default false. |
A read with walletId also returns data.walletId. See Wallet Keys for creating a protected wallet and selecting it in operations.
Response
{
"success": true,
"data": {
"subAccountId": "5b9f1a83b6b7c2b001f3c9e21",
"addresses": {
"polygon": "0x4b1f...c9a2",
"base": "0x4b1f...c9a2",
"tron": "TQHvP...kZ8",
"solana": "9xQeW...VFin",
"spark": "spark1pgss92n427yh3ghz5dq0j93ph3p9lrmhy7enrus02uusmd6ktlx23t88en8f8j",
"sparkLightning": "you@hodle.com.br"
},
"balances": [
{ "network": "polygon", "asset": "USDT", "amount": "182.45" },
{ "network": "polygon", "asset": "USDC", "amount": "0.00" },
{ "network": "polygon", "asset": "BRLA", "amount": "2.02" },
{ "network": "base", "asset": "USDC", "amount": "0.00" },
{ "network": "base", "asset": "BRLA", "amount": "0.00" },
{ "network": "tron", "asset": "USDT", "amount": "0.00" },
{ "network": "solana", "asset": "USDT", "amount": "0.00" },
{ "network": "solana", "asset": "USDC", "amount": "12.34" },
{ "network": "solana", "asset": "BRS", "amount": "0.00" },
{ "network": "spark", "asset": "USDB", "amount": "0.00" }
],
"syncedAt": "2026-05-09T22:14:00.000Z"
}
}| Field | Type | Description |
|---|---|---|
addresses | object | Receive addresses per network. EVM networks share the same smart-account address. spark is the bech32m Spark address (spark1…); sparkLightning is the same wallet's Lightning address. |
balances | array | One row per (network, asset) the user has ever held. |
syncedAt | string | ISO timestamp of the last successful chain read. |
Networks and assets
| Network | Asset(s) | Notes |
|---|---|---|
polygon | USDT, USDC, BRLA (ERC-20) | Smart account, gas sponsored. |
base | USDC, BRLA | Smart account, gas sponsored. |
tron | USDT (TRC-20) | Energy + bandwidth covered by Hodle. |
solana | USDT, USDC, BRS (SPL) | Network fee paid by Hodle's master wallet. BRS requires the NORA_RAIL flag. Rows appear only once the wallet has a Solana address. |
spark | USDB, BTC, DEPIX | Self-custodial Spark wallet. addresses.spark (a spark1… address) receives DePix and BTC — see Deposit Asset; addresses.sparkLightning drives the Lightning ↔ PIX flow. Both keys are omitted until the wallet has registered a Spark identity, which happens the first time its owner unlocks it. |
Errors
{ "success": false, "error": "Unauthorized" }{ "success": false, "error": "Wallet not found" }If the user has just been created and you have not called POST /api/wallet/create yet, this endpoint returns 404.