{"openapi":"3.1.0","info":{"title":"Magdeburg Wetter — Weather API","description":"Fursuiting index, weather overview and warnings for Magdeburg, built on DWD OpenData.\n\n**Everything published here is JSON under `/api/v1`, and those shapes are a stable contract.** The map imagery this site draws for itself is not part of it: pictures are expensive to serve and trivial to abuse, so they are not offered as an API. Radar and warning layers come from the DWD GeoServer at `maps.dwd.de`, which serves them to anyone.\n\nOpen access, no key. Please respect the rate limit in the `X-RateLimit-*` headers and cache responses — the upstream data only changes hourly.\n\nWeather data © Deutscher Wetterdienst (DWD), used under GeoNutzV. Attribute DWD if you republish it.","contact":{"name":"Project source","url":"https://github.com/laffiesphere/EurofurenceWeather"},"license":{"name":"MIT"},"version":"2.1.0"},"paths":{"/api/v1/fsi":{"get":{"tags":["Public API v1"],"summary":"Current Fursuiting Index","description":"The headline score with its band, advice and sub-scores. A few hundred bytes -- use this for bots, widgets and status pages.","operationId":"get_fsi_api_v1_fsi_get","parameters":[{"name":"lang","in":"query","required":false,"schema":{"type":"string","pattern":"^(en|de)$","description":"Language for generated text","default":"en","title":"Lang"},"description":"Language for generated text"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FsiNow"}}}},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Service Unavailable"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RateLimited"}}},"description":"Too Many Requests"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/current":{"get":{"tags":["Public API v1"],"summary":"Current observed conditions","description":"The latest hourly surface observation from the DWD station.","operationId":"get_current_api_v1_current_get","parameters":[{"name":"lang","in":"query","required":false,"schema":{"type":"string","pattern":"^(en|de)$","description":"Language for generated text","default":"en","title":"Lang"},"description":"Language for generated text"},{"name":"wind_unit","in":"query","required":false,"schema":{"type":"string","pattern":"^(kmh|mph|kn)$","description":"Adds a converted pair of wind fields beside the km/h ones: mph gives wind_speed_mph/wind_gust_mph, kn gives wind_speed_kn/wind_gust_kn. The km/h fields are always there whatever you ask for.","default":"kmh","title":"Wind Unit"},"description":"Adds a converted pair of wind fields beside the km/h ones: mph gives wind_speed_mph/wind_gust_mph, kn gives wind_speed_kn/wind_gust_kn. The km/h fields are always there whatever you ask for."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CurrentConditions"}}}},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Service Unavailable"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RateLimited"}}},"description":"Too Many Requests"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/forecast":{"get":{"tags":["Public API v1"],"summary":"Hourly forecast with the index per hour","operationId":"get_forecast_api_v1_forecast_get","parameters":[{"name":"hours","in":"query","required":false,"schema":{"type":"integer","maximum":120,"minimum":1,"description":"How many hours from now","default":24,"title":"Hours"},"description":"How many hours from now"},{"name":"lang","in":"query","required":false,"schema":{"type":"string","pattern":"^(en|de)$","description":"Language for generated text","default":"en","title":"Lang"},"description":"Language for generated text"},{"name":"wind_unit","in":"query","required":false,"schema":{"type":"string","pattern":"^(kmh|mph|kn)$","description":"Adds a converted pair of wind fields beside the km/h ones: mph gives wind_speed_mph/wind_gust_mph, kn gives wind_speed_kn/wind_gust_kn. The km/h fields are always there whatever you ask for.","default":"kmh","title":"Wind Unit"},"description":"Adds a converted pair of wind fields beside the km/h ones: mph gives wind_speed_mph/wind_gust_mph, kn gives wind_speed_kn/wind_gust_kn. The km/h fields are always there whatever you ask for."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Forecast"}}}},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Service Unavailable"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RateLimited"}}},"description":"Too Many Requests"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/daily":{"get":{"tags":["Public API v1"],"summary":"Per-day summary with the best and worst hour","operationId":"get_daily_api_v1_daily_get","parameters":[{"name":"lang","in":"query","required":false,"schema":{"type":"string","pattern":"^(en|de)$","description":"Language for generated text","default":"en","title":"Lang"},"description":"Language for generated text"},{"name":"wind_unit","in":"query","required":false,"schema":{"type":"string","pattern":"^(kmh|mph|kn)$","description":"Adds a converted pair of wind fields beside the km/h ones: mph gives wind_speed_mph/wind_gust_mph, kn gives wind_speed_kn/wind_gust_kn. The km/h fields are always there whatever you ask for.","default":"kmh","title":"Wind Unit"},"description":"Adds a converted pair of wind fields beside the km/h ones: mph gives wind_speed_mph/wind_gust_mph, kn gives wind_speed_kn/wind_gust_kn. The km/h fields are always there whatever you ask for."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Daily"}}}},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Service Unavailable"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RateLimited"}}},"description":"Too Many Requests"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/warnings":{"get":{"tags":["Public API v1"],"summary":"Active official DWD warnings","description":"Warning wording is published by DWD in German only and is passed through verbatim; only the heading is translated. Warnings are reported alongside the index and do not alter its score -- combine them yourself if your use case needs that.","operationId":"get_warnings_api_v1_warnings_get","parameters":[{"name":"lang","in":"query","required":false,"schema":{"type":"string","pattern":"^(en|de)$","description":"Language for generated text","default":"en","title":"Lang"},"description":"Language for generated text"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Warnings"}}}},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Service Unavailable"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RateLimited"}}},"description":"Too Many Requests"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/scale":{"get":{"tags":["Public API v1"],"summary":"The index scale and its colours","description":"Colour your own charts to match. Defined once server-side, so clients never hold a copy that drifts.","operationId":"get_scale_api_v1_scale_get","parameters":[{"name":"lang","in":"query","required":false,"schema":{"type":"string","pattern":"^(en|de)$","description":"Language for generated text","default":"en","title":"Lang"},"description":"Language for generated text"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Scale"}}}},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Service Unavailable"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RateLimited"}}},"description":"Too Many Requests"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/overview":{"get":{"tags":["Public API v1"],"summary":"Everything at once, in the v1 shapes","description":"One call for a full dashboard. Larger than the focused endpoints -- prefer those if you only need one part.","operationId":"get_overview_api_v1_overview_get","parameters":[{"name":"hours","in":"query","required":false,"schema":{"type":"integer","maximum":120,"minimum":1,"default":24,"title":"Hours"}},{"name":"lang","in":"query","required":false,"schema":{"type":"string","pattern":"^(en|de)$","description":"Language for generated text","default":"en","title":"Lang"},"description":"Language for generated text"},{"name":"wind_unit","in":"query","required":false,"schema":{"type":"string","pattern":"^(kmh|mph|kn)$","description":"Adds a converted pair of wind fields beside the km/h ones: mph gives wind_speed_mph/wind_gust_mph, kn gives wind_speed_kn/wind_gust_kn. The km/h fields are always there whatever you ask for.","default":"kmh","title":"Wind Unit"},"description":"Adds a converted pair of wind fields beside the km/h ones: mph gives wind_speed_mph/wind_gust_mph, kn gives wind_speed_kn/wind_gust_kn. The km/h fields are always there whatever you ask for."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Overview"}}}},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Service Unavailable"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RateLimited"}}},"description":"Too Many Requests"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/load":{"get":{"tags":["Public API v1"],"summary":"How busy the site is right now","description":"A load signal, not an audience metric: visitors are counted per client address inside a short window, so one shared network counts once and a crawler counts as a person. Nothing about a visitor is stored.","operationId":"site_load_api_load_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SiteLoad"}}}}}}},"/api/health":{"get":{"tags":["Public API v1"],"summary":"Liveness and cache status","operationId":"health_api_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Health"}}}}}}}},"components":{"schemas":{"Band":{"properties":{"min":{"type":"number","title":"Min","description":"Lowest score in this band"},"key":{"type":"string","title":"Key","examples":["excellent","good","fair","poor","bad"]},"label":{"type":"string","title":"Label","description":"Translated name"},"color":{"type":"string","title":"Color","examples":["#40ad3e"]}},"type":"object","required":["min","key","label","color"],"title":"Band","description":"One step of the index scale."},"CurrentConditions":{"properties":{"observed_at":{"type":"string","title":"Observed At","description":"ISO 8601, station local time"},"temperature_c":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Temperature C"},"dewpoint_c":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Dewpoint C"},"humidity_percent":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Humidity Percent"},"wind_speed_kmh":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Wind Speed Kmh"},"wind_gust_kmh":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Wind Gust Kmh"},"wind_speed_mph":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Wind Speed Mph","description":"Only present with ?wind_unit=mph"},"wind_gust_mph":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Wind Gust Mph","description":"Only present with ?wind_unit=mph"},"wind_speed_kn":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Wind Speed Kn","description":"Only present with ?wind_unit=kn"},"wind_gust_kn":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Wind Gust Kn","description":"Only present with ?wind_unit=kn"},"wind_direction_deg":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Wind Direction Deg"},"wind_direction":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Wind Direction","examples":["NW"]},"beaufort":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Beaufort"},"pressure_hpa":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Pressure Hpa"},"cloud_cover_percent":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Cloud Cover Percent"},"precipitation_mm":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Precipitation Mm","description":"Last hour"},"visibility_m":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Visibility M"},"weather":{"$ref":"#/components/schemas/Weather"},"meta":{"$ref":"#/components/schemas/Meta"}},"type":"object","required":["observed_at","weather","meta"],"title":"CurrentConditions"},"Daily":{"properties":{"days":{"items":{"$ref":"#/components/schemas/DailyEntry"},"type":"array","title":"Days"},"meta":{"$ref":"#/components/schemas/Meta"}},"type":"object","required":["days","meta"],"title":"Daily"},"DailyEntry":{"properties":{"date":{"type":"string","title":"Date","examples":["2026-09-04"]},"weekday":{"type":"string","title":"Weekday"},"partial":{"type":"boolean","title":"Partial","description":"True when the horizon only covers part of the day"},"hour_count":{"type":"integer","title":"Hour Count"},"temperature_max_c":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Temperature Max C"},"temperature_min_c":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Temperature Min C"},"precipitation_mm":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Precipitation Mm"},"precipitation_probability":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Precipitation Probability"},"wind_speed_kmh":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Wind Speed Kmh"},"wind_gust_kmh":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Wind Gust Kmh"},"wind_speed_mph":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Wind Speed Mph","description":"Only present with ?wind_unit=mph"},"wind_gust_mph":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Wind Gust Mph","description":"Only present with ?wind_unit=mph"},"wind_speed_kn":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Wind Speed Kn","description":"Only present with ?wind_unit=kn"},"wind_gust_kn":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Wind Gust Kn","description":"Only present with ?wind_unit=kn"},"wind_direction_deg":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Wind Direction Deg","description":"Speed-weighted vector mean over the day"},"wind_direction":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Wind Direction","examples":["NW"]},"humidity_percent":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Humidity Percent"},"sunshine_hours":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Sunshine Hours"},"weather":{"$ref":"#/components/schemas/Weather"},"fsi_max":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Fsi Max"},"fsi_min":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Fsi Min"},"fsi_avg":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Fsi Avg"},"best_hour":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Best Hour","examples":["07:00"]},"worst_hour":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Worst Hour","examples":["14:00"]},"best_window":{"anyOf":[{"$ref":"#/components/schemas/Window"},{"type":"null"}],"description":"The stretch of hours the day's best hour sits in"},"worst_window":{"anyOf":[{"$ref":"#/components/schemas/Window"},{"type":"null"}],"description":"The stretch of hours the day's worst hour sits in"}},"type":"object","required":["date","weekday","partial","hour_count","weather"],"title":"DailyEntry"},"Forecast":{"properties":{"hours":{"items":{"$ref":"#/components/schemas/ForecastHour"},"type":"array","title":"Hours"},"issued_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Issued At","description":"MOSMIX run time"},"meta":{"$ref":"#/components/schemas/Meta"}},"type":"object","required":["hours","meta"],"title":"Forecast"},"ForecastHour":{"properties":{"time":{"type":"string","title":"Time","description":"ISO 8601 with offset, local time"},"score":{"type":"number","maximum":10.0,"minimum":0.0,"title":"Score"},"band":{"type":"string","title":"Band"},"color":{"type":"string","title":"Color"},"temperature_c":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Temperature C"},"humidity_percent":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Humidity Percent"},"wind_speed_kmh":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Wind Speed Kmh"},"wind_gust_kmh":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Wind Gust Kmh"},"wind_speed_mph":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Wind Speed Mph","description":"Only present with ?wind_unit=mph"},"wind_gust_mph":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Wind Gust Mph","description":"Only present with ?wind_unit=mph"},"wind_speed_kn":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Wind Speed Kn","description":"Only present with ?wind_unit=kn"},"wind_gust_kn":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Wind Gust Kn","description":"Only present with ?wind_unit=kn"},"precipitation_mm":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Precipitation Mm"},"precipitation_probability":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Precipitation Probability"},"weather":{"$ref":"#/components/schemas/Weather"}},"type":"object","required":["time","score","band","color","weather"],"title":"ForecastHour"},"FsiNow":{"properties":{"score":{"type":"number","maximum":10.0,"minimum":0.0,"title":"Score","examples":[6.9]},"band":{"type":"string","title":"Band","description":"Translated band name","examples":["Fair"]},"band_key":{"type":"string","title":"Band Key","examples":["fair"]},"color":{"type":"string","title":"Color"},"advice":{"type":"string","title":"Advice"},"easter_egg":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Easter Egg","description":"Cosmetic only"},"wetbulb_c":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Wetbulb C"},"effective_wetbulb_c":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Effective Wetbulb C","description":"Wet-bulb plus the solar load a suit absorbs"},"dewpoint_c":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Dewpoint C"},"observed_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Observed At"},"subscores":{"items":{"$ref":"#/components/schemas/SubScore"},"type":"array","title":"Subscores"},"meta":{"$ref":"#/components/schemas/Meta"}},"type":"object","required":["score","band","band_key","color","advice","meta"],"title":"FsiNow","description":"The headline number. Small on purpose -- ideal for bots and widgets."},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"Health":{"properties":{"status":{"type":"string","title":"Status"},"event":{"type":"string","title":"Event"},"location":{"type":"string","title":"Location"},"station":{"type":"string","title":"Station"},"cache_age_seconds":{"additionalProperties":{"anyOf":[{"type":"integer"},{"type":"null"}]},"type":"object","title":"Cache Age Seconds"}},"type":"object","required":["status","event","location","station","cache_age_seconds"],"title":"Health"},"Meta":{"properties":{"event":{"type":"string","title":"Event","examples":["Magdeburg Wetter"]},"location":{"type":"string","title":"Location","examples":["Magdeburg"]},"latitude":{"type":"number","title":"Latitude"},"longitude":{"type":"number","title":"Longitude"},"timezone":{"type":"string","title":"Timezone","examples":["Europe/Berlin"]},"station_id":{"type":"string","title":"Station Id","description":"DWD station used for observations and MOSMIX"},"generated_at":{"type":"string","title":"Generated At","description":"ISO 8601, UTC"},"language":{"type":"string","title":"Language","examples":["en","de"]},"attribution":{"type":"string","title":"Attribution"},"degraded":{"items":{"type":"string"},"type":"array","title":"Degraded","description":"Upstream sources that were unreachable for this response"}},"type":"object","required":["event","location","latitude","longitude","timezone","station_id","generated_at","language","attribution"],"title":"Meta","description":"Who and where the numbers describe, plus provenance."},"Overview":{"properties":{"fsi":{"anyOf":[{"$ref":"#/components/schemas/FsiNow"},{"type":"null"}]},"current":{"anyOf":[{"$ref":"#/components/schemas/CurrentConditions"},{"type":"null"}]},"forecast":{"$ref":"#/components/schemas/Forecast"},"daily":{"$ref":"#/components/schemas/Daily"},"warnings":{"$ref":"#/components/schemas/Warnings"},"best_window":{"anyOf":[{"$ref":"#/components/schemas/Window"},{"type":"null"}]},"worst_window":{"anyOf":[{"$ref":"#/components/schemas/Window"},{"type":"null"}]},"scale":{"$ref":"#/components/schemas/Scale"},"meta":{"$ref":"#/components/schemas/Meta"}},"type":"object","required":["forecast","daily","warnings","scale","meta"],"title":"Overview","description":"Everything at once, in the v1 shapes -- one call for a full dashboard."},"Problem":{"properties":{"detail":{"type":"string","title":"Detail"}},"type":"object","required":["detail"],"title":"Problem"},"RateLimited":{"properties":{"detail":{"type":"string","title":"Detail"},"retry_after_seconds":{"type":"integer","title":"Retry After Seconds"}},"type":"object","required":["detail","retry_after_seconds"],"title":"RateLimited"},"Scale":{"properties":{"bands":{"items":{"$ref":"#/components/schemas/Band"},"type":"array","title":"Bands"},"suitable_from":{"type":"number","title":"Suitable From","description":"At or above this an hour counts as suitable"},"meta":{"$ref":"#/components/schemas/Meta"}},"type":"object","required":["bands","suitable_from","meta"],"title":"Scale","description":"The index scale, so a client can colour its own charts consistently."},"SiteLoad":{"properties":{"enabled":{"type":"boolean","title":"Enabled","description":"False means nothing is counted and the numbers are meaningless"},"visitors":{"type":"integer","title":"Visitors","description":"Distinct client addresses seen inside the window"},"level":{"type":"string","title":"Level","description":"normal, busy or crowded -- what the site shows a notice for","examples":["normal"]},"in_flight_requests":{"type":"integer","title":"In Flight Requests","description":"Requests being served at this instant"},"window_seconds":{"type":"integer","title":"Window Seconds","description":"How long since their last request someone still counts"},"busy_at":{"type":"integer","title":"Busy At"},"crowded_at":{"type":"integer","title":"Crowded At"},"peak_visitors":{"type":"integer","title":"Peak Visitors","description":"Highest count since the process started"}},"type":"object","required":["enabled","visitors","level","in_flight_requests","window_seconds","busy_at","crowded_at","peak_visitors"],"title":"SiteLoad","description":"How busy the machine serving this site is."},"SubScore":{"properties":{"key":{"type":"string","title":"Key","examples":["thermal_humidity"]},"label":{"type":"string","title":"Label"},"score":{"type":"number","maximum":10.0,"minimum":0.0,"title":"Score"},"weight":{"type":"number","maximum":1.0,"minimum":0.0,"title":"Weight"},"reason":{"type":"string","title":"Reason"}},"type":"object","required":["key","label","score","weight","reason"],"title":"SubScore"},"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"},"WarningItem":{"properties":{"event":{"type":"string","title":"Event","description":"DWD's own German event name"},"label":{"type":"string","title":"Label","description":"Translated heading, e.g. 'Heat warning (moderate)'"},"kind":{"type":"string","title":"Kind","examples":["heat","thunderstorm","wind","rain"]},"severity":{"type":"string","title":"Severity","examples":["minor","moderate","severe","extreme"]},"advance":{"type":"boolean","title":"Advance","description":"True for a Vorabinformation -- possible severe weather, not yet certain"},"level":{"type":"integer","title":"Level","description":"Raw DWD level"},"color":{"type":"string","title":"Color"},"region":{"type":"string","title":"Region"},"start":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Start"},"end":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"End"},"headline":{"type":"string","title":"Headline","description":"Official wording, German"},"description":{"type":"string","title":"Description","description":"Official wording, German"},"instruction":{"type":"string","title":"Instruction","description":"Official wording, German"}},"type":"object","required":["event","label","kind","severity","advance","level","color","region","headline","description","instruction"],"title":"WarningItem"},"Warnings":{"properties":{"warnings":{"items":{"$ref":"#/components/schemas/WarningItem"},"type":"array","title":"Warnings"},"count":{"type":"integer","title":"Count"},"meta":{"$ref":"#/components/schemas/Meta"}},"type":"object","required":["warnings","count","meta"],"title":"Warnings"},"Weather":{"properties":{"code":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Code","description":"WMO ww significant weather code"},"text":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Text"},"icon":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Icon"}},"type":"object","title":"Weather"},"Window":{"properties":{"start":{"type":"string","title":"Start"},"end":{"type":"string","title":"End"},"hours":{"type":"integer","title":"Hours"},"score":{"type":"number","title":"Score","description":"Best score in a good window, worst in a bad one"}},"type":"object","required":["start","end","hours","score"],"title":"Window","description":"A run of consecutive hours worth planning around, or avoiding."}}}}