/v2/onchain/* endpoints cover v1 Polymarket. Use /clobv2/* for anything that needs v2 fills, positions, builder attribution, or neg-risk events.
Collateral token: pUSD
v2 trades settle in pUSD (Polymarket USD), an ERC-20 on Polygon at0xc011a7e12a19f7b1f670d46f03b03f3342e82dfb. Every pUSD is backed 1:1 by USDC.e and the backing is enforced on-chain by the contract, so dollar amounts are exact.
Fields named *_usdc in the response schemas (maker_usdc, taker_usdc, fee_usdc, notional_usdc, etc.) are the pUSD amounts of each fill. The “usdc” suffix is a holdover from v1 and reflects the dollar value — it does NOT mean USDC.e was the token that moved. If you’re verifying on-chain against Polygonscan, look for Transfer events on the pUSD contract above, not the USDC.e contract.
Why you care:
- Integrators: an API user wrapping USDC.e → pUSD via Polymarket’s Collateral Onramp will see their
wallets/{address}/tradesresults denominated in the same units their pUSD balance moved. - Historical data: early v2 fills (pre-mainnet-launch on April 28, 2026) may show mixed pUSD / USDC.e transfers on-chain as wallets migrated; the aggregated amounts our API returns remain dollar-correct because 1 pUSD = 1 USDC.e.
- v1 data: the legacy
/v2/onchain/*endpoints are v1 Polymarket and genuinely denominated in USDC.e. Different exchange, different collateral.
Base URL
Authentication
Every endpoint requires a paid-tier API key (starter and up). Free-tier keys receive402 Payment Required.
Pass your key by any of three methods:
Endpoints
Fills
Positions
Market aggregates
Builders (v2-exclusive)
Neg-risk events (v2-exclusive)
Numeric precision
All USDC / share / price fields in list responses are returned as JSON strings (e.g."1.3440000000000000", not 1.344) to preserve full database precision. Parse to Decimal / BigNumber / bignumber.js before arithmetic. Integer counts (trade counts, market counts) remain JSON numbers.
Single-object market-volume + market-orderbook responses return numbers for convenience.
Response envelope
Every list endpoint wraps results the same way:count: the number of rows in this response.source: always"onchain-v2"for clobv2 endpoints — identifies this as v2 exchange data.pagination: standard offset-based.has_more: truemeans you can fetchoffset += countto get the next page.- The array field name matches the endpoint (
trades,positions,events, etc.).
found boolean.
Rate limits
Every response carries:429 Too Many Requests with {"error": "rate limit exceeded", "reset_at": <unix>}.
Error shape
All error bodies follow
{"error": "<human readable>"}. 402 also includes tier and upgrade_url fields.
Known stubs
These endpoints exist on the server but are not yet documented because their supporting historical datasets are still being completed:/clobv2/wallets/{address}/redemptions/clobv2/wallets/{address}/activity/clobv2/markets/{condition_id}/oi/clobv2/oi

