Complete onchain trade fill history for any wallet. Every fill, every counterparty, every fee.
Returns every onchain trade fill for a wallet — both maker and taker sides, every fill, every counterparty, every fee. Pulled directly from onchain settlement data, never misses a fill. Each trade is enriched with market metadata (question, slug, outcome, image).Documentation Index
Fetch the complete documentation index at: https://polynode.mintlify.app/llms.txt
Use this file to discover all available pages before exploring further.
limit=100, max limit=1000. That’s all most apps need.
?cursor= (empty value) to the first request, then for each next page, copy pagination.cursor from the response back into the URL. Stop when pagination.has_more is false.
Three complete copy-paste scripts that walk an entire wallet:
has_more is false.
| Parameter | Type | Location | Description |
|---|---|---|---|
address | string | path | Wallet address (0x-prefixed, 40 hex chars) |
limit | integer | query | Max results per page (default 100, max 1000) |
cursor | string | query | Pass empty string ?cursor= for first page, then echo back pagination.cursor from each response. Required to walk past the first page reliably on heavy wallets. |
offset | integer | query | Alternative to cursor: skip first N. Fast for the first ~25K results then degrades. Use cursor for anything bigger. |
pagination.has_more is true, the response also includes a pagination.cursor string — pass that as ?cursor=<value> for the next request.
| Field | Type | Description |
|---|---|---|
count | integer | Number of trades in this response |
pagination.has_more | boolean | true if more pages available — keep paginating |
pagination.cursor | string | Pass back as ?cursor=<value> for the next page (only present when has_more is true) |
trades[].tx_hash | string | Transaction hash |
trades[].timestamp | number | Unix timestamp of the fill |
trades[].order_hash | string | Order hash that was filled |
trades[].maker | string | Maker wallet address |
trades[].taker | string | Taker wallet address |
trades[].maker_asset_id | string | Asset the maker provided ("0" = USDC) |
trades[].taker_asset_id | string | Asset the taker provided (CTF token ID) |
trades[].maker_amount | number | Amount maker provided (USDC) |
trades[].taker_amount | number | Amount taker provided (tokens) |
trades[].fee | number | Fee paid on this fill (USDC) |
trades[].side | string | "maker" or "taker" relative to the queried wallet — exchange role on this fill |
trades[].direction | string | "BUY" or "SELL" from the queried wallet’s perspective. BUY = wallet contributed USDC and received outcome tokens. SELL = wallet contributed outcome tokens and received USDC. |
trades[].market | string | Market question |
trades[].slug | string | Market slug |
trades[].outcome | string | Outcome label (e.g. “Yes”, “Up”, “Trump”) |
trades[].image | string | Market image URL |
side vs directionside = was the wallet the maker (resting limit order) or taker (crossing the spread) on this fill?direction = did the wallet BUY outcome shares (gave USDC) or SELL them (received USDC)?Wallet address
Max results (max 1000)
Skip first N results
Cursor pagination. Pass empty string ?cursor= for the first page, then echo back pagination.cursor from each response. Format: <lastTs>:<lastId>. Each page loads at the same speed regardless of depth — recommended over offset for paging beyond ~25K results.
Trade fills