{"name":"ERNA Weather API","version":"v1","auth":"Send your key in the `X-API-Key` header (or `?api_key=...`).","endpoints":{"GET /api/public/v1/cities":"List all cities with metadata (id, name, country, lat, lon, tz, icao).","GET /api/public/v1/current?city_id=...":"Latest observations from all current sources for a city.","GET /api/public/v1/forecasts?city_id=...":"Latest forecasts (ERNA, ERNA Pro, ensemble, tmax range) for a city.","GET /api/public/v1/historical/{table}?city_id=...&since=YYYY-MM-DD&limit=...&cursor=...":"Paginated historical data. Cursor pagination, sorted by id desc. limit max 1000 (default 100).","GET /api/public/v1/fusion-locks?city_id=...&since=ISO8601&resolved=true|false&limit=...&cursor=...":"Fusion Forecast peak-hour bucket locks, newest first. Poll with `since` (last locked_at you saw) or `cursor` (returned as `next_cursor`) for incremental delivery. limit max 500 (default 100)."},"historical_tables":["metar_observations_history","openweather_history","meteoblue_history","pws_observations_history","forecast_history","polymarket_buckets_history","kalshi_buckets_history","forecast_accuracy_daily","market_brief_daily","edge_resolved","model_forecasts_daily"],"current_tables":["openweather_current","meteoblue_current","metar_observations","pws_observations"],"forecast_tables":["erna_pro_forecast","edge_ensemble_daily","model_tmax_range"],"pagination":{"type":"cursor","usage":"Pass the returned `next_cursor` value as `?cursor=...` on the next request. When `next_cursor` is null, no more pages."}}