Skip to content

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.

Sourced from schemas/stations.json. Each entry has:

FieldTypeExampleNotes
codestr"NYC"3-letter NWS code. null for non-NWS stations.
icaostr"KNYC"4-letter ICAO. Always present.
namestr"New York Central Park"Human-readable. May be null for some intl.
tzstr"America/New_York"IANA timezone. Used for LST settlement bucketing.
countrystr"US"ISO-3166 alpha-2.
latitudefloat40.78Decimal degrees.
longitudefloat-73.97Decimal degrees.
ghcnh_idstr"USW00094728"NCEI GHCNh station ID. null if not in GHCNh.
CodeICAOCityIANA tz
NYCKNYCNew YorkAmerica/New_York
LGAKLGANew York LaGuardiaAmerica/New_York
JFKKJFKNew York JFKAmerica/New_York
EWRKEWRNewarkAmerica/New_York
BOSKBOSBostonAmerica/New_York
PHLKPHLPhiladelphiaAmerica/New_York
DCAKDCAWashington DCAAmerica/New_York
ATLKATLAtlantaAmerica/New_York
MIAKMIAMiamiAmerica/New_York
ORDKORDChicagoAmerica/Chicago
MSPKMSPMinneapolisAmerica/Chicago
DFWKDFWDallasAmerica/Chicago
IAHKIAHHoustonAmerica/Chicago
AUSKAUSAustinAmerica/Chicago
MCIKMCIKansas CityAmerica/Chicago
DENKDENDenverAmerica/Denver
PHXKPHXPhoenixAmerica/Phoenix
LASKLASLas VegasAmerica/Los_Angeles
LAXKLAXLos AngelesAmerica/Los_Angeles
SEAKSEASeattleAmerica/Los_Angeles
from mostlyright._internal._stations import (
STATIONS,
STATION_BY_CODE,
STATION_BY_ICAO,
)
# By NWS code
nyc = STATION_BY_CODE["NYC"]
# By ICAO
nyc_icao = STATION_BY_ICAO["KNYC"]
# Filter US stations
us = [s for s in STATIONS if s["country"] == "US"]

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.

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 KNYC
research("KNYC", ...) # same

The output rows carry both — station in the canonical form (3-letter NWS code), plus the ICAO is recoverable via STATION_BY_CODE.

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.

If you need a station not in the registry:

  1. For one-off use — pass tz_override to research(). See Research API guide.
  2. For permanent inclusion — open a PR adding the entry to schemas/stations.json. The codegen step propagates the entry to both SDKs.