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

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

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

`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"
}
```

[첫 번째 요청](https://achivx.kr/academy/api/first-request/)의 헬퍼 세 개로 한 같은 호출:

**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)](https://achivx.kr/academy/concepts/labels-and-attribution/)이 그 끝에 이름을 붙인 경우 `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`: 이더리움에서 약 이틀 분량의 핫 행). 더 오래된 쪽으로 페이지를 넘기다 행이 떨어지면 기록의 끝이 아니라 [아카이브](https://achivx.kr/academy/courses/first-steps/first-steps-05-coverage-and-freshness/) 경계입니다. 빈 응답을 받은 `?tx=` 조회는 이보다 오래된 거래와 일어나지 않은 거래를 구별할 수 없으므로, unknown으로 취급하십시오.

## 필터

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

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

## 캐시

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

## Stablecoin scanner ACHIVX에서

- 실시간 [피드](https://achivx.kr/academy/courses/following-the-stablecoins/following-the-stablecoins-01-settlement-tables/): [/v1/transfers?chain=1&limit=5](https://stablescan.achivx.com/v1/transfers?chain=1&limit=5). 바이낸스(Binance) 핫월렛이 지급한 것으로 필터링: [&payer=0x28C6…1d60](https://stablescan.achivx.com/v1/transfers?chain=1&payer=0x28C6c06298d514Db089934071355E5743bf21d60&limit=5).
- 막대, 필터, 페이지 이동기가 있는 페이지로 본 같은 행: [/transactions](https://stablescan.achivx.com/transactions).

## 출처

- [REST 인터페이스의 OpenAPI 3.1 명세(API 1.4.0)](https://stablescan.achivx.com/openapi.json)
- [에이전트 매뉴얼 — agents.md(버전 2026-10-05)](https://stablescan.achivx.com/agents.md)
- [GET /v1/transfers?chain=1&limit=3(2026-10-24 조회)](https://stablescan.achivx.com/v1/transfers?chain=1&limit=3)

## 더 알아보기

- [가이드: 정산 테이블](https://achivx.kr/academy/guides/settlement-tables/)
- [get-recent-transactions는 무엇을 반환합니까?](https://achivx.kr/academy/for-agents/get-recent-transactions/)
- [기계에게 원시 행은 얼마나 과거까지 제공됩니까?](https://achivx.kr/academy/for-agents/how-far-back-raw-rows-reach/)

## 관련 질문

- [코드에서 피드를 페이지 단위로 읽고 응답을 캐시하려면 어떻게 합니까?](https://achivx.kr/academy/api/paging-and-caching-in-code/)
- [해시로 거래를 찾으려면 어떻게 합니까: /v1/verify 또는 /v1/transfers?tx=?](https://achivx.kr/academy/api/find-a-transaction/)
- [레시피: 결제가 도착했고 동결되지 않았는지 확인하기](https://achivx.kr/academy/api/recipe-confirm-a-payment/)

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

---

출처: https://achivx.kr/academy/api/settlement-feed/ · 영어 원문: https://achivx.com/academy/api/settlement-feed.html
