API preview
Production API responses use live venue books, settlement-station observations and named public forecast models. Simulated Sonde profile data is only shown in the demo scanner.
DEMO
The demo is a UI surface, not a production API contract. It uses the same scanner with a simulated Sonde profile lens selected.
Open demo scanner ->GET
/v1/markets
The same real scanner data rendered on the home page.
PARAM
TYPE
DESCRIPTION
forecast_source
string
ecmwf, gfs, icon, hrrr, nbm, gem or ukmo
station
string
optional ICAO filter
min_edge_c
number
minimum net edge in cents
view
string
scanner for the compact list shape
{
"as_of": "2026-07-31T22:12:04Z",
"count": 14,
"markets": [
{
"ticker": "KXHIGHNY-26JUL31",
"venue": "kalshi",
"station": "KNYC",
"type": "daily_high",
"obs": { "temp_f": 82.0, "today_high_f": 84.0, "source": "live_station" },
"consensus": { "ecmwf": 84.2, "gfs": 83.5, "icon": 84.0, "nbm": 84.8 },
"selected_forecast": { "source": "nbm", "label": "NBM", "high_f": 84.8, "sigma_f": 1.4 },
"market_implied_f": 85.7,
"edge": {
"bucket": "84-85°",
"side": "yes",
"price_c": 41,
"fair_c": 53,
"edge_c": 12,
"net_edge_c": 10
},
"simulated": false
}
]
}GET
/v1/markets/{ticker}
Full ladder, model bucket placement and selected-model fair values for one market.
PARAM
TYPE
DESCRIPTION
forecast_source
string
ecmwf, gfs, icon, hrrr, nbm, gem or ukmo
{
"market": {
"ticker": "KXHIGHNY-26JUL31",
"station": "KNYC",
"ladder": [
{ "label": "82-83°", "yes_bid_c": 11, "yes_ask_c": 14, "fair_c": 8 },
{ "label": "84-85°", "yes_bid_c": 39, "yes_ask_c": 41, "fair_c": 53 }
],
"model_buckets": {
"gfs": { "bucket": "82-83°", "value_f": 83.5 },
"nbm": { "bucket": "84-85°", "value_f": 84.8 }
}
}
}GET
/v1/stations/{icao}/obs
Latest observation and intraday high/low context for a settlement station.
{
"station": { "icao": "KNYC", "name": "Central Park" },
"observation": {
"temp_f": 82.0,
"today_high_f": 84.0,
"at": "2026-07-31T21:51:00Z",
"source": "live_station"
},
"simulated": false
}GET
/v1/forecast/{icao}
Named public model forecasts and the station forecast. No simulated Sonde forecast is returned.
PARAM
TYPE
DESCRIPTION
date
YYYY-MM-DD
optional station-local date
{
"station": { "icao": "KNYC", "city": "New York", "timezone": "America/New_York" },
"date": "2026-07-31",
"observation": { "temp_f": 82.0, "today_high_f": 84.0, "source": "live_station" },
"models": {
"gfs": { "high_f": 83.5, "low_f": 73.2, "run": "12Z", "run_age_h": 3.4 },
"nbm": { "high_f": 84.8, "low_f": 74.1, "run": "12Z", "run_age_h": 2.1 }
},
"station_forecast": { "high_f": 85, "low_f": 74, "issued_at": "2026-07-31T10:00:00Z" },
"sources": {
"models": "ECMWF / GFS / ICON / HRRR / NBM / GEM / UKMO",
"current_weather": "live station weather",
"station_forecast": "primary model guidance"
}
}GET
/v1/diagnostics
Upstream feed status and scanner market counts.
{
"ok": true,
"feeds": [
{ "key": "kalshi", "label": "Kalshi", "ok": true, "ms": 412 },
{ "key": "station:KNYC", "label": "KNYC live station obs", "ok": true, "ms": 94 }
],
"markets": { "tracked": 14, "placeholder_markets": 0 }
}SSE
/v1/stream
Server-Sent Events for edge and observation updates.
PARAM
TYPE
DESCRIPTION
channels
string
edges, obs:{ICAO}, or both
min_edge_c
number
minimum net edge in cents
forecast_source
string
ecmwf, gfs, icon, hrrr, nbm, gem or ukmo
const es = new EventSource(
"https://<your-host>/v1/stream?channels=edges,obs:KNYC&min_edge_c=8"
);
es.addEventListener("edges", (e) => {
const { markets } = JSON.parse(e.data);
console.log(markets[0].edge);
});
es.addEventListener("obs", (e) => console.log(JSON.parse(e.data)));