{"openapi":"3.0.3","info":{"title":"Weather Data Hub API","version":"1.0.0","description":"OpenAPI description for Weather Data Hub service endpoints."},"servers":[{"url":"/"}],"tags":[{"name":"Service"},{"name":"Meteo Data"},{"name":"Bulletins"},{"name":"Docs"},{"name":"GRIB Info"},{"name":"GRIB Layers"},{"name":"GRIB Points"},{"name":"GRIB WFS"},{"name":"GRIB TMS"},{"name":"GRIB Internal"}],"paths":{"/":{"get":{"tags":["Service"],"summary":"Service landing page","responses":{"200":{"description":"HTML response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/healthcheck":{"get":{"tags":["Service"],"summary":"Health check","responses":{"200":{"description":"Service health","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HealthcheckResponse"}}}}}}},"/api/foo":{"get":{"tags":["Service"],"summary":"Basic API status endpoint","responses":{"200":{"description":"Status payload","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FooResponse"}}}}}}},"/api/create":{"post":{"tags":["Service"],"summary":"Create placeholder resource","requestBody":{"required":false,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenericObject"}}}},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MessageResponse"}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MessageResponse"}}}}}}},"/api/bulletins/point":{"post":{"tags":["Bulletins"],"summary":"Create meteorological bulletin for a point or aerodrome","requestBody":{"required":false,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BulletinPointRequest"}}}},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BulletinResponse"}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MessageResponse"}}}}}}},"/api/bulletins/route":{"post":{"tags":["Bulletins"],"summary":"Create meteorological bulletin for a route","requestBody":{"required":false,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BulletinRouteRequest"}}}},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BulletinResponse"}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MessageResponse"}}}}}}},"/api/bulletins/nearest-aerodrome":{"get":{"tags":["Bulletins"],"summary":"Resolve nearest aerodrome for point coordinates","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number"}},{"name":"lon","in":"query","required":true,"schema":{"type":"number"}},{"name":"radius_km","in":"query","required":false,"schema":{"type":"number"}}],"responses":{"200":{"description":"Nearest aerodrome payload","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NearestAerodromeResponse"}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MessageResponse"}}}}}}},"/api/bulletins/{id}":{"get":{"tags":["Bulletins"],"summary":"Get stored meteorological bulletin by id","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Bulletin payload","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BulletinResponse"}}}},"404":{"description":"Bulletin not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MessageResponse"}}}}}}},"/api/bulletins/{id}.html":{"get":{"tags":["Bulletins"],"summary":"Get stored meteorological bulletin as HTML","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Bulletin HTML","content":{"text/html":{"schema":{"type":"string"}}}},"404":{"description":"Bulletin not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MessageResponse"}}}}}}},"/api/bulletins/{id}.pdf":{"get":{"tags":["Bulletins"],"summary":"Get stored meteorological bulletin as PDF","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Bulletin PDF","content":{"application/pdf":{"schema":{"type":"string","format":"binary"}}}},"404":{"description":"Bulletin not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MessageResponse"}}}},"503":{"description":"PDF renderer unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MessageResponse"}}}}}}},"/api/bulletins/{id}.md":{"get":{"tags":["Bulletins"],"summary":"Get stored meteorological bulletin as Markdown","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Bulletin Markdown","content":{"text/markdown":{"schema":{"type":"string"}}}},"404":{"description":"Bulletin not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MessageResponse"}}}}}}},"/api/meteoData/getSigwxUpdateDate":{"get":{"tags":["Meteo Data"],"summary":"SIGWX update timestamp by source","parameters":[{"name":"type","in":"query","required":true,"schema":{"type":"string","enum":["ROS_HYDRO_MET","SADIS"]}}],"responses":{"200":{"description":"SIGWX update timestamp","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SigwxUpdateDateResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MessageResponse"}}}}}}},"/api/meteoData/getAerodromWeather":{"get":{"tags":["Meteo Data"],"summary":"Aerodrome weather payload by airport index","parameters":[{"name":"index","in":"query","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Aerodrome weather","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AerodromWeatherResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MessageResponse"}}}}}}},"/api/Meteo/getTafByAirportAndDate":{"get":{"tags":["Meteo Data"],"summary":"TAF list by airport and date","parameters":[{"name":"index","in":"query","required":true,"schema":{"type":"string"}},{"name":"date","in":"query","required":true,"schema":{"type":"string","format":"date-time"}}],"responses":{"200":{"description":"TAF list","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenericArray"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MessageResponse"}}}}}}},"/api/Meteo/getTafByAirportsAndDate":{"post":{"tags":["Meteo Data"],"summary":"TAF list by airports and date","parameters":[{"name":"date","in":"query","required":true,"schema":{"type":"string","format":"date-time"}},{"name":"updated_after","in":"query","required":false,"schema":{"type":"string","format":"date-time"}}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StringArray"}}}},"responses":{"200":{"description":"TAF list","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenericArray"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MessageResponse"}}}}}}},"/api/Meteo/getTafMapByAirportsAndDate":{"post":{"tags":["Meteo Data"],"summary":"Latest TAF map by airports and date","parameters":[{"name":"date","in":"query","required":true,"schema":{"type":"string","format":"date-time"}},{"name":"updated_after","in":"query","required":false,"schema":{"type":"string","format":"date-time"}}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StringArray"}}}},"responses":{"200":{"description":"TAF map","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenericObject"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MessageResponse"}}}}}}},"/api/Meteo/getMetarTafText":{"get":{"tags":["Meteo Data"],"summary":"METAR/SPECI/TAF raw texts after dateTime","parameters":[{"name":"dateTime","in":"query","required":true,"schema":{"type":"string","format":"date-time"}}],"responses":{"200":{"description":"Raw text list","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StringArray"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MessageResponse"}}}}}}},"/api/Meteo/getExternalMeteo":{"get":{"tags":["Meteo Data"],"summary":"METAR/SPECI as GeoJSON by bbox or airport id","parameters":[{"name":"bbox","in":"query","required":false,"schema":{"type":"string"},"description":"Bounding box in lon1,lat1,lon2,lat2 format"},{"name":"id","in":"query","required":false,"schema":{"type":"string"},"description":"Airport ICAO/designator"}],"responses":{"200":{"description":"METAR GeoJSON","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenericObject"}}}}}},"post":{"tags":["Meteo Data"],"summary":"METAR/SPECI as GeoJSON by bbox or airport id","parameters":[{"name":"bbox","in":"query","required":false,"schema":{"type":"string"},"description":"Bounding box in lon1,lat1,lon2,lat2 format"},{"name":"id","in":"query","required":false,"schema":{"type":"string"},"description":"Airport ICAO/designator"}],"responses":{"200":{"description":"METAR GeoJSON","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenericObject"}}}}}}},"/api/Meteo/getWeatherBoard":{"get":{"tags":["Meteo Data"],"summary":"Airport weather board","parameters":[{"name":"icao_code","in":"query","required":false,"schema":{"type":"string"},"description":"Optional repeated airport ICAO filter"}],"responses":{"200":{"description":"Weather board list","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenericArray"}}}}}}},"/api/Meteo/militaryMeteoAer":{"get":{"tags":["Meteo Data"],"summary":"Legacy military weather board wrapper","responses":{"200":{"description":"Military weather board","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenericObject"}}}}}},"post":{"tags":["Meteo Data"],"summary":"Legacy military weather board wrapper","responses":{"200":{"description":"Military weather board","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenericObject"}}}}}}},"/api/Meteo/getMetarTafByAirpotsList":{"post":{"tags":["Meteo Data"],"summary":"METAR and TAF raw text by airport list","requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"array","items":{"type":"string"}}}}},"responses":{"200":{"description":"METAR/TAF list","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenericArray"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MessageResponse"}}}}}}},"/api/Meteo/internal/getSigmets":{"get":{"tags":["Meteo Data"],"summary":"Active SIGMET zones","responses":{"200":{"description":"SIGMET zone list","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenericArray"}}}}}}},"/api/Meteo/internal/getAirmets":{"get":{"tags":["Meteo Data"],"summary":"Active AIRMET zones","responses":{"200":{"description":"AIRMET zone list","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenericArray"}}}}}}},"/api/Meteo/internal/getGamets":{"get":{"tags":["Meteo Data"],"summary":"Active GAMET zones","responses":{"200":{"description":"GAMET zone list","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenericArray"}}}}}}},"/api/meteoData/getSigmet":{"get":{"tags":["Meteo Data"],"summary":"SIGMET by id","parameters":[{"name":"id","in":"query","required":true,"schema":{"type":"integer","format":"int64"}}],"responses":{"200":{"description":"SIGMET payload","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenericObject"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MessageResponse"}}}}}}},"/api/meteoData/getAirmet":{"get":{"tags":["Meteo Data"],"summary":"AIRMET by id","parameters":[{"name":"id","in":"query","required":true,"schema":{"type":"integer","format":"int64"}}],"responses":{"200":{"description":"AIRMET payload","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenericObject"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MessageResponse"}}}}}}},"/api/meteoData/getGamet":{"get":{"tags":["Meteo Data"],"summary":"GAMET by id","parameters":[{"name":"id","in":"query","required":true,"schema":{"type":"integer","format":"int64"}}],"responses":{"200":{"description":"GAMET payload","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenericObject"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MessageResponse"}}}}}}},"/api/meteoData/getVa":{"get":{"tags":["Meteo Data"],"summary":"Volcanic ash advisory by id","parameters":[{"name":"id","in":"query","required":true,"schema":{"type":"integer","format":"int64"}}],"responses":{"200":{"description":"VA advisory payload","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenericObject"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MessageResponse"}}}}}}},"/api/meteoData/getTc":{"get":{"tags":["Meteo Data"],"summary":"Tropical cyclone advisory by id","parameters":[{"name":"id","in":"query","required":true,"schema":{"type":"integer","format":"int64"}}],"responses":{"200":{"description":"TC advisory payload","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenericObject"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MessageResponse"}}}}}}},"/api/meteoData/getSigmetGeometry":{"post":{"tags":["Meteo Data"],"summary":"Active SIGMET geometry list","responses":{"200":{"description":"SIGMET geometry list","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenericArray"}}}}}}},"/api/meteoData/getSigmetList":{"post":{"tags":["Meteo Data"],"summary":"Active SIGMET list","responses":{"200":{"description":"SIGMET main list","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenericArray"}}}}}}},"/api/meteoData/getAirmetGeometry":{"post":{"tags":["Meteo Data"],"summary":"Active AIRMET geometry list","responses":{"200":{"description":"AIRMET geometry list","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenericArray"}}}}}}},"/api/meteoData/getGametGeometry":{"post":{"tags":["Meteo Data"],"summary":"Active GAMET geometry list","responses":{"200":{"description":"GAMET geometry list","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenericArray"}}}}}}},"/api/meteoData/getTcAdvisoryList":{"get":{"tags":["Meteo Data"],"summary":"Active tropical cyclone advisory list","responses":{"200":{"description":"TC advisory list","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenericArray"}}}}}}},"/api/openapi.json":{"get":{"tags":["Docs"],"summary":"OpenAPI JSON document","responses":{"200":{"description":"OpenAPI document","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenericObject"}}}}}}},"/api/docs":{"get":{"tags":["Docs"],"summary":"Swagger UI page","responses":{"200":{"description":"HTML response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/api/grib/getGribInfo":{"post":{"tags":["GRIB Info"],"summary":"GRIB metadata","requestBody":{"required":false,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenericObject"}}}},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenericObject"}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MessageResponse"}}}}}}},"/api/Meteo/getGribInfo":{"post":{"tags":["Meteo"],"summary":"Legacy alias for GRIB metadata","requestBody":{"required":false,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenericObject"}}}},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenericObject"}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MessageResponse"}}}}}}},"/api/grib/getGribLayersInfo":{"get":{"tags":["GRIB Info"],"summary":"GRIB layers metadata","responses":{"200":{"description":"Layers metadata","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenericObject"}}}}}}},"/api/grib/getGribLayersData":{"get":{"tags":["GRIB Layers"],"summary":"GRIB layers as binary payload","parameters":[{"name":"forecast","in":"query","required":false,"schema":{"type":"integer"}},{"name":"height","in":"query","required":false,"schema":{"type":"string"}},{"name":"type","in":"query","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Layer binary payload","content":{"application/octet-stream":{"schema":{"type":"string","format":"binary"}}}}}}},"/api/grib/getGribLayersDataJson":{"get":{"tags":["GRIB Layers"],"summary":"GRIB layers as JSON payload","parameters":[{"name":"forecast","in":"query","required":false,"schema":{"type":"integer"}},{"name":"height","in":"query","required":false,"schema":{"type":"string"}},{"name":"type","in":"query","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Layer JSON payload","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenericArray"}}}}}}},"/api/grib/getSimpleRouteMeteoByGrib":{"post":{"tags":["GRIB Points"],"summary":"Meteo for route points","requestBody":{"required":false,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PointsArrayRequest"}}}},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenericObject"}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MessageResponse"}}}}}}},"/api/grib/getMfpGrib":{"post":{"tags":["GRIB Points"],"summary":"MFP GRIB data","requestBody":{"required":false,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenericObject"}}}},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenericArray"}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MessageResponse"}}}}}}},"/api/grib/getGribForPoints":{"post":{"tags":["GRIB Points"],"summary":"GRIB forecast by points","requestBody":{"required":false,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenericObject"}}}},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenericArray"}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MessageResponse"}}}}}}},"/api/grib/getSppiMeteoPoint":{"post":{"tags":["GRIB Points"],"summary":"SPPI meteo for point","requestBody":{"required":false,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenericObject"}}}},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenericObject"}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MessageResponse"}}}}}}},"/api/grib/getSppiMeteoPoints":{"post":{"tags":["GRIB Points"],"summary":"SPPI meteo for points","requestBody":{"required":false,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenericObject"}}}},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenericArray"}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MessageResponse"}}}}}}},"/api/grib/getMeteoByBbox":{"post":{"tags":["GRIB Points"],"summary":"Meteo by bounding box","requestBody":{"required":false,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenericObject"}}}},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenericObject"}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MessageResponse"}}}}}}},"/api/grib/getMeteoByTypeInPoint":{"post":{"tags":["GRIB Points"],"summary":"Meteo by type in point","requestBody":{"required":false,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenericObject"}}}},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenericObject"}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MessageResponse"}}}}}}},"/api/grib/wfs/wfs_keys_pb":{"post":{"tags":["GRIB WFS"],"summary":"WFS keys protobuf payload","requestBody":{"required":false,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenericObject"}}}},"responses":{"200":{"description":"WFS keys payload","content":{"application/x-protobuf":{"schema":{"type":"string","format":"binary"}}}}}}},"/api/grib/wfs/wfs_grid_wind_pb":{"post":{"tags":["GRIB WFS"],"summary":"WFS wind grid protobuf payload","requestBody":{"required":false,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenericObject"}}}},"responses":{"200":{"description":"WFS wind grid payload","content":{"application/x-protobuf":{"schema":{"type":"string","format":"binary"}}}}}}},"/api/grib/tms/getTileImage":{"post":{"tags":["GRIB TMS"],"summary":"Get tile image","requestBody":{"required":false,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenericObject"}}}},"responses":{"200":{"description":"WebP tile image","content":{"image/webp":{"schema":{"type":"string","format":"binary"}}}}}}},"/api/grib/tms/renderTileImage":{"post":{"tags":["GRIB TMS"],"summary":"Render tile image","requestBody":{"required":false,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenericObject"}}}},"responses":{"200":{"description":"WebP tile image","content":{"image/webp":{"schema":{"type":"string","format":"binary"}}}}}}},"/api/grib/tms/{type}/{forecast}/{height}/{z}/{x}/{y}.webp":{"get":{"tags":["GRIB TMS"],"summary":"Get tile image by path params","parameters":[{"name":"type","in":"path","required":true,"schema":{"type":"string"}},{"name":"forecast","in":"path","required":true,"schema":{"type":"integer"}},{"name":"height","in":"path","required":true,"schema":{"type":"string"}},{"name":"z","in":"path","required":true,"schema":{"type":"integer"}},{"name":"x","in":"path","required":true,"schema":{"type":"integer"}},{"name":"y","in":"path","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"WebP tile image","content":{"image/webp":{"schema":{"type":"string","format":"binary"}}}}}}},"/api/grib/tms/reload":{"get":{"tags":["GRIB TMS"],"summary":"Reload tile cache","responses":{"200":{"description":"Reload status","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MessageResponse"}}}}}}},"/api/grib/tms/testMem":{"get":{"tags":["GRIB TMS"],"summary":"Warmup tile cache","responses":{"200":{"description":"Warmup status","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MessageResponse"}}}}}}},"/api/grib/internal/reloadData":{"get":{"tags":["GRIB Internal"],"summary":"Trigger GRIB data reload","responses":{"200":{"description":"Reload status","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MessageResponse"}}}}}}}},"components":{"schemas":{"HealthcheckResponse":{"type":"object","properties":{"Status":{"type":"string","example":"Healthy"}},"required":["Status"]},"FooResponse":{"type":"object","properties":{"status":{"type":"string","example":"Ok"}},"required":["status"]},"MessageResponse":{"type":"object","properties":{"status":{"type":"string"},"message":{"type":"string"},"endpoint":{"type":"string"},"timestamp":{"type":"string"}},"additionalProperties":true},"SigwxUpdateDateResponse":{"type":"object","properties":{"updateDate":{"type":"string","format":"date-time","nullable":true}},"required":["updateDate"]},"AerodromWeatherResponse":{"type":"object","properties":{"index":{"type":"string"},"metarSpeciModel":{"$ref":"#/components/schemas/GenericObject"},"tafModel":{"$ref":"#/components/schemas/GenericObject"}},"required":["index","metarSpeciModel","tafModel"]},"BulletinPointRequest":{"type":"object","properties":{"icao":{"type":"string","example":"UUDD"},"lat":{"type":"number","format":"double"},"lon":{"type":"number","format":"double"},"time":{"type":"string","format":"date-time"},"forecast_horizon_hours":{"type":"integer","default":12},"radius_km":{"type":"number","default":50},"flight_level":{"type":"integer"},"raster_parameters":{"type":"array","items":{"type":"string"}},"raster_levels":{"type":"array","items":{"type":"string"}},"raster_forecast_time":{"type":"string","format":"date-time"}},"additionalProperties":true},"BulletinRouteRequest":{"type":"object","properties":{"departure":{"type":"string","example":"UUDD"},"destination":{"type":"string","example":"ULLI"},"alternates":{"type":"array","items":{"type":"string"}},"departure_time":{"type":"string","format":"date-time"},"flight_level":{"type":"integer"},"raster_parameters":{"type":"array","items":{"type":"string"}},"raster_levels":{"type":"array","items":{"type":"string"}},"raster_forecast_time":{"type":"string","format":"date-time"},"corridor_km":{"type":"number","default":50},"waypoints":{"type":"array","items":{"$ref":"#/components/schemas/Point"}}},"additionalProperties":true},"BulletinResponse":{"type":"object","properties":{"id":{"type":"string"},"kind":{"type":"string","enum":["point","route"]},"status":{"type":"string"},"generated_at":{"type":"string","format":"date-time"},"validity":{"$ref":"#/components/schemas/GenericObject"},"summary":{"$ref":"#/components/schemas/GenericObject"},"aerodromes":{"$ref":"#/components/schemas/GenericArray"},"metar":{"$ref":"#/components/schemas/GenericArray"},"taf":{"$ref":"#/components/schemas/GenericArray"},"hazards":{"$ref":"#/components/schemas/GenericArray"},"raster_data":{"$ref":"#/components/schemas/GenericArray"},"cks_vector_data":{"$ref":"#/components/schemas/GenericArray"},"data_quality":{"$ref":"#/components/schemas/GenericArray"},"formatted_markdown":{"type":"string"}},"additionalProperties":true},"NearestAerodromeResponse":{"type":"object","properties":{"query":{"$ref":"#/components/schemas/GenericObject"},"aerodrome":{"nullable":true,"allOf":[{"$ref":"#/components/schemas/Aerodrome"}]}},"required":["query","aerodrome"]},"Aerodrome":{"type":"object","properties":{"code":{"type":"string"},"iata":{"type":"string"},"name":{"type":"string"},"country":{"type":"string"},"lat":{"type":"number","format":"double"},"lon":{"type":"number","format":"double"},"distance_km":{"type":"number"},"source":{"type":"string"}},"additionalProperties":true},"Point":{"type":"object","properties":{"lat":{"type":"number","format":"double"},"lon":{"type":"number","format":"double"}},"required":["lat","lon"]},"PointsArrayRequest":{"type":"array","items":{"$ref":"#/components/schemas/Point"}},"GenericObject":{"type":"object","additionalProperties":true},"GenericArray":{"type":"array","items":{}},"StringArray":{"type":"array","items":{"type":"string"}}}}}