Справочник

Эндпоинт

GET /v1/wallets/{address}/history

Возвращает каждую сделку покупки и продажи для кошелька.

Запрос

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

Ответ

Вызов по умолчанию передаёт историю в формате NDJSON, по одному JSON-объекту на строку. Пакеты сделок приходят как { "trades": [...] } в момент получения, поэтому крупный кошелёк постепенно заполняется по одному открытому соединению без дополнительных вызовов. Финальная строка { "complete": true, "tradeCount": ..., "wallet": ..., "firstTrade": ... } завершает поток.

{"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":[ ...ещё сделки по мере получения... ],"cursor":"pW3nZ2...Kd9"}
{"complete":true,"tradeCount":354,"wallet":"BtDyZ4EF...AAu9","firstTrade":"2026-07-12T07:39:02+00:00"}

Каждая сделка содержит amountSol (стоимость сделки в SOL) и amount (перемещённое количество токена), а также tokenMint — адрес mint токена, стабильный ключ на токен, поскольку символы могут совпадать. Вместе они позволяют вычислить себестоимость и реализованный PnL. Любое из числовых полей может быть null, если его нельзя определить для конкретной сделки.

Читайте ответ построчно: накапливайте trades из каждой строки и остановитесь, дойдя до строки с complete. Большинство кошельков передаются полностью за один такой вызов. Кошелёк, слишком большой, чтобы завершиться примерно за 55 секунд, заканчивается с complete: false и cursor, а остальное продолжает загружаться в фоне.

Остановка и возобновление: закройте соединение в любой момент, чтобы прервать поток (например, через AbortController или Ctrl-C). Каждая пакетная строка содержит cursor, поэтому чтобы продолжить с того же места, просто начните новый запрос с ?cursor=, равным последнему полученному cursor (без limit), и поток возобновится ровно с этой точки.

Постраничная выдача

Предпочитаете отдельные страницы в едином JSON вместо потока? Передайте limit, и каждый вызов вернёт обычную JSON-страницу (не NDJSON): trades ограничен limit строками (без максимума) плюс cursor для следующей страницы. Отправьте cursor обратно ровно в том виде, в каком получили, чтобы получить следующую страницу; не пытайтесь его прочитать или изменить. Следуйте за ним, пока ответ не перестанет содержать cursor, что происходит только когда complete равно true.

Именно limit выбирает этот режим. Запрос с cursor, но без limit, вместо этого возобновляет поток NDJSON, поэтому включайте limit на каждой странице постраничного обхода.

limit ограничивает то, за что вы платите. Он ограничивает живую загрузку: ?limit=100 получает 100 сделок и засчитывает 100 в ваше потребление, вместо того чтобы заранее индексировать всю историю кошелька.

totalPages опускается, пока complete равно false. Поскольку limit останавливает загрузку раньше времени, истинный размер кошелька неизвестен до конца обхода, а tradeCount в середине означает «сделок получено на данный момент», а не общее число у кошелька. Вместо того чтобы сообщать неверное количество страниц, мы опускаем поле: следуйте за cursor, пока он не исчезнет. Как только complete станет true, и tradeCount, и totalPages описывают полную историю.

Каждая сделка засчитывается в потребление один раз. Если при постраничном обходе с cursor заново читаются уже полученные сделки, они не тарифицируются повторно.

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"

Сети

Эндпоинт охватывает Solana, все основные EVM-сети и Tron. Добавьте ?chain=<slug>, чтобы выбрать одну из них; по умолчанию используется sol, поэтому существующие вызовы для Solana не меняются. Адрес кошелька проверяется на соответствие семейству адресов сети: base58 для Solana, 0x… для EVM-сетей и T… для Tron. В сетях, отличных от Solana, amountSol содержит количество нативного токена (ETH/BNB/TRX и других), а не SOL.

Сеть?chain=АдресСтатус
Solanasolbase58Доступна
Ethereumeth0x… (EVM)Доступна
Basebase0x… (EVM)Доступна
BSCbsc0x… (EVM)Доступна
TrontronT… (Tron)Доступна
Hyperliquidhyperevm0x… (EVM)Доступна
Monadmonad0x… (EVM)Доступна
Robinhoodrobinhood0x… (EVM)Доступна

Поддержка