Skip to main content
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.
Two charts share one parameter set: a wallet’s volume and a market’s volume, bucketed by hour, day or week. Both routes take your Data API credential (analytics.read). Each successful response costs 1 API credit.
  • Venue: Polymarket only. There is no venue parameter.
  • 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_basis before you compare them. See Volume basis.
  • Predexon-compatible names. data[] with timestamp, total_volume, buy_volume / sell_volume (wallet), yes_volume / no_volume (market) and trades_count, plus the echoed granularity, start_time and end_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}

string
required
Wallet address: 0x followed by 40 hex characters.
string
default:"hour"
hour, day or week.
integer
required
Range start, unix seconds.
integer
required
Range end, unix seconds.
string
required
The wallet (lowercase 0x).
string
required
The bucket width applied.
integer
required
The times you requested, echoed.
integer
required
The whole-bucket range actually served (start floored, end ceiled).
array
required
One point per bucket, oldest first: timestamp (bucket start), total_volume, buy_volume, sell_volume, trades_count.
string
required
Always polymarket.
string
required
Always ctf_v1_v2.
string
required
Always wallet_clob_fills. See Volume basis.
string
required
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.
string
required
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.
string
required
The rollup that was read: pm_wallet_hourly for hour, pm_wallet_daily for day and week.

GET /v2/polymarket/volume-chart/{condition_id}

string
required
The market’s CTF condition id: 0x followed by 64 hex characters.
string
default:"hour"
hour, day or week.
integer
required
Range start, unix seconds.
integer
required
Range end, unix seconds.
string
required
The requested condition id.
string
required
The Polymarket market id, or null if it is not known.
string
required
The bucket width applied.
integer
required
The times you requested, echoed.
integer
required
The whole-bucket range actually served.
array
required
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.
string
required
Always polymarket.
string
required
Always ctf_v1_v2.
string
required
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.