Skip to main content

What changes

  • Polymarket markets carry Polymarket’s own metadata. Every listed market now has its Polymarket event and series, plus strikes, teams, scores, fees and oracle settings, as published on polymarket.com.
  • One naming standard across venues. Polymarket uses the same identifier columns as Kalshi and Hyperliquid HIP-4: market_id, event_id and outcome_id.
  • New tables, side by side. Each v2 table has the name of its v1 table plus _v2, for example polymarket_polygon.market_trades_v2. Both versions carry full history. The v1 tables stay available until their removal date, shown at the top of this page.
  • Breaking for Polymarket queries. Several Polymarket columns are renamed and event_id changes value, so v1 queries fail or return different results on v2.
The table version is not the exchange version. Polymarket’s exchange contracts also have versions, which the contract_version column (v1, v2, v3) reports in both table versions.

Migrate in three steps

1

Point your queries at the _v2 tables

Add _v2 to every table name in the table map below. Tables without a v2 keep their names.
2

Rename the Polymarket identifier columns

Replace condition_id and combo_condition_id with market_id, and token_id, asset_id and position_id with outcome_id. The values do not change. Identifiers has the details and common renames covers the other columns.
3

Check event_id and removed columns

Polymarket event_id now holds Polymarket’s event id instead of the neg-risk group id; use neg_risk_market_id where you relied on the old value. Then open each table you use under table by table for removed columns and their replacements.

Identifiers

Some Polymarket questions are split into several markets of which exactly one resolves Yes, such as one market per candidate in an election. Polymarket calls these neg-risk markets. In v1, event_id held the id of that group of markets; in v2 it holds Polymarket’s event id. A small number of markets, almost all archived or closed and with a negligible share of volume, are not listed by Polymarket. They keep their market_id and stay in every table, but the columns that come from Polymarket’s website, such as event and series, are NULL. Renamed columns keep their v1 types. market_id is therefore VARBINARY in market_trades_v2, market_actions_v2, market_prices_hourly_v2 and the combo tables, and a 0x… VARCHAR in market_details_v2, ohlcv_hourly_v2, open_interest_hourly_v2, positions_v2 and the cross-venue tables. Join across the two with CAST(market_id AS VARCHAR) on the VARBINARY side, or join on outcome_id, which is UINT256 everywhere.

Common renames

These renames apply in every Polymarket table that has the column.

Table map

Breaking means a column was renamed or removed, so v1 queries fail. Values change means the columns are the same but some values differ. Tables without a v2, such as kalshi.market_trades, kalshi.open_interest_hourly, hip4_hyperliquid.open_interest_hourly, hip4_hyperliquid.positions_daily and polymarket_polygon.combo_prices_hourly, keep their names.

Table by table

Open a table to see every column that changes. Columns not listed are unchanged.
One row per outcome token, two per market, as in v1. Tokens, prices, outcomes and resolution still come from the order book and the chain. The new columns hold the latest values Polymarket publishes, not the values at trade time.How each kind of Polymarket market fills the strike columns for its Yes side:
One row per fill, as in v1. The market columns hold the values known when the fill was written; market_details_v2 holds the current ones.
One row per market, as in v1. Kalshi rows change only by the removed column.Comparing strikes across venues. Both venues use the same strike_type values, and floor_strike and cap_strike mean the same on both, with three differences:
  • On price brackets, Kalshi sets cap_strike one tick below the next bracket (75,299.99); Polymarket uses the next bracket’s floor (1.80) and gives a price exactly on it to the higher bracket. Whole-number brackets include both ends on both venues.
  • For “X or above”, Kalshi uses greater with floor_strike one tick below X; Polymarket uses greater_or_equal with X. Both mean the Yes side wins at X.
  • Markets that resolve when the price touches a level (Polymarket’s reach and dip ladders, Kalshi’s max and min series) carry the same strike types as markets that settle at the close. The question says which kind it is.
No column changes. Each trade has two rows, one for each side, and both share a trade_id. Rows are unique on (block_month, trade_id, is_taker).

Rewriting a query

Volume by question for the outcomes of mutually exclusive events, in v1:
The same query in v2: