정산 피드를 읽고 주소, 토큰, 블록으로 필터링하려면 어떻게 합니까?

전송과 거래 · 스캐너가 정산한 모든 스테이블코인 전송을 최신순으로, 지급자, 수신자, 토큰, 블록, 확정성으로 필터링

  • API 가이드
  • 9분
  • 중급
  • 개발자
  • GET /v1/transfers

ACHIVX Academy 원문 (영어) ↗

GET /v1/transfers?chain=이 피드입니다. 한 네트워크의 스테이블코인 전송을 최신순으로, 한 페이지에 50개씩(1–200) 제공하며, 각 행에는 tx_hash, block_number, block_time, payer, recipient, decimals가 포함된 amount 객체, token 컨트랙트, finality, 양쪽 끝의 라벨이 있습니다. payer=, recipient=, token=, block=, finality=로 필터링하고, cursor=로 페이지를 넘깁니다. 이 주소가 관련된 필터는 없습니다 — payer와 recipient를 따로 조회해 합치십시오. 첫 페이지에는 total(25,000에서 상한)과 hot_window_start가 있습니다. 더 오래된 행은 없는 것이 아니라 보관 처리된 것입니다.

요청

curl -s 'https://stablescan.achivx.com/v1/transfers?chain=1&limit=3'

이더리움(Ethereum), 2026-10-24 10:45 UTC:

{
  "items": [
    {"tx_hash": "0x2b3252e52889309dcf91d8b24034d28a01d247e6229189e05e16409a1eb12ac3", "log_index": 483,
     "block_number": 26261992, "block_time": "2026-10-24T10:45:23Z",
     "payer": "0x4299e0cc76db02763a5dd5b737d8bcbc878e6ccb",
     "recipient": "0x6872b6630a3afcd3117191a8403c2002e13df7de", "recipient_name": "Unidentified custodial service 0x6872b663",
     "recipient_category": "custodial", "recipient_is_service": true,
     "amount": {"amount": "1047600000", "decimals": 6, "token": "USDC"},
     "token": "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48",
     "finality": "pending",
     "usd_amount": 1047.6},
    {"tx_hash": "0xb050f766…0e6c", "log_index": 454, "block_number": 26261992, "block_time": "2026-10-24T10:45:23Z",
     "payer": "0x10a456be…9db5", "recipient": "0xad33886c…169a",
     "amount": {"amount": "3000000000", "decimals": 6, "token": "USDT"}, "token": "0xdac17f95…1ec7", "finality": "pending"},
    {"…": "…"}
  ],
  "next_cursor": "MTc5MjgzODcyMzAwMDAwMDAwMDo0NDc6NzFkOGU5ODli…",
  "total": 25000,
  "capped": true,
  "hot_window_start": "2026-10-22T00:00:00Z"
}

첫 번째 요청의 헬퍼 세 개로 한 같은 호출:

Python

page = scan("/v1/transfers", chain=1, recipient=addr, token="USDC", limit=50)
for row in page["items"]:
    units = int(row["amount"]["amount"]); dec = row["amount"]["decimals"]
    print(row["block_time"], row["payer"], "->", row["recipient"], units / 10**dec, row["amount"]["token"], row["finality"])
print("matching rows:", page.get("total"), "archived before:", page.get("hot_window_start"))

Go

type transfer struct {
	TxHash      string    `json:"tx_hash"`
	BlockNumber int64     `json:"block_number"`
	BlockTime   time.Time `json:"block_time"`
	Payer       string    `json:"payer"`
	Recipient   string    `json:"recipient"`
	Amount      struct {
		Amount   string `json:"amount"`
		Decimals int    `json:"decimals"`
		Token    string `json:"token"`
	} `json:"amount"`
	Finality string `json:"finality"`
}
var page struct {
	Items          []transfer `json:"items"`
	NextCursor     string     `json:"next_cursor"`
	Total          *int64     `json:"total"`
	HotWindowStart string     `json:"hot_window_start"`
}
q := url.Values{"chain": {"1"}, "recipient": {addr}, "token": {"USDC"}, "limit": {"50"}}
if err := get("/v1/transfers", q, &page); err != nil {
	return err
}

TypeScript

type Transfer = {
  tx_hash: string; log_index: number; block_number: number; block_time: string;
  payer: string; recipient: string; payer_name?: string; recipient_name?: string;
  amount: { amount: string; decimals: number; token: string }; token: string;
  finality: "final" | "pending"; usd_amount?: number;
};
type Page = { items: Transfer[]; next_cursor?: string; prev_cursor?: string; total?: number | null; total_unavailable_reason?: string; capped?: boolean; hot_window_start?: string };
const page = await scan<Page>("/v1/transfers", { chain: 1, recipient: addr, token: "USDC", limit: 50 });

필드별 설명

items[] — 거래당이 아니라 전송당 한 행입니다. 스테이블코인 전송이 두 개인 거래는 tx_hash가 같고 log_index가 다른 두 행입니다(2026-10-24의 솔라나 페이지가 정확히 그랬습니다). payer와 recipient는 네트워크의 표기 방식을 따릅니다. 라벨 목록(label book)이 그 끝에 이름을 붙인 경우 payer_name, payer_category, payer_is_service와 그 수신자 쪽 짝이 나타납니다. amount.amount는 최소 단위 문자열이며 amount.decimals와 함께, 심볼은 amount.token에 있습니다. 그 옆의 token은 컨트랙트 주소입니다. usd_amount는 표시용으로 같은 전송을 일반 십진수로 나타낸 것이며, 페그가 신뢰할 만할 때 있습니다. finality는 final 또는 pending입니다.

next_cursor, prev_cursor — 불투명한 값입니다. 같은 필터와 함께 cursor=로 되돌려 보내십시오. total은 첫 페이지(커서 없음)에만 있습니다. 일치하는 행의 개수이며, 일치하는 것이 없으면 0, 집계가 거기서 멈추면 "capped": true와 함께 25000, 끝나지 않으면 total_unavailable_reason: "timeout"과 함께 null입니다 — 행은 실제이므로 계속 페이지를 넘기십시오. 그 페이지는 no-store입니다.

hot_window_start — 그 이전의 원시 전송이 콜드 아카이브로 옮겨진 시점입니다(그날은 2026-10-22T00:00:00Z: 이더리움에서 약 이틀 분량의 핫 행). 더 오래된 쪽으로 페이지를 넘기다 행이 떨어지면 기록의 끝이 아니라 아카이브 경계입니다. 빈 응답을 받은 ?tx= 조회는 이보다 오래된 거래와 일어나지 않은 거래를 구별할 수 없으므로, unknown으로 취급하십시오.

필터

매개변수기능참고
chain네트워크넘기십시오. 없으면 피드는 베이스(Base)의 것입니다
payer, recipient한쪽 끝, 네트워크의 표기 방식으로결합 필터 없음: 둘 다 조회해 tx_hash + log_index로 합치십시오
token심볼 또는 컨트랙트 주소USDT는 USDT0이 아닙니다
tx한 거래의 전송응답에 chain_id와 chain_source가 설정됩니다. 거래 찾기를 참고하십시오
block한 블록의 전송양의 블록 번호. 이 경우 total은 정확합니다(블록 26261992에서 31행)
finalityfinal 또는 pending기본적으로 둘 다 나열됩니다
dirolder(기본값) 또는 newer커서와 함께 newer를 쓰면 앞으로 페이지를 넘깁니다
limit1–200, 기본값 50그 외의 값은 400 invalid_limit
cursor이전 페이지의 next_cursor같은 필터와 함께, 아니면 400 invalid_cursor
offset기존 오프셋 페이지 이동cursor를 권장합니다

이것이 전부입니다. 다른 매개변수는 모두 400 unknown_param이며, 메시지에 허용되는 매개변수가 나열됩니다.

캐시

Cache-Control: public, max-age=15 — 피드는 15초 단위로 최신입니다. EVM 네트워크의 가장 최근 행은 몇 블록 동안 pending입니다. 정산 결정에는 finality: "final"이 필요하거나, 네트워크의 확정성 이후 한 번 더 확인해야 합니다(그 시각 이더리움의 확정된 블록은 헤드보다 74블록 뒤처져 있었으며, 동기화 상태가 그 차이를 알려 줍니다).

Stablecoin scanner ACHIVX에서

출처

더 알아보기

전송과 거래 · GET /v1/transfers · 2026-10-24 작성, openapi.json, agents.md 및 당일 실제 호출 기반. 구조는 인용한 것이며, 수치는 날짜 기준이고 인덱스에 따라 바뀝니다.

이 페이지는 ACHIVX Academy 영어 원문을 한국어로 옮긴 것입니다. 번역과 원문이 다르면 영어 원문이 기준입니다.