Skip to main content
An order on the unified surface. Every field is one of three entry types — direct (taken from upstream), synthetic (computed by OpenPX), or omitted (not exposed upstream).

Coverage

ExchangeDirectSyntheticOmitted
kalshi920
polymarket803

Field crosswalk

Unified fieldTypekalshi sourcepolymarket sourceNotes
idstringOrder.order_id, fallback CreateOrderV2Response.order_idOpenOrder.id, fallback SendOrderResponse.orderIDkalshi: Kalshi-issued order id, identical across V1 GET and every V2 mutation response. polymarket: Order hash; exposed as id on GET responses and orderID on POST /order.
market_tickerstringOrder.tickeromittedkalshi: V1 GET echoes the ticker; on V2 mutations the adapter carries the request asset_id through. polymarket: Polymarket exposes a CTF condition id, not a market ticker; always empty on this surface.
outcomestringsyntheticOpenOrder.outcomekalshi: Title-cased from Order.side (yes/no); V2 mutations reuse the caller-frame outcome. polymarket: Outcome label as published by Polymarket (e.g. YES/NO on binary markets).
sideOrderSidesyntheticOpenOrder.sidekalshi: Sourced from Order.action (buy/sell), not the YES/NO side field. polymarket: BUY/SELL enum, 1:1 with unified OrderSide.
pricenumber (double)Order.yes_price_dollars, fallback CreateOrderV2Response.average_fill_priceOpenOrder.pricekalshi: Fixed-point dollar string (V1) or YES-frame average fill price (V2), converted to caller-frame f64. polymarket: Decimal probability string (e.g. "0.5") parsed to f64.
sizenumber (double)Order.initial_count_fp, fallback CreateOrderV2Response.remaining_countOpenOrder.original_sizekalshi: FixedPointCount on V1; reconstructed as fill_count + remaining_count on V2. polymarket: Six-decimal fixed-math string parsed to f64.
fillednumber (double)Order.fill_count_fp, fallback CreateOrderV2Response.fill_countOpenOrder.size_matchedkalshi: FixedPointCount on both V1 and V2. polymarket: Cumulative matched size; six-decimal fixed-math string parsed to f64.
feenumber? (double)CreateOrderV2Response.average_fee_paidomittedkalshi: Per-contract average fee from the V2 create response, multiplied by fill_count for the dollar total. polymarket: Polymarket charges fees at trade settlement, not on order creation or lookup.
statusOrderStatusOrder.statusOpenOrder.status, fallback SendOrderResponse.statuskalshi: V1 enum mapped to unified status; V2 mutations derive status from (fill_count, remaining_count). polymarket: OpenOrder uses prefixed ORDER_STATUS_* enums; SendOrderResponse uses unprefixed live/matched/delayed.
created_atstring (date-time)Order.created_timeOpenOrder.created_atkalshi: RFC3339 string on V1; V2 mutations fall back to wall-clock at parse time. polymarket: Unix seconds; create paths fall back to wall-clock since SendOrderResponse omits it.
updated_atstring? (date-time)Order.last_update_timeomittedkalshi: RFC3339, nullable; cancel paths set wall-clock and create paths leave it null. polymarket: Polymarket exposes no updated_at on either OpenOrder or SendOrderResponse.

Source specs

Tables are auto-generated from schema/mappings/. CI fails if any direct ref no longer resolves in the cached upstream spec; the daily upstream-refresh PR surfaces drift here.