Skip to main content

Documentation Index

Fetch the complete documentation index at: https://docs.openpx.trade/llms.txt

Use this file to discover all available pages before exploring further.

A recurring family of events. Examples: a weekly inflation reading, a monthly nonfarm payrolls release, a regular sports season. On Kalshi, a Series is identified by series_ticker (e.g. KXPRES). On Polymarket, a Series wraps multiple Events with shared metadata.

Coverage

ExchangeSourcedSyntheticOmitted
kalshi901
polymarket703
Sourced — value copied or transformed from a documented upstream field.
Synthetic — computed by OpenPX, not present upstream.
Omitted — upstream does not expose this concept.

Field crosswalk

Unified fieldTypekalshi sourcepolymarket sourceTransformNotes
tickerstringSeries.ticker (string)Series.ticker (string)directkalshi: Kalshi’s primary series identifier (e.g. KXPRES, KXBTC). polymarket: Polymarket Series exposes both ticker and slug (both nullable). The parser prefers ticker and falls back to slug when ticker is null/empty. Series rows with neither field set are skipped.
numeric_idstring?not exposedSeries.id (string)directkalshi: Kalshi has no separate numeric series surface.
titlestringSeries.title (string)Series.title (string)direct
categorystring?Series.category (string)categoryspec gapdirectpolymarket: Spec gap: the gamma OpenAPI Series schema doesn’t declare a category field, but live /series responses include it for most series. The parser reads it directly. Re-check on each daily upstream refresh — when Polymarket adds it to the spec, promote to a regular ref:.
frequencystring?Series.frequency (string)Series.recurrence (string)directkalshi: Free-form string from Kalshi (e.g. “weekly”, “daily”, “one-off”). polymarket: Polymarket calls the recurrence cadence recurrence rather than frequency. The parser also accepts a top-level frequency field if upstream ever surfaces one, but recurrence is canonical today.
tagsarraySeries.tags (array)not exposedpassthrough_arraypolymarket: Polymarket’s Series schema has no tags field. Tag relationships live on Events and Markets via separate /events/{id}/tags and /markets/{id}/tags endpoints. Left empty on the unified shape.
settlement_sourcesarraySeries.settlement_sources (array)not exposedpassthrough_arraykalshi: Each entry is \{ name, url \} describing an official settlement source — the rulebook authority Kalshi uses to determine market resolution. polymarket: Polymarket resolves via UMA optimistic oracle; structured per-series settlement source feeds are not exposed in the gamma API. Left as an empty array on the unified shape.
fee_typestring?Series.fee_type (string)not exposeddirectkalshi: Enum: quadratic, quadratic_with_maker_fees, flat. See https://kalshi.com/docs/kalshi-fee-schedule.pdf for the formulas. polymarket: Polymarket fees are configured at the CLOB-exchange level, not per-series. Left None on the unified shape.
volumenumber? (double)Series.volume_fp (FixedPointCount)Series.volume (number)fixed_point_count / directkalshi: Populated only when the caller passes include_volume=true to /series/{series_ticker}. Total volume across all events in the series, parsed from Kalshi’s fixed-point string format. polymarket: Polymarket exposes both volume (cumulative) and volume24hr; the unified Series.volume carries the cumulative figure.
last_updated_tsstring? (date-time)Series.last_updated_ts (string (date-time))Series.updatedAt (string (date-time))parse_datetime

Source specs

Tables are auto-generated from schema/mappings/. CI fails on unresolved $refs and on type mismatches for transform: direct. Drift in upstream specs surfaces here on the daily refresh PR.