> ## 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.

# Series mapping

> How each upstream exchange schema maps to OpenPX Series.

*A recurring family of events (e.g. a weekly inflation reading or sports season).*

Every field is one of three entry types — **direct** (taken from upstream), **synthetic** (computed by OpenPX), or **omitted** (not exposed upstream).

## Coverage

| Exchange   | Direct | Synthetic | Omitted |
| ---------- | ------ | --------- | ------- |
| kalshi     | 9      | 0         | 1       |
| polymarket | 7      | 0         | 3       |

## Field crosswalk

| Unified field        | Type                | kalshi source               | polymarket source       | Notes                                                                                                                                                                  |
| -------------------- | ------------------- | --------------------------- | ----------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `ticker`             | string              | `Series.ticker`             | `Series.ticker`         | **kalshi:** Native Kalshi series ticker (e.g. `KXPRES`). **polymarket:** Polymarket series ticker; falls back to `slug` when null.                                     |
| `numeric_id`         | string?             | *omitted*                   | `Series.id`             | **kalshi:** Kalshi has no separate numeric series id. **polymarket:** Polymarket numeric series id.                                                                    |
| `title`              | string              | `Series.title`              | `Series.title`          | **kalshi:** Kalshi series title. **polymarket:** Polymarket series title.                                                                                              |
| `category`           | string?             | `Series.category`           | `category` *(spec gap)* | **kalshi:** Kalshi series category. **polymarket:** Spec gap: live `/series` rows return `category` but the gamma OpenAPI omits it.                                    |
| `frequency`          | string?             | `Series.frequency`          | `Series.recurrence`     | **kalshi:** Free-form cadence string (e.g. `weekly`). **polymarket:** Polymarket calls the cadence `recurrence`.                                                       |
| `tags`               | array               | `Series.tags`               | *omitted*               | **kalshi:** Free-form tag strings copied as-is. **polymarket:** Polymarket Series has no `tags`; tag relationships live on Events/Markets endpoints.                   |
| `settlement_sources` | array               | `Series.settlement_sources` | *omitted*               | **kalshi:** Array of `\{name, url\}` rulebook authorities, copied as-is. **polymarket:** Polymarket resolves via UMA optimistic oracle; no per-series feed is exposed. |
| `fee_type`           | string?             | `Series.fee_type`           | *omitted*               | **kalshi:** Kalshi fee schedule enum (e.g. `quadratic`, `flat`). **polymarket:** Polymarket fees are configured at the CLOB level, not per-series.                     |
| `volume`             | number? (double)    | `Series.volume_fp`          | `Series.volume`         | **kalshi:** FixedPointCount string parsed to f64; populated only with `include_volume=true`. **polymarket:** Cumulative series volume in USD.                          |
| `last_updated_ts`    | string? (date-time) | `Series.last_updated_ts`    | `Series.updatedAt`      | **kalshi:** RFC3339 string parsed to UTC. **polymarket:** ISO 8601 string parsed to UTC.                                                                               |

## Source specs

* **kalshi** · [`schema/upstream/kalshi.openapi.yaml`](https://github.com/openpx-trade/openpx/blob/main/schema/upstream/kalshi.openapi.yaml)
* **polymarket** · [`schema/upstream/polymarket-gamma.openapi.yaml`](https://github.com/openpx-trade/openpx/blob/main/schema/upstream/polymarket-gamma.openapi.yaml)

> 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.
