Wallet trade history (onchain)
Onchain V2 (legacy)
Trade History (Wallet)
Complete onchain trade fill history for any wallet. Every fill, every counterparty, every fee.
GET
Wallet trade history (onchain)
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://docs.polynode.dev/llms.txt
Use this file to discover all available pages before exploring further.
Quick start — get the most recent 100 trades
limit=100, max limit=1000. That’s all most apps need.
Get every trade for the wallet (full history)
To walk the entire history, add?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.
Request
| 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. |
Response
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 direction
Both fields are populated on every row, and they answer different questions:
side= 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)?
Path Parameters
Wallet address
Query Parameters
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.
Response
Trade fills

