Reference
Endpoint
GET /v1/wallets/{address}/history
Returns every buy/sell trade for the wallet.
Request
curl -N "https://veltrabot.com/v1/wallets/{address}/history" \
-H "Authorization: Bearer YOUR_API_KEY"Response
A default call streams the history as NDJSON — one JSON object per line. Trade batches arrive as { "trades": [...] } the moment they're fetched, so a large wallet fills in gradually over the one open connection with no extra calls. A final line { "complete": true, "tradeCount": ..., "wallet": ..., "firstTrade": ... } ends the stream.
{"trades":[{"signature":"43C6...aY1Ve2X","side":"sell","token":"Benny","tokenMint":"9xY2...pump","amountSol":0.0448,"amount":152340.12,"dex":"Pump.fun","blockTime":"2026-07-19T07:37:17+00:00"}, ...],"cursor":"8kQ2mZ...f0X"}
{"trades":[ ...more trades as they're fetched... ],"cursor":"pW3nZ2...Kd9"}
{"complete":true,"tradeCount":354,"wallet":"BtDyZ4EF...AAu9","firstTrade":"2026-07-12T07:39:02+00:00"}Each trade carries amountSol (the SOL value of the trade) and amount (the token quantity moved), plus tokenMint — the token's mint address, a stable per-token key since symbols can collide. Together they let you compute cost basis and realized PnL. Either numeric field may be null when it can't be determined for a trade.
Read the response line by line: accumulate every line's trades, and stop when you hit the line carrying complete. Most wallets stream in full on that single call. A wallet too large to finish within about 55 seconds ends with complete: false and a cursor — the rest keeps loading in the background.
Stopping & resuming: close the connection any time to stop the stream (e.g. an AbortController, or Ctrl-C). Every batch line carries a cursor, so to pick up where you left off just start a new request with ?cursor= set to the last cursor you received (no limit) — the stream resumes from exactly that point.
See Response Times for how long a lookup takes.
Pagination
Prefer discrete, single-JSON pages over the stream? Pass limit and/or cursor and each call returns one ordinary JSON page (not NDJSON): trades capped to limit rows (default 1,000, no maximum) plus a cursor for the next page. Send the cursor back exactly as you received it to get the next page — don't try to read or change it. Follow it until a response omits cursor, which happens only when complete is true. For a still-loading wallet you'll keep getting a cursor even at the end of what's stored so far; if a page comes back empty with complete: false, wait a moment and re-request that same cursor to pick up newly-loaded trades. Every trade counts toward your usage once. When paging through a wallet with a cursor re-reads trades you already have, those trades don't count again.
For a very large wallet still loading, each page reports complete: false until loading finishes — so a missing cursor marks the end of the full history only when complete is true. While it's false, more trades are still landing; re-request shortly and continue.
curl "https://veltrabot.com/v1/wallets/{address}/history?limit=100" \
-H "Authorization: Bearer YOUR_API_KEY"
{
"wallet": "BtDyZ4EFJz7poZVNVcDQCaQqWVADseVuYMmaq5fbAAu9",
"complete": false,
"tradeCount": 354,
"pageSize": 100,
"totalPages": 4,
"trades": [ /* 100 trades */ ],
"cursor": "8kQ2mZ3rV9...tLf0X"
}
curl "https://veltrabot.com/v1/wallets/{address}/history?limit=100&cursor=8kQ2mZ3rV9...tLf0X" \
-H "Authorization: Bearer YOUR_API_KEY"Chains
The endpoint covers Solana, every major EVM chain, and Tron. Add ?chain=<slug> to select one — it defaults to sol, so existing Solana calls are unchanged. The wallet address is validated against the chain's address family: base58 for Solana, 0x… for EVM chains, and T… for Tron. On non-Solana chains, amountSol carries the native token amount (ETH/BNB/TRX/…) rather than SOL.
| Chain | ?chain= | Address | Status |
|---|---|---|---|
| Solana | sol | base58 | Live |
| Ethereum | eth | 0x… (EVM) | Live |
| Base | base | 0x… (EVM) | Live |
| BSC | bsc | 0x… (EVM) | Live |
| Tron | tron | T… (Tron) | Live |
| Hyperliquid | hyperevm | 0x… (EVM) | Live |
| Monad | monad | 0x… (EVM) | Live |
| Robinhood | robinhood | 0x… (EVM) | Live |