{
  "openapi": "3.0.3",
  "info": {
    "title": "Open-Meteo Weather API",
    "version": "1.0.0",
    "description": "Open-Meteo weather data routed through the AIsa gateway: forecast, historical, air quality, marine, ensemble, seasonal, climate, flood, geocoding and elevation. All endpoints are GET pass-through to Open-Meteo (open-meteo.com); AIsa handles provider access. Flat pricing of $0.00015 per call (150 micros USD), metered per request."
  },
  "servers": [
    {
      "url": "https://api.aisa.one/apis/v1"
    }
  ],
  "security": [
    {
      "BearerAuth": []
    }
  ],
  "paths": {
    "/openmeteo/forecast": {
      "get": {
        "x-aisa-pricing": {
          "model": "per_request",
          "currency": "USD",
          "price_usd": 0.00015,
          "cost_tier": "low",
          "note": "$0.00015 per call (150 micros USD), metered per request. GET pass-through to Open-Meteo; AIsa handles provider auth."
        },
        "summary": "Weather Forecast",
        "description": "Hourly, daily and current weather forecast for any WGS84 coordinate, up to 16 days ahead, from Open-Meteo's blended high-resolution model mix. Select the variables you need with the `hourly`, `daily` and `current` parameters. GET pass-through to `https://api.open-meteo.com/v1/forecast`.\n\nBilled $0.00015 per call, metered per request.",
        "operationId": "get_openmeteo_forecast",
        "parameters": [
          {
            "name": "latitude",
            "in": "query",
            "required": true,
            "description": "WGS84 latitude of the location. Multiple coordinates can be comma-separated.",
            "schema": {
              "type": "string",
              "example": "52.52"
            }
          },
          {
            "name": "longitude",
            "in": "query",
            "required": true,
            "description": "WGS84 longitude of the location (negative for the Americas). Multiple coordinates can be comma-separated.",
            "schema": {
              "type": "string",
              "example": "13.41"
            }
          },
          {
            "name": "hourly",
            "in": "query",
            "required": false,
            "description": "Comma-separated list of hourly variables to return. Common values: `temperature_2m`, `relative_humidity_2m`, `dew_point_2m`, `apparent_temperature`, `precipitation`, `rain`, `showers`, `snowfall`, `weather_code`, `pressure_msl`, `cloud_cover`, `wind_speed_10m`, `wind_direction_10m`, `wind_gusts_10m`, `shortwave_radiation`, `visibility`.",
            "schema": {
              "type": "string",
              "example": "temperature_2m,precipitation,wind_speed_10m"
            }
          },
          {
            "name": "daily",
            "in": "query",
            "required": false,
            "description": "Comma-separated list of daily aggregation variables to return. Requires `timezone`. Common values: `temperature_2m_max`, `temperature_2m_min`, `temperature_2m_mean`, `precipitation_sum`, `rain_sum`, `snowfall_sum`, `weather_code`, `sunrise`, `sunset`, `sunshine_duration`, `wind_speed_10m_max`, `uv_index_max`.",
            "schema": {
              "type": "string",
              "example": "temperature_2m_max,temperature_2m_min,precipitation_sum"
            }
          },
          {
            "name": "current",
            "in": "query",
            "required": false,
            "description": "Comma-separated list of current-condition variables to return. Common values: `temperature_2m`, `relative_humidity_2m`, `apparent_temperature`, `is_day`, `precipitation`, `weather_code`, `wind_speed_10m`, `wind_direction_10m`.",
            "schema": {
              "type": "string",
              "example": "temperature_2m,weather_code"
            }
          },
          {
            "name": "minutely_15",
            "in": "query",
            "required": false,
            "description": "Comma-separated 15-minutely variables (Central Europe & North America high-resolution models only).",
            "schema": {
              "type": "string",
              "example": "temperature_2m,precipitation"
            }
          },
          {
            "name": "forecast_days",
            "in": "query",
            "required": false,
            "description": "Number of forecast days to return (0-16). Default 7.",
            "schema": {
              "type": "integer",
              "default": 7,
              "example": 7
            }
          },
          {
            "name": "past_days",
            "in": "query",
            "required": false,
            "description": "Number of past days to include (0-92). Default 0.",
            "schema": {
              "type": "integer",
              "default": 0
            }
          },
          {
            "name": "forecast_hours",
            "in": "query",
            "required": false,
            "description": "Limit the forecast to a given number of hours from now.",
            "schema": {
              "type": "integer"
            }
          },
          {
            "name": "past_hours",
            "in": "query",
            "required": false,
            "description": "Include a given number of past hours.",
            "schema": {
              "type": "integer"
            }
          },
          {
            "name": "start_date",
            "in": "query",
            "required": false,
            "description": "Start of the interval, `yyyy-mm-dd` (ISO 8601).",
            "schema": {
              "type": "string",
              "example": "2024-01-01",
              "format": "date"
            }
          },
          {
            "name": "end_date",
            "in": "query",
            "required": false,
            "description": "End of the interval, `yyyy-mm-dd` (ISO 8601).",
            "schema": {
              "type": "string",
              "example": "2024-01-07",
              "format": "date"
            }
          },
          {
            "name": "elevation",
            "in": "query",
            "required": false,
            "description": "Manual elevation (meters) for statistical downscaling. Defaults to a 90m DEM. Use `nan` to disable downscaling.",
            "schema": {
              "type": "string",
              "example": "38"
            }
          },
          {
            "name": "temperature_unit",
            "in": "query",
            "required": false,
            "description": "Temperature unit. Default `celsius`.",
            "schema": {
              "type": "string",
              "enum": [
                "celsius",
                "fahrenheit"
              ],
              "default": "celsius"
            }
          },
          {
            "name": "wind_speed_unit",
            "in": "query",
            "required": false,
            "description": "Wind speed unit. Default `kmh`.",
            "schema": {
              "type": "string",
              "enum": [
                "kmh",
                "ms",
                "mph",
                "kn"
              ],
              "default": "kmh"
            }
          },
          {
            "name": "precipitation_unit",
            "in": "query",
            "required": false,
            "description": "Precipitation unit. Default `mm`.",
            "schema": {
              "type": "string",
              "enum": [
                "mm",
                "inch"
              ],
              "default": "mm"
            }
          },
          {
            "name": "timeformat",
            "in": "query",
            "required": false,
            "description": "Time output format. Default `iso8601`.",
            "schema": {
              "type": "string",
              "enum": [
                "iso8601",
                "unixtime"
              ],
              "default": "iso8601"
            }
          },
          {
            "name": "models",
            "in": "query",
            "required": false,
            "description": "Comma-separated forecast models to use. Default `auto` selects the best model mix per location.",
            "schema": {
              "type": "string",
              "example": "auto"
            }
          },
          {
            "name": "timezone",
            "in": "query",
            "required": false,
            "description": "IANA time zone name (e.g. `Europe/Berlin`) or `auto` to resolve from coordinates. Defaults to `GMT`.",
            "schema": {
              "type": "string",
              "example": "Europe/Berlin"
            }
          },
          {
            "name": "cell_selection",
            "in": "query",
            "required": false,
            "description": "Grid-cell preference for the coordinate. Default `land`.",
            "schema": {
              "type": "string",
              "enum": [
                "land",
                "sea",
                "nearest"
              ],
              "default": "land"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Requested weather forecast for the coordinate.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                },
                "example": {
                  "latitude": 52.52,
                  "longitude": 13.419998,
                  "generationtime_ms": 0.19,
                  "utc_offset_seconds": 7200,
                  "timezone": "Europe/Berlin",
                  "timezone_abbreviation": "CEST",
                  "elevation": 38.0,
                  "current_units": {
                    "time": "iso8601",
                    "interval": "seconds",
                    "temperature_2m": "°C",
                    "weather_code": "wmo code"
                  },
                  "current": {
                    "time": "2024-01-01T12:00",
                    "interval": 900,
                    "temperature_2m": 4.5,
                    "weather_code": 3
                  },
                  "hourly_units": {
                    "time": "iso8601",
                    "temperature_2m": "°C",
                    "precipitation": "mm",
                    "wind_speed_10m": "km/h"
                  },
                  "hourly": {
                    "time": [
                      "2024-01-01T00:00",
                      "2024-01-01T01:00"
                    ],
                    "temperature_2m": [
                      2.1,
                      1.9
                    ],
                    "precipitation": [
                      0.0,
                      0.1
                    ],
                    "wind_speed_10m": [
                      11.2,
                      10.4
                    ]
                  },
                  "daily_units": {
                    "time": "iso8601",
                    "temperature_2m_max": "°C",
                    "temperature_2m_min": "°C",
                    "precipitation_sum": "mm"
                  },
                  "daily": {
                    "time": [
                      "2024-01-01"
                    ],
                    "temperature_2m_max": [
                      5.2
                    ],
                    "temperature_2m_min": [
                      1.1
                    ],
                    "precipitation_sum": [
                      0.4
                    ]
                  }
                }
              }
            }
          }
        }
      }
    },
    "/openmeteo/elevation": {
      "get": {
        "x-aisa-pricing": {
          "model": "per_request",
          "currency": "USD",
          "price_usd": 0.00015,
          "cost_tier": "low",
          "note": "$0.00015 per call (150 micros USD), metered per request. GET pass-through to Open-Meteo; AIsa handles provider auth."
        },
        "summary": "Elevation",
        "description": "Terrain elevation from the Copernicus 90m DEM (2021) for one or more coordinates. Pass comma-separated `latitude`/`longitude` lists to look up up to 100 points in a single request. GET pass-through to `https://api.open-meteo.com/v1/elevation`.\n\nBilled $0.00015 per call, metered per request.",
        "operationId": "get_openmeteo_elevation",
        "parameters": [
          {
            "name": "latitude",
            "in": "query",
            "required": true,
            "description": "WGS84 latitude, or a comma-separated list of up to 100 latitudes.",
            "schema": {
              "type": "string",
              "example": "52.52,48.85"
            }
          },
          {
            "name": "longitude",
            "in": "query",
            "required": true,
            "description": "WGS84 longitude, or a comma-separated list of up to 100 longitudes (positions aligned with `latitude`).",
            "schema": {
              "type": "string",
              "example": "13.41,2.35"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Elevation in meters for each requested coordinate.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                },
                "example": {
                  "elevation": [
                    38.0,
                    35.0
                  ]
                }
              }
            }
          }
        }
      }
    },
    "/openmeteo/geocoding": {
      "get": {
        "x-aisa-pricing": {
          "model": "per_request",
          "currency": "USD",
          "price_usd": 0.00015,
          "cost_tier": "low",
          "note": "$0.00015 per call (150 micros USD), metered per request. GET pass-through to Open-Meteo; AIsa handles provider auth."
        },
        "summary": "Geocoding Search",
        "description": "Search place names or postal codes and resolve them to coordinates, administrative regions, country, timezone and population. GET pass-through to `https://geocoding-api.open-meteo.com/v1/search`.\n\nBilled $0.00015 per call, metered per request.",
        "operationId": "get_openmeteo_geocoding",
        "parameters": [
          {
            "name": "name",
            "in": "query",
            "required": true,
            "description": "Location name or postal code. Append `, <country>` or `, <admin1>` to narrow results.",
            "schema": {
              "type": "string",
              "example": "Berlin"
            }
          },
          {
            "name": "count",
            "in": "query",
            "required": false,
            "description": "Maximum number of results (1-100). Default 10.",
            "schema": {
              "type": "integer",
              "default": 10,
              "example": 5
            }
          },
          {
            "name": "language",
            "in": "query",
            "required": false,
            "description": "Two-letter language code for translated names. Default `en`.",
            "schema": {
              "type": "string",
              "default": "en",
              "example": "en"
            }
          },
          {
            "name": "countryCode",
            "in": "query",
            "required": false,
            "description": "ISO-3166-1 alpha-2 country code to filter results.",
            "schema": {
              "type": "string",
              "example": "DE"
            }
          },
          {
            "name": "format",
            "in": "query",
            "required": false,
            "description": "Response format. Default `json`.",
            "schema": {
              "type": "string",
              "enum": [
                "json",
                "protobuf"
              ],
              "default": "json"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Matching locations.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                },
                "example": {
                  "results": [
                    {
                      "id": 2950159,
                      "name": "Berlin",
                      "latitude": 52.52437,
                      "longitude": 13.41053,
                      "elevation": 74.0,
                      "feature_code": "PPLC",
                      "country_code": "DE",
                      "country": "Germany",
                      "country_id": 2921044,
                      "admin1": "Land Berlin",
                      "timezone": "Europe/Berlin",
                      "population": 3426354,
                      "postcodes": [
                        "10967",
                        "13347"
                      ]
                    }
                  ],
                  "generationtime_ms": 0.5
                }
              }
            }
          }
        }
      }
    },
    "/openmeteo/archive": {
      "get": {
        "x-aisa-pricing": {
          "model": "per_request",
          "currency": "USD",
          "price_usd": 0.00015,
          "cost_tier": "low",
          "note": "$0.00015 per call (150 micros USD), metered per request. GET pass-through to Open-Meteo; AIsa handles provider auth."
        },
        "summary": "Historical Weather (ERA5 Archive)",
        "description": "Historical reanalysis weather (ERA5 / ERA5-Land and related models) for any coordinate, with data back to 1940. `start_date` and `end_date` are required. GET pass-through to `https://archive-api.open-meteo.com/v1/archive`.\n\nBilled $0.00015 per call, metered per request.",
        "operationId": "get_openmeteo_archive",
        "parameters": [
          {
            "name": "latitude",
            "in": "query",
            "required": true,
            "description": "WGS84 latitude of the location. Multiple coordinates can be comma-separated.",
            "schema": {
              "type": "string",
              "example": "52.52"
            }
          },
          {
            "name": "longitude",
            "in": "query",
            "required": true,
            "description": "WGS84 longitude of the location (negative for the Americas). Multiple coordinates can be comma-separated.",
            "schema": {
              "type": "string",
              "example": "13.41"
            }
          },
          {
            "name": "start_date",
            "in": "query",
            "required": true,
            "description": "Start of the interval, `yyyy-mm-dd` (ISO 8601).",
            "schema": {
              "type": "string",
              "example": "2024-01-01",
              "format": "date"
            }
          },
          {
            "name": "end_date",
            "in": "query",
            "required": true,
            "description": "End of the interval, `yyyy-mm-dd` (ISO 8601).",
            "schema": {
              "type": "string",
              "example": "2024-01-07",
              "format": "date"
            }
          },
          {
            "name": "hourly",
            "in": "query",
            "required": false,
            "description": "Comma-separated list of hourly variables to return. Common values: `temperature_2m`, `relative_humidity_2m`, `dew_point_2m`, `apparent_temperature`, `precipitation`, `rain`, `showers`, `snowfall`, `weather_code`, `pressure_msl`, `cloud_cover`, `wind_speed_10m`, `wind_direction_10m`, `wind_gusts_10m`, `shortwave_radiation`, `visibility`. Also includes soil temperature/moisture variables.",
            "schema": {
              "type": "string",
              "example": "temperature_2m,precipitation"
            }
          },
          {
            "name": "daily",
            "in": "query",
            "required": false,
            "description": "Comma-separated list of daily aggregation variables to return. Requires `timezone`. Common values: `temperature_2m_max`, `temperature_2m_min`, `temperature_2m_mean`, `precipitation_sum`, `rain_sum`, `snowfall_sum`, `weather_code`, `sunrise`, `sunset`, `sunshine_duration`, `wind_speed_10m_max`, `uv_index_max`.",
            "schema": {
              "type": "string",
              "example": "temperature_2m_max,temperature_2m_min,precipitation_sum"
            }
          },
          {
            "name": "elevation",
            "in": "query",
            "required": false,
            "description": "Manual elevation (meters). Defaults to a 90m DEM.",
            "schema": {
              "type": "string",
              "example": "38"
            }
          },
          {
            "name": "temperature_unit",
            "in": "query",
            "required": false,
            "description": "Temperature unit. Default `celsius`.",
            "schema": {
              "type": "string",
              "enum": [
                "celsius",
                "fahrenheit"
              ],
              "default": "celsius"
            }
          },
          {
            "name": "wind_speed_unit",
            "in": "query",
            "required": false,
            "description": "Wind speed unit. Default `kmh`.",
            "schema": {
              "type": "string",
              "enum": [
                "kmh",
                "ms",
                "mph",
                "kn"
              ],
              "default": "kmh"
            }
          },
          {
            "name": "precipitation_unit",
            "in": "query",
            "required": false,
            "description": "Precipitation unit. Default `mm`.",
            "schema": {
              "type": "string",
              "enum": [
                "mm",
                "inch"
              ],
              "default": "mm"
            }
          },
          {
            "name": "timeformat",
            "in": "query",
            "required": false,
            "description": "Time output format. Default `iso8601`.",
            "schema": {
              "type": "string",
              "enum": [
                "iso8601",
                "unixtime"
              ],
              "default": "iso8601"
            }
          },
          {
            "name": "models",
            "in": "query",
            "required": false,
            "description": "Comma-separated reanalysis models, e.g. `era5`, `era5_land`, `ecmwf_ifs`, `cerra`. Default best match.",
            "schema": {
              "type": "string",
              "example": "era5"
            }
          },
          {
            "name": "timezone",
            "in": "query",
            "required": false,
            "description": "IANA time zone name (e.g. `Europe/Berlin`) or `auto` to resolve from coordinates. Defaults to `GMT`.",
            "schema": {
              "type": "string",
              "example": "Europe/Berlin"
            }
          },
          {
            "name": "cell_selection",
            "in": "query",
            "required": false,
            "description": "Grid-cell preference for the coordinate. Default `land`.",
            "schema": {
              "type": "string",
              "enum": [
                "land",
                "sea",
                "nearest"
              ],
              "default": "land"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Historical weather for the interval.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                },
                "example": {
                  "latitude": 52.5,
                  "longitude": 13.4,
                  "generationtime_ms": 1.2,
                  "utc_offset_seconds": 3600,
                  "timezone": "Europe/Berlin",
                  "elevation": 38.0,
                  "hourly_units": {
                    "time": "iso8601",
                    "temperature_2m": "°C",
                    "precipitation": "mm"
                  },
                  "hourly": {
                    "time": [
                      "2022-01-01T00:00",
                      "2022-01-01T01:00"
                    ],
                    "temperature_2m": [
                      3.1,
                      2.8
                    ],
                    "precipitation": [
                      0.0,
                      0.0
                    ]
                  },
                  "daily_units": {
                    "time": "iso8601",
                    "temperature_2m_max": "°C",
                    "temperature_2m_min": "°C",
                    "precipitation_sum": "mm"
                  },
                  "daily": {
                    "time": [
                      "2022-01-01"
                    ],
                    "temperature_2m_max": [
                      4.5
                    ],
                    "temperature_2m_min": [
                      1.2
                    ],
                    "precipitation_sum": [
                      0.6
                    ]
                  }
                }
              }
            }
          }
        }
      }
    },
    "/openmeteo/air-quality": {
      "get": {
        "x-aisa-pricing": {
          "model": "per_request",
          "currency": "USD",
          "price_usd": 0.00015,
          "cost_tier": "low",
          "note": "$0.00015 per call (150 micros USD), metered per request. GET pass-through to Open-Meteo; AIsa handles provider auth."
        },
        "summary": "Air Quality",
        "description": "Air quality forecast (CAMS): particulate matter, gaseous pollutants, dust, UV index, European & US AQI, and pollen. GET pass-through to `https://air-quality-api.open-meteo.com/v1/air-quality`.\n\nBilled $0.00015 per call, metered per request.",
        "operationId": "get_openmeteo_air_quality",
        "parameters": [
          {
            "name": "latitude",
            "in": "query",
            "required": true,
            "description": "WGS84 latitude of the location. Multiple coordinates can be comma-separated.",
            "schema": {
              "type": "string",
              "example": "52.52"
            }
          },
          {
            "name": "longitude",
            "in": "query",
            "required": true,
            "description": "WGS84 longitude of the location (negative for the Americas). Multiple coordinates can be comma-separated.",
            "schema": {
              "type": "string",
              "example": "13.41"
            }
          },
          {
            "name": "hourly",
            "in": "query",
            "required": false,
            "description": "Comma-separated list of hourly variables to return. Common values: `pm10`, `pm2_5`, `carbon_monoxide`, `nitrogen_dioxide`, `sulphur_dioxide`, `ozone`, `aerosol_optical_depth`, `dust`, `uv_index`, `ammonia`, `european_aqi`, `us_aqi`, and pollen (`alder_pollen`, `birch_pollen`, `grass_pollen`, `mugwort_pollen`, `olive_pollen`, `ragweed_pollen`).",
            "schema": {
              "type": "string",
              "example": "pm10,pm2_5,european_aqi"
            }
          },
          {
            "name": "current",
            "in": "query",
            "required": false,
            "description": "Comma-separated list of current-condition variables to return. Same variable set as `hourly`.",
            "schema": {
              "type": "string",
              "example": "european_aqi,pm2_5"
            }
          },
          {
            "name": "domains",
            "in": "query",
            "required": false,
            "description": "Model domain. Default `auto`.",
            "schema": {
              "type": "string",
              "enum": [
                "auto",
                "cams_europe",
                "cams_global"
              ],
              "default": "auto"
            }
          },
          {
            "name": "forecast_days",
            "in": "query",
            "required": false,
            "description": "Number of forecast days to return (0-7). Default 5.",
            "schema": {
              "type": "integer",
              "default": 5,
              "example": 7
            }
          },
          {
            "name": "past_days",
            "in": "query",
            "required": false,
            "description": "Number of past days to include (0-92). Default 0.",
            "schema": {
              "type": "integer",
              "default": 0
            }
          },
          {
            "name": "forecast_hours",
            "in": "query",
            "required": false,
            "description": "Limit forecast to a given number of hours.",
            "schema": {
              "type": "integer"
            }
          },
          {
            "name": "past_hours",
            "in": "query",
            "required": false,
            "description": "Include a given number of past hours.",
            "schema": {
              "type": "integer"
            }
          },
          {
            "name": "start_date",
            "in": "query",
            "required": false,
            "description": "Start of the interval, `yyyy-mm-dd` (ISO 8601).",
            "schema": {
              "type": "string",
              "example": "2024-01-01",
              "format": "date"
            }
          },
          {
            "name": "end_date",
            "in": "query",
            "required": false,
            "description": "End of the interval, `yyyy-mm-dd` (ISO 8601).",
            "schema": {
              "type": "string",
              "example": "2024-01-07",
              "format": "date"
            }
          },
          {
            "name": "timeformat",
            "in": "query",
            "required": false,
            "description": "Time output format. Default `iso8601`.",
            "schema": {
              "type": "string",
              "enum": [
                "iso8601",
                "unixtime"
              ],
              "default": "iso8601"
            }
          },
          {
            "name": "timezone",
            "in": "query",
            "required": false,
            "description": "IANA time zone name (e.g. `Europe/Berlin`) or `auto` to resolve from coordinates. Defaults to `GMT`.",
            "schema": {
              "type": "string",
              "example": "Europe/Berlin"
            }
          },
          {
            "name": "cell_selection",
            "in": "query",
            "required": false,
            "description": "Grid-cell preference for the coordinate. Default `nearest`.",
            "schema": {
              "type": "string",
              "enum": [
                "land",
                "sea",
                "nearest"
              ],
              "default": "nearest"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Air-quality forecast for the coordinate.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                },
                "example": {
                  "latitude": 52.5,
                  "longitude": 13.4,
                  "generationtime_ms": 0.3,
                  "utc_offset_seconds": 0,
                  "timezone": "GMT",
                  "elevation": 38.0,
                  "hourly_units": {
                    "time": "iso8601",
                    "pm10": "μg/m³",
                    "pm2_5": "μg/m³",
                    "european_aqi": "EAQI"
                  },
                  "hourly": {
                    "time": [
                      "2024-01-01T00:00"
                    ],
                    "pm10": [
                      12.4
                    ],
                    "pm2_5": [
                      8.1
                    ],
                    "european_aqi": [
                      21
                    ]
                  }
                }
              }
            }
          }
        }
      }
    },
    "/openmeteo/marine": {
      "get": {
        "x-aisa-pricing": {
          "model": "per_request",
          "currency": "USD",
          "price_usd": 0.00015,
          "cost_tier": "low",
          "note": "$0.00015 per call (150 micros USD), metered per request. GET pass-through to Open-Meteo; AIsa handles provider auth."
        },
        "summary": "Marine Weather",
        "description": "Marine and ocean-wave forecast: wave height/direction/period (total, wind and swell), ocean currents and sea-surface temperature. GET pass-through to `https://marine-api.open-meteo.com/v1/marine`.\n\nBilled $0.00015 per call, metered per request.",
        "operationId": "get_openmeteo_marine",
        "parameters": [
          {
            "name": "latitude",
            "in": "query",
            "required": true,
            "description": "WGS84 latitude of the location. Multiple coordinates can be comma-separated.",
            "schema": {
              "type": "string",
              "example": "52.52"
            }
          },
          {
            "name": "longitude",
            "in": "query",
            "required": true,
            "description": "WGS84 longitude of the location (negative for the Americas). Multiple coordinates can be comma-separated.",
            "schema": {
              "type": "string",
              "example": "13.41"
            }
          },
          {
            "name": "hourly",
            "in": "query",
            "required": false,
            "description": "Comma-separated list of hourly variables to return. Common values: `wave_height`, `wave_direction`, `wave_period`, `wind_wave_height`, `wind_wave_direction`, `wind_wave_period`, `swell_wave_height`, `swell_wave_direction`, `swell_wave_period`, `ocean_current_velocity`, `ocean_current_direction`, `sea_surface_temperature`.",
            "schema": {
              "type": "string",
              "example": "wave_height,wave_direction,wave_period"
            }
          },
          {
            "name": "daily",
            "in": "query",
            "required": false,
            "description": "Comma-separated list of daily aggregation variables to return. Requires `timezone`. Common values: `wave_height_max`, `wave_direction_dominant`, `wave_period_max`, `wind_wave_height_max`, `swell_wave_height_max`.",
            "schema": {
              "type": "string",
              "example": "wave_height_max"
            }
          },
          {
            "name": "current",
            "in": "query",
            "required": false,
            "description": "Comma-separated list of current-condition variables to return. Same variable set as `hourly`.",
            "schema": {
              "type": "string",
              "example": "wave_height,wave_period"
            }
          },
          {
            "name": "forecast_days",
            "in": "query",
            "required": false,
            "description": "Number of forecast days to return (0-8). Default 5.",
            "schema": {
              "type": "integer",
              "default": 5,
              "example": 7
            }
          },
          {
            "name": "past_days",
            "in": "query",
            "required": false,
            "description": "Number of past days to include (0-92). Default 0.",
            "schema": {
              "type": "integer",
              "default": 0
            }
          },
          {
            "name": "start_date",
            "in": "query",
            "required": false,
            "description": "Start of the interval, `yyyy-mm-dd` (ISO 8601).",
            "schema": {
              "type": "string",
              "example": "2024-01-01",
              "format": "date"
            }
          },
          {
            "name": "end_date",
            "in": "query",
            "required": false,
            "description": "End of the interval, `yyyy-mm-dd` (ISO 8601).",
            "schema": {
              "type": "string",
              "example": "2024-01-07",
              "format": "date"
            }
          },
          {
            "name": "length_unit",
            "in": "query",
            "required": false,
            "description": "Unit for wave heights. Default `metric`.",
            "schema": {
              "type": "string",
              "enum": [
                "metric",
                "imperial"
              ],
              "default": "metric"
            }
          },
          {
            "name": "timeformat",
            "in": "query",
            "required": false,
            "description": "Time output format. Default `iso8601`.",
            "schema": {
              "type": "string",
              "enum": [
                "iso8601",
                "unixtime"
              ],
              "default": "iso8601"
            }
          },
          {
            "name": "timezone",
            "in": "query",
            "required": false,
            "description": "IANA time zone name (e.g. `Europe/Berlin`) or `auto` to resolve from coordinates. Defaults to `GMT`.",
            "schema": {
              "type": "string",
              "example": "Europe/Berlin"
            }
          },
          {
            "name": "cell_selection",
            "in": "query",
            "required": false,
            "description": "Grid-cell preference for the coordinate. Default `sea`.",
            "schema": {
              "type": "string",
              "enum": [
                "land",
                "sea",
                "nearest"
              ],
              "default": "sea"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Marine forecast for the coordinate.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                },
                "example": {
                  "latitude": 54.5,
                  "longitude": 10.25,
                  "generationtime_ms": 0.2,
                  "utc_offset_seconds": 0,
                  "timezone": "GMT",
                  "hourly_units": {
                    "time": "iso8601",
                    "wave_height": "m",
                    "wave_direction": "°",
                    "wave_period": "s"
                  },
                  "hourly": {
                    "time": [
                      "2024-01-01T00:00"
                    ],
                    "wave_height": [
                      0.6
                    ],
                    "wave_direction": [
                      212
                    ],
                    "wave_period": [
                      4.1
                    ]
                  }
                }
              }
            }
          }
        }
      }
    },
    "/openmeteo/ensemble": {
      "get": {
        "x-aisa-pricing": {
          "model": "per_request",
          "currency": "USD",
          "price_usd": 0.00015,
          "cost_tier": "low",
          "note": "$0.00015 per call (150 micros USD), metered per request. GET pass-through to Open-Meteo; AIsa handles provider auth."
        },
        "summary": "Ensemble Models",
        "description": "Probabilistic ensemble weather forecasts. Each requested variable is returned once per ensemble member (e.g. `temperature_2m_member01`, `temperature_2m_member02`, ...), enabling spread and probability analysis. `models` is optional — omit it to get the default best-match global ensemble (a 30-member set). GET pass-through to `https://ensemble-api.open-meteo.com/v1/ensemble`.\n\nBilled $0.00015 per call, metered per request.",
        "operationId": "get_openmeteo_ensemble",
        "parameters": [
          {
            "name": "latitude",
            "in": "query",
            "required": true,
            "description": "WGS84 latitude of the location. Multiple coordinates can be comma-separated.",
            "schema": {
              "type": "string",
              "example": "52.52"
            }
          },
          {
            "name": "longitude",
            "in": "query",
            "required": true,
            "description": "WGS84 longitude of the location (negative for the Americas). Multiple coordinates can be comma-separated.",
            "schema": {
              "type": "string",
              "example": "13.41"
            }
          },
          {
            "name": "models",
            "in": "query",
            "required": false,
            "description": "Optional; when omitted, defaults to the best-match global ensemble (a 30-member set). Comma-separated ensemble models, e.g. `icon_seamless`, `gfs_seamless`, `ecmwf_ifs025`, `gem_global`. Each model exposes its own member count.",
            "schema": {
              "type": "string",
              "example": "icon_seamless"
            }
          },
          {
            "name": "hourly",
            "in": "query",
            "required": false,
            "description": "Comma-separated list of hourly variables to return. Common values: `temperature_2m`, `relative_humidity_2m`, `dew_point_2m`, `apparent_temperature`, `precipitation`, `rain`, `showers`, `snowfall`, `weather_code`, `pressure_msl`, `cloud_cover`, `wind_speed_10m`, `wind_direction_10m`, `wind_gusts_10m`, `shortwave_radiation`, `visibility`. Also `cape`.",
            "schema": {
              "type": "string",
              "example": "temperature_2m,wind_speed_10m"
            }
          },
          {
            "name": "daily",
            "in": "query",
            "required": false,
            "description": "Comma-separated list of daily aggregation variables to return. Requires `timezone`. Common values: `temperature_2m_max`, `temperature_2m_min`, `temperature_2m_mean`, `precipitation_sum`, `rain_sum`, `snowfall_sum`, `weather_code`, `sunrise`, `sunset`, `sunshine_duration`, `wind_speed_10m_max`, `uv_index_max`.",
            "schema": {
              "type": "string",
              "example": "temperature_2m_max,precipitation_sum"
            }
          },
          {
            "name": "forecast_days",
            "in": "query",
            "required": false,
            "description": "Number of forecast days to return (0-35). Default 7.",
            "schema": {
              "type": "integer",
              "default": 7,
              "example": 7
            }
          },
          {
            "name": "past_days",
            "in": "query",
            "required": false,
            "description": "Number of past days to include (0-92). Default 0.",
            "schema": {
              "type": "integer",
              "default": 0
            }
          },
          {
            "name": "start_date",
            "in": "query",
            "required": false,
            "description": "Start of the interval, `yyyy-mm-dd` (ISO 8601).",
            "schema": {
              "type": "string",
              "example": "2024-01-01",
              "format": "date"
            }
          },
          {
            "name": "end_date",
            "in": "query",
            "required": false,
            "description": "End of the interval, `yyyy-mm-dd` (ISO 8601).",
            "schema": {
              "type": "string",
              "example": "2024-01-07",
              "format": "date"
            }
          },
          {
            "name": "elevation",
            "in": "query",
            "required": false,
            "description": "Manual elevation (meters). Defaults to a 90m DEM.",
            "schema": {
              "type": "string",
              "example": "38"
            }
          },
          {
            "name": "temperature_unit",
            "in": "query",
            "required": false,
            "description": "Temperature unit. Default `celsius`.",
            "schema": {
              "type": "string",
              "enum": [
                "celsius",
                "fahrenheit"
              ],
              "default": "celsius"
            }
          },
          {
            "name": "wind_speed_unit",
            "in": "query",
            "required": false,
            "description": "Wind speed unit. Default `kmh`.",
            "schema": {
              "type": "string",
              "enum": [
                "kmh",
                "ms",
                "mph",
                "kn"
              ],
              "default": "kmh"
            }
          },
          {
            "name": "precipitation_unit",
            "in": "query",
            "required": false,
            "description": "Precipitation unit. Default `mm`.",
            "schema": {
              "type": "string",
              "enum": [
                "mm",
                "inch"
              ],
              "default": "mm"
            }
          },
          {
            "name": "timeformat",
            "in": "query",
            "required": false,
            "description": "Time output format. Default `iso8601`.",
            "schema": {
              "type": "string",
              "enum": [
                "iso8601",
                "unixtime"
              ],
              "default": "iso8601"
            }
          },
          {
            "name": "timezone",
            "in": "query",
            "required": false,
            "description": "IANA time zone name (e.g. `Europe/Berlin`) or `auto` to resolve from coordinates. Defaults to `GMT`.",
            "schema": {
              "type": "string",
              "example": "Europe/Berlin"
            }
          },
          {
            "name": "cell_selection",
            "in": "query",
            "required": false,
            "description": "Grid-cell preference for the coordinate. Default `land`.",
            "schema": {
              "type": "string",
              "enum": [
                "land",
                "sea",
                "nearest"
              ],
              "default": "land"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Ensemble forecast with per-member arrays.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                },
                "example": {
                  "latitude": 52.5,
                  "longitude": 13.4,
                  "generationtime_ms": 2.1,
                  "utc_offset_seconds": 0,
                  "timezone": "GMT",
                  "elevation": 38.0,
                  "hourly_units": {
                    "time": "iso8601",
                    "temperature_2m": "°C"
                  },
                  "hourly": {
                    "time": [
                      "2024-01-01T00:00"
                    ],
                    "temperature_2m_member01": [
                      2.1
                    ],
                    "temperature_2m_member02": [
                      2.4
                    ],
                    "temperature_2m_member03": [
                      1.8
                    ]
                  }
                }
              }
            }
          }
        }
      }
    },
    "/openmeteo/seasonal": {
      "get": {
        "x-aisa-pricing": {
          "model": "per_request",
          "currency": "USD",
          "price_usd": 0.00015,
          "cost_tier": "low",
          "note": "$0.00015 per call (150 micros USD), metered per request. GET pass-through to Open-Meteo; AIsa handles provider auth."
        },
        "summary": "Seasonal Forecast",
        "description": "Long-range seasonal forecast (ECMWF SEAS5 / EC46) out to roughly six months (about 183 days ahead), delivered as daily aggregates and 6-hourly steps. GET pass-through to `https://seasonal-api.open-meteo.com/v1/seasonal`.\n\nBilled $0.00015 per call, metered per request.",
        "operationId": "get_openmeteo_seasonal",
        "parameters": [
          {
            "name": "latitude",
            "in": "query",
            "required": true,
            "description": "WGS84 latitude of the location. Multiple coordinates can be comma-separated.",
            "schema": {
              "type": "string",
              "example": "52.52"
            }
          },
          {
            "name": "longitude",
            "in": "query",
            "required": true,
            "description": "WGS84 longitude of the location (negative for the Americas). Multiple coordinates can be comma-separated.",
            "schema": {
              "type": "string",
              "example": "13.41"
            }
          },
          {
            "name": "six_hourly",
            "in": "query",
            "required": false,
            "description": "Comma-separated 6-hourly variables. Common values: `temperature_2m`, `precipitation`, `wind_speed_10m`, `weather_code`.",
            "schema": {
              "type": "string",
              "example": "temperature_2m,precipitation"
            }
          },
          {
            "name": "daily",
            "in": "query",
            "required": false,
            "description": "Comma-separated list of daily aggregation variables to return. Requires `timezone`. Common values: `temperature_2m_max`, `temperature_2m_min`, `temperature_2m_mean`, `precipitation_sum`, `rain_sum`, `snowfall_sum`, `weather_code`, `sunrise`, `sunset`, `sunshine_duration`, `wind_speed_10m_max`, `uv_index_max`.",
            "schema": {
              "type": "string",
              "example": "temperature_2m_max,temperature_2m_min,precipitation_sum"
            }
          },
          {
            "name": "hourly",
            "in": "query",
            "required": false,
            "description": "Comma-separated list of hourly variables to return. Interpolated hourly variables (optional). Common values: `temperature_2m`, `relative_humidity_2m`, `dew_point_2m`, `apparent_temperature`, `precipitation`, `rain`, `showers`, `snowfall`, `weather_code`, `pressure_msl`, `cloud_cover`, `wind_speed_10m`, `wind_direction_10m`, `wind_gusts_10m`, `shortwave_radiation`, `visibility`.",
            "schema": {
              "type": "string",
              "example": "temperature_2m"
            }
          },
          {
            "name": "forecast_days",
            "in": "query",
            "required": false,
            "description": "Number of forecast days to return (0-274). Default 0.",
            "schema": {
              "type": "integer",
              "default": 0,
              "example": 7
            }
          },
          {
            "name": "past_days",
            "in": "query",
            "required": false,
            "description": "Number of past days to include (0-92). Default 0.",
            "schema": {
              "type": "integer",
              "default": 0
            }
          },
          {
            "name": "start_date",
            "in": "query",
            "required": false,
            "description": "Start of the interval, `yyyy-mm-dd` (ISO 8601).",
            "schema": {
              "type": "string",
              "example": "2024-01-01",
              "format": "date"
            }
          },
          {
            "name": "end_date",
            "in": "query",
            "required": false,
            "description": "End of the interval, `yyyy-mm-dd` (ISO 8601).",
            "schema": {
              "type": "string",
              "example": "2024-01-07",
              "format": "date"
            }
          },
          {
            "name": "temperature_unit",
            "in": "query",
            "required": false,
            "description": "Temperature unit. Default `celsius`.",
            "schema": {
              "type": "string",
              "enum": [
                "celsius",
                "fahrenheit"
              ],
              "default": "celsius"
            }
          },
          {
            "name": "wind_speed_unit",
            "in": "query",
            "required": false,
            "description": "Wind speed unit. Default `kmh`.",
            "schema": {
              "type": "string",
              "enum": [
                "kmh",
                "ms",
                "mph",
                "kn"
              ],
              "default": "kmh"
            }
          },
          {
            "name": "precipitation_unit",
            "in": "query",
            "required": false,
            "description": "Precipitation unit. Default `mm`.",
            "schema": {
              "type": "string",
              "enum": [
                "mm",
                "inch"
              ],
              "default": "mm"
            }
          },
          {
            "name": "timeformat",
            "in": "query",
            "required": false,
            "description": "Time output format. Default `iso8601`.",
            "schema": {
              "type": "string",
              "enum": [
                "iso8601",
                "unixtime"
              ],
              "default": "iso8601"
            }
          },
          {
            "name": "timezone",
            "in": "query",
            "required": false,
            "description": "IANA time zone name (e.g. `Europe/Berlin`) or `auto` to resolve from coordinates. Defaults to `GMT`.",
            "schema": {
              "type": "string",
              "example": "Europe/Berlin"
            }
          },
          {
            "name": "cell_selection",
            "in": "query",
            "required": false,
            "description": "Grid-cell preference for the coordinate. Default `land`.",
            "schema": {
              "type": "string",
              "enum": [
                "land",
                "sea",
                "nearest"
              ],
              "default": "land"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Seasonal forecast for the coordinate.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                },
                "example": {
                  "latitude": 52.5,
                  "longitude": 13.4,
                  "generationtime_ms": 1.5,
                  "utc_offset_seconds": 0,
                  "timezone": "GMT",
                  "daily_units": {
                    "time": "iso8601",
                    "temperature_2m_max": "°C",
                    "precipitation_sum": "mm"
                  },
                  "daily": {
                    "time": [
                      "2024-01-01"
                    ],
                    "temperature_2m_max": [
                      4.5
                    ],
                    "temperature_2m_min": [
                      1.1
                    ],
                    "precipitation_sum": [
                      0.3
                    ]
                  }
                }
              }
            }
          }
        }
      }
    },
    "/openmeteo/climate": {
      "get": {
        "x-aisa-pricing": {
          "model": "per_request",
          "currency": "USD",
          "price_usd": 0.00015,
          "cost_tier": "low",
          "note": "$0.00015 per call (150 micros USD), metered per request. GET pass-through to Open-Meteo; AIsa handles provider auth."
        },
        "summary": "Climate Projections",
        "description": "Downscaled CMIP6 climate-change projections (daily) for a date range from 1950 to 2050. `start_date`, `end_date` and `models` are required. GET pass-through to `https://climate-api.open-meteo.com/v1/climate`.\n\nBilled $0.00015 per call, metered per request.",
        "operationId": "get_openmeteo_climate",
        "parameters": [
          {
            "name": "latitude",
            "in": "query",
            "required": true,
            "description": "WGS84 latitude of the location. Multiple coordinates can be comma-separated.",
            "schema": {
              "type": "string",
              "example": "52.52"
            }
          },
          {
            "name": "longitude",
            "in": "query",
            "required": true,
            "description": "WGS84 longitude of the location (negative for the Americas). Multiple coordinates can be comma-separated.",
            "schema": {
              "type": "string",
              "example": "13.41"
            }
          },
          {
            "name": "start_date",
            "in": "query",
            "required": true,
            "description": "Start of the interval, `yyyy-mm-dd` (ISO 8601).",
            "schema": {
              "type": "string",
              "example": "2024-01-01",
              "format": "date"
            }
          },
          {
            "name": "end_date",
            "in": "query",
            "required": true,
            "description": "End of the interval, `yyyy-mm-dd` (ISO 8601).",
            "schema": {
              "type": "string",
              "example": "2024-01-07",
              "format": "date"
            }
          },
          {
            "name": "models",
            "in": "query",
            "required": true,
            "description": "Required. Comma-separated climate models: `CMCC_CM2_VHR4`, `FGOALS_f3_H`, `HiRAM_SIT_HR`, `MRI_AGCM3_2_S`, `EC_Earth3P_HR`, `MPI_ESM1_2_XR`, `NICAM16_8S`.",
            "schema": {
              "type": "string",
              "example": "MRI_AGCM3_2_S,EC_Earth3P_HR"
            }
          },
          {
            "name": "daily",
            "in": "query",
            "required": false,
            "description": "Comma-separated list of daily aggregation variables to return. Requires `timezone`. Common values: `temperature_2m_max`, `temperature_2m_min`, `temperature_2m_mean`, `precipitation_sum`, `rain_sum`, `snowfall_sum`, `wind_speed_10m_mean`, `wind_speed_10m_max`, `cloud_cover_mean`, `relative_humidity_2m_mean`, `shortwave_radiation_sum`, `pressure_msl_mean`.",
            "schema": {
              "type": "string",
              "example": "temperature_2m_max,precipitation_sum"
            }
          },
          {
            "name": "temperature_unit",
            "in": "query",
            "required": false,
            "description": "Temperature unit. Default `celsius`.",
            "schema": {
              "type": "string",
              "enum": [
                "celsius",
                "fahrenheit"
              ],
              "default": "celsius"
            }
          },
          {
            "name": "wind_speed_unit",
            "in": "query",
            "required": false,
            "description": "Wind speed unit. Default `kmh`.",
            "schema": {
              "type": "string",
              "enum": [
                "kmh",
                "ms",
                "mph",
                "kn"
              ],
              "default": "kmh"
            }
          },
          {
            "name": "precipitation_unit",
            "in": "query",
            "required": false,
            "description": "Precipitation unit. Default `mm`.",
            "schema": {
              "type": "string",
              "enum": [
                "mm",
                "inch"
              ],
              "default": "mm"
            }
          },
          {
            "name": "timeformat",
            "in": "query",
            "required": false,
            "description": "Time output format. Default `iso8601`.",
            "schema": {
              "type": "string",
              "enum": [
                "iso8601",
                "unixtime"
              ],
              "default": "iso8601"
            }
          },
          {
            "name": "disable_bias_correction",
            "in": "query",
            "required": false,
            "description": "Return raw model output without statistical bias correction. Default `false`.",
            "schema": {
              "type": "boolean",
              "default": false
            }
          },
          {
            "name": "cell_selection",
            "in": "query",
            "required": false,
            "description": "Grid-cell preference for the coordinate. Default `land`.",
            "schema": {
              "type": "string",
              "enum": [
                "land",
                "sea",
                "nearest"
              ],
              "default": "land"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Climate projection for the interval.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                },
                "example": {
                  "latitude": 52.5,
                  "longitude": 13.4,
                  "generationtime_ms": 3.4,
                  "timezone": "GMT",
                  "timezone_abbreviation": "GMT",
                  "daily_units": {
                    "time": "iso8601",
                    "temperature_2m_max": "°C",
                    "precipitation_sum": "mm"
                  },
                  "daily": {
                    "time": [
                      "2050-01-01"
                    ],
                    "temperature_2m_max": [
                      6.9
                    ],
                    "precipitation_sum": [
                      1.2
                    ]
                  }
                }
              }
            }
          }
        }
      }
    },
    "/openmeteo/flood": {
      "get": {
        "x-aisa-pricing": {
          "model": "per_request",
          "currency": "USD",
          "price_usd": 0.00015,
          "cost_tier": "low",
          "note": "$0.00015 per call (150 micros USD), metered per request. GET pass-through to Open-Meteo; AIsa handles provider auth."
        },
        "summary": "Flood / River Discharge",
        "description": "GloFAS river discharge forecast and historical data. Returns daily discharge statistics (mean, median, percentiles, min/max). GET pass-through to `https://flood-api.open-meteo.com/v1/flood`.\n\nBilled $0.00015 per call, metered per request.",
        "operationId": "get_openmeteo_flood",
        "parameters": [
          {
            "name": "latitude",
            "in": "query",
            "required": true,
            "description": "WGS84 latitude of the location. Multiple coordinates can be comma-separated.",
            "schema": {
              "type": "string",
              "example": "52.52"
            }
          },
          {
            "name": "longitude",
            "in": "query",
            "required": true,
            "description": "WGS84 longitude of the location (negative for the Americas). Multiple coordinates can be comma-separated.",
            "schema": {
              "type": "string",
              "example": "13.41"
            }
          },
          {
            "name": "daily",
            "in": "query",
            "required": false,
            "description": "Comma-separated list of daily aggregation variables to return. Requires `timezone`. Common values: `river_discharge`, `river_discharge_mean`, `river_discharge_median`, `river_discharge_max`, `river_discharge_min`, `river_discharge_p25`, `river_discharge_p75`.",
            "schema": {
              "type": "string",
              "example": "river_discharge,river_discharge_mean"
            }
          },
          {
            "name": "forecast_days",
            "in": "query",
            "required": false,
            "description": "Number of forecast days to return (0-210). Default 92.",
            "schema": {
              "type": "integer",
              "default": 92,
              "example": 7
            }
          },
          {
            "name": "past_days",
            "in": "query",
            "required": false,
            "description": "Number of past days to include (0-92). Default 0.",
            "schema": {
              "type": "integer",
              "default": 0
            }
          },
          {
            "name": "start_date",
            "in": "query",
            "required": false,
            "description": "Start of the interval, `yyyy-mm-dd` (ISO 8601).",
            "schema": {
              "type": "string",
              "example": "2024-01-01",
              "format": "date"
            }
          },
          {
            "name": "end_date",
            "in": "query",
            "required": false,
            "description": "End of the interval, `yyyy-mm-dd` (ISO 8601).",
            "schema": {
              "type": "string",
              "example": "2024-01-07",
              "format": "date"
            }
          },
          {
            "name": "ensemble",
            "in": "query",
            "required": false,
            "description": "Return all ensemble members instead of the aggregate. Default `false`.",
            "schema": {
              "type": "boolean",
              "default": false
            }
          },
          {
            "name": "timeformat",
            "in": "query",
            "required": false,
            "description": "Time output format. Default `iso8601`.",
            "schema": {
              "type": "string",
              "enum": [
                "iso8601",
                "unixtime"
              ],
              "default": "iso8601"
            }
          },
          {
            "name": "models",
            "in": "query",
            "required": false,
            "description": "Comma-separated GloFAS models. Default best match.",
            "schema": {
              "type": "string",
              "example": "seamless_v4"
            }
          },
          {
            "name": "cell_selection",
            "in": "query",
            "required": false,
            "description": "Grid-cell preference for the coordinate. Default `nearest`.",
            "schema": {
              "type": "string",
              "enum": [
                "land",
                "sea",
                "nearest"
              ],
              "default": "nearest"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "River discharge for the interval.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                },
                "example": {
                  "latitude": 59.9,
                  "longitude": 10.75,
                  "generationtime_ms": 0.4,
                  "timezone": "GMT",
                  "daily_units": {
                    "time": "iso8601",
                    "river_discharge": "m³/s",
                    "river_discharge_mean": "m³/s"
                  },
                  "daily": {
                    "time": [
                      "2024-01-01",
                      "2024-01-02"
                    ],
                    "river_discharge": [
                      122.4,
                      118.9
                    ],
                    "river_discharge_mean": [
                      120.1,
                      117.5
                    ]
                  }
                }
              }
            }
          }
        }
      }
    },
    "/openmeteo/historical-forecast": {
      "get": {
        "x-aisa-pricing": {
          "model": "per_request",
          "currency": "USD",
          "price_usd": 0.00015,
          "cost_tier": "low",
          "note": "$0.00015 per call (150 micros USD), metered per request. GET pass-through to Open-Meteo; AIsa handles provider auth."
        },
        "summary": "Historical Forecast",
        "description": "Archived past runs of the high-resolution forecast models (the actual forecasts that were issued at the time, not reanalysis). Same variable model as the forecast endpoint; `start_date`/`end_date` select the archived interval. GET pass-through to `https://historical-forecast-api.open-meteo.com/v1/forecast`.\n\nBilled $0.00015 per call, metered per request.",
        "operationId": "get_openmeteo_historical_forecast",
        "parameters": [
          {
            "name": "latitude",
            "in": "query",
            "required": true,
            "description": "WGS84 latitude of the location. Multiple coordinates can be comma-separated.",
            "schema": {
              "type": "string",
              "example": "52.52"
            }
          },
          {
            "name": "longitude",
            "in": "query",
            "required": true,
            "description": "WGS84 longitude of the location (negative for the Americas). Multiple coordinates can be comma-separated.",
            "schema": {
              "type": "string",
              "example": "13.41"
            }
          },
          {
            "name": "start_date",
            "in": "query",
            "required": true,
            "description": "Start of the interval, `yyyy-mm-dd` (ISO 8601).",
            "schema": {
              "type": "string",
              "example": "2024-01-01",
              "format": "date"
            }
          },
          {
            "name": "end_date",
            "in": "query",
            "required": true,
            "description": "End of the interval, `yyyy-mm-dd` (ISO 8601).",
            "schema": {
              "type": "string",
              "example": "2024-01-07",
              "format": "date"
            }
          },
          {
            "name": "hourly",
            "in": "query",
            "required": false,
            "description": "Comma-separated list of hourly variables to return. Common values: `temperature_2m`, `relative_humidity_2m`, `dew_point_2m`, `apparent_temperature`, `precipitation`, `rain`, `showers`, `snowfall`, `weather_code`, `pressure_msl`, `cloud_cover`, `wind_speed_10m`, `wind_direction_10m`, `wind_gusts_10m`, `shortwave_radiation`, `visibility`.",
            "schema": {
              "type": "string",
              "example": "temperature_2m,precipitation,wind_speed_10m"
            }
          },
          {
            "name": "daily",
            "in": "query",
            "required": false,
            "description": "Comma-separated list of daily aggregation variables to return. Requires `timezone`. Common values: `temperature_2m_max`, `temperature_2m_min`, `temperature_2m_mean`, `precipitation_sum`, `rain_sum`, `snowfall_sum`, `weather_code`, `sunrise`, `sunset`, `sunshine_duration`, `wind_speed_10m_max`, `uv_index_max`.",
            "schema": {
              "type": "string",
              "example": "temperature_2m_max,temperature_2m_min,precipitation_sum"
            }
          },
          {
            "name": "elevation",
            "in": "query",
            "required": false,
            "description": "Manual elevation (meters). Defaults to a 90m DEM.",
            "schema": {
              "type": "string",
              "example": "38"
            }
          },
          {
            "name": "temperature_unit",
            "in": "query",
            "required": false,
            "description": "Temperature unit. Default `celsius`.",
            "schema": {
              "type": "string",
              "enum": [
                "celsius",
                "fahrenheit"
              ],
              "default": "celsius"
            }
          },
          {
            "name": "wind_speed_unit",
            "in": "query",
            "required": false,
            "description": "Wind speed unit. Default `kmh`.",
            "schema": {
              "type": "string",
              "enum": [
                "kmh",
                "ms",
                "mph",
                "kn"
              ],
              "default": "kmh"
            }
          },
          {
            "name": "precipitation_unit",
            "in": "query",
            "required": false,
            "description": "Precipitation unit. Default `mm`.",
            "schema": {
              "type": "string",
              "enum": [
                "mm",
                "inch"
              ],
              "default": "mm"
            }
          },
          {
            "name": "timeformat",
            "in": "query",
            "required": false,
            "description": "Time output format. Default `iso8601`.",
            "schema": {
              "type": "string",
              "enum": [
                "iso8601",
                "unixtime"
              ],
              "default": "iso8601"
            }
          },
          {
            "name": "models",
            "in": "query",
            "required": false,
            "description": "Comma-separated forecast models to retrieve archived runs for. Default best match.",
            "schema": {
              "type": "string",
              "example": "best_match"
            }
          },
          {
            "name": "timezone",
            "in": "query",
            "required": false,
            "description": "IANA time zone name (e.g. `Europe/Berlin`) or `auto` to resolve from coordinates. Defaults to `GMT`.",
            "schema": {
              "type": "string",
              "example": "Europe/Berlin"
            }
          },
          {
            "name": "cell_selection",
            "in": "query",
            "required": false,
            "description": "Grid-cell preference for the coordinate. Default `land`.",
            "schema": {
              "type": "string",
              "enum": [
                "land",
                "sea",
                "nearest"
              ],
              "default": "land"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Archived forecast for the interval.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                },
                "example": {
                  "latitude": 52.52,
                  "longitude": 13.41,
                  "generationtime_ms": 0.8,
                  "utc_offset_seconds": 0,
                  "timezone": "GMT",
                  "elevation": 38.0,
                  "hourly_units": {
                    "time": "iso8601",
                    "temperature_2m": "°C",
                    "precipitation": "mm"
                  },
                  "hourly": {
                    "time": [
                      "2023-06-01T00:00"
                    ],
                    "temperature_2m": [
                      14.2
                    ],
                    "precipitation": [
                      0.0
                    ]
                  }
                }
              }
            }
          }
        }
      }
    },
    "/openmeteo/previous-runs": {
      "get": {
        "x-aisa-pricing": {
          "model": "per_request",
          "currency": "USD",
          "price_usd": 0.00015,
          "cost_tier": "low",
          "note": "$0.00015 per call (150 micros USD), metered per request. GET pass-through to Open-Meteo; AIsa handles provider auth."
        },
        "summary": "Previous Model Runs",
        "description": "Access prior model-run forecasts for the same valid time, for verification and run-to-run comparison. Same variable model as the forecast endpoint, with `previous_day` offsets exposed per variable. GET pass-through to `https://previous-runs-api.open-meteo.com/v1/forecast`.\n\nBilled $0.00015 per call, metered per request.",
        "operationId": "get_openmeteo_previous_runs",
        "parameters": [
          {
            "name": "latitude",
            "in": "query",
            "required": true,
            "description": "WGS84 latitude of the location. Multiple coordinates can be comma-separated.",
            "schema": {
              "type": "string",
              "example": "52.52"
            }
          },
          {
            "name": "longitude",
            "in": "query",
            "required": true,
            "description": "WGS84 longitude of the location (negative for the Americas). Multiple coordinates can be comma-separated.",
            "schema": {
              "type": "string",
              "example": "13.41"
            }
          },
          {
            "name": "hourly",
            "in": "query",
            "required": false,
            "description": "Comma-separated list of hourly variables to return. Common values: `temperature_2m`, `relative_humidity_2m`, `dew_point_2m`, `apparent_temperature`, `precipitation`, `rain`, `showers`, `snowfall`, `weather_code`, `pressure_msl`, `cloud_cover`, `wind_speed_10m`, `wind_direction_10m`, `wind_gusts_10m`, `shortwave_radiation`, `visibility`. Append `_previous_day1`, `_previous_day2`, ... to a variable to fetch earlier runs (e.g. `temperature_2m_previous_day1`).",
            "schema": {
              "type": "string",
              "example": "temperature_2m,temperature_2m_previous_day1"
            }
          },
          {
            "name": "daily",
            "in": "query",
            "required": false,
            "description": "Comma-separated list of daily aggregation variables to return. Requires `timezone`. Common values: `temperature_2m_max`, `temperature_2m_min`, `temperature_2m_mean`, `precipitation_sum`, `rain_sum`, `snowfall_sum`, `weather_code`, `sunrise`, `sunset`, `sunshine_duration`, `wind_speed_10m_max`, `uv_index_max`.",
            "schema": {
              "type": "string",
              "example": "temperature_2m_max,temperature_2m_max_previous_day1"
            }
          },
          {
            "name": "forecast_days",
            "in": "query",
            "required": false,
            "description": "Number of forecast days to return (0-16). Default 7.",
            "schema": {
              "type": "integer",
              "default": 7,
              "example": 7
            }
          },
          {
            "name": "past_days",
            "in": "query",
            "required": false,
            "description": "Number of past days to include (0-92). Default 0.",
            "schema": {
              "type": "integer",
              "default": 0
            }
          },
          {
            "name": "start_date",
            "in": "query",
            "required": false,
            "description": "Start of the interval, `yyyy-mm-dd` (ISO 8601).",
            "schema": {
              "type": "string",
              "example": "2024-01-01",
              "format": "date"
            }
          },
          {
            "name": "end_date",
            "in": "query",
            "required": false,
            "description": "End of the interval, `yyyy-mm-dd` (ISO 8601).",
            "schema": {
              "type": "string",
              "example": "2024-01-07",
              "format": "date"
            }
          },
          {
            "name": "temperature_unit",
            "in": "query",
            "required": false,
            "description": "Temperature unit. Default `celsius`.",
            "schema": {
              "type": "string",
              "enum": [
                "celsius",
                "fahrenheit"
              ],
              "default": "celsius"
            }
          },
          {
            "name": "wind_speed_unit",
            "in": "query",
            "required": false,
            "description": "Wind speed unit. Default `kmh`.",
            "schema": {
              "type": "string",
              "enum": [
                "kmh",
                "ms",
                "mph",
                "kn"
              ],
              "default": "kmh"
            }
          },
          {
            "name": "precipitation_unit",
            "in": "query",
            "required": false,
            "description": "Precipitation unit. Default `mm`.",
            "schema": {
              "type": "string",
              "enum": [
                "mm",
                "inch"
              ],
              "default": "mm"
            }
          },
          {
            "name": "timeformat",
            "in": "query",
            "required": false,
            "description": "Time output format. Default `iso8601`.",
            "schema": {
              "type": "string",
              "enum": [
                "iso8601",
                "unixtime"
              ],
              "default": "iso8601"
            }
          },
          {
            "name": "models",
            "in": "query",
            "required": false,
            "description": "Comma-separated forecast models. Default best match.",
            "schema": {
              "type": "string",
              "example": "best_match"
            }
          },
          {
            "name": "timezone",
            "in": "query",
            "required": false,
            "description": "IANA time zone name (e.g. `Europe/Berlin`) or `auto` to resolve from coordinates. Defaults to `GMT`.",
            "schema": {
              "type": "string",
              "example": "Europe/Berlin"
            }
          },
          {
            "name": "cell_selection",
            "in": "query",
            "required": false,
            "description": "Grid-cell preference for the coordinate. Default `land`.",
            "schema": {
              "type": "string",
              "enum": [
                "land",
                "sea",
                "nearest"
              ],
              "default": "land"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Current and previous-run forecasts for the coordinate.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                },
                "example": {
                  "latitude": 52.52,
                  "longitude": 13.41,
                  "generationtime_ms": 0.7,
                  "utc_offset_seconds": 0,
                  "timezone": "GMT",
                  "elevation": 38.0,
                  "hourly_units": {
                    "time": "iso8601",
                    "temperature_2m": "°C",
                    "temperature_2m_previous_day1": "°C"
                  },
                  "hourly": {
                    "time": [
                      "2024-01-01T00:00"
                    ],
                    "temperature_2m": [
                      2.1
                    ],
                    "temperature_2m_previous_day1": [
                      2.4
                    ]
                  }
                }
              }
            }
          }
        }
      }
    }
  },
  "components": {
    "securitySchemes": {
      "BearerAuth": {
        "type": "http",
        "scheme": "bearer",
        "bearerFormat": "AISA API Key"
      }
    }
  }
}
