{"openapi":"3.1.0","info":{"title":"Weather API","version":"1.0.0","description":"Real-time weather: current conditions, multi-day forecast, historical weather, marine/wave forecast, astronomy (sun/UV), air quality, geocoding and timezone.","contact":{"name":"PremiumApi","url":"https://www.oanor.com/by/premiumapi"}},"servers":[{"url":"https://api.oanor.com/weather-api","description":"oanor gateway"}],"tags":[{"name":"Forecast"},{"name":"Marine"},{"name":"Astronomy"},{"name":"Air Quality"},{"name":"Location"}],"components":{"securitySchemes":{"oanorKey":{"type":"apiKey","in":"header","name":"x-oanor-key","description":"Get your key at https://www.oanor.com/developer/keys"}}},"security":[{"oanorKey":[]}],"paths":{"/v1/current":{"get":{"operationId":"get_v1_current","tags":["Forecast"],"summary":"Current weather","description":"","parameters":[{"name":"q","in":"query","required":true,"description":"City name or 'lat,lon'","schema":{"type":"string"},"example":"Berlin"}],"security":[{"oanorKey":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"example":{"data":{"units":{"rain":"mm","time":"iso8601","is_day":"","showers":"mm","interval":"seconds","snowfall":"cm","cloud_cover":"%","pressure_msl":"hPa","weather_code":"wmo code","precipitation":"mm","temperature_2m":"°C","wind_gusts_10m":"km/h","wind_speed_10m":"km/h","surface_pressure":"hPa","wind_direction_10m":"°","apparent_temperature":"°C","relative_humidity_2m":"%"},"current":{"time":"2026-05-29T20:15","is_day":true,"temp_c":25.7,"rain_mm":0,"humidity":24,"wind_kmh":3.8,"condition":{"code":3,"text":"Overcast"},"precip_mm":0,"cloud_cover":98,"snowfall_cm":0,"feels_like_c":23.6,"pressure_msl":1019.6,"wind_dir_deg":311,"wind_gust_kmh":21.2},"location":{"name":"Berlin","region":"State of Berlin","country":"Germany","latitude":52.52437,"timezone":"Europe/Berlin","elevation":46,"longitude":13.41053,"country_code":"DE","utc_offset_seconds":7200}},"meta":{"timestamp":"2026-05-29T18:17:22.192Z","request_id":"e4a50435-eeea-48d1-a813-6782b9ade0e6"},"status":"ok","message":"Current weather retrieved successfully","success":true}}}},"401":{"description":"Missing or invalid x-oanor-key header"},"402":{"description":"Active subscription required"},"429":{"description":"Rate-limit or monthly quota reached"},"502":{"description":"Upstream did not respond"}}}},"/v1/forecast":{"get":{"operationId":"get_v1_forecast","tags":["Forecast"],"summary":"Multi-day forecast","description":"","parameters":[{"name":"q","in":"query","required":true,"description":"City name or 'lat,lon'","schema":{"type":"string"},"example":"Berlin"},{"name":"days","in":"query","required":false,"description":"Number of days (1-16)","schema":{"type":"string"},"example":"5"}],"security":[{"oanorKey":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"example":{"data":{"units":{"daily":{"time":"iso8601","sunset":"iso8601","sunrise":"iso8601","uv_index_max":"","weather_code":"wmo code","precipitation_sum":"mm","temperature_2m_max":"°C","temperature_2m_min":"°C","wind_gusts_10m_max":"km/h","wind_speed_10m_max":"km/h","apparent_temperature_max":"°C","apparent_temperature_min":"°C","wind_direction_10m_dominant":"°","precipitation_probability_max":"%"},"hourly":{"time":"iso8601","weather_code":"wmo code","precipitation":"mm","temperature_2m":"°C","wind_speed_10m":"km/h","wind_direction_10m":"°","relative_humidity_2m":"%","precipitation_probability":"%"}},"hourly":{"time":["2026-05-29T00:00","2026-05-29T01:00","2026-05-29T02:00","2026-05-29T03:00","2026-05-29T04:00","2026-05-29T05:00","2026-05-29T06:00","2026-05-29T07:00","2026-05-29T08:00","2026-05-29T09:00","2026-05-29T10:00","2026-05-29T11:00","2026-05-29T12:00","2026-05-29T13:00","2026-05-29T14:00","2026-05-29T15:00","2026-05-29T16:00","2026-05-29T17:00","2026-05-29T18:00","2026-05-29T19:00","2026-05-29T20:00","2026-05-29T21:00","2026-05-29T22:00","2026-05-29T23:00","2026-05-30T00:00","2026-05-30T01:00","2026-05-30T02:00","2026-05-30T03:00","2026-05-30T04:00","2026-05-30T05:00","2026-05-30T06:00","2026-05-30T07:00","2026-05-30T08:00","2026-05-30T09:00","2026-05-30T10:00","2026-05-30T11:00","2026-05-30T12:00","2026-05-30T13:00","2026-05-30T14:00","2026-05-30T15:00","2026-05-30T16:00","2026-05-30T17:00","2026-05-30T18:00","2026-05-30T19:00","2026-05-30T20:00","2026-05-30T21:00","2026-05-30T22:00","2026-05-30T23:00","2026-05-31T00:00","2026-05-31T01:00","2026-05-31T02:00","2026-05-31T03:00","2026-05-31T04:00","2026-05-31T05:00","2026-05-31T06:00","2026-05-31T07:00","2026-05-31T08:00","2026-05-31T09:00","2026-05-31T10:00","2026-05-31T11:00","2026-05-31T12:00","2026-05-31T13:00","2026-05-31T14:00","2026-05-31T15:00","2026-05-31T16:00","2026-05-31T17:00","2026-05-31T18:00","2026-05-31T19:00","2026-05-31T20:00","2026-05-31T21:00","2026-05-31T22:00","2026-05-31T23:00","2026-06-01T00:00","2026-06-01T01:00","2026-06-01T02:00","2026-06-01T03:00","2026-06-01T04:00","2026-06-01T05:00","2026-06-01T06:00","2026-06-01T07:00","2026-06-01T08:00","2026-06-01T09:00","2026-06-01T10:00","2026-06-01T11:00","2026-06-01T12:00","2026-06-01T13:00","2026-06-01T14:00","2026-06-01T15:00","2026-06-01T16:00","2026-06-01T17:00","2026-06-01T18:00","2026-06-01T19:00","2026-06-01T20:00","2026-06-01T21:00","2026-06-01T22:00","2026-06-01T23:00","2026-06-02T00:00","2026-06-02T01:00","2026-06-02T02:00","2026-06-02T03:00","2026-06-02T04:00","2026-06-02T05:00","2026-06-02T06:00","2026-06-02T07:00","2026-06-02T08:00","2026-06-02T09:00","2026-06-02T10:00","2026-06-02T11:00","2026-06-02T12:00","2026-06-02T13:00","2026-06-02T14:00","2026-06-02T15:00","2026-06-02T16:00","2026-06-02T17:00","2026-06-02T18:00","2026-06-02T19:00","2026-06-02T20:00","2026-06-02T21:00","2026-06-02T22:00","2026-06-02T23:00"],"weather_code":[1,2,3,0,0,0,0,0,1,0,0,0,0,0,0,1,1,2,3,2,3,3,3,3,3,3,3,3,61,3,80,3,2,2,2,3,2,2,3,3,3,3,2,1,1,0,0,1,0,0,1,0,1,1,2,0,1,2,2,3,3,3,2,2,2,80,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,1,3,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2],"precipitation":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.1,0,0.1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"temperature_2m":[15.9,15.1,13.7,13.2,12.8,11.9,11.9,12.5,14.6,16.7,18.7,20.7,22,23.2,24.4,25.3,26,26.8,26.5,26.5,25.8,25.3,24.5,23.6,22.9,22.2,20.6,19.3,18.5,18.2,17.8,17.8,18,18.5,18.7,18.9,19.7,21.4,21.6,22.4,22.9,23.5,23.8,23.8,23.1,22,20.7,19.3,18.1,17,15.8,14.7,14,13.3,12.8,13,14.3,16.1,17.8,19.4,20.8,21.5,22.1,23.1,23.4,23.2,23,22.5,21.6,20.9,19.8,18.6,17.6,16.7,16.2,15.8,15.6,15.3,14.9,15.4,16,17,17.9,18.3,18.8,20.2,20,21,22.9,23.2,23.6,23.2,22.4,21,19.1,17.5,16.6,16,15.5,14.9,14.4,14.3,14.8,15.7,16.9,18.3,20,21.5,22.5,23.3,24,24.8,25.5,25.7,25.1,24,22.9,22.1,21.2,20.4],"wind_speed_10m":[4.3,2.8,3.4,2.5,2.9,2.2,2.6,3.2,4.4,4.5,5.4,5.2,6.2,7.1,7.5,7.4,8.2,8.9,5.9,11.1,4.7,2.9,5.2,7,6.3,10.1,10.1,12.2,9.8,9.7,8.3,11.5,13.5,14.1,14.8,14.5,15,17.3,15.6,13.6,15.3,16.8,14.3,14.9,14.3,11.9,7.4,7.7,7.4,7.6,7.4,6.9,6,6,7.4,6.5,6.5,6,6.5,8.6,9.7,11.3,9.1,9.1,8.7,8.3,7.2,7.3,6.4,4.2,3.9,3.5,3.6,2.4,2.1,1.3,2.2,2.8,2.6,4.3,7.2,7.6,8.3,8.8,9.9,9.5,10.9,7.1,9.1,10.8,8.8,10,8.7,5.2,2.3,4.7,4.7,3.3,2.2,2.2,2.7,3.4,3.4,2.9,2.7,3.5,4.7,5.5,4.8,3.2,2.9,3.9,6,7.6,8.9,10.2,10.4,9,7.6,7.2],"wind_direction_10m":[5,40,32,98,150,171,146,180,189,194,217,236,260,240,253,256,255,256,223,299,302,360,205,215,239,274,276,284,262,272,270,302,312,320,317,316,312,329,322,310,311,318,313,302,319,325,313,298,293,289,293,298,295,287,284,289,273,295,289,285,292,287,304,300,308,324,323,327,333,329,326,336,354,27,31,56,180,230,254,265,264,273,275,279,280,281,278,255,261,270,279,283,308,326,39,90,94,84,81,99,113,122,122,120,113,114,113,113,117,117,120,112,107,109,117,122,124,113,90,72],"relative_humidity_2m":[56,58,66,69,72,79,82,76,60,51,44,36,35,32,26,25,22,25,25,21,24,23,25,28,33,37,56,72,81,84,86,85,70,67,67,64,58,46,43,41,40,38,38,36,41,44,51,56,61,62,64,67,71,73,76,79,76,70,62,56,48,45,41,34,34,38,40,37,37,40,47,54,60,67,72,76,76,73,75,83,79,66,63,67,66,58,60,49,39,38,34,34,36,44,56,66,71,73,76,80,85,86,83,76,70,64,58,52,48,44,41,39,38,38,41,45,50,55,60,64],"precipitation_probability":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,10,3,5,13,15,48,80,85,68,25,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,4,4,5,6,6,8,12,17,20,20,19,18,18,19,20,21,22,23,22,21,20,25,25,25,24,24,22,21,20,18,16,14,11,9,7,5,4,4,3,3,3,3,2,2,1,0,0,0,0,1,2,4,4,5,5,4,4]},"location":{"name":"Berlin","region":"State of Berlin","country":"Germany","latitude":52.52437,"timezone":"Europe/Berlin","elevation":46,"longitude":13.41053,"country_code":"DE"},"forecast_days":[{"date":"2026-05-29","sunset":"2026-05-29T21:15","sunrise":"2026-05-29T04:52","condition":{"code":3,"text":"Overcast"},"max_temp_c":26.8,"min_temp_c":11.9,"max_wind_kmh":11.1,"uv_index_max":6.65,"precip_sum_mm":0,"wind_dir_dominant_deg":243,"precip_probability_max":10},{"date":"2026-05-30","sunset":"2026-05-30T21:16","sunrise":"2026-05-30T04:51","condition":{"code":80,"text":"Slight rain showers"},"max_temp_c":23.8,"min_temp_c":17.8,"max_wind_kmh":17.3,"uv_index_max":6.65,"precip_sum_mm":0.2,"wind_dir_dominant_deg":305,"precip_probability_max":85},{"date":"2026-05-31","sunset":"2026-05-31T21:17","sunrise":"2026-05-31T04:50","condition":{"code":80,"text":"Slight rain showers"},"max_temp_c":23.4,"min_temp_c":12.8,"max_wind_kmh":11.3,"uv_index_max":6.65,"precip_sum_mm":0,"wind_dir_dominant_deg":300,"precip_probability_max":20},{"date":"2026-06-01","sunset":"2026-06-01T21:19","sunrise":"2026-06-01T04:49","condition":{"code":3,"text":"Overcast"},"max_temp_c":23.6,"min_temp_c":14.9,"max_wind_kmh":10.9,"uv_index_max":6.55,"precip_sum_mm":0,"wind_dir_dominant_deg":281,"precip_probability_max":25},{"date":"2026-06-02","sunset":"2026-06-02T21:20","sunrise":"2026-06-02T04:48","condition":{"code":3,"text":"Overcast"},"max_temp_c":25.7,"min_temp_c":14.3,"max_wind_kmh":10.4,"uv_index_max":5.6,"precip_sum_mm":0,"wind_dir_dominant_deg":110,"precip_probability_max":9}]},"meta":{"timestamp":"2026-05-29T18:17:26.275Z","request_id":"de5b5423-a977-48c4-8332-9c30a6661c86"},"status":"ok","message":"Forecast retrieved successfully","success":true}}}},"401":{"description":"Missing or invalid x-oanor-key header"},"402":{"description":"Active subscription required"},"429":{"description":"Rate-limit or monthly quota reached"},"502":{"description":"Upstream did not respond"}}}},"/v1/history":{"get":{"operationId":"get_v1_history","tags":["Forecast"],"summary":"Historical weather","description":"","parameters":[{"name":"q","in":"query","required":true,"description":"City name or 'lat,lon'","schema":{"type":"string"},"example":"Berlin"},{"name":"dt","in":"query","required":true,"description":"Start date YYYY-MM-DD","schema":{"type":"string"},"example":"2024-01-01"},{"name":"end_dt","in":"query","required":false,"description":"End date YYYY-MM-DD","schema":{"type":"string"},"example":"2024-01-07"}],"security":[{"oanorKey":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"example":{"data":{"days":[{"date":"2024-01-01","sunset":"2024-01-01T17:02","sunrise":"2024-01-01T09:17","condition":{"code":53,"text":"Moderate drizzle"},"avg_temp_c":5.3,"max_temp_c":7.3,"min_temp_c":3.4,"rain_sum_mm":1.8,"max_wind_kmh":19.7,"precip_sum_mm":1.8,"snowfall_sum_cm":0},{"date":"2024-01-02","sunset":"2024-01-02T17:03","sunrise":"2024-01-02T09:17","condition":{"code":73,"text":"Moderate snow fall"},"avg_temp_c":4.4,"max_temp_c":6.9,"min_temp_c":2.5,"rain_sum_mm":6.8,"max_wind_kmh":20.2,"precip_sum_mm":7.2,"snowfall_sum_cm":0.28},{"date":"2024-01-03","sunset":"2024-01-03T17:04","sunrise":"2024-01-03T09:16","condition":{"code":63,"text":"Moderate rain"},"avg_temp_c":8.7,"max_temp_c":10.6,"min_temp_c":7.2,"rain_sum_mm":12.1,"max_wind_kmh":27.8,"precip_sum_mm":12.1,"snowfall_sum_cm":0},{"date":"2024-01-04","sunset":"2024-01-04T17:05","sunrise":"2024-01-04T09:16","condition":{"code":51,"text":"Light drizzle"},"avg_temp_c":4.1,"max_temp_c":7.2,"min_temp_c":-2.2,"rain_sum_mm":2.9,"max_wind_kmh":33.1,"precip_sum_mm":2.9,"snowfall_sum_cm":0},{"date":"2024-01-05","sunset":"2024-01-05T17:06","sunrise":"2024-01-05T09:16","condition":{"code":73,"text":"Moderate snow fall"},"avg_temp_c":0.3,"max_temp_c":0.9,"min_temp_c":-0.7,"rain_sum_mm":1.3,"max_wind_kmh":21.3,"precip_sum_mm":5.3,"snowfall_sum_cm":2.8},{"date":"2024-01-06","sunset":"2024-01-06T17:07","sunrise":"2024-01-06T09:16","condition":{"code":71,"text":"Slight snow fall"},"avg_temp_c":-0.4,"max_temp_c":0.9,"min_temp_c":-1.8,"rain_sum_mm":0.1,"max_wind_kmh":18.4,"precip_sum_mm":1.3,"snowfall_sum_cm":0.91},{"date":"2024-01-07","sunset":"2024-01-07T17:09","sunrise":"2024-01-07T09:15","condition":{"code":73,"text":"Moderate snow fall"},"avg_temp_c":-2.8,"max_temp_c":-0.4,"min_temp_c":-6.8,"rain_sum_mm":0,"max_wind_kmh":22.6,"precip_sum_mm":0.6,"snowfall_sum_cm":0.42}],"range":{"end_date":"2024-01-07","start_date":"2024-01-01"},"hourly":{"time":["2024-01-01T00:00","2024-01-01T01:00","2024-01-01T02:00","2024-01-01T03:00","2024-01-01T04:00","2024-01-01T05:00","2024-01-01T06:00","2024-01-01T07:00","2024-01-01T08:00","2024-01-01T09:00","2024-01-01T10:00","2024-01-01T11:00","2024-01-01T12:00","2024-01-01T13:00","2024-01-01T14:00","2024-01-01T15:00","2024-01-01T16:00","2024-01-01T17:00","2024-01-01T18:00","2024-01-01T19:00","2024-01-01T20:00","2024-01-01T21:00","2024-01-01T22:00","2024-01-01T23:00","2024-01-02T00:00","2024-01-02T01:00","2024-01-02T02:00","2024-01-02T03:00","2024-01-02T04:00","2024-01-02T05:00","2024-01-02T06:00","2024-01-02T07:00","2024-01-02T08:00","2024-01-02T09:00","2024-01-02T10:00","2024-01-02T11:00","2024-01-02T12:00","2024-01-02T13:00","2024-01-02T14:00","2024-01-02T15:00","2024-01-02T16:00","2024-01-02T17:00","2024-01-02T18:00","2024-01-02T19:00","2024-01-02T20:00","2024-01-02T21:00","2024-01-02T22:00","2024-01-02T23:00","2024-01-03T00:00","2024-01-03T01:00","2024-01-03T02:00","2024-01-03T03:00","2024-01-03T04:00","2024-01-03T05:00","2024-01-03T06:00","2024-01-03T07:00","2024-01-03T08:00","2024-01-03T09:00","2024-01-03T10:00","2024-01-03T11:00","2024-01-03T12:00","2024-01-03T13:00","2024-01-03T14:00","2024-01-03T15:00","2024-01-03T16:00","2024-01-03T17:00","2024-01-03T18:00","2024-01-03T19:00","2024-01-03T20:00","2024-01-03T21:00","2024-01-03T22:00","2024-01-03T23:00","2024-01-04T00:00","2024-01-04T01:00","2024-01-04T02:00","2024-01-04T03:00","2024-01-04T04:00","2024-01-04T05:00","2024-01-04T06:00","2024-01-04T07:00","2024-01-04T08:00","2024-01-04T09:00","2024-01-04T10:00","2024-01-04T11:00","2024-01-04T12:00","2024-01-04T13:00","2024-01-04T14:00","2024-01-04T15:00","2024-01-04T16:00","2024-01-04T17:00","2024-01-04T18:00","2024-01-04T19:00","2024-01-04T20:00","2024-01-04T21:00","2024-01-04T22:00","2024-01-04T23:00","2024-01-05T00:00","2024-01-05T01:00","2024-01-05T02:00","2024-01-05T03:00","2024-01-05T04:00","2024-01-05T05:00","2024-01-05T06:00","2024-01-05T07:00","2024-01-05T08:00","2024-01-05T09:00","2024-01-05T10:00","2024-01-05T11:00","2024-01-05T12:00","2024-01-05T13:00","2024-01-05T14:00","2024-01-05T15:00","2024-01-05T16:00","2024-01-05T17:00","2024-01-05T18:00","2024-01-05T19:00","2024-01-05T20:00","2024-01-05T21:00","2024-01-05T22:00","2024-01-05T23:00","2024-01-06T00:00","2024-01-06T01:00","2024-01-06T02:00","2024-01-06T03:00","2024-01-06T04:00","2024-01-06T05:00","2024-01-06T06:00","2024-01-06T07:00","2024-01-06T08:00","2024-01-06T09:00","2024-01-06T10:00","2024-01-06T11:00","2024-01-06T12:00","2024-01-06T13:00","2024-01-06T14:00","2024-01-06T15:00","2024-01-06T16:00","2024-01-06T17:00","2024-01-06T18:00","2024-01-06T19:00","2024-01-06T20:00","2024-01-06T21:00","2024-01-06T22:00","2024-01-06T23:00","2024-01-07T00:00","2024-01-07T01:00","2024-01-07T02:00","2024-01-07T03:00","2024-01-07T04:00","2024-01-07T05:00","2024-01-07T06:00","2024-01-07T07:00","2024-01-07T08:00","2024-01-07T09:00","2024-01-07T10:00","2024-01-07T11:00","2024-01-07T12:00","2024-01-07T13:00","2024-01-07T14:00","2024-01-07T15:00","2024-01-07T16:00","2024-01-07T17:00","2024-01-07T18:00","2024-01-07T19:00","2024-01-07T20:00","2024-01-07T21:00","2024-01-07T22:00","2024-01-07T23:00"],"weather_code":[3,3,3,3,3,2,0,1,2,2,3,3,1,3,53,53,3,3,51,3,51,1,51,51,51,3,3,3,3,3,3,3,3,3,51,51,53,53,51,3,73,51,51,51,51,53,55,53,61,61,61,63,0,3,0,0,2,51,51,3,3,53,3,51,51,51,51,63,3,51,2,3,51,51,51,51,51,51,51,51,51,51,51,51,3,3,3,51,51,51,51,3,3,2,3,3,3,3,3,3,71,71,3,3,71,73,73,73,73,73,73,51,71,71,51,3,3,3,2,3,51,3,3,3,3,3,3,3,3,3,3,3,3,71,71,71,3,71,71,71,71,71,71,71,71,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,71,73,3,0,0,0,0,0],"precipitation":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.6,0.6,0,0,0.2,0,0.1,0,0.1,0.2,0.1,0,0,0,0,0,0,0,0,0,0.1,0.3,0.7,0.5,0.2,0,1.9,0.1,0.1,0.2,0.2,0.8,1.1,0.9,1.4,1.7,1.9,2.7,0,0,0,0,0,0.1,0.1,0,0,0.7,0,0.1,0.2,0.1,0.1,2.9,0,0.1,0,0,0.1,0.2,0.1,0.1,0.2,0.2,0.1,0.4,0.3,0.3,0.2,0.1,0,0,0,0.2,0.2,0.1,0.1,0,0,0,0,0,0,0,0,0,0.1,0.1,0,0,0.2,0.5,0.7,0.9,0.4,0.4,0.7,0.3,0.4,0.3,0.3,0,0,0,0,0,0.1,0,0,0,0,0,0,0,0,0,0,0,0,0.1,0,0.1,0,0.1,0.1,0.2,0.2,0.1,0.1,0.2,0.1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.1,0.4,0,0,0,0,0,0],"temperature_2m":[5.2,5.1,4.9,5.3,5,4.6,4.3,3.8,3.7,3.4,3.8,4.8,6.3,7.2,6.2,7.3,7.3,6.8,6.3,5.7,5.1,4.8,4.7,4.3,3.6,4.1,4.8,4.3,3.8,2.9,2.5,2.5,2.5,2.7,3.2,4,4.7,4.8,4.8,4.9,4.8,4.8,4.9,5.1,5.4,6.3,6.9,6.9,7.2,7.9,8.1,8.2,8.5,8.4,8.9,8.7,8.6,8.5,8.7,9.1,9.6,9.9,9.9,10.6,10.1,9.2,8.8,8.4,8.4,8.4,8.4,7.4,7.2,6.9,7,7.2,7,7.1,7.2,7.1,6.9,6.3,5.4,4.7,4.1,3.6,3.2,2.5,2.5,2.1,1.5,1,0.4,-0.3,-2.2,-1,-0.2,-0.7,-0.4,0.2,0.2,0.3,0.3,0.3,0.4,0.4,0.4,0.5,0.6,0.3,0.2,0.4,0.4,0.3,0.3,0.5,0.8,0.8,0.9,0.5,0.8,0.9,0.9,0,-0.4,-0.6,-0.3,-0.1,0.2,0.2,0.2,0.2,0.1,-0.1,-0.1,-0.6,-0.9,-1.2,-1.3,-1.3,-1.3,-1.4,-1.5,-1.8,-1.9,-1.9,-2,-2.3,-2.7,-3,-3.5,-4.2,-4.4,-4.4,-3.9,-2.2,-1.4,-1.1,-0.9,-0.4,-0.6,-0.9,-1.1,-2.5,-4,-4.6,-5.5,-6.8],"wind_speed_10m":[13.8,13.7,14.1,13.7,14,14.5,14,14,14.3,13.9,14.2,15.3,17.5,19.7,18.4,13.8,18.4,17.5,15.3,14,15.3,16.5,15.9,16.9,17.2,13.6,13.9,11.5,12,11.6,10.2,11.5,11.7,14.4,16.3,17.9,19.1,19.4,20.2,18.1,16.8,14.8,13.2,13.6,12.7,13.5,13.1,12.8,15.9,19.7,21.1,18.6,19.9,24.3,27.8,27,26.5,25.9,24,23.2,23.4,23.5,21.4,23.2,27.6,23.1,24.4,22.2,20.5,20.1,21.4,19.6,17.9,18.5,18.9,18.9,18.6,19.7,19.6,20,24.4,24.2,23.8,25.3,31,33.1,32.9,31.3,27,22.2,18.3,15.5,11.5,6.4,8.1,5.5,1.9,2.4,3.8,5.8,6.9,9.8,12.1,14.6,16,16.3,17.7,18.6,21.1,21,21.3,18.4,17.7,18,17.6,17.7,17.3,16.2,14.8,14.8,14.1,14.8,15.1,12.6,13.8,14.5,14.9,14.9,15.5,16.4,17.1,17.1,17.6,17.1,18.4,17.9,18.4,17.9,17.2,17.4,16.4,16.8,17.7,16.6,16.6,16.8,18.4,20.6,20.1,20.2,19.2,17.4,14.4,12.5,11,15.7,12,13.2,13.6,18.6,17.6,12,15.1,16.4,14.1,18.1,22.6,18.9],"relative_humidity_2m":[88,87,87,85,85,86,87,88,89,90,90,88,83,78,83,81,79,79,82,85,86,87,88,88,90,90,89,89,90,91,93,94,94,94,93,92,92,93,93,92,94,95,95,95,96,95,94,94,93,90,90,88,89,87,85,83,81,79,78,78,77,76,78,74,75,79,80,83,82,82,81,84,87,91,90,89,89,89,89,91,89,92,89,90,85,82,82,89,91,89,90,90,91,92,94,93,92,95,95,89,89,87,88,88,90,91,90,88,89,89,91,92,93,96,96,95,94,95,95,95,95,94,94,95,95,94,93,91,90,89,88,89,87,87,86,87,86,86,86,84,82,80,79,80,77,73,70,70,70,68,70,75,77,79,80,68,70,73,79,74,80,86,79,76,76,74,61,66]},"location":{"name":"Berlin","region":"State of Berlin","country":"Germany","latitude":52.52437,"timezone":"Europe/Berlin","elevation":46,"longitude":13.41053,"country_code":"DE"}},"meta":{"timestamp":"2026-05-29T18:17:29.942Z","request_id":"4f331045-e3c5-49ad-9358-023faac38377"},"status":"ok","message":"Historical weather retrieved successfully","success":true}}}},"401":{"description":"Missing or invalid x-oanor-key header"},"402":{"description":"Active subscription required"},"429":{"description":"Rate-limit or monthly quota reached"},"502":{"description":"Upstream did not respond"}}}},"/v1/marine":{"get":{"operationId":"get_v1_marine","tags":["Marine"],"summary":"Marine / wave forecast","description":"","parameters":[{"name":"q","in":"query","required":true,"description":"City name or 'lat,lon'","schema":{"type":"string"},"example":"Berlin"},{"name":"days","in":"query","required":false,"description":"Number of days (1-8)","schema":{"type":"string"},"example":"3"}],"security":[{"oanorKey":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"example":{"data":{"days":[{"date":"2026-05-29"},{"date":"2026-05-30"},{"date":"2026-05-31"}],"units":{"daily":{"time":"iso8601","wave_height_max":"m","wave_period_max":"s","wind_wave_height_max":"m","swell_wave_height_max":"m","wave_direction_dominant":"°"},"current":{"time":"iso8601","interval":"seconds","wave_height":"m","wave_period":"s","wave_direction":"°","wind_wave_height":"m","swell_wave_height":"m"}},"current":{"time":"2026-05-29T20:15","interval":900},"location":{"name":"Berlin","region":"State of Berlin","country":"Germany","latitude":52.52437,"timezone":"Europe/Berlin","longitude":13.41053,"country_code":"DE"}},"meta":{"timestamp":"2026-05-29T18:17:31.063Z","request_id":"6a6ee3dd-e91c-44c1-b358-690c5a7f6b40"},"status":"ok","message":"Marine forecast retrieved successfully","success":true}}}},"401":{"description":"Missing or invalid x-oanor-key header"},"402":{"description":"Active subscription required"},"429":{"description":"Rate-limit or monthly quota reached"},"502":{"description":"Upstream did not respond"}}}},"/v1/astronomy":{"get":{"operationId":"get_v1_astronomy","tags":["Astronomy"],"summary":"Astronomy (sunrise/sunset/UV)","description":"","parameters":[{"name":"q","in":"query","required":true,"description":"City name or 'lat,lon'","schema":{"type":"string"},"example":"Berlin"},{"name":"dt","in":"query","required":false,"description":"Date YYYY-MM-DD (default today)","schema":{"type":"string"},"example":"2026-05-29"}],"security":[{"oanorKey":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"example":{"data":{"date":"2026-05-29","location":{"name":"Berlin","region":"State of Berlin","country":"Germany","latitude":52.52437,"timezone":"Europe/Berlin","longitude":13.41053,"country_code":"DE"},"astronomy":{"sunset":"2026-05-29T21:15","sunrise":"2026-05-29T04:52","uv_index_max":6.65,"daylight_duration_s":58990.75,"sunshine_duration_s":52577.04,"uv_index_clear_sky_max":6.65}},"meta":{"timestamp":"2026-05-29T18:17:32.906Z","request_id":"94d90a0a-d10d-4eb8-9c22-28487185fd26"},"status":"ok","message":"Astronomy retrieved successfully","success":true}}}},"401":{"description":"Missing or invalid x-oanor-key header"},"402":{"description":"Active subscription required"},"429":{"description":"Rate-limit or monthly quota reached"},"502":{"description":"Upstream did not respond"}}}},"/v1/air-quality":{"get":{"operationId":"get_v1_air_quality","tags":["Air Quality"],"summary":"Air quality (PM2.5/PM10/AQI)","description":"","parameters":[{"name":"q","in":"query","required":true,"description":"City name or 'lat,lon'","schema":{"type":"string"},"example":"Berlin"}],"security":[{"oanorKey":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"example":{"data":{"units":{"dust":"μg/m³","pm10":"μg/m³","time":"iso8601","ozone":"μg/m³","pm2_5":"μg/m³","us_aqi":"USAQI","interval":"seconds","uv_index":"","european_aqi":"EAQI","carbon_monoxide":"μg/m³","sulphur_dioxide":"μg/m³","nitrogen_dioxide":"μg/m³"},"location":{"name":"Berlin","region":"State of Berlin","country":"Germany","latitude":52.52437,"timezone":"Europe/Berlin","longitude":13.41053,"country_code":"DE"},"air_quality":{"dust":1,"pm10":9.2,"time":"2026-05-29T20:00","ozone":101,"pm2_5":5.3,"us_aqi":49,"uv_index":0.1,"european_aqi":41,"carbon_monoxide":148,"sulphur_dioxide":1.3,"nitrogen_dioxide":9.2}},"meta":{"timestamp":"2026-05-29T18:17:33.994Z","request_id":"7aaa50cd-1111-48b1-a3a3-0bd8c8be7cab"},"status":"ok","message":"Air quality retrieved successfully","success":true}}}},"401":{"description":"Missing or invalid x-oanor-key header"},"402":{"description":"Active subscription required"},"429":{"description":"Rate-limit or monthly quota reached"},"502":{"description":"Upstream did not respond"}}}},"/v1/search":{"get":{"operationId":"get_v1_search","tags":["Location"],"summary":"Location search / geocoding","description":"","parameters":[{"name":"q","in":"query","required":true,"description":"City name or 'lat,lon'","schema":{"type":"string"},"example":"Berlin"}],"security":[{"oanorKey":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"example":{"data":{"count":10,"query":"Berlin","results":[{"id":2950159,"name":"Berlin","region":"State of Berlin","country":"Germany","latitude":52.52437,"timezone":"Europe/Berlin","elevation":74,"longitude":13.41053,"population":3426354,"country_code":"DE"},{"id":5083330,"name":"Berlin","region":"New Hampshire","country":"United States","latitude":44.46867,"timezone":"America/New_York","elevation":311,"longitude":-71.18508,"population":9367,"country_code":"US"},{"id":4500771,"name":"Berlin","region":"New Jersey","country":"United States","latitude":39.79123,"timezone":"America/New_York","elevation":50,"longitude":-74.92905,"population":7590,"country_code":"US"},{"id":4349706,"name":"Brunswick","region":"Maryland","country":"United States","latitude":39.31427,"timezone":"America/New_York","elevation":90,"longitude":-77.62777,"population":6116,"country_code":"US"},{"id":5245497,"name":"Berlin","region":"Wisconsin","country":"United States","latitude":43.96804,"timezone":"America/Chicago","elevation":246,"longitude":-88.94345,"population":5420,"country_code":"US"},{"id":4348460,"name":"Berlin","region":"Maryland","country":"United States","latitude":38.32262,"timezone":"America/New_York","elevation":11,"longitude":-75.21769,"population":5065,"country_code":"US"},{"id":4930431,"name":"Berlin","region":"Massachusetts","country":"United States","latitude":42.3812,"timezone":"America/New_York","elevation":100,"longitude":-71.63701,"population":2422,"country_code":"US"},{"id":4556518,"name":"Berlin","region":"Pennsylvania","country":"United States","latitude":39.92064,"timezone":"America/New_York","elevation":710,"longitude":-78.9578,"population":2019,"country_code":"US"},{"id":4557666,"name":"East Berlin","region":"Pennsylvania","country":"United States","latitude":39.9376,"timezone":"America/New_York","elevation":131,"longitude":-76.97859,"population":1534,"country_code":"US"},{"id":5147132,"name":"Berlin","region":"Ohio","country":"United States","latitude":40.56117,"timezone":"America/New_York","elevation":391,"longitude":-81.7943,"population":898,"country_code":"US"}]},"meta":{"timestamp":"2026-05-29T18:17:34.734Z","request_id":"b49da7c6-c983-40e7-bca7-cf2abfae4328"},"status":"ok","message":"Location results retrieved successfully","success":true}}}},"401":{"description":"Missing or invalid x-oanor-key header"},"402":{"description":"Active subscription required"},"429":{"description":"Rate-limit or monthly quota reached"},"502":{"description":"Upstream did not respond"}}}},"/v1/timezone":{"get":{"operationId":"get_v1_timezone","tags":["Location"],"summary":"Timezone & local time","description":"","parameters":[{"name":"q","in":"query","required":true,"description":"City name or 'lat,lon'","schema":{"type":"string"},"example":"Berlin"}],"security":[{"oanorKey":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"example":{"data":{"location":{"name":"Berlin","region":"State of Berlin","country":"Germany","latitude":52.52437,"elevation":46,"longitude":13.41053,"country_code":"DE"},"timezone":"Europe/Berlin","localtime":"2026-05-29T20:15","utc_offset_seconds":7200,"timezone_abbreviation":"GMT+2"},"meta":{"timestamp":"2026-05-29T18:17:36.192Z","request_id":"d251de2e-a645-49d9-9693-f7858708385e"},"status":"ok","message":"Timezone retrieved successfully","success":true}}}},"401":{"description":"Missing or invalid x-oanor-key header"},"402":{"description":"Active subscription required"},"429":{"description":"Rate-limit or monthly quota reached"},"502":{"description":"Upstream did not respond"}}}}},"x-oanor-pricing":[{"slug":"free","name":"Free","price_cents_month":0,"monthly_call_quota":100,"rps_limit":1,"hard_limit":true},{"slug":"basic","name":"Basic","price_cents_month":1500,"monthly_call_quota":25000,"rps_limit":10,"hard_limit":true},{"slug":"pro","name":"Pro","price_cents_month":4900,"monthly_call_quota":100000,"rps_limit":20,"hard_limit":true},{"slug":"mega","name":"Mega","price_cents_month":14900,"monthly_call_quota":500000,"rps_limit":50,"hard_limit":true}],"x-oanor-marketplace-url":"https://www.oanor.com/api/weather-api"}