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 20-station Kalshi registry
Section titled “The 20-station Kalshi registry”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)) # 20Each 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.
International support
Section titled “International support”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 with tz handling
Section titled “Daily extremes with tz handling”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.import { dailyExtremes } from "@mostlyrightmd/weather";
const days = await dailyExtremes("RJTT", "2025-01-06", "2025-01-12");Why station-local?
Section titled “Why station-local?”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.
Precision differences
Section titled “Precision differences”| Region | Settlement precision | Source |
|---|---|---|
| US (ASOS METARs) | Integer °F | Phase 18 invariant — matches Kalshi |
| International | 0.1 °C / 0.1 °F | Native 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).
Adding a new station
Section titled “Adding a new station”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.
CORS / browser caveats
Section titled “CORS / browser caveats”Same as US — see Browser integration. AWC is CORS-allowed for international fetches; IEM ASOS is not.
See also
Section titled “See also”- Weather observations — the underlying fetch contract
- Settlement windows — LST math
- Markets — Polymarket’s per-measure international routing
- API reference:
mostlyright.international(Python)