Wallet value history API
GET/wallets/:chain/:address/history
What a wallet's holdings were worth over the last day, week or month; with token=, one position's balance, value and PnL over time.
Parameters
| Name | In | Type | Default | Allowed values |
|---|---|---|---|---|
chain | path | string | required | evm:56 (BSC), solana, evm:8453 (Base), evm:4663 (Robinhood Chain) or evm:1 (Ethereum) |
address | path | string | required | Wallet address (BSC) or account (Solana) |
window | query | string | 7d | 1d and 7d (hourly points), 30d (daily) |
token | query | string | none | One position's series: a token, or native (Solana) |
Response
| Field | Type | Meaning |
|---|---|---|
chain, wallet, labels, indexedSince, window, resolution | string, string, string[], number, string, string | As in every wallet answer, and the spacing of the points: 1h or 1d. |
exactSince | number | null | Unix ms after which values are exact (see the notes). Points start after it. |
block, balancesAt | number | The block (Solana: slot) the balances were read at, and when, unix ms. |
points[] | [number, number] | Without token: [t, valueUsd], ascending: each boundary of the window after exactSince, then one at balancesAt, the value now. |
points[] (token) | object | With token: t, balance (null when it cannot be established), priceUsd, valueUsd, realizedPnlUsd, unrealizedPnlUsd, totalPnlUsd at each point; balanceUnknown says why a balance is null. |
excluded[] | array | { token, reason }: tokens left out because their balance cannot be traced back. |
coverage | { transactions, complete, listedAt, stopped } | Solana: the transactions read to go back, whether they reach the window's start, and where a read bound stopped. |
note | string | What is left out, in words. |
Example
Captured 2026-09-28 18:03 UTC on a test instance, trimmed to the last 3 points.
curl -s -H 'Authorization: Bearer <key>' 'https://app.aurelia.build/api/wallets/evm:56/0x3304e22ddaa22bcdc5fca2269b418046ae7b566a/history?window=1d'
{
"labels": [
"sniper",
"fresh"
],
"chain": "evm:56",
"wallet": "0x3304e22ddaa22bcdc5fca2269b418046ae7b566a",
"indexedSince": 1790546261920,
"window": "1d",
"resolution": "1h",
"exactSince": 1790546862000,
"block": 1000748,
"balancesAt": 1790618266812,
"points": [
[
1790611200000,
129906
],
[
1790614800000,
132544.89795918367
],
[
1790618266812,
129300
]
],
"excluded": [],
"note": "Tokens only: native BNB / ETH is left out, since gas and internal transfers change it without a transfer the index sees, and the chain's endpoints keep no past balances to read it at each point."
}
Notes
- The balances now are the portfolio's chain read. A value at a point is each token's balance then, at its price in the hour before (the busiest priced pool that hour), counted as in the portfolio's total.
- BSC: balances go back through the indexed transfers since each point, so values are exact only while the index holds every transfer since then: after the chain's first indexed block, its last skipped range and the start of per-wallet transfers (kept 30 days). Native BNB is left out: gas and internal transfers change it without a transfer the index sees, and the node keeps no past state to read it (
token=nativeanswers422). - Solana: balances go back through each of the wallet's transactions since the point, read from the chain (exact: SOL and token balances before and after), native SOL included. Points start after the oldest transaction a request could read; a later request reads further back. A token whose transactions do not link up changed in a transaction that does not name the wallet: it is left out, with the reason.
422while indexing has not reached the block the balances were read at, or for a wallet that moved too much to value in one request;502when the chain cannot be read;503while Solana's read budget is spent. Cached 30 s.