Skip to content

Guides

International stations

Mostlyright ships a curated 20-station Kalshi registry plus a broad STATIONS table covering international ICAO sites. daily_extremes() works against either — bucketing by station-local IANA timezone.

The canonical US registry covers every station Kalshi settles weather contracts against:

from mostlyright._internal._stations import STATIONS
us = [s for s in STATIONS if s["country"] == "US"]
print(len(us)) # 20

Each entry has:

  • code — 3-letter NWS code ("NYC")
  • icao — 4-letter ICAO ("KNYC")
  • tz — IANA timezone ("America/New_York")
  • country — ISO-3166 alpha-2 ("US")
  • latitude, longitude, name, ghcnh_id

STATION_BY_CODE and STATION_BY_ICAO are O(1) lookup maps.

Polymarket settles on international stations — Paris (LFPG/LFPB), Tokyo (RJTT), London (EGLL), etc. The same STATIONS table covers them:

intl = [s for s in STATIONS if s["country"] != "US"]
print([s["icao"] for s in intl[:10]])
# ['EGLL', 'LFPG', 'RJTT', 'YSSY', 'EHAM', 'EDDF', 'LEMD', 'LIRA', 'EGLL', 'OMDB']

International coverage uses AWC + IEM only — GHCNh’s hourly archive is US-centric. The TS SDK ships the same registry via STATION_BY_ICAO:

import { STATION_BY_ICAO } from "@mostlyrightmd/core";
const tokyo = STATION_BY_ICAO.get("RJTT");
console.log(tokyo.tz); // "Asia/Tokyo"

daily_extremes() buckets observations by station-local date (IANA tz from the registry):

from mostlyright.international import daily_extremes
days = daily_extremes("RJTT", "2025-01-06", "2025-01-12")
# Tokyo (UTC+9) — a 12:00Z observation rolls into the Tokyo-local
# 21:00 of 2025-01-06, NOT the UTC-day 2025-01-06.

Settlement happens against the station’s calendar day in the station’s timezone. A Kalshi NYC contract settles on New York local date; a Polymarket Tokyo contract settles on Tokyo local date. UTC-day bucketing would silently mis-route observations near the day boundary.

The SDK fetches [fromDate - 1 day UTC, toDate + 1 day UTC] internally to guarantee no tz-edge observation is missed, then clips the output to the caller’s window by station-local date.

RegionSettlement precisionSource
US (ASOS METARs)Integer °FPhase 18 invariant — matches Kalshi
International0.1 °C / 0.1 °FNative METAR precision

Integer-°F is the Kalshi settlement contract for US stations. International stations use raw METAR precision (typically 0.1 °C native, converted to 0.1 °F).

If you need a station not in the registry, override the IANA tz:

from mostlyright import research
df = research(
"LATIN", # made-up ICAO
"2025-01-06", "2025-01-12",
tz_override="America/Argentina/Buenos_Aires",
)

tz_override is rarely needed — the 20-station Kalshi set + the broader international set covers most cases. If you find a missing station that’s published in IEM/AWC, let us know.

Same as US — see Browser integration. AWC is CORS-allowed for international fetches; IEM ASOS is not.