Référence

Endpoint

GET /v1/wallets/{address}/history

Renvoie chaque trade d’achat et de vente du wallet.

Requête

curl -N "https://veltrabot.com/v1/wallets/{address}/history" \
  -H "Authorization: Bearer YOUR_API_KEY"

Réponse

Un appel par défaut diffuse l’historique en NDJSON, un objet JSON par ligne. Les lots de trades arrivent sous la forme { "trades": [...] } dès qu’ils sont récupérés, si bien qu’un gros wallet se remplit progressivement sur la même connexion ouverte, sans appels supplémentaires. Une ligne finale { "complete": true, "tradeCount": ..., "wallet": ..., "firstTrade": ... } termine le flux.

{"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":[ ...d’autres trades au fil de la récupération... ],"cursor":"pW3nZ2...Kd9"}
{"complete":true,"tradeCount":354,"wallet":"BtDyZ4EF...AAu9","firstTrade":"2026-07-12T07:39:02+00:00"}

Chaque trade porte amountSol (la valeur du trade en SOL) et amount (la quantité de token déplacée), ainsi que tokenMint, l’adresse de mint du token, une clé stable par token puisque les symboles peuvent se chevaucher. Ensemble, ils permettent de calculer le prix de revient et le PnL réalisé. L’un ou l’autre de ces champs numériques peut valoir null lorsqu’il ne peut pas être déterminé pour un trade.

Lisez la réponse ligne par ligne : accumulez le champ trades de chaque ligne et arrêtez-vous en atteignant la ligne qui porte complete. La plupart des wallets sont diffusés intégralement lors de cet unique appel. Un wallet trop volumineux pour se terminer en environ 55 secondes s’achève avec complete: false et un cursor, le reste continuant à se charger en arrière-plan.

Arrêt et reprise : fermez la connexion à tout moment pour interrompre le flux (par exemple avec un AbortController ou Ctrl-C). Chaque ligne de lot porte un cursor : pour reprendre là où vous en étiez, lancez simplement une nouvelle requête avec ?cursor= réglé sur le dernier cursor reçu (sans limit), et le flux repart exactement de ce point.

Pagination

Vous préférez des pages distinctes en JSON unique plutôt que le flux ? Passez limit et chaque appel renvoie une page JSON ordinaire (pas du NDJSON) : trades limité à limit lignes (sans maximum) plus un cursor pour la page suivante. Renvoyez le cursor exactement tel que vous l’avez reçu pour obtenir la page suivante, sans chercher à le lire ni à le modifier. Suivez-le jusqu’à ce qu’une réponse n’inclue plus de cursor, ce qui n’arrive que lorsque complete vaut true.

C’est limit qui sélectionne ce mode. Une requête portant cursor mais pas limit relance le flux NDJSON : incluez donc limit sur chaque page d’un parcours paginé.

limit borne ce qui vous est facturé. Il plafonne la récupération en direct : ?limit=100 récupère 100 trades et en compte 100 sur votre consommation, au lieu d’indexer d’emblée tout l’historique du wallet.

totalPages est omis tant que complete vaut false. Puisque limit interrompt la récupération plus tôt, la taille réelle d’un wallet n’est connue qu’une fois le parcours terminé, et tradeCount en cours de route signifie « trades récupérés jusqu’ici » et non le total du wallet. Plutôt que d’annoncer un nombre de pages erroné, nous omettons le champ : suivez le cursor jusqu’à sa disparition. Une fois complete à true, tradeCount et totalPages décrivent tous deux l’historique complet.

Chaque trade ne compte qu’une fois dans votre consommation. Lorsqu’une pagination avec cursor relit des trades que vous possédez déjà, ceux-ci ne sont pas refacturés.

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

L’endpoint couvre Solana, toutes les grandes chains EVM et Tron. Ajoutez ?chain=<slug> pour en sélectionner une ; la valeur par défaut est sol, si bien que les appels Solana existants restent inchangés. L’adresse du wallet est validée par rapport à la famille d’adresses de la chain : base58 pour Solana, 0x… pour les chains EVM et T… pour Tron. Sur les chains autres que Solana, amountSol porte la quantité du token natif (ETH/BNB/TRX et autres) plutôt que du SOL.

Chain?chain=AdresseStatut
Solanasolbase58Disponible
Ethereumeth0x… (EVM)Disponible
Basebase0x… (EVM)Disponible
BSCbsc0x… (EVM)Disponible
TrontronT… (Tron)Disponible
Hyperliquidhyperevm0x… (EVM)Disponible
Monadmonad0x… (EVM)Disponible
Robinhoodrobinhood0x… (EVM)Disponible

Support