Skip to main content
GET
GET /v1/token/trades · 1 credit POST /v1/token/trades · 1 credit
Live: the trades stream channel pushes these rows as they land, token-wide or on a pool subset, same shape.
Real-time trade tape. maker is the trader behind the swap: when a wallet trades through a relay, a solver or a smart account, the row is attributed to that wallet, otherwise to the transaction sender. Every row carries isProTrader/isSniper badges, and isWash on Solana. On Base, preconfirmed (flashblocks) trades appear ~2.5s before block commit, flagged per row. Token-wide by default - pass pools= to restrict. Use the POST twin for the makers[] filter (up to 2000 addresses, beyond the URL length cap).
One row per swap event. On EVM a swap routed through several pools of the token yields one row per pool, all sharing txHash (id is txHash:logIndex): group by txHash for a per-transaction view. On Solana the legs of a transaction are aggregated into one row per transaction and side (id is signature:b or signature:s). Every row names its market in poolAddress: the pool of the swap event on EVM, the pool carrying the largest leg of the side on Solana.
Pagination. Each page is bounded by limit and by a scan window over the tape: a page can hold fewer than limit rows while meta.hasMore is true. Keep passing meta.nextCursor until hasMore is false; cursors never skip or repeat a trade, whatever the page size, and hasMore: false means the requested history is fully served. fromAt and toAt are unix milliseconds; a value in seconds is rejected with 400.
An unknown token returns 404. meta.usdBasis says how each volumeUsd and priceUsd was computed: trade = each trade valued at the native coin’s USD price at that trade’s minute, on EVM and Solana alike. usdMin and usdMax filter on that same volumeUsd.
Native coins (0x0000…0000 and 0xeeee…eeee on every chain, Solana included, the wrapped native such as WETH or WBNB, and the SOL mint) get the trade feed of their main USD markets (up to 10, the first rows of /v1/token/pools), read from the coin’s side: isBuy is true when the coin was bought, amountToken is the coin’s amount, quoteToken and amountQuote the stablecoin it traded against, priceNative 1, priceUsd the coin’s USD price at the trade, volumeUsd the stablecoin amount, and meta.usdBasis is trade on every chain. pools restricts the feed to some of these markets. isSniper and isWash are null on these rows. The native coin of a chain whose native is itself a USD stablecoin (Tempo, Arc, Stable) returns 404; its wrapped token keeps its own tape.
quoteToken is the token the trade was priced against: the quote of the pool in poolAddress (native, wrapped native, a stablecoin or another token), with its address, symbol, name and decimals. amountQuote is in units of that token. priceUsd is the token’s USD price at the trade’s priceNative.
Amounts are GROSS on-chain (the exact swapped value). feesNative is the total fee paid by the trader for the transaction (gas and priority fee, plus the validator tip on Solana) in the chain’s native unit, null when it is not available for that row (a Base preconfirmed trade, for example, has no final fee before block commit). isWash is a boolean on Solana. On Base, the forming candle can include preconfirmed (flashblocks) swaps ahead of block commit; dedup by id or txHash.

Authorizations

Authorization
string
header
required

Your raw API key (not needed on the demo server).

Query Parameters

chain
string
required

Public chain id.

address
string
required

Token address.

pools
string

Optional CSV of pool addresses (≤50) to restrict the tape; default token-wide (every pool of the token).

tradeType
Available options:
buy
usdMin
number
Required range: x >= 0
usdMax
number
Required range: x >= 0
nativeMin
number
Required range: x >= 0
nativeMax
number
Required range: x >= 0
tokenAmountMin
number
Required range: x >= 0
tokenAmountMax
number
Required range: x >= 0
fromAt
integer

Unix MILLISECONDS, inclusive lower bound. A value in seconds is rejected (400).

Required range: x >= 0
toAt
integer

Unix MILLISECONDS, inclusive upper bound (at most 7 days ahead). A value in seconds is rejected (400).

Required range: x >= 0
cursor
string

Opaque - from meta.nextCursor.

sort
default:desc
Available options:
asc
washFilter

washOnly or organicOnly - filter by the per-transaction wash badge (solana; every row carries isWash).

Available options:
washOnly
limit
integer
default:100

1-500, default 100.

Required range: 1 <= x <= 500
include
string

Opt-ins: traderTxCounts.

Response

200

Standard { data, meta } envelope.