{"openapi":"3.1.0","info":{"title":"Wattcast API","description":"\nDay-ahead electricity price data and a probabilistic price forecast for **Estonia, Finland, Latvia and\nLithuania** (Nord Pool bidding zones EE, FI, LV, LT).\n\n* settled day-ahead prices at **15-minute** or hourly resolution (source: Elering)\n* machine-learning forecast **up to 7 days ahead**, p10 / p50 / p90, hourly and 15-minute\n* cheapest-window finder for scheduling loads (EV charging, heat pumps, batteries)\n\nNo API key needed for the free tier (60 requests/min per IP). Send `X-API-Key` for a higher\nlimit. All timestamps are UTC epoch seconds plus ISO-8601. Prices in EUR/MWh (ct/kWh included, without VAT).\n\nPrices: Elering (Nord Pool day-ahead). Weather: Open-Meteo.com (CC BY 4.0). Forecast: Wattcast, unofficial and informational, no guarantee.\n","version":"0.1.0"},"paths":{"/v1/zones":{"get":{"summary":"Supported bidding zones","operationId":"zones_v1_zones_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/v1/prices":{"get":{"summary":"Settled day-ahead prices","description":"Settled Nord Pool day-ahead prices. Default window: today (local) and everything already published\nafter it. `start`/`end` accept ISO dates or datetimes (naive = local zone time). Max 31 days.","operationId":"prices_v1_prices_get","parameters":[{"name":"zone","in":"query","required":false,"schema":{"type":"string","default":"EE","title":"Zone"}},{"name":"resolution","in":"query","required":false,"schema":{"type":"string","default":"hour","title":"Resolution"}},{"name":"start","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Start"}},{"name":"end","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"End"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/now":{"get":{"summary":"Current price","operationId":"now_v1_now_get","parameters":[{"name":"zone","in":"query","required":false,"schema":{"type":"string","default":"EE","title":"Zone"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/forecast":{"get":{"summary":"Price forecast (p10/p50/p90)","description":"`known` = settled prices from local midnight today up to the last published slot; `forecast` = model\nestimate for every later slot up to `hours` from now. `k` is the horizon in days after the last settled\nlocal day; `backtestMae` gives the cross-validated MAE (EUR/MWh) for each `k`.","operationId":"forecast_v1_forecast_get","parameters":[{"name":"zone","in":"query","required":false,"schema":{"type":"string","default":"EE","title":"Zone"}},{"name":"resolution","in":"query","required":false,"schema":{"type":"string","default":"hour","title":"Resolution"}},{"name":"hours","in":"query","required":false,"schema":{"type":"integer","maximum":216,"minimum":1,"default":168,"title":"Hours"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/cheapest":{"get":{"summary":"Cheapest windows (known + forecast)","description":"Non-overlapping windows of `minutes` (multiple of 15) with the lowest average price. Uses settled\n15-minute prices where published and the 15-minute p50 forecast beyond that (`known` says which).","operationId":"cheapest_v1_cheapest_get","parameters":[{"name":"zone","in":"query","required":false,"schema":{"type":"string","default":"EE","title":"Zone"}},{"name":"minutes","in":"query","required":false,"schema":{"type":"integer","maximum":480,"minimum":15,"default":60,"title":"Minutes"}},{"name":"count","in":"query","required":false,"schema":{"type":"integer","maximum":10,"minimum":1,"default":3,"title":"Count"}},{"name":"scope","in":"query","required":false,"schema":{"type":"string","default":"next24h","title":"Scope"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/accuracy":{"get":{"summary":"Forecast accuracy: backtest and live","description":"Cross-validated MAE per horizon from training, plus live MAE of the forecasts actually published in\nthe last `days` days (latest forecast issued at each horizon `k`, compared with settled hourly prices).","operationId":"accuracy_v1_accuracy_get","parameters":[{"name":"zone","in":"query","required":false,"schema":{"type":"string","default":"EE","title":"Zone"}},{"name":"days","in":"query","required":false,"schema":{"type":"integer","maximum":60,"minimum":1,"default":14,"title":"Days"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/status":{"get":{"summary":"Service status","operationId":"status_v1_status_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}}},"components":{"schemas":{"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"},"input":{"title":"Input"},"ctx":{"type":"object","title":"Context"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}}}