curl --get "https://data.solanatracker.io/account/GachaNgyXTU3zFogQ8Z5jR2BLXs8215X2AtEH18VxJq3/transfers" \
--header "x-api-key: YOUR_API_KEY" \
--data-urlencode "mint=EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v" \
--data-urlencode "direction=in" \
--data-urlencode "historicPrices=true" \
--data-urlencode "limit=50"const address = "GachaNgyXTU3zFogQ8Z5jR2BLXs8215X2AtEH18VxJq3";
let cursor;
do {
const url = new URL(`https://data.solanatracker.io/account/${address}/transfers`);
url.search = new URLSearchParams({ limit: "100", historicPrices: "true", ...(cursor && { cursor }) });
const response = await fetch(url, { headers: { "x-api-key": "YOUR_API_KEY" } });
if (!response.ok) throw new Error((await response.json()).error);
const page = await response.json();
for (const t of page.transfers) {
console.log(t.direction, t.uiAmount, t.token.symbol, t.value.usd, t.signature);
}
cursor = page.pagination.next;
} while (cursor);
import { Client } from '@solana-tracker/data-api';
const client = new Client({ apiKey: 'YOUR_API_KEY' });
// USDC received over the last week, worth at least $10 at the time.
const data = await client.getAccountTransfers('FbMxP3GVq8TQ36nbYgx4NP9iygMpwAwFWJwW81ioCiSF', {
direction: 'in',
mint: 'EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v',
minValue: 10,
start: Math.floor(Date.now() / 1000) - 7 * 86400,
limit: 100,
});
// Pass grouped: true for one entry per transaction, or use
// client.iterateAccountTransfers() with the same filters to page through every result.
import requests
url = "https://data.solanatracker.io/account/{address}/transfers"
headers = {"x-api-key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://data.solanatracker.io/account/{address}/transfers",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"x-api-key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://data.solanatracker.io/account/{address}/transfers"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("x-api-key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://data.solanatracker.io/account/{address}/transfers")
.header("x-api-key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://data.solanatracker.io/account/{address}/transfers")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["x-api-key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"account": "GachaNgyXTU3zFogQ8Z5jR2BLXs8215X2AtEH18VxJq3",
"transfers": [
{
"signature": "2VxcHt8HKSt2T2EuUZLyWPsEKz4H4BPreWV28aZDEzoaHG4Fsu232oKKeQqpVqsSYaf3vv8KN7UoZ4MPJA8vw9EF",
"status": "success",
"type": "spl",
"direction": "in",
"from": {
"address": "C2RjaMN2NeYAErS6KiBjPQhHCt95J8mCmmLiQqZXPisR",
"owner": "BfG7WYmravgBhNdWpGoiFmF8L1duw2vdqdDHiZid2hoJ"
},
"to": {
"address": "D9CEogjHA6CpS12F8St9zpSco7pQKJB5uR1RqDsuzQZk",
"owner": "GachaNgyXTU3zFogQ8Z5jR2BLXs8215X2AtEH18VxJq3"
},
"token": {
"name": "USD Coin",
"symbol": "USDC",
"mint": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
"image": "https://image.solanatracker.io/proxy?url=https%3A%2F%2Fraw.githubusercontent.com%2Fsolana-labs%2Ftoken-list%2Fmain%2Fassets%2Fmainnet%2FEPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v%2Flogo.png",
"decimals": 6
},
"amount": "25000000",
"uiAmount": "25",
"decimals": 6,
"price": {
"usd": 1
},
"value": {
"usd": 25
},
"timestamp": 1792483949,
"slot": 459159504
}
],
"pagination": {
"next": "st1.eyJjIjpudWxsLCJrIjoiMlZ4Y0h0OEhLU3QyVDJFdVVaTHlXUHNFS3o0SDRCUHJlV1YyOGFaREV6b2FIRzRGc3UyMzJvS0tlUXFwVnFzU1lhZjN2djhLTjdVb1o0TVBKQTh2dzlFRjoyOi0xIn0",
"hasMore": true,
"count": 1
}
}{
"error": "<string>"
}{
"error": "<string>"
}{
"error": "<string>"
}Get Account Transfers
钱包的转账历史:转入和转出的 SOL、SPL 和 Token-2022 转账,按从新到旧排序,包含代币元数据、钱包身份,以及可选的每笔转账发生时的美元价格。
默认不包含有 DEX 活动(兑换、添加和移除流动性、领取池手续费)的交易中的转账;设置 dex=include 或 dex=only 可查看这些转账。可按代币、方向、发送方、接收方或交易对手、时间或插槽范围、数量、美元价值和交易结果筛选,也可按交易分组转账。此端点的时间戳为 Unix 秒。
每个参数只有一个名称。未知参数会返回 400,并指出正确的参数名(unknown parameter timeStart; use start),因此拼写错误不会返回未经筛选的页面。
分页: 沿 pagination.next 继续请求,直到 hasMore 为 false。每页只包含完整的交易,因此转账数可能比 limit 略多或略少。带筛选的请求每次只读取有限数量的转账,因此即使 hasMore 仍为 true,一页也可能少于 limit 条,甚至为空。
curl --get "https://data.solanatracker.io/account/GachaNgyXTU3zFogQ8Z5jR2BLXs8215X2AtEH18VxJq3/transfers" \
--header "x-api-key: YOUR_API_KEY" \
--data-urlencode "mint=EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v" \
--data-urlencode "direction=in" \
--data-urlencode "historicPrices=true" \
--data-urlencode "limit=50"const address = "GachaNgyXTU3zFogQ8Z5jR2BLXs8215X2AtEH18VxJq3";
let cursor;
do {
const url = new URL(`https://data.solanatracker.io/account/${address}/transfers`);
url.search = new URLSearchParams({ limit: "100", historicPrices: "true", ...(cursor && { cursor }) });
const response = await fetch(url, { headers: { "x-api-key": "YOUR_API_KEY" } });
if (!response.ok) throw new Error((await response.json()).error);
const page = await response.json();
for (const t of page.transfers) {
console.log(t.direction, t.uiAmount, t.token.symbol, t.value.usd, t.signature);
}
cursor = page.pagination.next;
} while (cursor);
import { Client } from '@solana-tracker/data-api';
const client = new Client({ apiKey: 'YOUR_API_KEY' });
// USDC received over the last week, worth at least $10 at the time.
const data = await client.getAccountTransfers('FbMxP3GVq8TQ36nbYgx4NP9iygMpwAwFWJwW81ioCiSF', {
direction: 'in',
mint: 'EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v',
minValue: 10,
start: Math.floor(Date.now() / 1000) - 7 * 86400,
limit: 100,
});
// Pass grouped: true for one entry per transaction, or use
// client.iterateAccountTransfers() with the same filters to page through every result.
import requests
url = "https://data.solanatracker.io/account/{address}/transfers"
headers = {"x-api-key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://data.solanatracker.io/account/{address}/transfers",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"x-api-key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://data.solanatracker.io/account/{address}/transfers"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("x-api-key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://data.solanatracker.io/account/{address}/transfers")
.header("x-api-key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://data.solanatracker.io/account/{address}/transfers")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["x-api-key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"account": "GachaNgyXTU3zFogQ8Z5jR2BLXs8215X2AtEH18VxJq3",
"transfers": [
{
"signature": "2VxcHt8HKSt2T2EuUZLyWPsEKz4H4BPreWV28aZDEzoaHG4Fsu232oKKeQqpVqsSYaf3vv8KN7UoZ4MPJA8vw9EF",
"status": "success",
"type": "spl",
"direction": "in",
"from": {
"address": "C2RjaMN2NeYAErS6KiBjPQhHCt95J8mCmmLiQqZXPisR",
"owner": "BfG7WYmravgBhNdWpGoiFmF8L1duw2vdqdDHiZid2hoJ"
},
"to": {
"address": "D9CEogjHA6CpS12F8St9zpSco7pQKJB5uR1RqDsuzQZk",
"owner": "GachaNgyXTU3zFogQ8Z5jR2BLXs8215X2AtEH18VxJq3"
},
"token": {
"name": "USD Coin",
"symbol": "USDC",
"mint": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
"image": "https://image.solanatracker.io/proxy?url=https%3A%2F%2Fraw.githubusercontent.com%2Fsolana-labs%2Ftoken-list%2Fmain%2Fassets%2Fmainnet%2FEPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v%2Flogo.png",
"decimals": 6
},
"amount": "25000000",
"uiAmount": "25",
"decimals": 6,
"price": {
"usd": 1
},
"value": {
"usd": 25
},
"timestamp": 1792483949,
"slot": 459159504
}
],
"pagination": {
"next": "st1.eyJjIjpudWxsLCJrIjoiMlZ4Y0h0OEhLU3QyVDJFdVVaTHlXUHNFS3o0SDRCUHJlV1YyOGFaREV6b2FIRzRGc3UyMzJvS0tlUXFwVnFzU1lhZjN2djhLTjdVb1o0TVBKQTh2dzlFRjoyOi0xIn0",
"hasMore": true,
"count": 1
}
}{
"error": "<string>"
}{
"error": "<string>"
}{
"error": "<string>"
}SDK Example
import { Client } from '@solana-tracker/data-api';
const client = new Client({ apiKey: 'YOUR_API_KEY' });
// USDC received over the last week, worth at least $10 at the time.
const data = await client.getAccountTransfers('FbMxP3GVq8TQ36nbYgx4NP9iygMpwAwFWJwW81ioCiSF', {
direction: 'in',
mint: 'EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v',
minValue: 10,
start: Math.floor(Date.now() / 1000) - 7 * 86400,
limit: 100,
});
// Pass grouped: true for one entry per transaction, or use
// client.iterateAccountTransfers() with the same filters to page through every result.
授权
用于鉴权的 API Key
路径参数
钱包或账户地址。SPL 转账通过该钱包拥有的代币账户匹配。
查询参数
每页转账数。每页只包含完整的交易,因此可能略多或略少。grouped=true 时改为按交易计数,除非设置了 dex=include,且未设置 type、地址、数量或插槽筛选以及 excludeZero 中的任何一个。使用 minValue 或 maxValue 时最多为 100。
1 <= x <= 1000上一页返回的 pagination.next。翻页时请保持其他参数不变。传入空的 cursor= 会返回第一页。
desc 按从新到旧返回,asc 按从旧到新返回。
desc, asc 区块时间起点,Unix 秒,包含边界值。不接受毫秒。
x >= 0区块时间终点,Unix 秒,包含边界值。不得早于 start。
x >= 0插槽起点,包含边界值。
x >= 0插槽终点,包含边界值。
x >= 0该地址接收(in)或发出(out)的转账。
all, in, out sol 表示原生 SOL 转账,spl 表示 SPL 和 Token-2022 转账(包括 wrapped SOL)。默认两者都返回。
sol, spl 仅返回此代币的转账。使用 wrapped SOL mint So11111111111111111111111111111111111111112 时会返回原生 SOL 和 wrapped SOL 转账。
交易结果:success(默认)、failed 或 any。每笔转账都有各自的 status。
success, failed, any exclude(默认)排除有 DEX 活动的交易中的所有转账,only 仅返回这些转账,include 返回全部。当交易中有转账发往或来自某个池(DEX 或发射台程序拥有的账户,或 Raydium、Meteora 的金库权限账户)时,该交易即视为有 DEX 活动:包括兑换、添加和移除流动性,以及领取手续费或奖励。该地址发出一种代币并收到另一种代币的交易也算在内。
exclude, include, only 最多 5 个发送方地址(钱包或代币账户),用英文逗号分隔。
最多 5 个接收方地址(钱包或代币账户),用英文逗号分隔。
最多 5 个任一方的地址(钱包或代币账户),用英文逗号分隔。
排除来自这些地址的转账(最多 5 个,用英文逗号分隔)。
排除发往这些地址的转账(最多 5 个,用英文逗号分隔)。
最小数量,以代币单位(uiAmount)计,包含边界值。
x >= 0最大数量,以代币单位(uiAmount)计,包含边界值。
x >= 0转账发生时的最低美元价值,包含边界值。会启用 historicPrices,且 limit 最多为 100。每页检查接下来的 limit 笔转账并返回其中匹配的转账,因此即使 hasMore 为 true,一页也可能更少,甚至为空。
x >= 0转账发生时的最高美元价值,包含边界值。会启用 historicPrices,且 limit 最多为 100。
x >= 0为每笔转账添加 price.usd 和 value.usd:代币的美元价格取自转账时或之前最近一根 1 分钟 K 线,最多早一小时,否则为 null。USDC、USDT 和 USD1 按 1 计价。不启用时,转账不包含 price 和 value。
同时返回 transactions:本页转账按交易分组,包含合计、dex 和兑换识别。
排除数量为零的转账。
响应
该地址的转账
此页面对您有帮助吗?