Referencia

Endpoint

GET /v1/wallets/{address}/history

Devuelve todos los trades de compra y venta de la wallet.

Petición

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

Respuesta

Una llamada por defecto transmite el historial en NDJSON, un objeto JSON por línea. Los lotes de trades llegan como { "trades": [...] } en cuanto se obtienen, de modo que una wallet grande se va rellenando de forma progresiva sobre una única conexión abierta y sin llamadas adicionales. Una línea final { "complete": true, "tradeCount": ..., "wallet": ..., "firstTrade": ... } cierra el 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":[ ...más trades a medida que se obtienen... ],"cursor":"pW3nZ2...Kd9"}
{"complete":true,"tradeCount":354,"wallet":"BtDyZ4EF...AAu9","firstTrade":"2026-07-12T07:39:02+00:00"}

Cada trade incluye amountSol (el valor en SOL del trade) y amount (la cantidad de token movida), además de tokenMint, la dirección del mint del token, una clave estable por token dado que los símbolos pueden coincidir. Juntos permiten calcular el coste base y el PnL realizado. Cualquiera de los dos campos numéricos puede ser null cuando no se puede determinar para un trade.

Lee la respuesta línea a línea: acumula el campo trades de cada línea y detente al llegar a la línea que incluye complete. La mayoría de wallets se transmiten por completo en esa única llamada. Una wallet demasiado grande para terminar en unos 55 segundos acaba con complete: false y un cursor, y el resto se sigue cargando en segundo plano.

Detener y reanudar: cierra la conexión en cualquier momento para parar el stream (por ejemplo con un AbortController o con Ctrl-C). Cada línea de lote incluye un cursor, así que para retomar donde lo dejaste basta con iniciar una nueva petición con ?cursor= fijado al último cursor recibido (sin limit), y el stream se reanuda exactamente en ese punto.

Paginación

¿Prefieres páginas discretas en JSON único en lugar del stream? Pasa limit y cada llamada devuelve una página JSON normal (no NDJSON): trades limitado a limit filas (sin máximo) más un cursor para la página siguiente. Devuelve el cursor exactamente como lo recibiste para obtener la página siguiente, sin intentar leerlo ni modificarlo. Síguelo hasta que una respuesta omita cursor, lo que solo ocurre cuando complete es true.

limit es lo que selecciona este modo. Una petición que lleva cursor pero no limit reanuda el stream NDJSON, así que incluye limit en cada página de un recorrido paginado.

limit acota lo que se te cobra. Limita la obtención en vivo: ?limit=100 obtiene 100 trades y cuenta 100 contra tu uso, en lugar de indexar por adelantado todo el historial de la wallet.

totalPages se omite mientras complete sea false. Como limit detiene la obtención antes de tiempo, el tamaño real de una wallet no se conoce hasta que termina el recorrido, y tradeCount a mitad de recorrido significa "trades obtenidos hasta ahora" y no el total de la wallet. En lugar de informar de un número de páginas incorrecto, dejamos el campo fuera: sigue el cursor hasta que desaparezca. Una vez que complete es true, tanto tradeCount como totalPages describen el historial completo.

Cada trade cuenta una sola vez contra tu uso. Cuando al paginar una wallet con un cursor se vuelven a leer trades que ya tenías, esos trades no se cobran de nuevo.

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

El endpoint cubre Solana, todas las principales chains EVM y Tron. Añade ?chain=<slug> para seleccionar una. Por defecto es sol, así que las llamadas existentes de Solana no cambian. La dirección de la wallet se valida contra la familia de direcciones de la chain: base58 para Solana, 0x… para chains EVM y T… para Tron. En chains distintas de Solana, amountSol contiene la cantidad del token nativo (ETH/BNB/TRX u otro) en lugar de SOL.

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

Soporte