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)));