{
  "openapi": "3.0.3",
  "info": {
    "title": "Foreca Weather API",
    "version": "1",
    "description": "Premium global weather data, delivered as one REST API.\n\n## Quickstart\n\n1. **Get an API key.** Pick a plan on the [Foreca Weather API pricing page](https://business.foreca.com/weather-api/pricing) — start a free 30-day trial or subscribe directly. Your key lands in [My API](/my-api) after sign-up.\n2. **Make your first request to one of the endpoints.** Pass the key as a Bearer token in the `Authorization` header (`Authorization: Bearer YOUR_KEY`), or as a `?token=YOUR_KEY` query parameter. You can also use the Test Request panels on this page which have your key pre-filled when signed in.\n\n## Plans & features\n\nAll plans include **Point Forecasts**, **Air Quality**, and **Weather Maps**, with more products unlocked at higher tiers. **Weather History**, **Ski Resort**, and **Agriculture** are available on request — [contact sales](https://business.foreca.com/contact-us). See the [Foreca Weather API pricing page](https://business.foreca.com/weather-api/pricing) for the full plan and feature breakdown.\n\nThis site is the technical reference. For what the API is intended for, the data behind it and how it is licensed, see [the Foreca Weather API product page](https://business.foreca.com/weather-api).\n\n## Request limits\n\nThe number of included requests per month depends on your plan. Exceeding requests are billed separately. In addition, a queries-per-second limit applies, which is a hard limit that is defined by your plan. See the [Pricing page](https://business.foreca.com/weather-api/pricing) for more details.\n\nThe free trial and Freemium plans each have a daily limit of 2,000 requests per day.\n\nOnly successful requests count towards the limit. For the Maps endpoints, each tile counts as one request.\n\nYou can monitor your API usage with endpoints in the **Usage** section below, as well as through [My API](/my-api).\n\n## Attribution\n\nCustomer shall display in its weather service the Foreca logo. In case displaying the logo is not possible due to technical reasons, the text \"Foreca\" shall be displayed in customer's weather service in connection with the content referring to the source of information.\n\nLogo + trademark guidelines: [business.foreca.com/logo](https://business.foreca.com/logo).\n\n## Third Party Attributions\n\nCustomer's application must show third-party attribution as given in API response. For example, the Capabilities endpoint under Weather Maps responds with layer info telling the required attribution text.\n\nCurrently the following organisations must be attributed if their data is used:\n\n- **Radar data**: Aemet, BOM, DMI, DWD, EC, FMI, InMet, JMA, KMI, KNMI, MET Eireann, MeteoSchweiz, MF, Met Office, MET Norway, NWS, Protezione Civile, SMHI, SMN, ZAMG\n- **Satellite data**: EUMETSAT, JMA, NOAA\n- **Pollen data**: Copernicus Atmosphere Monitoring Service\n- **Climate data**: Copernicus Climate Change Service, ESA Sea Surface Temperature Climate Change Initiative\n- **Ski data**: Skiresort Service International\n- **Hurricane data**: National Oceanic and Atmospheric Administration (NOAA), Japan Meteorological Agency (JMA), Bureau of Meteorology (BOM), RSMC La Réunion (Météo-France), MetService New Zealand, Fiji Meteorological Service, Joint Typhoon Warning Center\n\n## Support\n\nSigned-in customers find the support address for their plan on the [My API](/my-api) page. For anything else, use the [contact form](https://business.foreca.com/contact-us).",
    "contact": {
      "name": "Foreca Developer Support",
      "url": "https://business.foreca.com/contact-us"
    }
  },
  "servers": [
    {
      "url": "https://weatherapi.foreca.net"
    }
  ],
  "components": {
    "securitySchemes": {
      "BearerAuth": {
        "type": "http",
        "scheme": "bearer",
        "bearerFormat": "JWT"
      }
    }
  },
  "security": [
    {
      "BearerAuth": []
    }
  ],
  "tags": [
    {
      "name": "Point Forecasts",
      "description": "Global weather point forecasts. Temperature and relative humidity parameters are calculated at 2m height, all wind parameters at 10m. Height of the parameters is above ground. Ground is assumed to be at the average elevation of the surrounding area.\n\nForecast resolution varies by location, timescale, and proximity to observation stations — nearby stations improve accuracy and forecasts may vary even within a kilometer. Some locations use higher-resolution local models.\n\nSometimes, data may be missing, in which case the API will return null for that value. This can occur if our data providers experience issues with data delivery. Therefore, null values should be treated as missing data.\n\nThe Forecast endpoints (daily, hourly, 3hourly, 15minutely, minutely) support multi-location requests for up to 50 locations. Use a semicolon-separated list of coordinates or location IDs to retrieve multiple location forecasts. Due to the size of the data for all parameters and long forecasts, the response time can be slow. Therefore, limit the forecast length using periods in the request to achieve faster response times. Each individual location is counted as a query for billing purposes.\n\n\n> [!NOTE]\n> See symbol explanations in the [Resources page](/resources). Foreca's custom weather symbol sets are available for download in SVG and PNG formats, exclusively for our API clients through [My API](/my-api).",
      "x-displayName": "Point Forecasts",
      "x-foreca-color": "#435a71"
    },
    {
      "name": "Weather Maps",
      "description": "Visualize weather anywhere in the world with high-quality map layers for radar, satellite, precipitation, cloudiness, temperature, wind and more. Tiles are 256x256 PNGs compatible with common map libraries such as OpenStreetMap, Leaflet, MapLibre and Google Maps. All required and optional parameters are given as path and query parameters respectively.\n\nTo obtain images one must first request an access token using valid credentials. The access token can then be used to fetch capabilities-response, which contains information on how to fetch images.\n\nImage size is 256x256 pixels. Precipitation types on radar layers include rain, sleet, and snow.\n\n## Available standard map layers\n\n43+ standard layers are available — precipitation radar, satellite, temperature, wind, air quality, pollen and more — across global and regional coverage. Each is served as 256×256 tiles.\n\nZoom levels correspond to Google Maps zoom levels. Global region latitudes: minLat: -73, maxLat: 73, minLon: -180, maxLon: 180\n\n\nThe Map API delivers maps as a grid of individual images called tiles. Usage is measured based on the number of tiles served to your application — each tile counts as one API request.\n\nTo significantly reduce the amount of data your browser requests and speed up map loading, we recommend caching map tiles. This means your browser will temporarily store recently viewed map sections. The duration of this storage depends on how often the map data updates. For example, frequently changing data like radar updates are cached for shorter periods than less frequent updates like temperature. By caching, you'll experience faster map performance and lower data usage.",
      "x-displayName": "Weather Maps",
      "x-foreca-color": "#627d96",
      "x-foreca-links": [
        {
          "label": "Browse all map layers",
          "href": "/map-layers",
          "note": "Preview every layer with its update cadence, coverage and time resolution."
        }
      ]
    },
    {
      "name": "Air Quality",
      "description": "Air quality forecasts: an air quality index (AQI) that summarizes air pollution taking into account multiple components (carbon monoxide, nitrogen dioxide, ozone, sulfur dioxide and particulate matter). The forecast is based on observations and numerical modeling, resulting in AQI values calculated based on the United States EPA standard.",
      "x-displayName": "Air Quality",
      "x-foreca-color": "#826f94"
    },
    {
      "name": "Pollen Forecasts",
      "description": "Pollen forecasts are made using numerical modeling and observational data. The pollen concentrations are described with pollen grains per cubic meter of air (grains/m3).\n\nPollen forecasts for the following species are available in the Pollen API: alder, birch, grass, mugwort, olive and ragweed. The pollen forecasts are currently available only for Europe.\n\n\n## Pollen rating\n\nHow people react to various amounts of pollen varies enormously. It may depend on the species of pollen, the location, or other individual factors. This pollen rating system provides some indication of the pollen concentration, but the classification is general in nature and subject to significant individual variation. The pollen rating has five different levels, and each level is described by an index ranging from 0 to 4.\n\n![Pollen rating](/static/images/pollen-rating.png)\n\n**0 = no pollen (or very little)** — NOTE! not equal to 0 grains/m3, No pollen is reported when the amount of pollen is less than 0.2 grains/m3 for all pollen types.\n\n**1 = low** — Low pollen is indicated when the amount of pollen is less than 10 grains/m3 for all pollen types.\n\n**2 = moderate** — Moderate pollen varies for the pollen type. For alder, birch and olive, moderate pollen is indicated for pollen concentrations below 100 grains/m3.  For grass and ragweed, moderate pollen is indicated for pollen concentrations below 30 grains/m3 and for mugwort pollen, moderate levels are indicated for concentrations below 50 grains/m3.\n\n**3 = high** — High pollen varies for the pollen type. For alder, birch and olive, high pollen is indicated for pollen concentrations below or equal to 500 grains/m3. For grass, ragweed and mugwort, high pollen is indicated for pollen concentrations below or equal to 100 grains/m3.\n\n**4 = very high** — When the pollen concentration is above 500 grains/m3 for alder, birch and olive, very high pollen is indicated. For grass, ragweed and mugwort, very high pollen is indicated for pollen concentrations above 100 grains/m3.\n",
      "x-displayName": "Pollen Forecasts",
      "x-foreca-color": "#717a9c"
    },
    {
      "name": "Climate Data",
      "description": "Understand today's weather in context with long-term climate averages. Monthly and daily normals computed over the 30-year period 1991-2020: average, minimum and maximum temperature, precipitation sums and rain days, plus sea surface temperature.",
      "x-displayName": "Climate Data",
      "x-foreca-color": "#8591a8"
    },
    {
      "name": "Weather History",
      "description": "Weather History API provides observational weather information from the past by showing measured weather parameters in a certain location at a specific date. The API delivers all the measured weather parameters as both daily summary values and hourly values. The queries can be made based on a given day and coordinate point.\n\nThe API will respond with observational data from the nearest relevant weather station or from weather forecast model data (augmented observation). Augmented observations are provided when the closest weather station with sufficient observations is too far away to give representative information.\n\nHistory data is available from January 2009.",
      "x-displayName": "Weather History",
      "x-foreca-color": "#283a4c"
    },
    {
      "name": "Weather Warnings",
      "description": "Governmental severe weather warnings are currently delivered from: Argentina, Australia, Austria, Belarus, Belgium, Bosnia and Herzegovina, Brazil, Bulgaria, Canada, Chile, Colombia, Costa Rica, Croatia, Cyprus, Czech Republic, Denmark, Ecuador, Egypt, Estonia, Finland, France, Germany, Greece, Hong Kong, Hungary, Iceland, India, Indonesia, Iran, Republic of Ireland, Israel, Italy, Japan, South Korea, Latvia, Lithuania, Luxembourg, North Macedonia, Malaysia, Malta, Mexico, Moldova, Montenegro, Netherlands, New Zealand, Norway, Peru, Philippines, Poland, Portugal, Romania, Russia, Saudi Arabia, Serbia, Singapore, Slovakia, Slovenia, Spain, Sweden, Switzerland, South Africa, Taiwan, Thailand, Ukraine, United Kingdom and United States.",
      "x-displayName": "Weather Warnings",
      "x-foreca-color": "#a4afc3"
    },
    {
      "name": "Marine Weather",
      "description": "Marine forecasts of waves and sea temperatures.",
      "x-displayName": "Marine Weather",
      "x-foreca-color": "#aeb6c2"
    },
    {
      "name": "Ski Resort",
      "description": "Ski resort weather conditions and site information.",
      "x-displayName": "Ski Resort",
      "x-foreca-color": "#aeb6c2"
    },
    {
      "name": "Agriculture",
      "description": "Field-level parameters for growing decisions: reference evapotranspiration (ET0), vapour pressure deficit (VPD) and downward surface solar radiation (SSRD), plus lower and upper bound estimates for 24-hour and 7-day precipitation totals. Available hourly and daily.",
      "x-displayName": "Agriculture",
      "x-foreca-color": "#8db2b3"
    },
    {
      "name": "Energy",
      "description": "Worldwide forecasts of the parameters that drive generation and demand — wind speed at turbine heights, solar radiation and temperature. Based on current observations combined with numerical weather prediction.",
      "x-displayName": "Energy",
      "x-foreca-color": "#826f94"
    },
    {
      "name": "Hurricane Forecasts",
      "description": "Comprehensive hurricane/cyclone/typhoon data from multiple global meteorological agencies including NOAA (US), JMA (Japan), Australian Bureau of Meteorology, Joint Typhoon Warning Center, RSMC La Réunion (Météo-France), MetService New Zealand, and Fiji Meteorological Service.\n\nData includes complete storm tracks, forecast points, uncertainty cones, wind speed and intensity classifications and detailed meteorological properties, in GeoJSON format. Real-time updates as bulletins are issued (typically every 3-6 hours during active storms).\n\nStorm classifications and intensity scales vary between regions. See the \"Storm Classifications\" section for a complete list of possible values for stormType and shortLabel.",
      "x-displayName": "Hurricane Forecasts",
      "x-foreca-color": "#2d6a8f"
    },
    {
      "name": "Authorization",
      "description": "API keys are created in [My API](/my-api) after you sign up — no programmatic credentials are needed to create one. The endpoints below let you **list** and **revoke** your keys programmatically, authenticating with `Authorization: Bearer <token>` (the same key you use for data calls).\n\n> [!NOTE]\n> To create a new API key, open [My API](/my-api). Keys are passed to all data API calls either in the header (`Authorization: Bearer <token>`) or as a `?token=<token>` query parameter.",
      "x-displayName": "Authorization",
      "x-foreca-color": "#283a4c",
      "x-foreca-legacy-description": "This is the **legacy programmatic flow** used by long-standing customers that exchange a username + password for short-lived JWTs. Create, list and revoke tokens with your application key credentials below.\n\n> [!NOTE]\n> Access tokens are provided to data API calls in the header (`Authorization: Bearer <token>`).",
      "x-foreca-legacy-paths": [
        {
          "url": "/authorize/token",
          "method": "post",
          "operation": {
            "tags": [
              "Authorization"
            ],
            "summary": "Token",
            "description": "Create an expiring or non-expiring token (API key).",
            "operationId": "post_Token",
            "parameters": [],
            "responses": {
              "200": {
                "description": "Success",
                "content": {
                  "application/json": {
                    "schema": {
                      "type": "object",
                      "properties": {
                        "access_token": {
                          "type": "string",
                          "example": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwOlwvXC9mbnc2LmZvcmVjYS5jb21cL2F1dGhvcml6ZVwvdG9rZW4iLCJpYXQiOjE1MjYzMDAzODAsImV4cCI6MTUyNjMwMzk4MCwibmJmIjoxNTI2MzAwMzgwLCJqdGkiOiJxSXl3WVlQNjc1NkczejBEIiwic3ViIjoibFFHa1Y4Z2pIeGUyZU1ibndUUUs4NktqVTY3RXJlS2htenY1IiwicHJ2IjoiYWY3YTAzOThkZGNiNWE3YTUzN2Q3YzdkMjU2NWEyZjgxZGM4ZTQxNCJ9.V8xg6L9yrY9__VH-jdrL_CqXisEpgcfdUa0NoxlGz0k"
                        },
                        "expires_in": {
                          "type": "number",
                          "example": 3600
                        },
                        "token_type": {
                          "type": "string",
                          "example": "bearer"
                        }
                      }
                    }
                  }
                }
              }
            },
            "requestBody": {
              "required": true,
              "content": {
                "application/x-www-form-urlencoded": {
                  "schema": {
                    "type": "object",
                    "properties": {
                      "user": {
                        "type": "string",
                        "description": "Application key username"
                      },
                      "password": {
                        "type": "string",
                        "description": "Application key password"
                      },
                      "expire_hours": {
                        "type": "string",
                        "description": "Expiry time in hours (default 1, maximum 168). If given expiry time is -1, a non-expiring token is created."
                      }
                    },
                    "required": [
                      "user",
                      "password"
                    ]
                  }
                }
              }
            }
          }
        },
        {
          "url": "/authorize/key",
          "method": "post",
          "operation": {
            "tags": [
              "Authorization"
            ],
            "summary": "Keys",
            "description": "Fetch a list of API keys (non-expiring tokens).",
            "operationId": "post_Keys",
            "parameters": [],
            "responses": {
              "200": {
                "description": "Success",
                "content": {
                  "application/json": {
                    "schema": {
                      "type": "object",
                      "properties": {
                        "tokens": {
                          "type": "array",
                          "items": {
                            "type": "object",
                            "properties": {
                              "access_token": {
                                "type": "string",
                                "example": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwOlwvXC9mbnc2LmZvcmVjYS5jb21cL2F1dGhvcml6ZVwvdG9rZW4iLCJpYXQiOjE1MjYzMDAzODAsImV4cCI6MTUyNjMwMzk4MCwibmJmIjoxNTI2MzAwMzgwLCJqdGkiOiJxSXl3WVlQNjc1NkczejBEIiwic3ViIjoibFFHa1Y4Z2pIeGUyZU1ibndUUUs4NktqVTY3RXJlS2htenY1IiwicHJ2IjoiYWY3YTAzOThkZGNiNWE3YTUzN2Q3YzdkMjU2NWEyZjgxZGM4ZTQxNCJ9.V8xg6L9yrY9__VH-jdrL_CqXisEpgcfdUa0NoxlGz0k"
                              },
                              "key": {
                                "type": "string",
                                "example": "23j98rfsnldkvf3w49hg"
                              },
                              "label": {
                                "type": "string",
                                "example": "production server"
                              },
                              "expires_at": {
                                "type": "string",
                                "nullable": true
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            },
            "requestBody": {
              "required": true,
              "content": {
                "application/x-www-form-urlencoded": {
                  "schema": {
                    "type": "object",
                    "properties": {
                      "user": {
                        "type": "string",
                        "description": "Application key username"
                      },
                      "password": {
                        "type": "string",
                        "description": "Application key password"
                      }
                    },
                    "required": [
                      "user",
                      "password"
                    ]
                  }
                }
              }
            }
          }
        },
        {
          "url": "/authorize/key/{key}",
          "method": "delete",
          "operation": {
            "tags": [
              "Authorization"
            ],
            "summary": "Delete Key",
            "description": "Delete non-expiring token using its key.",
            "operationId": "delete_Delete_Key",
            "parameters": [
              {
                "name": "user",
                "in": "query",
                "required": true,
                "description": "Application key username",
                "schema": {
                  "type": "string"
                }
              },
              {
                "name": "password",
                "in": "query",
                "required": true,
                "description": "Application key password",
                "schema": {
                  "type": "string"
                }
              }
            ],
            "responses": {
              "200": {
                "description": "Empty response on success."
              }
            }
          }
        }
      ]
    },
    {
      "name": "Usage",
      "description": "Query how many API requests your account has made over a given day or month. Authenticate with your access token in the `Authorization: Bearer <token>` header — the same token used for data calls.\n\nPass the optional `group_by` query parameter (one of `endpoint` or `status_code`) to additionally receive a `breakdown` array splitting the total across that dimension. Each breakdown entry is keyed by the dimension you grouped on plus its `hits`.",
      "x-displayName": "Usage",
      "x-foreca-color": "#617991",
      "x-foreca-legacy-description": "Query how many API requests your account has made over a given day or month. These two endpoints authenticate with your **username and administrative password** — not with an access token. The administrative password is the one you sign in to this portal with; it is not the API password used for data calls.",
      "x-foreca-legacy-paths": [
        {
          "url": "/usage/month/{month}",
          "method": "post",
          "operation": {
            "tags": [
              "Usage"
            ],
            "summary": "Month's usage",
            "description": "Total requests for a single month, with a per-day breakdown.",
            "operationId": "post_Month_s_usage",
            "parameters": [
              {
                "name": "month",
                "in": "path",
                "required": true,
                "description": "Month in YYYY-MM format (e.g. \"2021-03\").",
                "schema": {
                  "type": "string"
                }
              }
            ],
            "responses": {
              "200": {
                "description": "Success",
                "content": {
                  "application/json": {
                    "schema": {
                      "type": "object",
                      "properties": {
                        "apis": {
                          "type": "array",
                          "items": {
                            "type": "object",
                            "properties": {
                              "name": {
                                "type": "string",
                                "example": "Weather API"
                              },
                              "hits": {
                                "type": "number",
                                "example": 32529
                              }
                            }
                          }
                        },
                        "hits": {
                          "type": "number",
                          "example": 32529
                        },
                        "daily": {
                          "type": "array",
                          "items": {
                            "type": "object",
                            "properties": {
                              "date": {
                                "type": "string",
                                "example": "2021-03-01"
                              },
                              "apis": {
                                "type": "array",
                                "items": {
                                  "type": "object",
                                  "properties": {
                                    "name": {
                                      "type": "string",
                                      "example": "Weather API"
                                    },
                                    "hits": {
                                      "type": "number",
                                      "example": 1042
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            },
            "requestBody": {
              "required": true,
              "content": {
                "application/x-www-form-urlencoded": {
                  "schema": {
                    "type": "object",
                    "properties": {
                      "user": {
                        "type": "string",
                        "description": "Username"
                      },
                      "password": {
                        "type": "string",
                        "description": "Administrative password (not the API password)"
                      }
                    },
                    "required": [
                      "user",
                      "password"
                    ]
                  }
                }
              }
            }
          }
        },
        {
          "url": "/usage/day/{day}",
          "method": "post",
          "operation": {
            "tags": [
              "Usage"
            ],
            "summary": "Day's usage",
            "description": "Total requests for a single day.",
            "operationId": "post_Day_s_usage",
            "parameters": [
              {
                "name": "day",
                "in": "path",
                "required": true,
                "description": "Day in YYYY-MM-DD format (e.g. \"2021-03-15\").",
                "schema": {
                  "type": "string"
                }
              }
            ],
            "responses": {
              "200": {
                "description": "Success",
                "content": {
                  "application/json": {
                    "schema": {
                      "type": "object",
                      "properties": {
                        "apis": {
                          "type": "array",
                          "items": {
                            "type": "object",
                            "properties": {
                              "name": {
                                "type": "string",
                                "example": "Weather API"
                              },
                              "hits": {
                                "type": "number",
                                "example": 380
                              }
                            }
                          }
                        },
                        "hits": {
                          "type": "number",
                          "example": 380
                        }
                      }
                    }
                  }
                }
              }
            },
            "requestBody": {
              "required": true,
              "content": {
                "application/x-www-form-urlencoded": {
                  "schema": {
                    "type": "object",
                    "properties": {
                      "user": {
                        "type": "string",
                        "description": "Username"
                      },
                      "password": {
                        "type": "string",
                        "description": "Administrative password (not the API password)"
                      }
                    },
                    "required": [
                      "user",
                      "password"
                    ]
                  }
                }
              }
            }
          }
        }
      ]
    }
  ],
  "paths": {
    "/api/v1/location/search/{query}": {
      "get": {
        "tags": [
          "Point Forecasts"
        ],
        "summary": "Location search",
        "description": "Locations and associated identifiers matching a search query. Can be used as alternatives to coordinates.",
        "operationId": "get_search",
        "parameters": [
          {
            "name": "query",
            "in": "path",
            "required": true,
            "description": "Search query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "lang",
            "in": "query",
            "required": false,
            "description": "Language (ISO 639-1 codes). Options: de, en, es, fr, it, pl, ru, fi, sv, nl, ko, pt, th, tr, zh, zh_TW (Chinese in Taiwan), zh_CN (Chinese in China). (default en)",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "country",
            "in": "query",
            "required": false,
            "description": "Limit search to a given country (ISO 3166-1 alpha-2 codes)",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "script",
            "in": "query",
            "required": false,
            "description": "Writing script for the location name, e.g. \"latin\"",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "locations": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "properties": {
                          "id": {
                            "type": "number",
                            "example": 102643743,
                            "description": "Identifier to be used with weather queries"
                          },
                          "name": {
                            "type": "string",
                            "example": "London",
                            "description": "Location name e.g. London"
                          },
                          "country": {
                            "type": "string",
                            "example": "United Kingdom",
                            "description": "Location country name e.g. United Kingdom"
                          },
                          "timezone": {
                            "type": "string",
                            "example": "Europe/London",
                            "description": "Location timezone e.g. Europe/London"
                          },
                          "language": {
                            "type": "string",
                            "example": "en",
                            "description": "Language of location name result"
                          },
                          "adminArea": {
                            "type": "string",
                            "example": "England",
                            "description": "Administrative region name (high level, e.g. state)"
                          },
                          "adminArea2": {
                            "type": "string",
                            "example": "Greater London",
                            "description": "Administrative region name (medium level, e.g. county)"
                          },
                          "adminArea3": {
                            "type": "string",
                            "nullable": true,
                            "description": "Administrative region name (low level, e.g. municipality)"
                          },
                          "lon": {
                            "type": "number",
                            "example": -0.1257,
                            "description": "Location longitude"
                          },
                          "lat": {
                            "type": "number",
                            "example": 51.5085,
                            "description": "Location latitude"
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/location/{location}": {
      "get": {
        "tags": [
          "Point Forecasts"
        ],
        "summary": "Location info",
        "description": "Location metadata.",
        "operationId": "get_info",
        "parameters": [
          {
            "name": "location",
            "in": "path",
            "required": true,
            "description": "\"Longitude,latitude\" or location identifier (id) from the location endpoint",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "lang",
            "in": "query",
            "required": false,
            "description": "Language (ISO 639-1 codes). Options: de, en, es, fr, it, pl, ru, fi, sv, nl, ko, pt, th, tr, zh, zh_TW (Chinese in Taiwan), zh_CN (Chinese in China). (default en)",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "id": {
                      "type": "number",
                      "example": 100184745,
                      "description": "Identifier to be used with weather queries"
                    },
                    "name": {
                      "type": "string",
                      "example": "Nairobi",
                      "description": "Location name e.g. London"
                    },
                    "country": {
                      "type": "string",
                      "example": "Kenia",
                      "description": "Location country name e.g. United Kingdom"
                    },
                    "timezone": {
                      "type": "string",
                      "example": "Africa/Nairobi"
                    },
                    "language": {
                      "type": "string",
                      "example": "fi",
                      "description": "Language of location name result"
                    },
                    "adminArea": {
                      "type": "string",
                      "example": "Nairobi",
                      "description": "Administrative region name (high level, e.g. state)"
                    },
                    "adminArea2": {
                      "type": "string",
                      "nullable": true,
                      "description": "Administrative region name (medium level, e.g. county)"
                    },
                    "adminArea3": {
                      "type": "string",
                      "nullable": true,
                      "description": "Administrative region name (low level, e.g. municipality)"
                    },
                    "lon": {
                      "type": "number",
                      "example": 36.8167,
                      "description": "Location longitude"
                    },
                    "lat": {
                      "type": "number",
                      "example": -1.2833,
                      "description": "Location latitude"
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/observation/latest/{location}": {
      "get": {
        "tags": [
          "Point Forecasts"
        ],
        "summary": "Observations",
        "description": "Observations from nearby representative weather stations.",
        "operationId": "get_observations",
        "parameters": [
          {
            "name": "location",
            "in": "path",
            "required": true,
            "description": "\"Longitude,latitude\" or location identifier (id) from the location endpoint",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "tz",
            "in": "query",
            "required": false,
            "description": "Time zone in response (an IANA time zone database name, default is the time zone of the location)",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "stations",
            "in": "query",
            "required": false,
            "description": "Amount of stations (default 3, maximum 6)",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "prec",
            "in": "query",
            "required": false,
            "description": "Include precipitation? 1 for yes, 0 for no (default 0).",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "tempunit",
            "in": "query",
            "required": false,
            "description": "Temperature unit: \"C\", \"F\" (default \"C\")",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "windunit",
            "in": "query",
            "required": false,
            "description": "Wind unit: \"MS\" (m/s), \"KTS\" (knots), \"KMH\" (km/h), or \"MPH\" (mph) (default m/s)",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "rounding",
            "in": "query",
            "required": false,
            "description": "Rounding of some variables to nearest integer: 0 or 1 (default 1 for no decimals)",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "observations": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "properties": {
                          "distance": {
                            "type": "string",
                            "example": "8 km E",
                            "description": "Distance from the location to the station e.g. 13 km E"
                          },
                          "elevation": {
                            "type": "number",
                            "example": 121,
                            "description": "Elevation (m) of the station above sea level"
                          },
                          "feelsLikeTemp": {
                            "type": "number",
                            "example": 3,
                            "description": "Feels like temperature (°C or requested unit)"
                          },
                          "latitude": {
                            "type": "number",
                            "example": 50.09,
                            "description": "Latitude of the station"
                          },
                          "longitude": {
                            "type": "number",
                            "example": 8.79,
                            "description": "Longitude of the station"
                          },
                          "precipitation": {
                            "type": "array",
                            "items": {
                              "type": "object",
                              "properties": {
                                "accum": {
                                  "type": "number",
                                  "example": 0,
                                  "description": "Precipitation in millimetres, during \"period\", ending at \"endtime\""
                                },
                                "endtime": {
                                  "type": "string",
                                  "example": "2026-02-20T13:00:00+01:00",
                                  "description": "The precipitation accumulation period end time, formatted like \"time\""
                                },
                                "period": {
                                  "type": "string",
                                  "example": "3h",
                                  "description": "Duration of this precipitation accumulation. One of \"1h\", \"3h\", \"6h\", \"12h\" or \"24h\"."
                                }
                              }
                            },
                            "description": "The set of latest available precipitation accumulations, included only with request parameter prec=1. Empty when no values are available."
                          },
                          "pressure": {
                            "type": "number",
                            "example": 1023.4,
                            "description": "Atmospheric pressure normalized to sea level (hPa)"
                          },
                          "relHumidity": {
                            "type": "number",
                            "example": 65,
                            "description": "Relative humidity (%)"
                          },
                          "snowDepth": {
                            "type": "number",
                            "example": 2,
                            "description": "Snow depth in centimetres (cm)"
                          },
                          "station": {
                            "type": "string",
                            "example": "OFFENBACH-WETTERPARK",
                            "description": "Name of the observation station"
                          },
                          "symbol": {
                            "type": "string",
                            "example": "d400",
                            "description": "Weather symbol code"
                          },
                          "temperature": {
                            "type": "number",
                            "example": 5,
                            "description": "Temperature (°C or requested unit)"
                          },
                          "time": {
                            "type": "string",
                            "example": "2026-02-20T14:00:00+01:00",
                            "description": "ISO 8601 date and time for the observed parameters, formatted according to request parameter tz"
                          },
                          "visibility": {
                            "type": "number",
                            "example": 19720,
                            "description": "Visibility in meters, e.g. \"10000\" for 10 km"
                          },
                          "windDir": {
                            "type": "number",
                            "example": 230,
                            "description": "Wind direction in degrees"
                          },
                          "windDirString": {
                            "type": "string",
                            "example": "SW",
                            "description": "Wind direction (N, NE, E, SE, S, SW, W, NW)"
                          },
                          "windGust": {
                            "type": "number",
                            "example": 6,
                            "description": "Wind gust speed (m/s or requested unit)"
                          },
                          "windSpeed": {
                            "type": "number",
                            "example": 3,
                            "description": "Wind speed (m/s or requested unit)"
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/current/{location}": {
      "get": {
        "tags": [
          "Point Forecasts"
        ],
        "summary": "Current",
        "description": "Current weather estimate.",
        "operationId": "get_current",
        "parameters": [
          {
            "name": "location",
            "in": "path",
            "required": true,
            "description": "\"Longitude,latitude\" or location identifier (id) from the location endpoint",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "alt",
            "in": "query",
            "required": false,
            "description": "Altitude in meters",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "tempunit",
            "in": "query",
            "required": false,
            "description": "Temperature unit",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "windunit",
            "in": "query",
            "required": false,
            "description": "Wind unit: \"MS\" (m/s), \"KTS\" (knots), \"KMH\" (km/h), or \"MPH\" (mph) (default m/s)",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "tz",
            "in": "query",
            "required": false,
            "description": "Time zone in response (IANA time zone database names)",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "lang",
            "in": "query",
            "required": false,
            "description": "Language (ISO 639-1 codes). Options: ar, bg, bn, ca, cs, da, de, el, en, en_gb = en, en_us = en, es, et, fa, fi, fr, gu, he, hi, hr, hu, id, is, it, ja, kn, ko, lt, lv, ml, nb, nl, no, pa, pl, pt = pt_pt, pt_br, pt_pt, ro, ru, sk, sq, sr, sv, ta, te, th, tr, uk, vi, zh (Simplified Chinese), zh_hk (Traditional Chinese). (default en)",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "rounding",
            "in": "query",
            "required": false,
            "description": "Rounding of some variables to nearest integer: 0 or 1 (default 1 for no decimals)",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "current": {
                      "type": "object",
                      "properties": {
                        "time": {
                          "type": "string",
                          "example": "2021-12-20T09:28+02:00",
                          "description": "ISO 8601 date and time"
                        },
                        "symbol": {
                          "type": "string",
                          "example": "n000",
                          "description": "Weather symbol code"
                        },
                        "symbolPhrase": {
                          "type": "string",
                          "example": "clear",
                          "description": "Description of weather symbol"
                        },
                        "temperature": {
                          "type": "number",
                          "example": -11.76,
                          "description": "Temperature (°C or requested unit)"
                        },
                        "feelsLikeTemp": {
                          "type": "number",
                          "example": -18.97,
                          "description": "Feels like temperature (°C or requested unit)"
                        },
                        "relHumidity": {
                          "type": "number",
                          "example": 69,
                          "description": "Relative humidity (%)"
                        },
                        "dewPoint": {
                          "type": "number",
                          "example": -15.81,
                          "description": "Dew point (°C or requested unit)"
                        },
                        "windSpeed": {
                          "type": "number",
                          "example": 4.25,
                          "description": "Wind speed (m/s or requested unit)"
                        },
                        "windDir": {
                          "type": "number",
                          "example": 16
                        },
                        "windDirString": {
                          "type": "string",
                          "example": "N",
                          "description": "Wind direction (N, NE, E, SE, S, SW, W, NW)"
                        },
                        "windGust": {
                          "type": "number",
                          "example": 11.66,
                          "description": "Wind gust (m/s or requested unit)"
                        },
                        "precipProb": {
                          "type": "number",
                          "example": 1,
                          "description": "Probability of precipitation (%)"
                        },
                        "precipRate": {
                          "type": "number",
                          "example": 0,
                          "description": "Intensity of precipitation rate (mm/h)"
                        },
                        "cloudiness": {
                          "type": "number",
                          "example": 3,
                          "description": "Cloudiness (%)"
                        },
                        "thunderProb": {
                          "type": "number",
                          "example": 0,
                          "description": "Probability of thunder nearby (%)"
                        },
                        "uvIndex": {
                          "type": "number",
                          "example": 0,
                          "description": "UV index"
                        },
                        "pressure": {
                          "type": "number",
                          "example": 1020.95,
                          "description": "Atmospheric pressure normalized to sea level (hPa)"
                        },
                        "visibility": {
                          "type": "number",
                          "example": 19934,
                          "description": "Visibility (m)"
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/forecast/minutely/{location}": {
      "get": {
        "tags": [
          "Point Forecasts"
        ],
        "summary": "Nowcast (short)",
        "description": "High resolution one hour precipitation forecast in one minute time steps, taking advantage of weather radar where available (Europe and continental USA).\n\nIn Europe and continental USA, the short nowcast is based on a true nowcast that uses radar extrapolation to move observed rain. The data is very fresh, usually less than 15 minutes old. If it is a true nowcast, the response resolution parameter shows \"resolution\": 1.\n\nIn other parts of the world, we use medium-range forecast so the forecast is not a true minutecast. The time step is 1 hour, so anything less than that has to be interpolated from the hourly time steps. The data may be several hours old, so the forecast isn’t as skilled in predicting near-term precipitation. If it is not a true nowcast, the response resolution parameter shows \"resolution\": 60",
        "operationId": "get_1minnowcast",
        "parameters": [
          {
            "name": "location",
            "in": "path",
            "required": true,
            "description": "\"Longitude,latitude\" or location identifier (id) from the location endpoint",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "periods",
            "in": "query",
            "required": false,
            "description": "Number of time steps (up to 60, default 60)",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "tz",
            "in": "query",
            "required": false,
            "description": "Time zone in response (IANA time zone database names)",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "forecast": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "properties": {
                          "time": {
                            "type": "string",
                            "example": "2022-06-22T07:43+03:00",
                            "description": "ISO 8601 date and time"
                          },
                          "precipRate": {
                            "type": "number",
                            "example": 0.93,
                            "description": "Intensity of precipitation rate (mm/h)"
                          }
                        }
                      }
                    },
                    "resolution": {
                      "type": "number",
                      "example": 1,
                      "description": "Time resolution of the precipitation rate, in minutes (1 for areas covered by radar, 60 elsewhere)."
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/forecast/15minutely/{location}": {
      "get": {
        "tags": [
          "Point Forecasts"
        ],
        "summary": "Nowcast (long)",
        "description": "3-hour forecast in 15-minute time steps. The values represent the conditions at the associated timestamp unless otherwise specified.",
        "operationId": "get_15minnowcast",
        "parameters": [
          {
            "name": "location",
            "in": "path",
            "required": true,
            "description": "\"Longitude,latitude\" or location identifier (id) from the location endpoint",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "periods",
            "in": "query",
            "required": false,
            "description": "Number of time steps (default 8, maximum 12)",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "alt",
            "in": "query",
            "required": false,
            "description": "Altitude in meters",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "tempunit",
            "in": "query",
            "required": false,
            "description": "Temperature unit: \"C\", \"F\" (default \"C\")",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "windunit",
            "in": "query",
            "required": false,
            "description": "Wind unit: \"MS\" (m/s), \"KTS\" (knots), \"KMH\" (km/h), or \"MPH\" (mph) (default m/s)",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "tz",
            "in": "query",
            "required": false,
            "description": "Time zone in response (IANA time zone database names)",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "dataset",
            "in": "query",
            "required": false,
            "description": "Variable set: \"standard\" or \"full\" (default \"standard\")",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "lang",
            "in": "query",
            "required": false,
            "description": "Language (ISO 639-1 codes). Options: ar, bg, bn, ca, cs, da, de, el, en, en_gb = en, en_us = en, es, et, fa, fi, fr, gu, he, hi, hr, hu, id, is, it, ja, kn, ko, lt, lv, ml, nb, nl, no, pa, pl, pt = pt_pt, pt_br, pt_pt, ro, ru, sk, sq, sr, sv, ta, te, th, tr, uk, vi, zh (Simplified Chinese), zh_hk (Traditional Chinese). (default en)",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "rounding",
            "in": "query",
            "required": false,
            "description": "Rounding of some variables to nearest integer: 0 or 1 (default 1 for no decimals)",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "forecast": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "properties": {
                          "time": {
                            "type": "string",
                            "example": "2021-12-20T10:30+01:00",
                            "description": "ISO 8601 date and time"
                          },
                          "symbol": {
                            "type": "string",
                            "example": "d421",
                            "description": "Weather symbol code"
                          },
                          "symbolPhrase": {
                            "type": "string",
                            "example": "wet snow showers",
                            "description": "Weather description (dataset=full)"
                          },
                          "temperature": {
                            "type": "number",
                            "example": 0.5,
                            "description": "Temperature (°C)"
                          },
                          "feelsLikeTemp": {
                            "type": "number",
                            "example": -4.55,
                            "description": "Feels like temperature (°C)"
                          },
                          "relHumidity": {
                            "type": "number",
                            "example": 97,
                            "description": "Relative humidity (%) (dataset=full)"
                          },
                          "dewPoint": {
                            "type": "number",
                            "example": 0.02,
                            "description": "Dew point (°C or requested unit) (dataset=full)"
                          },
                          "windDir": {
                            "type": "number",
                            "example": 220,
                            "description": "Wind direction in degrees"
                          },
                          "windSpeed": {
                            "type": "number",
                            "example": 5.47,
                            "description": "Wind speed (m/s or requested unit)"
                          },
                          "windGust": {
                            "type": "number",
                            "example": 11.06,
                            "description": "Wind gust speed (m/s or requested unit)"
                          },
                          "windDirString": {
                            "type": "string",
                            "example": "SW",
                            "description": "Wind direction (N, NE, E, SE, S, SW, W, NW)"
                          },
                          "precipProb": {
                            "type": "number",
                            "example": 82,
                            "description": "Probability of precipitation (%)"
                          },
                          "snowRate": {
                            "type": "number",
                            "example": 0.03,
                            "description": "Intensity of snow rate (cm/h, taking density into account) (dataset=full)"
                          },
                          "precipRate": {
                            "type": "number",
                            "example": 0.05,
                            "description": "Intensity of precipitation rate (mm/h)"
                          },
                          "cloudiness": {
                            "type": "number",
                            "example": 100,
                            "description": "Cloudiness (%) (dataset=full)"
                          },
                          "thunderProb": {
                            "type": "number",
                            "example": 0,
                            "description": "Thunder probability (%) (dataset=full)"
                          },
                          "uvIndex": {
                            "type": "number",
                            "example": 0,
                            "description": "Ultraviolet index (dataset=full)"
                          },
                          "pressure": {
                            "type": "number",
                            "example": 998.169,
                            "description": "Atmospheric pressure extrapolated to sea level (hPa) (dataset=full)"
                          },
                          "visibility": {
                            "type": "number",
                            "example": 25400,
                            "description": "Visibility (m) (dataset=full)"
                          },
                          "precipType": {
                            "type": "string",
                            "example": "mixed",
                            "description": "Precipitation type (always one of: rain, mixed, snow) (dataset=full)"
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/forecast/hourly/{location}": {
      "get": {
        "tags": [
          "Point Forecasts"
        ],
        "summary": "Hourly",
        "description": "Hourly forecasts, up to 7 days. The values represent the conditions at the associated timestamp unless otherwise specified.",
        "operationId": "get_hourly",
        "parameters": [
          {
            "name": "location",
            "in": "path",
            "required": true,
            "description": "\"Longitude,latitude\" or location identifier (id) from the location endpoint",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "periods",
            "in": "query",
            "required": false,
            "description": "Number of time steps (default 24, maximum 169)",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "alt",
            "in": "query",
            "required": false,
            "description": "Altitude in meters",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "tempunit",
            "in": "query",
            "required": false,
            "description": "Temperature unit: \"C\", \"F\" (default \"C\")",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "windunit",
            "in": "query",
            "required": false,
            "description": "Wind unit: \"MS\" (m/s), \"KTS\" (knots), \"KMH\" (km/h), or \"MPH\" (mph) (default m/s)",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "tz",
            "in": "query",
            "required": false,
            "description": "Time zone in response (IANA time zone database names)",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "dataset",
            "in": "query",
            "required": false,
            "description": "Variable set: \"standard\" or \"full\" (default \"standard\")",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "history",
            "in": "query",
            "required": false,
            "description": "History: whether to include past 24 hours (1 or 0, default 0)",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "lang",
            "in": "query",
            "required": false,
            "description": "Language (ISO 639-1 codes). Options: ar, bg, bn, ca, cs, da, de, el, en, en_gb = en, en_us = en, es, et, fa, fi, fr, gu, he, hi, hr, hu, id, is, it, ja, kn, ko, lt, lv, ml, nb, nl, no, pa, pl, pt = pt_pt, pt_br, pt_pt, ro, ru, sk, sq, sr, sv, ta, te, th, tr, uk, vi, zh (Simplified Chinese), zh_hk (Traditional Chinese). (default en)",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "rounding",
            "in": "query",
            "required": false,
            "description": "Rounding of some variables to nearest integer: 0 or 1 (default 1 for no decimals)",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "forecast": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "properties": {
                          "time": {
                            "type": "string",
                            "example": "2021-12-20T13:00+04:00",
                            "description": "ISO 8601 date and time"
                          },
                          "symbol": {
                            "type": "string",
                            "example": "d400",
                            "description": "Weather symbol code"
                          },
                          "symbolPhrase": {
                            "type": "string",
                            "example": "overcast",
                            "description": "Description of weather (dataset=full)"
                          },
                          "temperature": {
                            "type": "number",
                            "example": -0.78,
                            "description": "Temperature (°C or requested unit)"
                          },
                          "feelsLikeTemp": {
                            "type": "number",
                            "example": -6,
                            "description": "Feels like temperature (°C or requested unit)"
                          },
                          "windSpeed": {
                            "type": "number",
                            "example": 4.68,
                            "description": "Wind speed (m/s or requested unit)"
                          },
                          "windGust": {
                            "type": "number",
                            "example": 10.43,
                            "description": "Wind gust speed (m/s or requested unit)"
                          },
                          "relHumidity": {
                            "type": "number",
                            "example": 73,
                            "description": "Relative humidity (%) (dataset=full)"
                          },
                          "dewPoint": {
                            "type": "number",
                            "example": -3.59,
                            "description": "Dew point (°C or requested unit) (dataset=full)"
                          },
                          "windDir": {
                            "type": "number",
                            "example": 250,
                            "description": "Wind direction in degrees"
                          },
                          "windDirString": {
                            "type": "string",
                            "example": "W",
                            "description": "Wind direction (N, NE, E, SE, S, SW, W, NW)"
                          },
                          "precipProb": {
                            "type": "number",
                            "example": 44,
                            "description": "Probability of precipitation in the 1 hour period ending at the timestamp (%)"
                          },
                          "precipAccum": {
                            "type": "number",
                            "example": 0.01,
                            "description": "Accumulated 1 hour precipitation up until the timestamp (as liquid water, mm)."
                          },
                          "snowAccum": {
                            "type": "number",
                            "example": 0.01,
                            "description": "Thickness of snow accumulated over 1 hour ending at the timestamp (cm) (dataset=full)"
                          },
                          "cloudiness": {
                            "type": "number",
                            "example": 99,
                            "description": "Cloudiness (%) (dataset=full)"
                          },
                          "thunderProb": {
                            "type": "number",
                            "example": 0,
                            "description": "Thunder probability (%) (dataset=full)"
                          },
                          "uvIndex": {
                            "type": "number",
                            "example": 0,
                            "description": "Ultraviolet index (dataset=full)"
                          },
                          "pressure": {
                            "type": "string",
                            "example": 994.789,
                            "description": "Pressure (hPa) (dataset=full)"
                          },
                          "visibility": {
                            "type": "number",
                            "example": 26554,
                            "description": "Visibility (m) (dataset=full)"
                          },
                          "precipType": {
                            "type": "string",
                            "example": "snow",
                            "description": "Precipitation type (always one of: rain, mixed, snow) (dataset=full)"
                          },
                          "solarRadiation": {
                            "type": "number",
                            "example": 140,
                            "description": "Ground level solar radiation intensity on a level surface, W/m² (dataset=full)"
                          },
                          "snowDepth": {
                            "type": "number",
                            "example": 12,
                            "description": "Snow depth on the ground (cm) (dataset=full)"
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/forecast/3hourly/{location}": {
      "get": {
        "tags": [
          "Point Forecasts"
        ],
        "summary": "Three-hourly",
        "description": "Forecast at 3 hour intervals, up to 14 days. The values represent the conditions at the associated timestamp unless otherwise specified. Precipitation sums are for three-hour periods.",
        "operationId": "get_3hourly",
        "parameters": [
          {
            "name": "location",
            "in": "path",
            "required": true,
            "description": "\"Longitude,latitude\" or location identifier (id) from the location endpoint",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "periods",
            "in": "query",
            "required": false,
            "description": "Number of time steps (default 21, maximum 113)",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "alt",
            "in": "query",
            "required": false,
            "description": "Altitude in meters",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "tempunit",
            "in": "query",
            "required": false,
            "description": "Temperature unit: \"C\", \"F\" (default \"C\")",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "windunit",
            "in": "query",
            "required": false,
            "description": "Wind unit: \"MS\" (m/s), \"KTS\" (knots), \"KMH\" (km/h), or \"MPH\" (mph) (default m/s)",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "tz",
            "in": "query",
            "required": false,
            "description": "Time zone in response (IANA time zone database names)",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "dataset",
            "in": "query",
            "required": false,
            "description": "Variable set: \"standard\" or \"full\" (default \"standard\")",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "history",
            "in": "query",
            "required": false,
            "description": "History: whether to include past 24 hours (1 or 0, default 0)",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "lang",
            "in": "query",
            "required": false,
            "description": "Language (ISO 639-1 codes). Options: ar, bg, bn, ca, cs, da, de, el, en, en_gb = en, en_us = en, es, et, fa, fi, fr, gu, he, hi, hr, hu, id, is, it, ja, kn, ko, lt, lv, ml, nb, nl, no, pa, pl, pt = pt_pt, pt_br, pt_pt, ro, ru, sk, sq, sr, sv, ta, te, th, tr, uk, vi, zh (Simplified Chinese), zh_hk (Traditional Chinese). (default en)",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "rounding",
            "in": "query",
            "required": false,
            "description": "Rounding of some variables to nearest integer: 0 or 1 (default 1 for no decimals)",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "forecast": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "properties": {
                          "time": {
                            "type": "string",
                            "example": "2021-12-20T10:00+01:00",
                            "description": "ISO 8601 date and time"
                          },
                          "symbol": {
                            "type": "string",
                            "example": "n400",
                            "description": "Weather symbol code"
                          },
                          "symbolPhrase": {
                            "type": "string",
                            "example": "overcast",
                            "description": "Description of weather (dataset=full)"
                          },
                          "temperature": {
                            "type": "number",
                            "example": -4.1,
                            "description": "Temperature (°C or requested unit)"
                          },
                          "feelsLikeTemp": {
                            "type": "number",
                            "example": -9.13,
                            "description": "Feels like temperature (°C or requested unit)"
                          },
                          "windSpeed": {
                            "type": "number",
                            "example": 4.2,
                            "description": "Wind speed (m/s or requested unit)"
                          },
                          "windGust": {
                            "type": "number",
                            "example": 8.66,
                            "description": "Wind gust speed (m/s or requested unit)"
                          },
                          "relHumidity": {
                            "type": "number",
                            "example": 78,
                            "description": "Relative humidity (%) (dataset=full)"
                          },
                          "dewPoint": {
                            "type": "number",
                            "example": -7.38,
                            "description": "Dew point (°C or requested unit) (dataset=full)"
                          },
                          "windDir": {
                            "type": "number",
                            "example": 273,
                            "description": "Wind direction in degrees"
                          },
                          "windDirString": {
                            "type": "string",
                            "example": "W",
                            "description": "Wind direction (N, NE, E, SE, S, SW, W, NW)"
                          },
                          "precipProb": {
                            "type": "number",
                            "example": 7,
                            "description": "Probability of precipitation in the 3 hour period ending at the timestamp (%)"
                          },
                          "precipAccum": {
                            "type": "number",
                            "example": 0.01,
                            "description": "Accumulated 3 hour precipitation up until the timestamp (as liquid water, mm)."
                          },
                          "snowAccum": {
                            "type": "number",
                            "example": 0.03,
                            "description": "Thickness of snow accumulated over 3 hours ending at the timestamp (cm) (dataset=full)"
                          },
                          "cloudiness": {
                            "type": "number",
                            "example": 100,
                            "description": "Cloudiness (%) (dataset=full)"
                          },
                          "thunderProb": {
                            "type": "number",
                            "example": 0,
                            "description": "Thunder probability (%) (dataset=full)"
                          },
                          "uvIndex": {
                            "type": "number",
                            "example": 0,
                            "description": "Ultraviolet index (dataset=full)"
                          },
                          "pressure": {
                            "type": "string",
                            "example": 1014.42,
                            "description": "Pressure (hPa) (dataset=full)"
                          },
                          "visibility": {
                            "type": "number",
                            "example": 49379,
                            "description": "Visibility (m) (dataset=full)"
                          },
                          "precipType": {
                            "type": "string",
                            "example": "snow",
                            "description": "Precipitation type (always one of: rain, mixed, snow) (dataset=full)"
                          },
                          "solarRadiation": {
                            "type": "number",
                            "example": 85,
                            "description": "Ground level solar radiation intensity on a level surface, W/m² (dataset=full)"
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/forecast/daily/{location}": {
      "get": {
        "tags": [
          "Point Forecasts"
        ],
        "summary": "Daily",
        "description": "Daily forecasts, up to 14 days.",
        "operationId": "get_daily",
        "parameters": [
          {
            "name": "location",
            "in": "path",
            "required": true,
            "description": "\"Longitude,latitude\" or location identifier (id) from the location endpoint",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "periods",
            "in": "query",
            "required": false,
            "description": "Number of time steps (default 7, maximum 15)",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "alt",
            "in": "query",
            "required": false,
            "description": "Altitude in meters",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "tempunit",
            "in": "query",
            "required": false,
            "description": "Temperature unit: \"C\", \"F\" (default \"C\")",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "windunit",
            "in": "query",
            "required": false,
            "description": "Wind unit: \"MS\" (m/s), \"KTS\" (knots), \"KMH\" (km/h), or \"MPH\" (mph) (default m/s)",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "dataset",
            "in": "query",
            "required": false,
            "description": "Variable set: \"standard\" or \"full\" (default \"standard\")",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "lang",
            "in": "query",
            "required": false,
            "description": "Language (ISO 639-1 codes). Options: ar, bg, bn, ca, cs, da, de, el, en, en_gb = en, en_us = en, es, et, fa, fi, fr, gu, he, hi, hr, hu, id, is, it, ja, kn, ko, lt, lv, ml, nb, nl, no, pa, pl, pt = pt_pt, pt_br, pt_pt, ro, ru, sk, sq, sr, sv, ta, te, th, tr, uk, vi, zh (Simplified Chinese), zh_hk (Traditional Chinese). (default en)",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "rounding",
            "in": "query",
            "required": false,
            "description": "Rounding of some variables to nearest integer: 0 or 1 (default 1 for no decimals, value 0 is recommended with dataset=full)",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "offset_hours",
            "in": "query",
            "required": false,
            "description": "Include past data up to -48 hours",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "forecast": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "properties": {
                          "date": {
                            "type": "string",
                            "example": "2026-08-12",
                            "description": "ISO 8601 date"
                          },
                          "cloudiness": {
                            "type": "number",
                            "example": 26,
                            "description": "Daytime cloudiness average (%) (dataset=full)"
                          },
                          "confidence": {
                            "type": "string",
                            "example": "g",
                            "description": "Confidence in forecast: g (green, good), y (yellow, normal), o (orange, low) (dataset=full)"
                          },
                          "maxDewPoint": {
                            "type": "number",
                            "example": 8.52,
                            "description": "maximum dew point (°C) (dataset=full)"
                          },
                          "maxFeelsLikeTemp": {
                            "type": "number",
                            "example": 18.03,
                            "description": "24h maximum feels-like temperature (°C) (dataset=full)"
                          },
                          "maxRelHumidity": {
                            "type": "number",
                            "example": 85,
                            "description": "24h maximum relative humidity (%) (dataset=full)"
                          },
                          "maxTemp": {
                            "type": "number",
                            "example": 18.03,
                            "description": "24h maximum temperature (°C) in a deterministic forecast"
                          },
                          "maxTempEnsemble": {
                            "type": "object",
                            "properties": {
                              "p000": {
                                "type": "number",
                                "example": 16.99
                              },
                              "p025": {
                                "type": "number",
                                "example": 17.89
                              },
                              "p050": {
                                "type": "number",
                                "example": 18.33
                              },
                              "p075": {
                                "type": "number",
                                "example": 18.66
                              },
                              "p100": {
                                "type": "number",
                                "example": 19.33
                              }
                            },
                            "description": "A collection of values (°C) below which certain percentages (p000 for 0%, p025 for 25%,...) of 24h maximum temperatures of ensemble members of a probabilistic forecast are (dataset=full)"
                          },
                          "maxWindGust": {
                            "type": "number",
                            "example": 13.02,
                            "description": "Maximum wind gust speed (m/s or requested unit) (dataset=full)"
                          },
                          "maxWindSpeed": {
                            "type": "number",
                            "example": 6.83,
                            "description": "Maximum wind speed (m/s or requested unit)"
                          },
                          "minDewPoint": {
                            "type": "number",
                            "example": 4.35,
                            "description": "minimum dew point (°C, dataset=full)"
                          },
                          "minFeelsLikeTemp": {
                            "type": "number",
                            "example": 6.71,
                            "description": "24h minimum feels-like temperature (°C) (dataset=full)"
                          },
                          "minRelHumidity": {
                            "type": "number",
                            "example": 39,
                            "description": "24h minimum relative humidity (%) (dataset=full)"
                          },
                          "minTemp": {
                            "type": "number",
                            "example": 9.12,
                            "description": "24h minimum temperature (°C) in a deterministic forecast"
                          },
                          "minTempEnsemble": {
                            "type": "object",
                            "properties": {
                              "p000": {
                                "type": "number",
                                "example": 8.69
                              },
                              "p025": {
                                "type": "number",
                                "example": 9.19
                              },
                              "p050": {
                                "type": "number",
                                "example": 9.44
                              },
                              "p075": {
                                "type": "number",
                                "example": 9.69
                              },
                              "p100": {
                                "type": "number",
                                "example": 10.44
                              }
                            },
                            "description": "A collection of values (°C) below which certain percentages (p000 for 0%, p025 for 25%,...) of 24h minimum temperatures of ensemble members of a probabilistic forecast are (dataset=full)"
                          },
                          "minVisibility": {
                            "type": "number",
                            "example": 8281,
                            "description": "Minimum visibility (m) (dataset=full)"
                          },
                          "moonPhase": {
                            "type": "number",
                            "example": 356,
                            "description": "Phase of moon at midday (degrees) (dataset=full)"
                          },
                          "moonrise": {
                            "type": "string",
                            "example": "04:20:34",
                            "description": "Moonrise time of day in local time (dataset=full)"
                          },
                          "moonset": {
                            "type": "string",
                            "example": "21:22:59",
                            "description": "Moonset time of day in local time (dataset=full)"
                          },
                          "precipAccum": {
                            "type": "number",
                            "example": 0.31,
                            "description": "Accumulated precipitation (as liquid water, mm) in a deterministic forecast"
                          },
                          "precipAccumEnsemble": {
                            "type": "object",
                            "properties": {
                              "p010": {
                                "type": "number",
                                "example": 0.05
                              },
                              "p025": {
                                "type": "number",
                                "example": 0.2
                              },
                              "p050": {
                                "type": "number",
                                "example": 0.47
                              },
                              "p075": {
                                "type": "number",
                                "example": 0.88
                              },
                              "p090": {
                                "type": "number",
                                "example": 1.28
                              }
                            },
                            "description": "A collection of values (mm) below which certain percentages (p010 for 10%, p025 for 25%,...) of 24h precipitation accumulations of ensemble members of a probabilistic forecast are (dataset=full)"
                          },
                          "precipProb": {
                            "type": "number",
                            "example": 39,
                            "description": "Precipitation probability during the day (%) (dataset=full)"
                          },
                          "pressure": {
                            "type": "number",
                            "example": 1018.5,
                            "description": "Daytime average sea level pressure (hPa) (dataset=full)"
                          },
                          "snowAccum": {
                            "type": "number",
                            "example": 0,
                            "description": "Accumulated snow (thickness of precipitated snow, cm) (dataset=full)"
                          },
                          "snowDepth": {
                            "type": "number",
                            "example": 0,
                            "description": "Thickness of snow on the ground (cm)"
                          },
                          "solarRadiationSum": {
                            "type": "number",
                            "example": 5585,
                            "description": "Ground level solar radiation on a level surface, sum over the entire day (Wh/m²) (dataset=full)"
                          },
                          "sunhours": {
                            "type": "number",
                            "example": 12.3303,
                            "description": "Sum of sunlight hours over the entire day (hours, dataset=full)"
                          },
                          "sunrise": {
                            "type": "string",
                            "example": "05:25:32",
                            "description": "Sunrise time of day in local time (dataset=full)"
                          },
                          "sunriseEpoch": {
                            "type": "number",
                            "example": 1786501532,
                            "description": "Sunrise time in Unix time (dataset=full)"
                          },
                          "sunset": {
                            "type": "string",
                            "example": "21:24:35",
                            "description": "Sunset time of day in local time (dataset=full)"
                          },
                          "sunsetEpoch": {
                            "type": "number",
                            "example": 1786559075,
                            "description": "Sunset time in Unix time (dataset=full)"
                          },
                          "symbol": {
                            "type": "string",
                            "example": "d210",
                            "description": "Weather symbol code representing daytime conditions (7am to 6pm local time)"
                          },
                          "symbolPhrase": {
                            "type": "string",
                            "example": "light rain",
                            "description": "Description of weather during the day (dataset=full)"
                          },
                          "uvIndex": {
                            "type": "number",
                            "example": 3.22,
                            "description": "Maximum ultraviolet index (dataset=full)"
                          },
                          "windDir": {
                            "type": "number",
                            "example": 313,
                            "description": "Wind direction at maximum wind speed (degrees)"
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/capabilities": {
      "get": {
        "tags": [
          "Weather Maps"
        ],
        "summary": "Capabilities",
        "description": "Capabilities endpoint is used to fetch layer metadata. This metadata is used to perform image queries. Capabilities-response provides layer information such as description, temporal and spatial extents as well as available color schemes.\n\nImages are layers renderable to image formats such as png or svg. The current data property in time element is the index to the most recent available time.\n\nImage products may have additional color schemes which can be optionally specified. Several layers have transparency in the color scheme by default, enabling them to be overlaid directly onto a map. Alternatively, we also offer non-transparent color schemes when only the details of the map – like country borders, roads and city names – are to be placed on top of the weather layer. If an alternative color scheme is available, you can find it in the capabilities endpoint.",
        "operationId": "get_capabilities",
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "description": "Access token as provided by authorization endpoint",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "images": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "properties": {
                          "id": {
                            "type": "number",
                            "example": 2
                          },
                          "attribution": {
                            "type": "string",
                            "nullable": true
                          },
                          "title": {
                            "type": "string",
                            "example": "Temperature"
                          },
                          "description": {
                            "type": "string",
                            "example": "Global surface temperature"
                          },
                          "formats": {
                            "type": "array",
                            "items": {
                              "type": "string",
                              "example": "image/png"
                            }
                          },
                          "colorschemes": {
                            "type": "array",
                            "items": {
                              "type": "string",
                              "example": "default"
                            }
                          },
                          "times": {
                            "type": "object",
                            "properties": {
                              "updated": {
                                "type": "string",
                                "example": "2022-01-27T00:00:00Z"
                              },
                              "available": {
                                "type": "array",
                                "items": {
                                  "type": "string",
                                  "example": "2022-01-27T06:00:00Z"
                                }
                              },
                              "current": {
                                "type": "number",
                                "example": 33
                              }
                            }
                          },
                          "analysis": {
                            "type": "string",
                            "example": "20240222000000"
                          },
                          "extent": {
                            "type": "object",
                            "properties": {
                              "minLat": {
                                "type": "number",
                                "example": -90
                              },
                              "maxLat": {
                                "type": "number",
                                "example": 90
                              },
                              "minLon": {
                                "type": "number",
                                "example": -180
                              },
                              "maxLon": {
                                "type": "number",
                                "example": 180
                              },
                              "minZoom": {
                                "type": "number",
                                "example": 2
                              },
                              "maxZoom": {
                                "type": "number",
                                "example": 14
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/image/tile/{z}/{x}/{y}/{time}/{id}": {
      "get": {
        "tags": [
          "Weather Maps"
        ],
        "summary": "Tile",
        "description": "Tile endpoint is used to obtain weather map tiles (size 256x256) for the given layer and color scheme.\n\n**Example response**\n\n![Example response](/static/images/tile_example.png)",
        "operationId": "get_tile",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "Layer id",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "x",
            "in": "path",
            "required": true,
            "description": "X index of the requested tile",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "y",
            "in": "path",
            "required": true,
            "description": "Y index of the requested tile",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "z",
            "in": "path",
            "required": true,
            "description": "Zoom level of the requested tile",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "time",
            "in": "path",
            "required": true,
            "description": "UTC timestamp value for the data to retrieve in ISO 8601 format. Must appear in the available times list",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "token",
            "in": "query",
            "required": true,
            "description": "Access token as provided by authorization endpoint",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "colorscheme",
            "in": "query",
            "required": false,
            "description": "Layer color scheme. Must appear in the color scheme list returned by capabilities endpoint",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "updated",
            "in": "query",
            "required": false,
            "description": "Include the updated timestamp as an optional query parameter when requesting rapidly updating layers to prevent fetching tiles from outdated analyses.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "analyses",
            "in": "query",
            "required": false,
            "description": "Include the analyses timestamps as an optional query parameter when requesting rapidly updating radar layers to prevent fetching tiles from outdated analyses",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "windunit",
            "in": "query",
            "required": false,
            "description": "Wind speed unit on the wind symbol map layer. Supported values: ms (m/s, the default), knots, kmh (km/hour), or mph (miles/hour).",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "A PNG image.",
            "content": {
              "image/png": {}
            }
          }
        }
      }
    },
    "/api/v1/symbol/{mode}": {
      "get": {
        "tags": [
          "Weather Maps"
        ],
        "summary": "Symbol",
        "description": "Symbol endpoint serves compact multi‑location forecast \"symbol tiles\" for three modes: current, hourly, and daily. Parameters x, y and z have the same meaning as in the Tile endpoint. Symbol endpoint returns a JSON tile with per‑location current or forecast timesteps including temperature and weather symbol codes, designed for use as map overlays with minimal payload.",
        "operationId": "get_symbol",
        "parameters": [
          {
            "name": "mode",
            "in": "path",
            "required": true,
            "description": "One of: \"current\" for the nearest full hour, or \"hourly\" or \"daily\" for forecasts. The forecasts cover five days, that is, 120 hourly or 5 daily timesteps",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "x",
            "in": "query",
            "required": true,
            "description": "X index of the requested JSON tile",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "y",
            "in": "query",
            "required": true,
            "description": "Y index of the requested JSON tile",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "z",
            "in": "query",
            "required": true,
            "description": "Zoom level of the requested JSON tile. Valid range: 3..12",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "units",
            "in": "query",
            "required": false,
            "description": "Use units=C for Celsius or units=F for Fahrenheit. Default: units=C",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "wrap",
            "in": "query",
            "required": false,
            "description": "Use wrap=1 for automatic horizontal wrapping of tiles. It makes x = x % (max(x) + 1), where max(x) is the maximum x on the selected zoom level (z). Default: wrap=0",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "locations": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "properties": {
                          "city": {
                            "type": "string",
                            "example": "Tampere",
                            "description": "City name"
                          },
                          "id": {
                            "type": "number",
                            "example": 100634963,
                            "description": "Location id"
                          },
                          "lat": {
                            "type": "number",
                            "example": "61.499114990",
                            "description": "Latitude (decimal degrees)"
                          },
                          "lon": {
                            "type": "number",
                            "example": "23.787117004",
                            "description": "Longitude (decimal degrees)"
                          },
                          "timesteps": {
                            "type": "array",
                            "items": {
                              "type": "object",
                              "properties": {
                                "symbol": {
                                  "type": "string",
                                  "example": "n400",
                                  "description": "Weather symbol code (see symbol codes in \"Resources\")"
                                },
                                "temperature": {
                                  "type": "number",
                                  "example": 4.72,
                                  "description": "Air temperature (units according to units parameter)"
                                },
                                "time": {
                                  "type": "string",
                                  "example": "2025-12-03T14:00",
                                  "description": "UTC date and time (for current or hourly mode), or date (for daily mode) of the JSON tile, in ISO 8601 format"
                                }
                              }
                            },
                            "description": "Array of timestep objects (length depends on mode)"
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/legend/{colorscheme}/{id}": {
      "get": {
        "tags": [
          "Weather Maps"
        ],
        "summary": "Legend",
        "description": "Legend endpoint is used to obtain legend image for a color scheme\n\n**Example response**\n\n![Example response](/static/images/legend_example.png)",
        "operationId": "get_legend",
        "parameters": [
          {
            "name": "colorscheme",
            "in": "path",
            "required": true,
            "description": "Color scheme id. Must appear in the color scheme list returned by capabilities endpoint",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "Layer id",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "token",
            "in": "query",
            "required": true,
            "description": "Access token as provided by authorization endpoint",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "A PNG image.",
            "content": {
              "image/png": {}
            }
          }
        }
      }
    },
    "/api/v1/air-quality/forecast/hourly/{location}": {
      "get": {
        "tags": [
          "Air Quality"
        ],
        "summary": "Hourly",
        "description": "Hourly air quality forecasts.",
        "operationId": "get_hourly",
        "parameters": [
          {
            "name": "location",
            "in": "path",
            "required": true,
            "description": "\"Longitude, latitude\" or location identifier (id) from the location endpoint",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "periods",
            "in": "query",
            "required": false,
            "description": "Number of time steps (default 24, maximum 85)",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "tz",
            "in": "query",
            "required": false,
            "description": "Time zone in response (IANA time zone database names)",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "lang",
            "in": "query",
            "required": false,
            "description": "Language (ISO 639-1 codes). Options: ar, bg, cs, da, de, el, en, et, es, fa, fi, fr, hi, hr, hu, id, is, it, ja, ko, lt, lv, nl, no, pl, pt, ro, ru, sk, sr, sv, ta, th, tr, uk, vi, zh (Simplified Chinese), zh_hk (Traditional Chinese). (default en)",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "forecast": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "properties": {
                          "time": {
                            "type": "string",
                            "example": "2022-02-03T10:00Z",
                            "description": "ISO 8601 date and time"
                          },
                          "pollutant": {
                            "type": "string",
                            "example": "Particulate matter <2.5um",
                            "description": "Most significant pollution type (\"Carbon monoxide\", \"Nitrogen dioxide\", \"Ozone\", \"Particulate matter <10um\", \"Particulate matter <2.5um\", \"Sulphur dioxide\")"
                          },
                          "pollutantPhrase": {
                            "type": "string",
                            "example": "Particulate matter <2.5 µm",
                            "description": "Description of most significant pollution type in given language (e.g. \"Carbon monoxide\", \"Nitrogen dioxide\", \"Ozone\", \"Particulate matter <10 μm\", \"Particulate matter <2.5 μm\" or \"Sulphur dioxide\")"
                          },
                          "AQI": {
                            "type": "number",
                            "example": 102,
                            "description": "General AQI: lower is better"
                          },
                          "AQI_CO": {
                            "type": "number",
                            "example": 8,
                            "description": "AQI based on carbon monoxide"
                          },
                          "AQI_NO2": {
                            "type": "number",
                            "example": 6,
                            "description": "AQI based on nitrogen dioxide"
                          },
                          "AQI_O3": {
                            "type": "number",
                            "example": 24,
                            "description": "AQI based on ozone"
                          },
                          "AQI_SO2": {
                            "type": "number",
                            "example": 4,
                            "description": "AQI based on sulfur dioxide"
                          },
                          "AQI_PM10": {
                            "type": "number",
                            "example": 64,
                            "description": "AQI based on particulate matter (PM10)"
                          },
                          "AQI_PM2P5": {
                            "type": "number",
                            "example": 102,
                            "description": "AQI based on particulate matter (PM2.5)"
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/air-quality/forecast/daily/{location}": {
      "get": {
        "tags": [
          "Air Quality"
        ],
        "summary": "Daily",
        "description": "Daily air quality forecasts.",
        "operationId": "get_daily",
        "parameters": [
          {
            "name": "location",
            "in": "path",
            "required": true,
            "description": "\"Longitude, latitude\" or location identifier (id) from the location endpoint",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "periods",
            "in": "query",
            "required": false,
            "description": "Number of time steps (default 3, maximum 4)",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "lang",
            "in": "query",
            "required": false,
            "description": "Language (ISO 639-1 codes). Options: ar, bg, cs, da, de, el, en, et, es, fa, fi, fr, hi, hr, hu, id, is, it, ja, ko, lt, lv, nl, no, pl, pt, ro, ru, sk, sr, sv, ta, th, tr, uk, vi, zh (Simplified Chinese), zh_hk (Traditional Chinese). (default en)",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "forecast": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "properties": {
                          "date": {
                            "type": "string",
                            "example": "2022-02-03",
                            "description": "ISO 8601 date"
                          },
                          "AQI": {
                            "type": "number",
                            "example": 111,
                            "description": "General AQI: lower is better"
                          },
                          "pollutant": {
                            "type": "string",
                            "example": "Particulate matter <2.5um",
                            "description": "Most significant pollution type (\"Carbon monoxide\", \"Nitrogen dioxide\", \"Ozone\", \"Particulate matter <10um\", \"Particulate matter <2.5um\", \"Sulphur dioxide\")"
                          },
                          "pollutantPhrase": {
                            "type": "string",
                            "example": "Particulate matter <2.5 µm",
                            "description": "Description of most significant pollution type in given language (e.g. \"Carbon monoxide\", \"Nitrogen dioxide\", \"Ozone\", \"Particulate matter <10 μm\", \"Particulate matter <2.5 μm\" or \"Sulphur dioxide\")"
                          },
                          "AQI_CO": {
                            "type": "number",
                            "example": 7,
                            "description": "AQI based on carbon monoxide"
                          },
                          "AQI_NO2": {
                            "type": "number",
                            "example": 48,
                            "description": "AQI based on nitrogen dioxide"
                          },
                          "AQI_GO3": {
                            "type": "number",
                            "example": 71,
                            "description": "AQI based on ozone"
                          },
                          "AQI_SO2": {
                            "type": "number",
                            "example": 59,
                            "description": "AQI based on sulfur dioxide"
                          },
                          "AQI_PM2P5": {
                            "type": "number",
                            "example": 111,
                            "description": "AQI based on particulate matter (PM2.5)"
                          },
                          "AQI_PM10": {
                            "type": "number",
                            "example": 66,
                            "description": "AQI based on particulate matter (PM10)"
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/pollen/forecast/hourly/{location}": {
      "get": {
        "tags": [
          "Pollen Forecasts"
        ],
        "summary": "Hourly",
        "description": "Hourly pollen forecasts.",
        "operationId": "get_hourly",
        "parameters": [
          {
            "name": "location",
            "in": "path",
            "required": true,
            "description": "\"Longitude, latitude\" or location identifier (id) from the location endpoint",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "periods",
            "in": "query",
            "required": false,
            "description": "Number of time steps (default 24, maximum 85)",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "tz",
            "in": "query",
            "required": false,
            "description": "Time zone in response (IANA time zone database names)",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "forecast": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "properties": {
                          "time": {
                            "type": "string",
                            "example": "2023-03-28T14:00+02:00"
                          },
                          "alder": {
                            "type": "number",
                            "example": 1
                          },
                          "birch": {
                            "type": "number",
                            "example": 0
                          },
                          "grass": {
                            "type": "number",
                            "example": 1
                          },
                          "mugwort": {
                            "type": "number",
                            "example": 0
                          },
                          "olive": {
                            "type": "number",
                            "example": 0
                          },
                          "ragweed": {
                            "type": "number",
                            "example": 0
                          },
                          "alder_m3": {
                            "type": "number",
                            "example": 0.3
                          },
                          "birch_m3": {
                            "type": "number",
                            "example": 0.1
                          },
                          "grass_m3": {
                            "type": "number",
                            "example": 0.325
                          },
                          "mugwort_m3": {
                            "type": "number",
                            "example": 0
                          },
                          "olive_m3": {
                            "type": "number",
                            "example": 0
                          },
                          "ragweed_m3": {
                            "type": "number",
                            "example": 0
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/pollen/forecast/daily/{location}": {
      "get": {
        "tags": [
          "Pollen Forecasts"
        ],
        "summary": "Daily",
        "description": "Daily pollen forecasts.",
        "operationId": "get_daily",
        "parameters": [
          {
            "name": "location",
            "in": "path",
            "required": true,
            "description": "\"Longitude, latitude\" or location identifier (id) from the location endpoint",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "periods",
            "in": "query",
            "required": false,
            "description": "Number of time steps (default 3, maximum 4)",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "forecast": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "properties": {
                          "date": {
                            "type": "string",
                            "example": "2023-03-29",
                            "description": "ISO 8601 date"
                          },
                          "alder": {
                            "type": "number",
                            "example": 1
                          },
                          "birch": {
                            "type": "number",
                            "example": 1
                          },
                          "grass": {
                            "type": "number",
                            "example": 1
                          },
                          "mugwort": {
                            "type": "number",
                            "example": 0
                          },
                          "olive": {
                            "type": "number",
                            "example": 0
                          },
                          "ragweed": {
                            "type": "number",
                            "example": 0
                          },
                          "alder_m3": {
                            "type": "number",
                            "example": 0.2
                          },
                          "birch_m3": {
                            "type": "number",
                            "example": 0.65
                          },
                          "grass_m3": {
                            "type": "number",
                            "example": 0.45
                          },
                          "mugwort_m3": {
                            "type": "number",
                            "example": 0
                          },
                          "olive_m3": {
                            "type": "number",
                            "example": 0
                          },
                          "ragweed_m3": {
                            "type": "number",
                            "example": 0
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/climate/monthly/{location}": {
      "get": {
        "tags": [
          "Climate Data"
        ],
        "summary": "Monthly climate",
        "description": "Averages and other summary weather statistics, by month. The values are based on a 30-year period 1991-2020.",
        "operationId": "get_monthly",
        "parameters": [
          {
            "name": "location",
            "in": "path",
            "required": true,
            "description": "\"Longitude,latitude\" or location identifier (id) from the location endpoint",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "tempunit",
            "in": "query",
            "required": false,
            "description": "Temperature unit: \"C\", \"F\" (default \"C\")",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "climate": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "properties": {
                          "month": {
                            "type": "string",
                            "example": "01",
                            "description": "Month of year"
                          },
                          "dayMaxTemp": {
                            "type": "number",
                            "example": -0.76,
                            "description": "Daily maximum temperature"
                          },
                          "dayMinTemp": {
                            "type": "number",
                            "example": -5.68,
                            "description": "Daily minimum temperature"
                          },
                          "dayAvgTemp": {
                            "type": "number",
                            "example": -3.2,
                            "description": "Daily average temperature"
                          },
                          "precipSum": {
                            "type": "number",
                            "example": 55.17,
                            "description": "Precipitation sum (mm)"
                          },
                          "dailyPrecip": {
                            "type": "number",
                            "example": 1.78,
                            "description": "Precipitation accumulation during a day (mm)"
                          },
                          "rainDays": {
                            "type": "number",
                            "example": 19.09,
                            "description": "Number of rain days in month (≥0.1 mm of precipitation)"
                          },
                          "frostDays": {
                            "type": "number",
                            "example": 26.42,
                            "description": "Number of frost days in month"
                          },
                          "seaSurfaceTemp": {
                            "type": "number or null",
                            "example": 0.85,
                            "description": "Average sea surface temperature, null outside seas or coastal areas"
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/climate/daily/{location}": {
      "get": {
        "tags": [
          "Climate Data"
        ],
        "summary": "Daily climate",
        "description": "Temperature statistics of a given day in a location. The values are 15-day central moving averages of 30-year averages of daily values during 1991-2020.",
        "operationId": "get_daily",
        "parameters": [
          {
            "name": "location",
            "in": "path",
            "required": true,
            "description": "\"Longitude,latitude\" or location identifier (id) from the location endpoint",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "monthday",
            "in": "query",
            "required": true,
            "description": "\"month-day\" as two two-digit numbers, separated by a dash, e.g., 05-27 for May 27",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "tempunit",
            "in": "query",
            "required": false,
            "description": "Temperature unit: \"C\", \"F\" (default \"C\")",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "climate": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "properties": {
                          "month": {
                            "type": "string",
                            "example": "01",
                            "description": "Month of year"
                          },
                          "day": {
                            "type": "string",
                            "example": "12",
                            "description": "Day of the month"
                          },
                          "avgMinTemp": {
                            "type": "number",
                            "example": -4.53,
                            "description": "Average minimum temperature of the day"
                          },
                          "avgTemp": {
                            "type": "number",
                            "example": -2.77,
                            "description": "Average temperature of the day"
                          },
                          "avgMaxTemp": {
                            "type": "number",
                            "example": -0.87,
                            "description": "Average maximum temperature of the day"
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/{your_endpoint_id}/json.php": {
      "get": {
        "tags": [
          "Weather History"
        ],
        "summary": "Point history",
        "description": "",
        "operationId": "get_point",
        "parameters": [
          {
            "name": "your_endpoint_id",
            "in": "path",
            "required": true,
            "description": "path segment",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "lon",
            "in": "query",
            "required": true,
            "description": "Longitude",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "lat",
            "in": "query",
            "required": true,
            "description": "Latitude",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "date",
            "in": "query",
            "required": true,
            "description": "Date in YYYYMMDD format",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "days",
            "in": "query",
            "required": false,
            "description": "Feature: number of days returned, starting at \"date\" (default 1, maximum 14)",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "tempunit",
            "in": "query",
            "required": false,
            "description": "Temperature unit (F, C; default C)",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "windunit",
            "in": "query",
            "required": false,
            "description": "Wind unit (MS, KTS, KMH, MPH, BFT; default MS)",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "precunit",
            "in": "query",
            "required": false,
            "description": "Precipitation unit (MM, IN)",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "lang",
            "in": "query",
            "required": false,
            "description": "Language (ISO 639-1 codes). Options: de, en, es, fr, it, pl, ru, fi, sv, nl, ko, pt, th, tr, zh, zh_TW (Chinese in Taiwan), zh_CN (Chinese in China). (default en)",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "optparams",
            "in": "query",
            "required": false,
            "description": "Optional parameters to include in the response. Currently supported: \"station\" - includes the weather station name and coordinates from which the observations originate.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "station": {
                      "type": "object",
                      "properties": {
                        "name": {
                          "type": "string",
                          "example": "Tholen Wp"
                        },
                        "lon": {
                          "type": "number",
                          "example": 4.2
                        },
                        "lat": {
                          "type": "number",
                          "example": 51.48
                        }
                      },
                      "description": "Weather station information (included when optparams=station). Contains name (string), lon (number) and lat (number)."
                    },
                    "hourly": {
                      "type": "object",
                      "properties": {
                        "date": {
                          "type": "object",
                          "properties": {
                            "pretty": {
                              "type": "string",
                              "example": "00:00 on January 23, 2016"
                            },
                            "year": {
                              "type": "string",
                              "example": "2016"
                            },
                            "month": {
                              "type": "string",
                              "example": "01"
                            },
                            "day": {
                              "type": "string",
                              "example": "23"
                            },
                            "hour": {
                              "type": "string",
                              "example": "00"
                            },
                            "min": {
                              "type": "string",
                              "example": "00"
                            },
                            "tz": {
                              "type": "string",
                              "example": "Europe/Amsterdam"
                            }
                          }
                        },
                        "utcdate": {
                          "type": "object",
                          "properties": {
                            "iso8601": {
                              "type": "string",
                              "example": "2016-01-22T23:00"
                            },
                            "year": {
                              "type": "string",
                              "example": "2016"
                            },
                            "month": {
                              "type": "string",
                              "example": "01"
                            },
                            "day": {
                              "type": "string",
                              "example": "22"
                            },
                            "hour": {
                              "type": "string",
                              "example": "23"
                            },
                            "min": {
                              "type": "string",
                              "example": "00"
                            },
                            "tz": {
                              "type": "string",
                              "example": "UTC"
                            }
                          }
                        },
                        "observations": {
                          "type": "array",
                          "items": {
                            "type": "object",
                            "properties": {
                              "dt": {
                                "type": "object",
                                "properties": {
                                  "pretty": {
                                    "type": "string",
                                    "example": "00:00 on January 23, 2016"
                                  },
                                  "year": {
                                    "type": "string",
                                    "example": "2016"
                                  },
                                  "month": {
                                    "type": "string",
                                    "example": "01"
                                  },
                                  "day": {
                                    "type": "string",
                                    "example": "23"
                                  },
                                  "hour": {
                                    "type": "string",
                                    "example": "00"
                                  },
                                  "min": {
                                    "type": "string",
                                    "example": "00"
                                  },
                                  "tz": {
                                    "type": "string",
                                    "example": "Europe/Amsterdam"
                                  }
                                }
                              },
                              "dtu": {
                                "type": "object",
                                "properties": {
                                  "iso8601": {
                                    "type": "string",
                                    "example": "2016-01-22T23:00"
                                  },
                                  "year": {
                                    "type": "string",
                                    "example": "2016"
                                  },
                                  "month": {
                                    "type": "string",
                                    "example": "01"
                                  },
                                  "day": {
                                    "type": "string",
                                    "example": "22"
                                  },
                                  "hour": {
                                    "type": "string",
                                    "example": "23"
                                  },
                                  "min": {
                                    "type": "string",
                                    "example": "00"
                                  },
                                  "tz": {
                                    "type": "string",
                                    "example": "UTC"
                                  }
                                }
                              },
                              "t": {
                                "type": "string",
                                "example": "5.7",
                                "description": "Temperature"
                              },
                              "d": {
                                "type": "string",
                                "example": "5.6",
                                "description": "Dew point"
                              },
                              "rh": {
                                "type": "string",
                                "example": "99",
                                "description": "Relative humidity (%)"
                              },
                              "ws": {
                                "type": "string",
                                "example": "4",
                                "description": "Wind speed"
                              },
                              "gust": {
                                "type": "string",
                                "example": "4",
                                "description": "Wind gust speed"
                              },
                              "wd": {
                                "type": "string",
                                "example": "230",
                                "description": "Wind direction in degrees"
                              },
                              "wn": {
                                "type": "string",
                                "example": "southwest",
                                "description": "Wind direction (N, NE, E, SE, S, SW, W, NW)"
                              },
                              "v": {
                                "type": "string",
                                "example": "400",
                                "description": "visibility in meters, e.g. \"10000\" for 10 km"
                              },
                              "p": {
                                "type": "string",
                                "example": "1022.2",
                                "description": "Atmospheric pressure normalized to sea level (hPa)"
                              },
                              "tf": {
                                "type": "string",
                                "example": "3",
                                "description": "Feels like temperature"
                              },
                              "pr1": {
                                "type": "string",
                                "example": "",
                                "description": "1 hour accumulated precipitation"
                              },
                              "sT": {
                                "type": "string",
                                "example": "Haze",
                                "description": "symbol text"
                              },
                              "s": {
                                "type": "string",
                                "example": "600",
                                "description": "Weather symbol code"
                              },
                              "fog": {
                                "type": "string",
                                "example": "1",
                                "description": "Whether there was fog"
                              },
                              "rain": {
                                "type": "string",
                                "example": "0",
                                "description": "Whether there was rain"
                              },
                              "snow": {
                                "type": "string",
                                "example": "0",
                                "description": "Whether there was snow or sleet"
                              },
                              "hail": {
                                "type": "string",
                                "example": "0",
                                "description": "Whether there was hail"
                              },
                              "thunder": {
                                "type": "string",
                                "example": "0",
                                "description": "Whether there was thunder"
                              },
                              "tornado": {
                                "type": "string",
                                "example": "0",
                                "description": "Whether there were tornadoes"
                              }
                            }
                          }
                        }
                      }
                    },
                    "dailysummary": {
                      "type": "object",
                      "properties": {
                        "dt": {
                          "type": "object",
                          "properties": {
                            "pretty": {
                              "type": "string",
                              "example": "00:00 on January 23, 2016"
                            },
                            "year": {
                              "type": "string",
                              "example": "2016"
                            },
                            "month": {
                              "type": "string",
                              "example": "01"
                            },
                            "day": {
                              "type": "string",
                              "example": "23"
                            },
                            "hour": {
                              "type": "string",
                              "example": "00"
                            },
                            "min": {
                              "type": "string",
                              "example": "00"
                            },
                            "tz": {
                              "type": "string",
                              "example": "Europe/Amsterdam"
                            }
                          }
                        },
                        "fog": {
                          "type": "string",
                          "example": "1",
                          "description": "Whether there was fog"
                        },
                        "rain": {
                          "type": "string",
                          "example": "0",
                          "description": "Whether there was rain"
                        },
                        "snow": {
                          "type": "string",
                          "example": "0",
                          "description": "Whether there was snow or sleet"
                        },
                        "snowfall": {
                          "type": "string",
                          "example": "",
                          "description": "Accumulated snowfall (cm)"
                        },
                        "snowfallmonthtodate": {
                          "type": "string",
                          "example": "",
                          "description": "Accumulated snowfall month-to-date"
                        },
                        "snowfallsincejul1": {
                          "type": "string",
                          "example": "",
                          "description": "Accumulated snowfall since last July 1st"
                        },
                        "snowdepth": {
                          "type": "string",
                          "example": "",
                          "description": "Snow depth (cm)"
                        },
                        "hail": {
                          "type": "string",
                          "example": "0",
                          "description": "Whether there was hail"
                        },
                        "thunder": {
                          "type": "string",
                          "example": "0",
                          "description": "Whether there was thunder"
                        },
                        "tornado": {
                          "type": "string",
                          "example": "0",
                          "description": "Whether there were tornadoes"
                        },
                        "ta": {
                          "type": "string",
                          "example": "6.2",
                          "description": "Average temperature"
                        },
                        "da": {
                          "type": "string",
                          "example": "5.6",
                          "description": "Average dew point"
                        },
                        "pa": {
                          "type": "string",
                          "example": "1029.7",
                          "description": "Average pressure (hPa)"
                        },
                        "wsa": {
                          "type": "string",
                          "example": "3.5",
                          "description": "Average wind speed"
                        },
                        "wna": {
                          "type": "string",
                          "example": "north",
                          "description": "Average wind direction name"
                        },
                        "wda": {
                          "type": "string",
                          "example": "219",
                          "description": "Average wind direction (degrees)"
                        },
                        "va": {
                          "type": "string",
                          "example": "4857",
                          "description": "Average visibility (meters)"
                        },
                        "rha": {
                          "type": "string",
                          "example": "96",
                          "description": "Average relative humidity (%)"
                        },
                        "tx": {
                          "type": "string",
                          "example": "8",
                          "description": "Maximum temperature"
                        },
                        "tn": {
                          "type": "string",
                          "example": "4",
                          "description": "Minimum temperature"
                        },
                        "rhx": {
                          "type": "string",
                          "example": "100",
                          "description": "Maximum relative humidity (%)"
                        },
                        "rhn": {
                          "type": "string",
                          "example": "87",
                          "description": "Minimum relative humidity (%)"
                        },
                        "dx": {
                          "type": "string",
                          "example": "7",
                          "description": "Maximum dew point"
                        },
                        "dn": {
                          "type": "string",
                          "example": "4",
                          "description": "Minimum dew point"
                        },
                        "px": {
                          "type": "string",
                          "example": "1033.5",
                          "description": "Maximum pressure (hPa)"
                        },
                        "pn": {
                          "type": "string",
                          "example": "1022.2",
                          "description": "Minimum pressure (hPa)"
                        },
                        "wsx": {
                          "type": "string",
                          "example": "5",
                          "description": "Maximum wind speed"
                        },
                        "wsn": {
                          "type": "string",
                          "example": "2",
                          "description": "Minimum wind speed"
                        },
                        "vx": {
                          "type": "string",
                          "example": "10600",
                          "description": "Maximum visibility (meters)"
                        },
                        "vn": {
                          "type": "string",
                          "example": "390",
                          "description": "Minimum visibility (meters)"
                        },
                        "pr24": {
                          "type": "string",
                          "example": "",
                          "description": "Accumulated precipitation from 24h"
                        },
                        "prtype": {
                          "type": "string",
                          "example": "noprec",
                          "description": "Most occurred precipitation type (rain, hail, snow, mixed) or noprec if no precipitation during the time"
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      },
      "servers": [
        {
          "url": "https://fhw.foreca.com"
        }
      ]
    },
    "/api/v1/warning/{location}": {
      "get": {
        "tags": [
          "Weather Warnings"
        ],
        "summary": "Point warnings",
        "description": "",
        "operationId": "get_point",
        "parameters": [
          {
            "name": "location",
            "in": "path",
            "required": true,
            "description": "\"Longitude, latitude\" or location identifier (id) from the location endpoint",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "future",
            "in": "query",
            "required": false,
            "description": "Whether to return warnings starting more than 24 hours from now (boolean: default 0)",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "dataset",
            "in": "query",
            "required": false,
            "description": "Variable set: \"standard\" or \"full\" (default \"standard\")",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "warnings": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "properties": {
                          "type": {
                            "type": "string",
                            "example": "FO",
                            "description": "Warning ID"
                          },
                          "significance": {
                            "type": "string",
                            "example": "Y",
                            "description": "One of: Y (yellow, moderate), O (orange, severe), R (red, extreme), P (purple, emergency), NP (not applicable, very minor)"
                          },
                          "attribution": {
                            "type": "string",
                            "nullable": true,
                            "description": "Attribution: organization abbreviations"
                          },
                          "validFrom": {
                            "type": "string",
                            "example": "2021-01-08T10:17:00Z",
                            "description": "ISO 8601 date and time"
                          },
                          "validUntil": {
                            "type": "string",
                            "example": "2021-01-08T17:00:00Z",
                            "description": "ISO 8601 date and time"
                          },
                          "description": {
                            "type": "array",
                            "items": {
                              "type": "object",
                              "properties": {
                                "lang": {
                                  "type": "string",
                                  "example": "en",
                                  "description": "Language of warning description (ISO 639-1 codes)"
                                },
                                "text": {
                                  "type": "string",
                                  "example": "Dense Fog Advisory issued January 08 at 4:17AM CST until January 08 at 11:00AM CST by NWS Minneapolis&10;&10;Anoka; Benton; Blue Earth; Brown; Carver; Chippewa; Chisago; Douglas; Hennepin; Isanti; Kanabec; Kandiyohi; Lac Qui Parle; Le Sueur; Martin; McLeod; Meeker; Mille Lacs; Morrison; Nicollet; Pope; Ramsey; Redwood; Renville; Scott; Sherburne; Sibley; Stearns; Stevens; Swift; Todd; Watonwan; Wright; Yellow Medicine&10;&10;...DENSE FOG ADVISORY REMAINS IN EFFECT UNTIL 11 AM CST THIS&10;MORNING...&10;* WHAT...Visibility one quarter mile or less in dense fog.&10;* WHERE...Portions of central, east central, south central,&10;southwest and west central Minnesota.&10;* WHEN...Until 11 AM CST Friday.&10;* IMPACTS...Hazardous driving conditions due to low visibility.&10;* ADDITIONAL DETAILS...Slick spots on roads, overpasses, and&10;sidewalks are also possible as the fog freezes on exposed&10;surfaces.&10;&10;If driving, slow down, use your headlights, and leave plenty of&10;distance ahead of you.",
                                  "description": "Description of the particular warning in the associated language"
                                }
                              }
                            }
                          },
                          "attributionUrl": {
                            "type": "string",
                            "nullable": true,
                            "description": "Attribution URL"
                          },
                          "link": {
                            "type": "string",
                            "example": "https://alerts.weather.gov/cap/wwacapget.php?x=MN126188507444.DenseFogAdvisory.126188517F10MN.MPXNPWMPX.6f0fa4bac3937d8409b5648ff85e9eea",
                            "description": "Link to warning description provided by source (if applicable)"
                          },
                          "sent": {
                            "type": "string",
                            "example": "2021-01-08T10:17:00Z",
                            "description": "ISO 8601 date and time of warning sent"
                          },
                          "name": {
                            "type": "string",
                            "example": "Fog"
                          },
                          "significanceDescription": {
                            "type": "string",
                            "example": "Potentially dangerous",
                            "description": "Description of significance level"
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/warning/types": {
      "get": {
        "tags": [
          "Weather Warnings"
        ],
        "summary": "Warning type names",
        "description": "The full code-to-name mapping for every warning type, so you can label warnings in your own interface. Returns each two-letter type code with its display name. The same codes name the downloadable warning icons, combined with a severity suffix.",
        "operationId": "get_types",
        "parameters": [],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "AQ": {
                      "type": "object",
                      "properties": {
                        "name": {
                          "type": "string",
                          "example": "Air quality",
                          "description": "Name of warning type"
                        }
                      }
                    },
                    "AS": {
                      "type": "object",
                      "properties": {
                        "name": {
                          "type": "string",
                          "example": "Volcanic ashfall",
                          "description": "Name of warning type"
                        }
                      }
                    },
                    "AV": {
                      "type": "object",
                      "properties": {
                        "name": {
                          "type": "string",
                          "example": "Avalanche",
                          "description": "Name of warning type"
                        }
                      }
                    },
                    "CD": {
                      "type": "object",
                      "properties": {
                        "name": {
                          "type": "string",
                          "example": "Civil danger",
                          "description": "Name of warning type"
                        }
                      }
                    },
                    "CE": {
                      "type": "object",
                      "properties": {
                        "name": {
                          "type": "string",
                          "example": "Coastal event",
                          "description": "Name of warning type"
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/marine/forecast/hourly/{location}": {
      "get": {
        "tags": [
          "Marine Weather"
        ],
        "summary": "Hourly",
        "description": "Hourly marine forecasts.",
        "operationId": "get_hourly",
        "parameters": [
          {
            "name": "location",
            "in": "path",
            "required": true,
            "description": "\"Longitude,latitude\" or location identifier (id) from the location endpoint",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "periods",
            "in": "query",
            "required": false,
            "description": "Number of time steps (default 24, maximum 169)",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "tempunit",
            "in": "query",
            "required": false,
            "description": "Temperature unit: \"C\", \"F\" (default \"C\")",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "tz",
            "in": "query",
            "required": false,
            "description": "Time zone in response (IANA time zone database names)",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "history",
            "in": "query",
            "required": false,
            "description": "History: whether to include past 24 hours (1 or 0, default 0)",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "forecast": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "properties": {
                          "peak1DSpectraPeriod": {
                            "type": "number",
                            "example": 9.8,
                            "description": "Peak wave period, of 1D spectra, in seconds, ≥ 0"
                          },
                          "seaTemp": {
                            "type": "number",
                            "example": 27,
                            "description": "Sea temperature"
                          },
                          "sigSwellHeight": {
                            "type": "number",
                            "example": 1.13,
                            "description": "Significant swell wave height, in metres, ≥ 0"
                          },
                          "sigWaveHeight": {
                            "type": "number",
                            "example": 1.19,
                            "description": "Significant wave height, in metres"
                          },
                          "swellDir": {
                            "type": "number",
                            "example": 178,
                            "description": "The direction where total swell is coming from, in degrees, 0...360° (0°: from north, 180°: from south)"
                          },
                          "swellPeriod": {
                            "type": "number",
                            "example": 8.1,
                            "description": "Mean period of total swell, in seconds"
                          },
                          "swimTemp": {
                            "type": "number",
                            "example": 27,
                            "description": "Sea temperature in swimming locations"
                          },
                          "time": {
                            "type": "string",
                            "example": "2025-11-04T17:00Z",
                            "description": "ISO 8601 date and time"
                          },
                          "waveDir": {
                            "type": "number",
                            "example": 177,
                            "description": "The mean direction where waves are coming from, in degrees"
                          },
                          "wavePeriod": {
                            "type": "number",
                            "example": 7.5,
                            "description": "Mean wave period, in seconds"
                          },
                          "windWaveDir": {
                            "type": "number",
                            "example": 168,
                            "description": "The mean direction where wind waves are coming from, in degrees"
                          },
                          "windWavePeriod": {
                            "type": "number",
                            "example": 2.9,
                            "description": "Period of wind waves, in seconds"
                          },
                          "windWaveSigHeight": {
                            "type": "number",
                            "example": 0.39,
                            "description": "Significant height of wind waves, in metres"
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/marine/forecast/daily/{location}": {
      "get": {
        "tags": [
          "Marine Weather"
        ],
        "summary": "Daily",
        "description": "Daily marine forecasts.",
        "operationId": "get_daily",
        "parameters": [
          {
            "name": "location",
            "in": "path",
            "required": true,
            "description": "\"Longitude,latitude\" or location identifier (id) from the location endpoint",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "periods",
            "in": "query",
            "required": false,
            "description": "Number of time steps (default 7, maximum 15)",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "tempunit",
            "in": "query",
            "required": false,
            "description": "Temperature unit: \"C\", \"F\" (default \"C\")",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "forecast": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "properties": {
                          "date": {
                            "type": "string",
                            "example": "2025-11-04",
                            "description": "ISO 8601 date"
                          },
                          "maxPeak1DSpectraPeriod": {
                            "type": "number",
                            "example": 10.3,
                            "description": "Maximum peak wave period, of 1D spectra, in seconds, ≥ 0"
                          },
                          "maxSeaTemp": {
                            "type": "number",
                            "example": 27,
                            "description": "Maximum sea temperature"
                          },
                          "maxSigWaveHeight": {
                            "type": "number",
                            "example": 1.23,
                            "description": "Maximum significant wave height, in metres, ≥ 0"
                          },
                          "maxSwellHeight": {
                            "type": "number",
                            "example": 1.17,
                            "description": "Maximum swell wave height, in metres"
                          },
                          "maxSwellPeriod": {
                            "type": "number",
                            "example": 8.3,
                            "description": "Maximum period of total swell, in seconds"
                          },
                          "maxSwimTemp": {
                            "type": "number",
                            "example": 27,
                            "description": "Maximum sea temperature in swimming locations"
                          },
                          "maxWavePeriod": {
                            "type": "number",
                            "example": 7.7,
                            "description": "Maximum wave period, in seconds"
                          },
                          "maxWindWavePeriod": {
                            "type": "number",
                            "example": 3.5,
                            "description": "Maximum period of wind waves, in seconds"
                          },
                          "maxWindWaveSigHeight": {
                            "type": "number",
                            "example": 0.6,
                            "description": "Maximum significant height of wind waves, in metres"
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/ski/current/{location}": {
      "get": {
        "tags": [
          "Ski Resort"
        ],
        "summary": "Current",
        "description": "Ski resort conditions.",
        "operationId": "get_current",
        "parameters": [
          {
            "name": "location",
            "in": "path",
            "required": true,
            "description": "\"Longitude,latitude\" or location identifier (id) from the location endpoint",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "sites",
            "in": "query",
            "required": false,
            "description": "Number of ski sites (default 1, maximum 5)",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "radius",
            "in": "query",
            "required": false,
            "description": "Maximum distance to ski site (default 500 km)",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "locations": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "properties": {
                          "name": {
                            "type": "string",
                            "example": "Lake Louise",
                            "description": "Site name"
                          },
                          "countryCode": {
                            "type": "string",
                            "example": "ca",
                            "description": "Country code (ISO 3166-1 alpha-2)"
                          },
                          "countryName": {
                            "type": "string",
                            "example": "Canada",
                            "description": "Country name"
                          },
                          "state": {
                            "type": "string",
                            "example": "Alberta",
                            "description": "State (if applicable)"
                          },
                          "city": {
                            "type": "string",
                            "example": "Lake Louise, AB",
                            "description": "City"
                          },
                          "postalCode": {
                            "type": "string",
                            "example": "T0L 1E0",
                            "description": "Postal code"
                          },
                          "street": {
                            "type": "string",
                            "example": "Banff National Park",
                            "description": "Street"
                          },
                          "houseNumber": {
                            "type": "string",
                            "nullable": true,
                            "description": "House number"
                          },
                          "address": {
                            "type": "string",
                            "example": "Banff National Park, Lake Louise, AB, T0L 1E0",
                            "description": "Address"
                          },
                          "longitude": {
                            "type": "number",
                            "example": -116.159228,
                            "description": "longitude"
                          },
                          "latitude": {
                            "type": "number",
                            "example": 51.439332,
                            "description": "latitude"
                          },
                          "openFrom": {
                            "type": "string",
                            "example": "08:30",
                            "description": "Opening time (HH:MM)"
                          },
                          "openUntil": {
                            "type": "string",
                            "example": "16:00",
                            "description": "Open until time of day (HH:MM)"
                          },
                          "isOpen": {
                            "type": "boolean",
                            "example": true,
                            "description": "Open status"
                          },
                          "altitudeBase": {
                            "type": "number",
                            "example": 1646,
                            "description": "Altitude at base"
                          },
                          "altitudePeak": {
                            "type": "number",
                            "example": 2637,
                            "description": "Altitude at peak"
                          },
                          "primarySurfaceCondition": {
                            "type": "string",
                            "example": "Gripping snow",
                            "description": "Surface condition description"
                          },
                          "liftsOpen": {
                            "type": "number",
                            "example": 2,
                            "description": "Number of lifts open"
                          },
                          "lifts": {
                            "type": "number",
                            "example": 7,
                            "description": "Total number of lifts"
                          },
                          "hasSkiing": {
                            "type": "boolean",
                            "example": true,
                            "description": "Skiing available"
                          },
                          "kmNordic": {
                            "type": "number",
                            "nullable": true,
                            "description": "Nordic skiing length (km)"
                          },
                          "kmPistes": {
                            "type": "number",
                            "example": 139,
                            "description": "Pistes length (km)"
                          },
                          "kmOpen": {
                            "type": "number",
                            "example": 7,
                            "description": "Total open (km)"
                          },
                          "hasValleyRun": {
                            "type": "boolean",
                            "example": true,
                            "description": "Valley run available"
                          },
                          "valleyRunOpen": {
                            "type": "string",
                            "example": "true",
                            "description": "Valley run status (\"true\", \"false\", \"conditional\")"
                          },
                          "hasTobogganRuns": {
                            "type": "boolean",
                            "example": false,
                            "description": "Toboggan runs available"
                          },
                          "kmTobogganRuns": {
                            "type": "number",
                            "nullable": true,
                            "description": "Length of toboggan runs"
                          },
                          "lastSnowDate": {
                            "type": "string",
                            "example": "2020-11-01",
                            "description": "Date of last new snow"
                          },
                          "lastSnowAmount": {
                            "type": "string",
                            "nullable": true,
                            "description": "Amount of new snow last time"
                          },
                          "nightSkiing": {
                            "type": "boolean",
                            "example": false,
                            "description": "Night skiing available"
                          },
                          "snowDepthPeak": {
                            "type": "number",
                            "example": 52,
                            "description": "Depth of snow at peak"
                          },
                          "snowDepthBase": {
                            "type": "number",
                            "example": 43,
                            "description": "Depth of snow at base"
                          },
                          "hasFunPark": {
                            "type": "boolean",
                            "example": true,
                            "description": "Fun park available"
                          },
                          "funParkOpen": {
                            "type": "boolean",
                            "example": true,
                            "description": "Fun park open"
                          },
                          "updated": {
                            "type": "string",
                            "example": "2020-11-05T00:00:00Z",
                            "description": "Date and time of last update (ISO 8601)"
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/agriculture/forecast/hourly/{location}": {
      "get": {
        "tags": [
          "Agriculture"
        ],
        "summary": "Hourly",
        "description": "Hourly agricultural forecast parameters.",
        "operationId": "get_hourly",
        "parameters": [
          {
            "name": "location",
            "in": "path",
            "required": true,
            "description": "\"Longitude,latitude\" or location identifier (id) from the location endpoint",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "periods",
            "in": "query",
            "required": false,
            "description": "Number of time steps (default 24, maximum 168)",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "tz",
            "in": "query",
            "required": false,
            "description": "Time zone in response (IANA time zone database names)",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "forecast": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "properties": {
                          "time": {
                            "type": "string",
                            "example": "2022-02-03T10:00+02:00",
                            "description": "ISO 8601 date and time"
                          },
                          "ET0": {
                            "type": "number",
                            "example": 0.1,
                            "description": "Reference evapotranspiration rate (mm/h)"
                          },
                          "VPD": {
                            "type": "number",
                            "example": 0.27,
                            "description": "Vapor pressure deficit (kPa)"
                          },
                          "SSRD": {
                            "type": "number",
                            "example": 300,
                            "description": "Surface solar radiation downwards, W/m² (watts per square meter)"
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/agriculture/forecast/daily/{location}": {
      "get": {
        "tags": [
          "Agriculture"
        ],
        "summary": "Daily",
        "description": "Daily agricultural forecast parameters.",
        "operationId": "get_daily",
        "parameters": [
          {
            "name": "location",
            "in": "path",
            "required": true,
            "description": "\"Longitude,latitude\" or location identifier (id) from the location endpoint",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "periods",
            "in": "query",
            "required": false,
            "description": "Number of time steps (default 7, maximum 14)",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "forecast": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "properties": {
                          "date": {
                            "type": "string",
                            "example": "2022-02-03",
                            "description": "ISO 8601 date"
                          },
                          "ET0": {
                            "type": "number",
                            "example": 1.18,
                            "description": "Reference evapotranspiration (mm)"
                          },
                          "VPD_max": {
                            "type": "number",
                            "example": 0.5,
                            "description": "Maximum vapor pressure deficit (kPa)"
                          },
                          "VPD_min": {
                            "type": "number",
                            "example": 0.05,
                            "description": "Minimum vapor pressure deficit (kPa)"
                          },
                          "VPD": {
                            "type": "number",
                            "example": 0.18,
                            "description": "Vapor pressure deficit average (kPa)"
                          },
                          "SSRD": {
                            "type": "number",
                            "example": 2424,
                            "description": "Surface solar radiation downwards (24h sum, Wh/m²)"
                          },
                          "precipSum24q10": {
                            "type": "number",
                            "example": 0.11,
                            "description": "Lower bound estimate for precipitation sum during the day (10th percentile, mm)"
                          },
                          "precipSum24q90": {
                            "type": "number",
                            "example": 0.21,
                            "description": "Higher bound estimate for precipitation sum during the day (90th percentile, mm)"
                          },
                          "precipSum168q10": {
                            "type": "number",
                            "example": 7.4,
                            "description": "Lower bound estimate for 7-day precipitation sum during the day and 6 following days (10th percentile, mm)"
                          },
                          "precipSum168q90": {
                            "type": "number",
                            "example": 20.73,
                            "description": "Higher bound estimate for 7-day precipitation sum during the day and 6 following days (90th percentile, mm)"
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/energy/forecast/15minutely/{location}": {
      "get": {
        "tags": [
          "Energy"
        ],
        "summary": "15-minutely",
        "description": "15-minute energy forecasts. Contains the same parameters as the hourly forecast, except for the surface solar radiation downwards (ssrd).",
        "operationId": "get_15minenergy",
        "parameters": [
          {
            "name": "location",
            "in": "path",
            "required": true,
            "description": "\"Longitude, latitude\" or location identifier (id) from the location endpoint",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "periods",
            "in": "query",
            "required": false,
            "description": "Number of time steps (default 8, maximum 24)",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "tz",
            "in": "query",
            "required": false,
            "description": "Time zone in response (IANA time zone database names)",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "tempunit",
            "in": "query",
            "required": false,
            "description": "Temperature unit: \"C\", \"F\" (default \"C\")",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "forecast": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "properties": {
                          "dewPoint": {
                            "type": "number",
                            "example": 1.75,
                            "description": "Dew point, in °C (degree Celsius, or requested tempunit)"
                          },
                          "relHumidity": {
                            "type": "number",
                            "example": 87,
                            "description": "Relative humidity at 2 m height, in % (percentage)"
                          },
                          "temperature": {
                            "type": "number",
                            "example": 3.76,
                            "description": "Temperature at 2 m height, in °C (degree Celsius, or requested tempunit)"
                          },
                          "time": {
                            "type": "string",
                            "example": "2026-04-29T17:15+03:00"
                          },
                          "windd_h100": {
                            "type": "number",
                            "example": 248,
                            "description": "Wind direction at 100 m height, in degrees, 0...360° (0°: from north, 180°: from south)"
                          },
                          "windd_h150": {
                            "type": "number",
                            "example": 251.81,
                            "description": "Wind direction at 150 m height, in degrees (from windd_h100 and windd_h200)"
                          },
                          "windd_h200": {
                            "type": "number",
                            "example": 255.21,
                            "description": "Wind direction at 200 m height, in degrees"
                          },
                          "winds_h100": {
                            "type": "number",
                            "example": 7.23,
                            "description": "Wind speed at 100 m height, in m/s (meters per second)"
                          },
                          "winds_h150": {
                            "type": "number",
                            "example": 7.63,
                            "description": "Wind speed at 150 m height, in m/s (from winds_h100 and winds_h200)"
                          },
                          "winds_h200": {
                            "type": "number",
                            "example": 8.06,
                            "description": "Wind speed at 200 m height, in m/s"
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/energy/forecast/hourly/{location}": {
      "get": {
        "tags": [
          "Energy"
        ],
        "summary": "Hourly",
        "description": "Hourly energy forecasts.",
        "operationId": "get_hourly",
        "parameters": [
          {
            "name": "location",
            "in": "path",
            "required": true,
            "description": "\"Longitude, latitude\" or location identifier (id) from the location endpoint",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "periods",
            "in": "query",
            "required": false,
            "description": "Number of time steps (default 220, maximum 350, may contain 345...350 steps)",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "tz",
            "in": "query",
            "required": false,
            "description": "Time zone in response (IANA time zone database names)",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "tempunit",
            "in": "query",
            "required": false,
            "description": "Temperature unit: \"C\", \"F\" (default \"C\")",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "forecast": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "properties": {
                          "dewPoint": {
                            "type": "number",
                            "example": 0.7,
                            "description": "Dew point, in °C (degree Celsius, or requested tempunit)"
                          },
                          "relHumidity": {
                            "type": "number",
                            "example": 83,
                            "description": "Relative humidity at 2 m height, in % (percentage)"
                          },
                          "ssrd": {
                            "type": "number",
                            "example": 351,
                            "description": "Surface short-wave (solar) radiation downwards, in W/m² (watts per square meter)"
                          },
                          "temperature": {
                            "type": "number",
                            "example": 3.32,
                            "description": "Temperature at 2 m height, in °C (degree Celsius, or requested tempunit)"
                          },
                          "time": {
                            "type": "string",
                            "example": "2025-04-09T16:00+03:00"
                          },
                          "windd_h100": {
                            "type": "number",
                            "example": 298.24,
                            "description": "Wind direction at 100 m height, in degrees, 0...360° (0°: from north, 180°: from south)"
                          },
                          "windd_h150": {
                            "type": "number",
                            "example": 301.07,
                            "description": "Wind direction at 150 m height, in degrees (from windd_h100 and windd_h200)"
                          },
                          "windd_h200": {
                            "type": "number",
                            "example": 303.57,
                            "description": "Wind direction at 200 m height, in degrees"
                          },
                          "winds_h100": {
                            "type": "number",
                            "example": 12.78,
                            "description": "Wind speed at 100 m height, in m/s (meters per second)"
                          },
                          "winds_h150": {
                            "type": "number",
                            "example": 13.63,
                            "description": "Wind speed at 150 m height, in m/s (from winds_h100 and winds_h200)"
                          },
                          "winds_h200": {
                            "type": "number",
                            "example": 14.52,
                            "description": "Wind speed at 200 m height, in m/s"
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/hurricane/current": {
      "get": {
        "tags": [
          "Hurricane Forecasts"
        ],
        "summary": "Current",
        "description": "Currently active storms. Returns tracking data with latest positions, intensities, and forecasts.",
        "operationId": "get_current",
        "parameters": [
          {
            "name": "limit_area",
            "in": "query",
            "required": false,
            "description": "Limit results to specific geographic areas. Comma-separated list of area codes: \"us\" (Atlantic/Eastern and Central Pacific), \"jp\" (Western Pacific), \"au\" (South Pacific), \"in\" (North Indian Ocean), \"re\" (Southwest Indian Ocean/Reunion), \"nz\" (New Zealand), \"fj\" (Fiji)",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "description": "Maximum number of storms to return (maximum 50)",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "metadata": {
                      "type": "object",
                      "properties": {
                        "count": {
                          "type": "number",
                          "example": 1,
                          "description": "Number of storm feature collections returned"
                        },
                        "areas_available": {
                          "type": "array",
                          "items": {
                            "type": "string",
                            "example": "us"
                          },
                          "description": "Area codes that currently have data"
                        },
                        "type": {
                          "type": "string",
                          "example": "current",
                          "description": "Always \"FeatureCollection\""
                        }
                      },
                      "description": "Response metadata and available areas"
                    },
                    "data": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "properties": {
                          "type": {
                            "type": "string",
                            "example": "FeatureCollection",
                            "description": "Always \"FeatureCollection\""
                          },
                          "features": {
                            "type": "array",
                            "items": {
                              "type": "object",
                              "properties": {
                                "properties": {
                                  "type": "object",
                                  "properties": {
                                    "name": {
                                      "type": "string",
                                      "example": "ERIN",
                                      "description": "Storm name (e.g., \"PODUL\", \"BERYL\")"
                                    },
                                    "nameLocal": {
                                      "type": "string",
                                      "example": "ERIN",
                                      "description": "Local language storm name if available"
                                    },
                                    "id": {
                                      "type": "string",
                                      "example": "al52025",
                                      "description": "Unique storm identifier (e.g., \"wp152025\")"
                                    },
                                    "shortLabel": {
                                      "type": "string",
                                      "example": "Category",
                                      "description": "Abbreviated storm label. Note: US hurricanes return \"Category\" and other US storm types return an empty string. Other regions return \"D\", \"S\", \"T\", \"1\", etc."
                                    },
                                    "attr": {
                                      "type": "string",
                                      "example": "NOAA",
                                      "description": "Data attribution/source agency"
                                    },
                                    "label": {
                                      "type": "string",
                                      "example": "3",
                                      "description": "Storm category label. Examples: \"3\" (US Cat 3), \"TD\" (Tropical Depression), \"T\" (Typhoon), \"Cat 3\" (Australia)."
                                    },
                                    "date": {
                                      "type": "string",
                                      "example": "Aug 16, 2025",
                                      "description": "Date in human-readable format"
                                    },
                                    "timeLabel": {
                                      "type": "string",
                                      "example": "Sat 1pm +04",
                                      "description": "Human-readable time label"
                                    },
                                    "timeISO8601": {
                                      "type": "string",
                                      "example": "2025-08-16T13:00:00+04:00",
                                      "description": "Time of observation/forecast in ISO 8601 format"
                                    },
                                    "issued": {
                                      "type": "string",
                                      "example": "2025-08-16 09:00:00",
                                      "description": "Time when bulletin was issued"
                                    },
                                    "dataType": {
                                      "type": "string",
                                      "example": "OBSERVATION",
                                      "description": "Data type (\"OBSERVATION\", \"FORECAST\", \"CONE\")"
                                    },
                                    "advisory": {
                                      "type": "number",
                                      "example": 20,
                                      "description": "Advisory number"
                                    },
                                    "stormType": {
                                      "type": "string",
                                      "example": "Hurricane",
                                      "description": "Storm classification. Values vary by agency: \"Hurricane\", \"Typhoon\", \"Tropical storm\", \"Severe Tropical Storm\", \"Cyclonic Storm\", etc."
                                    },
                                    "title": {
                                      "type": "string",
                                      "example": "Hurricane ERIN",
                                      "description": "Full storm title"
                                    },
                                    "category": {
                                      "type": "string",
                                      "example": 3,
                                      "description": "Current storm category/intensity"
                                    },
                                    "direction": {
                                      "type": "string",
                                      "example": "West-northwest",
                                      "description": "Storm movement direction"
                                    },
                                    "directionDEG": {
                                      "type": "number",
                                      "example": 285,
                                      "description": "Storm movement direction (degrees)"
                                    },
                                    "pressure": {
                                      "type": "number",
                                      "example": 955,
                                      "description": "Central pressure (hPa/mb)"
                                    },
                                    "pressureIN": {
                                      "type": "number",
                                      "example": 28.2,
                                      "description": "Central pressure (inches of mercury)"
                                    },
                                    "maxWind": {
                                      "type": "number",
                                      "example": 120.8,
                                      "description": "Maximum sustained winds (mph)"
                                    },
                                    "maxWindKTS": {
                                      "type": "number",
                                      "example": 105,
                                      "description": "Maximum sustained winds (knots)"
                                    },
                                    "maxWindKPH": {
                                      "type": "number",
                                      "example": 194.4,
                                      "description": "Maximum sustained winds (km/h)"
                                    },
                                    "maxWindMS": {
                                      "type": "number",
                                      "example": 54,
                                      "description": "Maximum sustained winds (m/s)"
                                    },
                                    "maxGust": {
                                      "type": "number",
                                      "example": 149.7,
                                      "description": "Maximum wind gusts (mph)"
                                    },
                                    "maxGustKTS": {
                                      "type": "number",
                                      "example": 130.1,
                                      "description": "Maximum wind gusts (knots)"
                                    },
                                    "maxGustKPH": {
                                      "type": "number",
                                      "example": 240.9,
                                      "description": "Maximum wind gusts (km/h)"
                                    },
                                    "maxGustMS": {
                                      "type": "number",
                                      "example": 66.9,
                                      "description": "Maximum wind gusts (m/s)"
                                    },
                                    "propagationSpeed": {
                                      "type": "number",
                                      "example": 20.1,
                                      "description": "Storm movement speed"
                                    },
                                    "propagationSpeedKTS": {
                                      "type": "number",
                                      "example": 17.5,
                                      "description": "Storm movement speed (knots)"
                                    },
                                    "propagationSpeedKPH": {
                                      "type": "number",
                                      "example": 32.3,
                                      "description": "Storm movement speed (km/h)"
                                    },
                                    "propagationSpeedMS": {
                                      "type": "number",
                                      "example": 9,
                                      "description": "Storm movement speed (m/s)"
                                    },
                                    "probabilityRadius": {
                                      "type": "string",
                                      "nullable": true,
                                      "description": "Probability radius information for uncertainty (km)"
                                    },
                                    "source": {
                                      "type": "string",
                                      "example": "NOAA",
                                      "description": "Source/agency identifier (e.g. \"NOAA\", \"JMA\")"
                                    },
                                    "lastCategory": {
                                      "type": "string",
                                      "example": 3,
                                      "description": "Most recent observed category"
                                    },
                                    "maxCategory": {
                                      "type": "string",
                                      "example": 5,
                                      "description": "Maximum category reached during storm lifecycle"
                                    },
                                    "numberLocal": {
                                      "type": "number",
                                      "example": 5,
                                      "description": "Local numbering system storm number"
                                    }
                                  }
                                },
                                "type": {
                                  "type": "string",
                                  "example": "Feature",
                                  "description": "Always \"FeatureCollection\""
                                },
                                "geometry": {
                                  "type": "object",
                                  "properties": {
                                    "type": {
                                      "type": "string",
                                      "example": "Point",
                                      "description": "Always \"FeatureCollection\""
                                    },
                                    "coordinates": {
                                      "type": "array",
                                      "items": {
                                        "type": "number",
                                        "example": -61.1
                                      },
                                      "description": "GeoJSON coordinates array"
                                    }
                                  },
                                  "description": "GeoJSON geometry (Point for positions, LineString for tracks, Polygon for cones)"
                                }
                              }
                            },
                            "description": "Array of GeoJSON features representing storm track, points, and cones"
                          }
                        }
                      },
                      "description": "Array of storm feature collections"
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/hurricane/history": {
      "get": {
        "tags": [
          "Hurricane Forecasts"
        ],
        "summary": "History",
        "description": "Historical storm data. Returns past storms from 2020 onwards with complete lifecycle information including tracks, intensities, and forecasts. Excludes currently active storms. Each storm uses the same FeatureCollection / `properties` structure as the Current endpoint; the exact set of properties present varies by storm, issuing agency, and feature type (observation, forecast, cone).",
        "operationId": "get_history",
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "description": "Maximum number of storms to return (default 100, maximum 1000)",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "year",
            "in": "query",
            "required": false,
            "description": "Filter by specific year (2020 to current year)",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "limit_area",
            "in": "query",
            "required": false,
            "description": "Limit results to specific geographic areas. Comma-separated list of area codes: \"us\" (Atlantic/Eastern and Central Pacific), \"jp\" (Western Pacific), \"au\" (South Pacific), \"in\" (North Indian Ocean), \"re\" (Southwest Indian Ocean/Reunion), \"nz\" (New Zealand), \"fj\" (Fiji)",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "metadata": {
                      "type": "object",
                      "properties": {
                        "count": {
                          "type": "number",
                          "example": 1
                        },
                        "areas_available": {
                          "type": "array",
                          "items": {
                            "type": "string",
                            "example": "us"
                          }
                        },
                        "type": {
                          "type": "string",
                          "example": "historical"
                        },
                        "limit_applied": {
                          "type": "number",
                          "example": 100
                        }
                      }
                    },
                    "data": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "properties": {
                          "type": {
                            "type": "string",
                            "example": "FeatureCollection"
                          },
                          "features": {
                            "type": "array",
                            "items": {
                              "type": "object",
                              "properties": {
                                "geometry": {
                                  "type": "object",
                                  "properties": {
                                    "coordinates": {
                                      "type": "array",
                                      "items": {
                                        "type": "number",
                                        "example": 131.6
                                      }
                                    },
                                    "type": {
                                      "type": "string",
                                      "example": "Point"
                                    }
                                  }
                                },
                                "type": {
                                  "type": "string",
                                  "example": "Feature"
                                },
                                "properties": {
                                  "type": "object",
                                  "properties": {
                                    "pressure": {
                                      "type": "number",
                                      "example": 910
                                    },
                                    "stormType": {
                                      "type": "string",
                                      "example": "Hurricane"
                                    },
                                    "dataType": {
                                      "type": "string",
                                      "example": "OBSERVATION"
                                    },
                                    "date": {
                                      "type": "string",
                                      "example": "Sep 18, 2022"
                                    },
                                    "shortLabel": {
                                      "type": "string",
                                      "example": "T"
                                    },
                                    "propagationSpeed": {
                                      "type": "number",
                                      "example": 11.2
                                    },
                                    "maxGustMS": {
                                      "type": "number",
                                      "example": 77.2
                                    },
                                    "direction": {
                                      "type": "string",
                                      "example": "North-northwest"
                                    },
                                    "numberLocal": {
                                      "type": "number",
                                      "example": 14
                                    },
                                    "category": {
                                      "type": "number",
                                      "example": 6
                                    },
                                    "id": {
                                      "type": "string",
                                      "example": "wp182022"
                                    },
                                    "name": {
                                      "type": "string",
                                      "example": "NANMADOL"
                                    },
                                    "probabilityRadius": {
                                      "type": "string",
                                      "nullable": true
                                    },
                                    "timeISO8601": {
                                      "type": "string",
                                      "example": "2022-09-18T01:00:00+09:00"
                                    },
                                    "maxWindMS": {
                                      "type": "number",
                                      "example": 54
                                    },
                                    "issued": {
                                      "type": "string",
                                      "example": "2022-09-17 16:40:00"
                                    },
                                    "propagationSpeedMS": {
                                      "type": "number",
                                      "example": 5
                                    },
                                    "maxWind": {
                                      "type": "number",
                                      "example": 120.8
                                    },
                                    "timeLabel": {
                                      "type": "string",
                                      "example": "Sun 1am JST"
                                    },
                                    "label": {
                                      "type": "string",
                                      "example": "VT"
                                    },
                                    "title": {
                                      "type": "string",
                                      "example": "Violent typhoon NANMADOL"
                                    },
                                    "maxGust": {
                                      "type": "number",
                                      "example": 172.6
                                    },
                                    "nameLocal": {
                                      "type": "string",
                                      "example": "ナンマドル"
                                    },
                                    "advisory": {
                                      "type": "number",
                                      "example": 59
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/authorize/key": {
      "post": {
        "tags": [
          "Authorization"
        ],
        "summary": "Keys",
        "description": "List your API keys (non-expiring tokens). Authenticate with your access token in the `Authorization: Bearer <token>` header.",
        "operationId": "post_Keys",
        "parameters": [],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "tokens": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "properties": {
                          "access_token": {
                            "type": "string",
                            "example": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwOlwvXC9mbnc2LmZvcmVjYS5jb21cL2F1dGhvcml6ZVwvdG9rZW4iLCJpYXQiOjE1MjYzMDAzODAsImV4cCI6MTUyNjMwMzk4MCwibmJmIjoxNTI2MzAwMzgwLCJqdGkiOiJxSXl3WVlQNjc1NkczejBEIiwic3ViIjoibFFHa1Y4Z2pIeGUyZU1ibndUUUs4NktqVTY3RXJlS2htenY1IiwicHJ2IjoiYWY3YTAzOThkZGNiNWE3YTUzN2Q3YzdkMjU2NWEyZjgxZGM4ZTQxNCJ9.V8xg6L9yrY9__VH-jdrL_CqXisEpgcfdUa0NoxlGz0k"
                          },
                          "key": {
                            "type": "string",
                            "example": "23j98rfsnldkvf3w49hg"
                          },
                          "label": {
                            "type": "string",
                            "example": "production server"
                          },
                          "expires_at": {
                            "type": "string",
                            "nullable": true
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/authorize/key/{key}": {
      "delete": {
        "tags": [
          "Authorization"
        ],
        "summary": "Delete Key",
        "description": "Revoke an API key using its key id (the `key` field returned by the list endpoint). Authenticate with your access token in the `Authorization: Bearer <token>` header.",
        "operationId": "delete_Delete_Key",
        "parameters": [
          {
            "name": "key",
            "in": "path",
            "required": true,
            "description": "The key id of the API key to revoke (the `key` field from the list endpoint).",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Empty response on success."
          }
        }
      }
    },
    "/usage/month/{month}": {
      "get": {
        "tags": [
          "Usage"
        ],
        "summary": "Month's usage",
        "description": "Total requests for a single month, with a per-day breakdown. Add `group_by` to also split the total by endpoint or status code.",
        "operationId": "get_Month_s_usage",
        "parameters": [
          {
            "name": "month",
            "in": "path",
            "required": true,
            "description": "Month in YYYY-MM format (e.g. \"2021-03\").",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "group_by",
            "in": "query",
            "required": false,
            "description": "Optional. Split the total into a `breakdown` array along one dimension. One of: endpoint, status_code.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "apis": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "properties": {
                          "name": {
                            "type": "string",
                            "example": "Weather API"
                          },
                          "hits": {
                            "type": "number",
                            "example": 32529
                          }
                        }
                      }
                    },
                    "hits": {
                      "type": "number",
                      "example": 32529
                    },
                    "daily": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "properties": {
                          "date": {
                            "type": "string",
                            "example": "2021-03-01"
                          },
                          "apis": {
                            "type": "array",
                            "items": {
                              "type": "object",
                              "properties": {
                                "name": {
                                  "type": "string",
                                  "example": "Weather API"
                                },
                                "hits": {
                                  "type": "number",
                                  "example": 1042
                                }
                              }
                            }
                          }
                        }
                      }
                    },
                    "breakdown": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "properties": {
                          "endpoint": {
                            "type": "string",
                            "example": "point"
                          },
                          "hits": {
                            "type": "number",
                            "example": 31044
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/usage/day/{day}": {
      "get": {
        "tags": [
          "Usage"
        ],
        "summary": "Day's usage",
        "description": "Total requests for a single day. Add `group_by` to also split the total by endpoint or status code.",
        "operationId": "get_Day_s_usage",
        "parameters": [
          {
            "name": "day",
            "in": "path",
            "required": true,
            "description": "Day in YYYY-MM-DD format (e.g. \"2021-03-15\").",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "group_by",
            "in": "query",
            "required": false,
            "description": "Optional. Split the total into a `breakdown` array along one dimension. One of: endpoint, status_code.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "apis": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "properties": {
                          "name": {
                            "type": "string",
                            "example": "Weather API"
                          },
                          "hits": {
                            "type": "number",
                            "example": 380
                          }
                        }
                      }
                    },
                    "hits": {
                      "type": "number",
                      "example": 380
                    },
                    "breakdown": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "properties": {
                          "endpoint": {
                            "type": "string",
                            "example": "point"
                          },
                          "hits": {
                            "type": "number",
                            "example": 365
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}