Sign each request with a fresh HMAC signature. The cURL and HTTP header values below are placeholders, not reusable credentials. For runnable signing code, use request signing examples.
analytics.read). Each successful response costs 1 API credit.
- Venue: Polymarket only. There is no
venueparameter. - Exchange scope: CTF Exchange V1 and V2 (
exchange_scope: "ctf_v1_v2"). ExchangeV3 (combo) fills are not included yet. - The two charts measure different things. Read
volume_basisbefore you compare them. See Volume basis. - Predexon-compatible names.
data[]withtimestamp,total_volume,buy_volume/sell_volume(wallet),yes_volume/no_volume(market) andtrades_count, plus the echoedgranularity,start_timeandend_time. The other fields are additions.
Shared parameters
The range is capped per granularity: hour 90 days, day 366 days, week 1096 days. A wider range is refused with
400. It is never truncated. Empty buckets are returned as zeros, and the newest bucket can be partial. The response echoes the times you requested in start_time / end_time, and the bucket range actually served in bucket_start_time / bucket_end_time.
Unknown query parameters, and parameters given twice, are refused with 400. They are never ignored.
GET /v2/polymarket/wallet/volume-chart/{wallet}
One point per bucket, oldest first:
timestamp (bucket start), total_volume, buy_volume, sell_volume, trades_count.Always
wallet_clob_fills. See Volume basis.Always
on_chain_fact_rows: trades_count counts every on-chain event row of the wallet, including split, merge, convert and redeem rows that are not volume. It can exceed the wallet’s number of CLOB fills.Always
unavailable: buy_volume and sell_volume are null in every point. The volume is real. Only the buy/sell split is not served yet. Do not read null as zero buying or selling.The rollup that was read:
pm_wallet_hourly for hour, pm_wallet_daily for day and week.GET /v2/polymarket/volume-chart/{condition_id}
One point per bucket, oldest first:
timestamp, total_volume, yes_volume (outcome 0), no_volume (outcome 1), trades_count. total_volume = yes_volume + no_volume.Always
all_fill_legs. See Volume basis.Volume basis
volume_basis tells you what total_volume sums. The two charts use different bases.
In both charts
trades_count counts rows, not matches. For the market chart it is the number of fill legs.
Errors
Two layers answer a
400, and their envelopes differ. The API edge sends {"error": "<message>", "code": "unknown_param" | "invalid_param", "param": "<name>"}. The analytics service sends {"error": "BAD_REQUEST" | "NOT_FOUND" | "UNAVAILABLE", "message": "<message>"}. Read the typed code from code when it is present, otherwise from error.
Related
- Top holders: who holds the market.
- Wallet profile: a wallet’s volume and PnL per window.