Concepts
Stations
Every observation, forecast, and settlement row is keyed to a station. Mostly Right ships a canonical registry covering the 20 Kalshi-traded US stations plus broad international ICAO coverage. Both SDKs share the same data via codegen.
The registry
Section titled “The registry”Sourced from schemas/stations.json. Each entry has:
| Field | Type | Example | Notes |
|---|---|---|---|
code | str | "NYC" | 3-letter NWS code. null for non-NWS stations. |
icao | str | "KNYC" | 4-letter ICAO. Always present. |
name | str | "New York Central Park" | Human-readable. May be null for some intl. |
tz | str | "America/New_York" | IANA timezone. Used for LST settlement bucketing. |
country | str | "US" | ISO-3166 alpha-2. |
latitude | float | 40.78 | Decimal degrees. |
longitude | float | -73.97 | Decimal degrees. |
ghcnh_id | str | "USW00094728" | NCEI GHCNh station ID. null if not in GHCNh. |
The 20 Kalshi-traded US stations
Section titled “The 20 Kalshi-traded US stations”| Code | ICAO | City | IANA tz |
|---|---|---|---|
| NYC | KNYC | New York | America/New_York |
| LGA | KLGA | New York LaGuardia | America/New_York |
| JFK | KJFK | New York JFK | America/New_York |
| EWR | KEWR | Newark | America/New_York |
| BOS | KBOS | Boston | America/New_York |
| PHL | KPHL | Philadelphia | America/New_York |
| DCA | KDCA | Washington DCA | America/New_York |
| ATL | KATL | Atlanta | America/New_York |
| MIA | KMIA | Miami | America/New_York |
| ORD | KORD | Chicago | America/Chicago |
| MSP | KMSP | Minneapolis | America/Chicago |
| DFW | KDFW | Dallas | America/Chicago |
| IAH | KIAH | Houston | America/Chicago |
| AUS | KAUS | Austin | America/Chicago |
| MCI | KMCI | Kansas City | America/Chicago |
| DEN | KDEN | Denver | America/Denver |
| PHX | KPHX | Phoenix | America/Phoenix |
| LAS | KLAS | Las Vegas | America/Los_Angeles |
| LAX | KLAX | Los Angeles | America/Los_Angeles |
| SEA | KSEA | Seattle | America/Los_Angeles |
Lookups
Section titled “Lookups”from mostlyright._internal._stations import ( STATIONS, STATION_BY_CODE, STATION_BY_ICAO,)
# By NWS codenyc = STATION_BY_CODE["NYC"]# By ICAOnyc_icao = STATION_BY_ICAO["KNYC"]# Filter US stationsus = [s for s in STATIONS if s["country"] == "US"]import { STATIONS, STATION_BY_CODE, STATION_BY_ICAO,} from "@mostlyrightmd/core";
const nyc = STATION_BY_CODE.get("NYC");const nycIcao = STATION_BY_ICAO.get("KNYC");
const us = STATIONS.filter((s) => s.country === "US");Codegen-shared
Section titled “Codegen-shared”Both SDKs are generated from the same schemas/stations.json. The Python side reads it at import; the TS side emits a typed-readonly module via @mostlyrightmd/codegen. Updating the registry is a one-file PR + a release on each side.
Normalization
Section titled “Normalization”research() and the fetcher functions accept either form — the 3-letter NWS code or the 4-letter ICAO. They normalize internally:
research("NYC", ...) # normalizes to KNYCresearch("KNYC", ...) # sameThe output rows carry both — station in the canonical form (3-letter NWS code), plus the ICAO is recoverable via STATION_BY_CODE.
International coverage
Section titled “International coverage”International ICAO sites cover the cities Polymarket settles against (Tokyo, London, Paris, Sydney, etc.). Coverage is broader on the IEM/AWC side and narrower on GHCNh. See International stations.
Adding a station
Section titled “Adding a station”If you need a station not in the registry:
- For one-off use — pass
tz_overridetoresearch(). See Research API guide. - For permanent inclusion — open a PR adding the entry to
schemas/stations.json. The codegen step propagates the entry to both SDKs.
See also
Section titled “See also”- International stations — non-US ICAO sites
- Settlement windows — how the tz becomes the LST bucket
- Markets guide — Kalshi/Polymarket city-to-station resolution
- API reference:
mostlyright._internal._stations(Python) ·STATIONS/STATION_BY_*(TS)