Referenz
Endpoint
GET /v1/wallets/{address}/history
Liefert jeden Kauf- und Verkaufstrade der Wallet.
Anfrage
curl -N "https://veltrabot.com/v1/wallets/{address}/history" \
-H "Authorization: Bearer YOUR_API_KEY"Antwort
Ein Standardaufruf streamt die Historie als NDJSON, ein JSON-Objekt pro Zeile. Trade-Pakete treffen als { "trades": [...] } ein, sobald sie abgerufen sind, sodass sich eine große Wallet über dieselbe offene Verbindung nach und nach füllt, ohne zusätzliche Aufrufe. Eine letzte Zeile { "complete": true, "tradeCount": ..., "wallet": ..., "firstTrade": ... } beendet den 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":[ ...weitere Trades, sobald sie abgerufen sind... ],"cursor":"pW3nZ2...Kd9"}
{"complete":true,"tradeCount":354,"wallet":"BtDyZ4EF...AAu9","firstTrade":"2026-07-12T07:39:02+00:00"}Jeder Trade enthält amountSol (den SOL-Wert des Trades) und amount (die bewegte Token-Menge) sowie tokenMint, die Mint-Adresse des Tokens, ein stabiler Schlüssel je Token, da Symbole kollidieren können. Zusammen erlauben sie die Berechnung von Anschaffungskosten und realisiertem PnL. Jedes der beiden numerischen Felder kann null sein, wenn es für einen Trade nicht bestimmbar ist.
Lesen Sie die Antwort Zeile für Zeile: sammeln Sie die trades jeder Zeile und stoppen Sie bei der Zeile, die complete enthält. Die meisten Wallets werden in diesem einen Aufruf vollständig gestreamt. Eine Wallet, die zu groß ist, um in etwa 55 Sekunden fertig zu werden, endet mit complete: false und einem cursor; der Rest lädt im Hintergrund weiter.
Anhalten und fortsetzen: Schließen Sie die Verbindung jederzeit, um den Stream zu beenden (etwa über einen AbortController oder Ctrl-C). Jede Paketzeile trägt einen cursor; um dort weiterzumachen, wo Sie aufgehört haben, starten Sie einfach eine neue Anfrage mit ?cursor= gesetzt auf den zuletzt erhaltenen Cursor (ohne limit), und der Stream setzt genau an dieser Stelle fort.
Pagination
Sie bevorzugen einzelne JSON-Seiten statt des Streams? Übergeben Sie limit, dann liefert jeder Aufruf eine gewöhnliche JSON-Seite (kein NDJSON): trades begrenzt auf limit Zeilen (ohne Maximum) plus einen cursor für die nächste Seite. Senden Sie den cursor genau so zurück, wie Sie ihn erhalten haben, um die nächste Seite zu bekommen; versuchen Sie nicht, ihn zu lesen oder zu verändern. Folgen Sie ihm, bis eine Antwort keinen cursor mehr enthält, was nur passiert, wenn complete gleich true ist.
Es ist limit, das diesen Modus auswählt. Eine Anfrage mit cursor, aber ohne limit, setzt stattdessen den NDJSON-Stream fort; nehmen Sie limit daher auf jeder Seite eines paginierten Durchlaufs mit auf.
limit begrenzt, was Ihnen berechnet wird. Es deckelt den Live-Abruf: ?limit=100 holt 100 Trades und rechnet 100 auf Ihren Verbrauch an, statt die gesamte Historie der Wallet vorab zu indizieren.
totalPages entfällt, solange complete gleich false ist. Da limit den Abruf vorzeitig stoppt, ist die tatsächliche Größe einer Wallet erst nach Abschluss des Durchlaufs bekannt, und tradeCount bedeutet mitten im Durchlauf "bisher abgerufene Trades" und nicht die Gesamtzahl der Wallet. Statt eine falsche Seitenzahl zu melden, lassen wir das Feld weg: folgen Sie dem cursor, bis er fehlt. Sobald complete gleich true ist, beschreiben tradeCount und totalPages beide die vollständige Historie.
Jeder Trade zählt genau einmal auf Ihren Verbrauch. Wenn beim Blättern durch eine Wallet mit einem cursor Trades erneut gelesen werden, die Sie bereits haben, werden diese nicht noch einmal berechnet.
curl "https://veltrabot.com/v1/wallets/{address}/history?limit=100" \
-H "Authorization: Bearer YOUR_API_KEY"
curl "https://veltrabot.com/v1/wallets/{address}/history?limit=100&cursor=8kQ2mZ3rV9...tLf0X" \
-H "Authorization: Bearer YOUR_API_KEY"Chains
Der Endpoint deckt Solana, alle wichtigen EVM-Chains und Tron ab. Hängen Sie ?chain=<slug> an, um eine auszuwählen; Standard ist sol, bestehende Solana-Aufrufe bleiben also unverändert. Die Wallet-Adresse wird gegen die Adressfamilie der Chain validiert: base58 für Solana, 0x… für EVM-Chains und T… für Tron. Auf Chains außerhalb von Solana enthält amountSol die Menge des nativen Tokens (ETH/BNB/TRX und andere) statt SOL.
| Chain | ?chain= | Adresse | Status |
|---|---|---|---|
| Solana | sol | base58 | Verfügbar |
| Ethereum | eth | 0x… (EVM) | Verfügbar |
| Base | base | 0x… (EVM) | Verfügbar |
| BSC | bsc | 0x… (EVM) | Verfügbar |
| Tron | tron | T… (Tron) | Verfügbar |
| Hyperliquid | hyperevm | 0x… (EVM) | Verfügbar |
| Monad | monad | 0x… (EVM) | Verfügbar |
| Robinhood | robinhood | 0x… (EVM) | Verfügbar |