Skip to main content
Every exchange’s response is normalized into the same typed models. All prices on the unified surface are decimals in [0.0, 1.0].

Market

Unified fieldTypeKalshi sourcePolymarket source
idstringtickerconditionId
native_numeric_idstring?numeric DB id
event_idstring?canonical OpenPX event idcanonical OpenPX event id
titlestringtitlequestion
descriptionstringrules_primarydescription
slugstring?subtitleslug
statusMarketStatusmappedderived from booleans
outcomesstring[]["Yes", "No"]parsed outcomes
token_id_yes / token_id_nostring?clobTokenIds
condition_idstring?conditionId
volume / liquidity / open_interestf64normalizednormalized
open_time / close_timeDateTime?ISO 8601ISO 8601
MarketStatus: Active, Closed, Resolved.

Order

FieldType
idstring
market_idstring
outcomestring
sideOrderSide (buy | sell)
pricef64 (in [0, 1])
sizef64
filledf64
statusOrderStatus
created_at / updated_atDateTime<Utc>
OrderStatus: pending, open, filled, partially_filled, cancelled, rejected.

Position

FieldType
market_idstring
outcomestring
sizef64
average_pricef64
current_pricef64

Orderbook

FieldType
market_idstring
asset_idstring
bids / asksPriceLevel[]
last_update_idu64?
timestampDateTime?
hashstring?
PriceLevel: { price: f64, size: f64 }.

MarketTrade / Fill / Candlestick

ModelSource method
MarketTradefetch_trades
Fillfetch_fills
Candlestickfetch_price_history
All three carry decimal prices, f64 sizes, and DateTime<Utc> timestamps.