# Open-Meteo

> Look up the weather anywhere in the world through Open-Meteo's keyless API, across every dataset it publishes. Current conditions, forecasts by the 15 minutes, the hour and the day out to 16 days, and measured weather back to 1940. Ensemble forecasts that say how confident the outlook is, seasonal forecasts months ahead, and climate projections to 2050. Air quality and pollen, marine waves and swell, river discharge for flood watches, satellite measured solar irradiance, and ground elevation. Plus the archive of past forecasts, single model runs, and a geocoder for turning a place name into coordinates. No account or API key required.

App · Weather & Space · 18 actions. Web page: https://docs.lodol.com/docs/integrations/open-meteo

## Actions

### Compare forecast runs

See how the forecast for each hour has moved as that hour drew closer. For every hour it returns today's forecast beside the forecasts issued one, two and more days ago, plus a drift figure per variable: how much the outlook has shifted on average. Use it to tell a settling forecast from a wobbling one before committing to an outdoor booking, a delivery slot or a shutdown.

**Inputs**

- Location (`location`, text): Place name to look up, for example 'Berlin' or 'Springfield, Illinois'. The closest match is used. Leave blank if you are providing latitude and longitude instead.
- Latitude (`latitude`, number): Latitude of the location (-90 to 90). Use with longitude instead of a place name for an exact point. From -90 to 90.
- Longitude (`longitude`, number): Longitude of the location (-180 to 180). Use with latitude instead of a place name for an exact point. Locations in the Americas take a negative longitude. From -180 to 180.
- Variables (`variables`, text): Which readings to track across runs. Each one is asked for once per earlier run, so a short list keeps the response readable. One or more of: `temperature_2m` (Temperature (2 m)), `relative_humidity_2m` (Relative humidity (2 m)), `dew_point_2m` (Dewpoint (2 m)), `apparent_temperature` (Apparent temperature), `precipitation_probability` (Precipitation probability), `precipitation` (Precipitation (rain + showers + snow)), `rain`, `showers`, `snowfall`, `snow_depth` (Snow depth), and 21 more. Default: `["temperature_2m"]`.
- Additional variables (`additional_variables`, text): Comma-separated Open-Meteo variable names to request on top of the ones ticked above, for example 'soil_temperature_0cm' or 'temperature_850hPa'. See the Open-Meteo docs for the full list.
- Runs to look back (`previous_days`, number): How many days of earlier forecasts to set beside the current one, from 1 to 7. Defaults to 3. From 1 to 7. Default: `3`.
- Forecast days (`forecast_days`, number): How many days ahead to forecast, from 1 to 16. Defaults to 7. From 1 to 16. Default: `7`.
- Past days (`past_days`, number): How many days of already-issued forecasts to prepend, from 0 to 92. Defaults to 0. For measured weather further back, use the 'Get historical weather' action instead. From 0 to 92. Default: `0`.
- Temperature unit (`temperature_unit`, text): Unit for every temperature in the response. Defaults to Celsius. One of: `celsius` (Celsius (°C)), `fahrenheit` (Fahrenheit (°F)). Default: `celsius`.
- Wind speed unit (`wind_speed_unit`, text): Unit for every wind speed in the response. Defaults to km/h. One of: `kmh` (Kilometres per hour (km/h)), `ms` (Metres per second (m/s)), `mph` (Miles per hour (mph)), `kn` (Knots (kn)). Default: `kmh`.
- Precipitation unit (`precipitation_unit`, text): Unit for rain, showers, and snowfall amounts. Defaults to millimetres. One of: `mm` (Millimetres (mm)), `inch` (Inches (in)). Default: `mm`.
- Time zone (`timezone`, text): Time zone the timestamps are returned in, as a time-zone database name such as Europe/Berlin. Defaults to 'auto', which uses the local time zone of the location: the right choice for daily rows, which would otherwise be split across the wrong days. Default: `auto`.
- Weather models (`models`, text): Comma-separated weather models to use, for example 'ecmwf_ifs025,gfs_seamless'. Leave blank to let Open-Meteo pick the highest-resolution model available for the location.

**Outputs**

- `count` (number): Number of rows returned
- `country` (text): Country of the resolved place
- `drift` (list): How far the forecast has moved, one entry per variable
- `elevation` (number): Elevation of the grid-cell, in metres above sea level
- `entries` (list)
- `latitude` (number): Latitude of the weather grid-cell used
- `location` (text): Resolved place name, or empty when coordinates were given
- `longitude` (number): Longitude of the weather grid-cell used
- `previous_days` (number): How many earlier runs were set beside the current one
- `timezone` (text): Time zone the timestamps are in, e.g. 'Europe/Berlin'
- `timezone_abbreviation` (text): Abbreviation of that time zone, e.g. 'CEST'
- `units` (object): Unit of each requested variable, keyed by variable name
- `utc_offset_seconds` (number): Offset of that time zone from UTC, in seconds
- `variables` (list): Variables that were tracked across runs

**Example output**

```json
{
  "count": 1,
  "country": "Germany",
  "drift": [
    {
      "compared_against": "temperature_2m_previous_day3",
      "hours_compared": 48,
      "largest_change": 2.9,
      "mean_change": 0.8542,
      "variable": "temperature_2m"
    }
  ],
  "elevation": 38.0,
  "entries": [
    {
      "temperature_2m": 15.3,
      "temperature_2m_previous_day1": 15.6,
      "temperature_2m_previous_day2": 16.1,
      "temperature_2m_previous_day3": 14.8,
      "time": "2026-09-17T00:00"
    }
  ],
  "latitude": 52.52,
  "location": "Berlin",
  "longitude": 13.419998,
  "previous_days": 3,
  "timezone": "Europe/Berlin",
  "timezone_abbreviation": "GMT+2",
  "units": {
    "temperature_2m": "\u00b0C",
    "temperature_2m_previous_day1": "\u00b0C",
    "temperature_2m_previous_day2": "\u00b0C",
    "temperature_2m_previous_day3": "\u00b0C"
  },
  "utc_offset_seconds": 7200,
  "variables": [
    "temperature_2m"
  ]
}
```

### Get 15 minute forecast

Get a forecast in 15 minute steps instead of whole hours, for the next few hours or the next few days. Use it when an hourly row is too coarse to act on: when a shower arrives, when a gust hits, when it is worth moving something indoors. Where a high resolution national model covers the location the steps are genuinely 15 minutes apart; elsewhere the hourly values are interpolated.

**Inputs**

- Location (`location`, text): Place name to look up, for example 'Berlin' or 'Springfield, Illinois'. The closest match is used. Leave blank if you are providing latitude and longitude instead.
- Latitude (`latitude`, number): Latitude of the location (-90 to 90). Use with longitude instead of a place name for an exact point. From -90 to 90.
- Longitude (`longitude`, number): Longitude of the location (-180 to 180). Use with latitude instead of a place name for an exact point. Locations in the Americas take a negative longitude. From -180 to 180.
- Variables (`variables`, text): Which readings to return for each 15 minute step. One or more of: `temperature_2m` (Temperature (2 m)), `relative_humidity_2m` (Relative humidity (2 m)), `dew_point_2m` (Dewpoint (2 m)), `apparent_temperature` (Apparent temperature), `precipitation`, `rain`, `snowfall`, `snowfall_height` (Snowfall height), `freezing_level_height` (Freezing level height), `sunshine_duration` (Sunshine duration), and 9 more. Default: `["temperature_2m", "precipitation", "weather_code", "wind_speed_10m"]`.
- Additional variables (`additional_variables`, text): Comma-separated Open-Meteo variable names to request on top of the ones ticked above, for example 'soil_temperature_0cm' or 'temperature_850hPa'. See the Open-Meteo docs for the full list.
- Steps ahead (`forecast_steps`, number): How many 15 minute steps to return, from 1 to 1536. Four steps is an hour, 96 is a day. Defaults to 48, which is 12 hours. From 1 to 1536. Default: `48`.
- Steps behind (`past_steps`, number): How many 15 minute steps of already issued forecast to put before now, from 0 to 1536. Defaults to 0. From 0 to 1536. Default: `0`.
- Temperature unit (`temperature_unit`, text): Unit for every temperature in the response. Defaults to Celsius. One of: `celsius` (Celsius (°C)), `fahrenheit` (Fahrenheit (°F)). Default: `celsius`.
- Wind speed unit (`wind_speed_unit`, text): Unit for every wind speed in the response. Defaults to km/h. One of: `kmh` (Kilometres per hour (km/h)), `ms` (Metres per second (m/s)), `mph` (Miles per hour (mph)), `kn` (Knots (kn)). Default: `kmh`.
- Precipitation unit (`precipitation_unit`, text): Unit for rain, showers, and snowfall amounts. Defaults to millimetres. One of: `mm` (Millimetres (mm)), `inch` (Inches (in)). Default: `mm`.
- Time zone (`timezone`, text): Time zone the timestamps are returned in, as a time-zone database name such as Europe/Berlin. Defaults to 'auto', which uses the local time zone of the location: the right choice for daily rows, which would otherwise be split across the wrong days. Default: `auto`.
- Weather models (`models`, text): Comma-separated weather models to use, for example 'ecmwf_ifs025,gfs_seamless'. Leave blank to let Open-Meteo pick the highest-resolution model available for the location.
- Grid cell (`cell_selection`, text): Which grid cell to read when the point falls between two. 'Land' is the default and prefers a cell at a similar elevation, which matters in the mountains. 'Nearest cell at sea' snaps a coastal point onto the water, which is what a marine forecast for a harbour needs. One of: `land` (Nearest cell on land), `sea` (Nearest cell at sea), `nearest` (Nearest cell of any kind). Default: `land`.

**Outputs**

- `count` (number): Number of rows returned
- `country` (text): Country of the resolved place
- `elevation` (number): Elevation of the grid-cell, in metres above sea level
- `entries` (list)
- `latitude` (number): Latitude of the weather grid-cell used
- `location` (text): Resolved place name, or empty when coordinates were given
- `longitude` (number): Longitude of the weather grid-cell used
- `timezone` (text): Time zone the timestamps are in, e.g. 'Europe/Berlin'
- `timezone_abbreviation` (text): Abbreviation of that time zone, e.g. 'CEST'
- `units` (object): Unit of each requested variable, keyed by variable name
- `utc_offset_seconds` (number): Offset of that time zone from UTC, in seconds

**Example output**

```json
{
  "count": 2,
  "country": "Germany",
  "elevation": 38.0,
  "entries": [
    {
      "conditions": "Partly cloudy",
      "precipitation": 0.0,
      "temperature_2m": 24.3,
      "time": "2026-07-24T13:15",
      "weather_code": 2,
      "wind_speed_10m": 11.2
    },
    {
      "conditions": "Slight rain showers",
      "precipitation": 0.4,
      "temperature_2m": 24.6,
      "time": "2026-07-24T13:30",
      "weather_code": 80,
      "wind_speed_10m": 12.8
    }
  ],
  "latitude": 52.52,
  "location": "Berlin",
  "longitude": 13.419998,
  "timezone": "Europe/Berlin",
  "timezone_abbreviation": "GMT+2",
  "units": {
    "precipitation": "mm",
    "temperature_2m": "\u00b0C",
    "weather_code": "wmo code",
    "wind_speed_10m": "km/h"
  },
  "utc_offset_seconds": 7200
}
```

### Get a single model run

Read one named run of one weather model exactly as it was issued. Every other forecast action answers with the freshest data available for each hour, stitched across runs; this one pins a single computation, so the whole series is internally consistent. That matters when comparing runs against each other or reproducing a number someone quoted. Runs start on fixed hours, usually 00:00, 06:00, 12:00 and 18:00 UTC.

**Inputs**

- Run start time (`run`, text, required): When the run was initialised, as YYYY-MM-DDTHH:MM in UTC. Must line up with a real run cycle for the model.
- Model (`models`, text, required): Which model's run to read. Required: a run belongs to one model. Note that asking for a variable worked out from an ensemble, such as precipitation probability, switches the request to that model's ensemble, whose single runs are not kept.
- Location (`location`, text): Place name to look up, for example 'Berlin' or 'Springfield, Illinois'. The closest match is used. Leave blank if you are providing latitude and longitude instead.
- Latitude (`latitude`, number): Latitude of the location (-90 to 90). Use with longitude instead of a place name for an exact point. From -90 to 90.
- Longitude (`longitude`, number): Longitude of the location (-180 to 180). Use with latitude instead of a place name for an exact point. Locations in the Americas take a negative longitude. From -180 to 180.
- Hourly variables (`hourly_variables`, text): Which readings to return hour by hour. Used when nothing at all is ticked. One or more of: `temperature_2m` (Temperature (2 m)), `relative_humidity_2m` (Relative humidity (2 m)), `dew_point_2m` (Dewpoint (2 m)), `apparent_temperature` (Apparent temperature), `precipitation_probability` (Precipitation probability), `precipitation` (Precipitation (rain + showers + snow)), `rain`, `showers`, `snowfall`, `snow_depth` (Snow depth), and 21 more. Default: `["temperature_2m", "precipitation", "weather_code", "cloud_cover", "wind_speed_10m"]`.
- Daily variables (`daily_variables`, text): Which readings to summarise per day. One or more of: `weather_code` (Weather code), `temperature_2m_max` (Maximum temperature (2 m)), `temperature_2m_min` (Minimum temperature (2 m)), `apparent_temperature_max` (Maximum apparent temperature), `apparent_temperature_min` (Minimum apparent temperature), `sunrise`, `sunset`, `daylight_duration` (Daylight duration), `sunshine_duration` (Sunshine duration), `uv_index_max` (UV index max), and 12 more.
- Additional hourly variables (`additional_hourly_variables`, text): Comma-separated Open-Meteo variable names to request on top of the ones ticked above, for example 'soil_temperature_0cm' or 'temperature_850hPa'. See the Open-Meteo docs for the full list.
- Temperature unit (`temperature_unit`, text): Unit for every temperature in the response. Defaults to Celsius. One of: `celsius` (Celsius (°C)), `fahrenheit` (Fahrenheit (°F)). Default: `celsius`.
- Wind speed unit (`wind_speed_unit`, text): Unit for every wind speed in the response. Defaults to km/h. One of: `kmh` (Kilometres per hour (km/h)), `ms` (Metres per second (m/s)), `mph` (Miles per hour (mph)), `kn` (Knots (kn)). Default: `kmh`.
- Precipitation unit (`precipitation_unit`, text): Unit for rain, showers, and snowfall amounts. Defaults to millimetres. One of: `mm` (Millimetres (mm)), `inch` (Inches (in)). Default: `mm`.
- Time zone (`timezone`, text): Time zone the timestamps are returned in, as a time-zone database name such as Europe/Berlin. Defaults to 'auto', which uses the local time zone of the location: the right choice for daily rows, which would otherwise be split across the wrong days. Default: `auto`.

**Outputs**

- `country` (text): Country of the resolved place
- `daily` (object): One row per timestep, each carrying every requested variable, plus the units the values are in
- `elevation` (number): Elevation of the grid-cell, in metres above sea level
- `hourly` (object): One row per timestep, each carrying every requested variable, plus the units the values are in
- `latitude` (number): Latitude of the weather grid-cell used
- `location` (text): Resolved place name, or empty when coordinates were given
- `longitude` (number): Longitude of the weather grid-cell used
- `models` (list): Model the run belongs to
- `run` (text): Run start time that was read
- `timezone` (text): Time zone the timestamps are in, e.g. 'Europe/Berlin'
- `timezone_abbreviation` (text): Abbreviation of that time zone, e.g. 'CEST'
- `utc_offset_seconds` (number): Offset of that time zone from UTC, in seconds

**Example output**

```json
{
  "country": "Germany",
  "daily": {
    "count": 0,
    "entries": [],
    "units": {}
  },
  "elevation": 38.0,
  "hourly": {
    "count": 1,
    "entries": [
      {
        "cloud_cover": 18,
        "conditions": "Mainly clear",
        "precipitation": 0.0,
        "temperature_2m": 16.0,
        "time": "2026-09-14T00:00",
        "weather_code": 1,
        "wind_speed_10m": 9.4
      }
    ],
    "units": {
      "precipitation": "mm",
      "temperature_2m": "\u00b0C",
      "wind_speed_10m": "km/h"
    }
  },
  "latitude": 52.54833,
  "location": "Berlin",
  "longitude": 13.407822,
  "models": [
    "ecmwf_ifs"
  ],
  "run": "2026-09-14T00:00",
  "timezone": "Europe/Berlin",
  "timezone_abbreviation": "GMT+2",
  "utc_offset_seconds": 7200
}
```

### Get air quality

Get air-quality indices and pollutant levels for a place: European and US AQI, particulates, gases, dust, UV index, and (in Europe) pollen, now and, optionally, hour by hour.

**Inputs**

- Location (`location`, text): Place name to look up, for example 'Berlin' or 'Springfield, Illinois'. The closest match is used. Leave blank if you are providing latitude and longitude instead.
- Latitude (`latitude`, number): Latitude of the location (-90 to 90). Use with longitude instead of a place name for an exact point. From -90 to 90.
- Longitude (`longitude`, number): Longitude of the location (-180 to 180). Use with latitude instead of a place name for an exact point. Locations in the Americas take a negative longitude. From -180 to 180.
- Current variables (`variables`, text): Which current readings to return. Defaults to both AQI scales plus PM10 and PM2.5. One or more of: `european_aqi` (European AQI), `us_aqi` (United States AQI), `pm10` (Particulate matter PM10), `pm2_5` (Particulate matter PM2.5), `carbon_monoxide` (Carbon monoxide (CO)), `nitrogen_dioxide` (Nitrogen dioxide (NO₂)), `sulphur_dioxide` (Sulphur dioxide (SO₂)), `ozone` (Ozone (O₃)), `dust`, `aerosol_optical_depth` (Aerosol optical depth), and 9 more. Default: `["european_aqi", "us_aqi", "pm10", "pm2_5"]`.
- Hourly variables (`hourly_variables`, text): Which readings to also return hour by hour. Leave empty for current conditions only. One or more of: `european_aqi` (European AQI), `us_aqi` (United States AQI), `pm10` (Particulate matter PM10), `pm2_5` (Particulate matter PM2.5), `carbon_monoxide` (Carbon monoxide (CO)), `nitrogen_dioxide` (Nitrogen dioxide (NO₂)), `sulphur_dioxide` (Sulphur dioxide (SO₂)), `ozone` (Ozone (O₃)), `dust`, `aerosol_optical_depth` (Aerosol optical depth), and 9 more.
- Additional variables (`additional_variables`, text): Comma-separated Open-Meteo variable names to request on top of the ones ticked above, for example 'soil_temperature_0cm' or 'temperature_850hPa'. See the Open-Meteo docs for the full list.
- Forecast days (`forecast_days`, number): How many days of hourly air quality to forecast, from 1 to 7. Defaults to 5. From 1 to 7. Default: `5`.
- Past days (`past_days`, number): How many days of already-issued forecasts to prepend, from 0 to 92. Defaults to 0. For measured weather further back, use the 'Get historical weather' action instead. From 0 to 92. Default: `0`.
- Source model (`domains`, text): Which CAMS model to read from. Defaults to combining both, which uses the higher-resolution European model where it is available. One of: `auto` (Combine both (recommended)), `cams_europe` (CAMS Europe (11 km)), `cams_global` (CAMS global (40 km)). Default: `auto`.
- Time zone (`timezone`, text): Time zone the timestamps are returned in, as a time-zone database name such as Europe/Berlin. Defaults to 'auto', which uses the local time zone of the location: the right choice for daily rows, which would otherwise be split across the wrong days. Default: `auto`.

**Outputs**

- `country` (text): Country of the resolved place
- `elevation` (number): Elevation of the grid-cell, in metres above sea level
- `hourly` (object): One row per timestep, each carrying every requested variable, plus the units the values are in
- `latitude` (number): Latitude of the weather grid-cell used
- `location` (text): Resolved place name, or empty when coordinates were given
- `longitude` (number): Longitude of the weather grid-cell used
- `time` (text): Timestamp the current readings are valid for
- `timezone` (text): Time zone the timestamps are in, e.g. 'Europe/Berlin'
- `timezone_abbreviation` (text): Abbreviation of that time zone, e.g. 'CEST'
- `units` (object): Unit of each reading, keyed by variable name
- `utc_offset_seconds` (number): Offset of that time zone from UTC, in seconds
- `values` (object): Each requested reading, keyed by variable name

**Example output**

```json
{
  "country": "Germany",
  "elevation": 38.0,
  "hourly": {
    "count": 0,
    "entries": [],
    "units": {}
  },
  "latitude": 52.5,
  "location": "Berlin",
  "longitude": 13.4,
  "time": "2026-07-24T13:00",
  "timezone": "Europe/Berlin",
  "timezone_abbreviation": "GMT+2",
  "units": {
    "european_aqi": "EAQI",
    "pm10": "\u03bcg/m\u00b3",
    "pm2_5": "\u03bcg/m\u00b3",
    "us_aqi": "USAQI"
  },
  "utc_offset_seconds": 7200,
  "values": {
    "european_aqi": 31,
    "pm10": 14.6,
    "pm2_5": 9.8,
    "us_aqi": 42
  }
}
```

### Get climate projection

Read downscaled IPCC climate model output for any date from 1950 to 2050, at a resolution of around 25 km. This is not a forecast: a date in 2043 says what the model expects an average day of that season to look like by then, under a high emissions scenario. Use it to compare a future decade against a past one for the same place. Naming more than one model returns a column per model so they can be set side by side.

**Inputs**

- Start date (`start_date`, text, required): First day to return, as YYYY-MM-DD, anywhere from 1950 to 2050.
- End date (`end_date`, text, required): Last day to return, as YYYY-MM-DD.
- Location (`location`, text): Place name to look up, for example 'Berlin' or 'Springfield, Illinois'. The closest match is used. Leave blank if you are providing latitude and longitude instead.
- Latitude (`latitude`, number): Latitude of the location (-90 to 90). Use with longitude instead of a place name for an exact point. From -90 to 90.
- Longitude (`longitude`, number): Longitude of the location (-180 to 180). Use with latitude instead of a place name for an exact point. Locations in the Americas take a negative longitude. From -180 to 180.
- Variables (`variables`, text): Which projected readings to return per day. One or more of: `temperature_2m_max` (Maximum temperature (2 m)), `temperature_2m_min` (Minimum temperature (2 m)), `temperature_2m_mean` (Mean temperature (2 m)), `precipitation_sum` (Precipitation sum), `rain_sum` (Rain sum), `snowfall_sum` (Snowfall sum), `relative_humidity_2m_mean` (Mean relative humidity (2 m)), `relative_humidity_2m_max` (Maximum relative humidity (2 m)), `relative_humidity_2m_min` (Minimum relative humidity (2 m)), `dew_point_2m_mean` (Mean dewpoint (2 m)), and 14 more. Default: `["temperature_2m_max", "temperature_2m_min", "temperature_2m_mean", "precipitation_sum"]`.
- Additional variables (`additional_variables`, text): Comma-separated Open-Meteo variable names to request on top of the ones ticked above, for example 'soil_temperature_0cm' or 'temperature_850hPa'. See the Open-Meteo docs for the full list.
- Climate models (`models`, text): Which CMIP6 models to read. Leave blank to use all of them. Not every model covers every part of the world, and the response says which of the ones asked for had data for the location. One or more of: `CMCC_CM2_VHR4` (CMCC CM2 VHR4 (30 km)), `FGOALS_f3_H` (FGOALS f3 H (28 km)), `HiRAM_SIT_HR` (HiRAM SIT HR (25 km)), `MRI_AGCM3_2_S` (MRI AGCM3.2 S (20 km)), `EC_Earth3P_HR` (EC Earth3P HR (29 km)), `MPI_ESM1_2_XR` (MPI ESM1.2 XR (51 km)), `NICAM16_8S` (NICAM16 8S (31 km)).
- Turn off bias correction (`disable_bias_correction`, true/false): Return the raw model output instead of output corrected against measured weather for the location. Leave off unless you specifically want the raw series. Default: `false`.
- Temperature unit (`temperature_unit`, text): Unit for every temperature in the response. Defaults to Celsius. One of: `celsius` (Celsius (°C)), `fahrenheit` (Fahrenheit (°F)). Default: `celsius`.
- Wind speed unit (`wind_speed_unit`, text): Unit for every wind speed in the response. Defaults to km/h. One of: `kmh` (Kilometres per hour (km/h)), `ms` (Metres per second (m/s)), `mph` (Miles per hour (mph)), `kn` (Knots (kn)). Default: `kmh`.
- Precipitation unit (`precipitation_unit`, text): Unit for rain, showers, and snowfall amounts. Defaults to millimetres. One of: `mm` (Millimetres (mm)), `inch` (Inches (in)). Default: `mm`.

**Outputs**

- `count` (number): Number of rows returned
- `country` (text): Country of the resolved place
- `elevation` (number): Elevation of the grid-cell, in metres above sea level
- `end_date` (text): Last day returned
- `entries` (list)
- `latitude` (number): Latitude of the weather grid-cell used
- `location` (text): Resolved place name, or empty when coordinates were given
- `longitude` (number): Longitude of the weather grid-cell used
- `models_reporting` (list): When more than one model was asked for, the ones that had data for this location
- `models_without_data` (list): When more than one model was asked for, the ones that do not reach this location
- `start_date` (text): First day returned
- `timezone` (text): Time zone the timestamps are in, e.g. 'Europe/Berlin'
- `timezone_abbreviation` (text): Abbreviation of that time zone, e.g. 'CEST'
- `units` (object): Unit of each requested variable, keyed by variable name
- `utc_offset_seconds` (number): Offset of that time zone from UTC, in seconds

**Example output**

```json
{
  "count": 2,
  "country": "Germany",
  "elevation": 38.0,
  "end_date": "2045-07-02",
  "entries": [
    {
      "precipitation_sum": 1.72,
      "temperature_2m_max": 24.3,
      "temperature_2m_mean": 18.6,
      "temperature_2m_min": 13.2,
      "time": "2045-07-01"
    },
    {
      "precipitation_sum": 0.0,
      "temperature_2m_max": 26.1,
      "temperature_2m_mean": 20.2,
      "temperature_2m_min": 14.8,
      "time": "2045-07-02"
    }
  ],
  "latitude": 52.5,
  "location": "Berlin",
  "longitude": 13.400009,
  "start_date": "2045-07-01",
  "timezone": "GMT",
  "timezone_abbreviation": "GMT",
  "units": {
    "precipitation_sum": "mm",
    "temperature_2m_max": "\u00b0C",
    "temperature_2m_mean": "\u00b0C",
    "temperature_2m_min": "\u00b0C"
  },
  "utc_offset_seconds": 0
}
```

### Get current weather

Get current conditions for a place or an exact coordinate: temperature, feels-like, humidity, precipitation, wind, cloud cover, and a readable description of the weather code.

**Inputs**

- Location (`location`, text): Place name to look up, for example 'Berlin' or 'Springfield, Illinois'. The closest match is used. Leave blank if you are providing latitude and longitude instead.
- Latitude (`latitude`, number): Latitude of the location (-90 to 90). Use with longitude instead of a place name for an exact point. From -90 to 90.
- Longitude (`longitude`, number): Longitude of the location (-180 to 180). Use with latitude instead of a place name for an exact point. Locations in the Americas take a negative longitude. From -180 to 180.
- Variables (`variables`, text): Which readings to return. Defaults to a general set covering temperature, precipitation, wind, and sky. One or more of: `temperature_2m` (Temperature (2 m)), `relative_humidity_2m` (Relative humidity (2 m)), `apparent_temperature` (Apparent temperature), `is_day` (Is day or night), `precipitation`, `rain`, `showers`, `snowfall`, `weather_code` (Weather code), `cloud_cover` (Cloud cover total), and 5 more. Default: `["temperature_2m", "apparent_temperature", "relative_humidity_2m", "precipitation", "weather_code", "cloud_cover", "wind_speed_10m", "wind_direction_10m", "is_day"]`.
- Additional variables (`additional_variables`, text): Comma-separated Open-Meteo variable names to request on top of the ones ticked above, for example 'soil_temperature_0cm' or 'temperature_850hPa'. See the Open-Meteo docs for the full list.
- Temperature unit (`temperature_unit`, text): Unit for every temperature in the response. Defaults to Celsius. One of: `celsius` (Celsius (°C)), `fahrenheit` (Fahrenheit (°F)). Default: `celsius`.
- Wind speed unit (`wind_speed_unit`, text): Unit for every wind speed in the response. Defaults to km/h. One of: `kmh` (Kilometres per hour (km/h)), `ms` (Metres per second (m/s)), `mph` (Miles per hour (mph)), `kn` (Knots (kn)). Default: `kmh`.
- Precipitation unit (`precipitation_unit`, text): Unit for rain, showers, and snowfall amounts. Defaults to millimetres. One of: `mm` (Millimetres (mm)), `inch` (Inches (in)). Default: `mm`.
- Time zone (`timezone`, text): Time zone the timestamps are returned in, as a time-zone database name such as Europe/Berlin. Defaults to 'auto', which uses the local time zone of the location: the right choice for daily rows, which would otherwise be split across the wrong days. Default: `auto`.
- Weather models (`models`, text): Comma-separated weather models to use, for example 'ecmwf_ifs025,gfs_seamless'. Leave blank to let Open-Meteo pick the highest-resolution model available for the location.

**Outputs**

- `conditions` (text): Readable WMO weather description, e.g. 'Partly cloudy'
- `country` (text): Country of the resolved place
- `elevation` (number): Elevation of the grid-cell, in metres above sea level
- `interval` (number): Length of the window the readings cover, in seconds
- `latitude` (number): Latitude of the weather grid-cell used
- `location` (text): Resolved place name, or empty when coordinates were given
- `longitude` (number): Longitude of the weather grid-cell used
- `time` (text): Timestamp the readings are valid for
- `timezone` (text): Time zone the timestamps are in, e.g. 'Europe/Berlin'
- `timezone_abbreviation` (text): Abbreviation of that time zone, e.g. 'CEST'
- `units` (object): Unit of each reading, keyed by variable name
- `utc_offset_seconds` (number): Offset of that time zone from UTC, in seconds
- `values` (object): Each requested reading, keyed by variable name

**Example output**

```json
{
  "conditions": "Partly cloudy",
  "country": "Germany",
  "elevation": 38.0,
  "interval": 900,
  "latitude": 52.52,
  "location": "Berlin",
  "longitude": 13.419998,
  "time": "2026-07-24T13:15",
  "timezone": "Europe/Berlin",
  "timezone_abbreviation": "GMT+2",
  "units": {
    "apparent_temperature": "\u00b0C",
    "cloud_cover": "%",
    "is_day": "",
    "precipitation": "mm",
    "relative_humidity_2m": "%",
    "temperature_2m": "\u00b0C",
    "weather_code": "wmo code",
    "wind_direction_10m": "\u00b0",
    "wind_speed_10m": "km/h"
  },
  "utc_offset_seconds": 7200,
  "values": {
    "apparent_temperature": 24.9,
    "cloud_cover": 41,
    "is_day": 1,
    "precipitation": 0.0,
    "relative_humidity_2m": 52,
    "temperature_2m": 24.3,
    "weather_code": 2,
    "wind_direction_10m": 243,
    "wind_speed_10m": 11.2
  }
}
```

### Get daily forecast

Get a day-by-day forecast for up to 16 days: highs and lows, precipitation totals and chance, wind, UV, and sunrise and sunset, returned as one row per day.

**Inputs**

- Location (`location`, text): Place name to look up, for example 'Berlin' or 'Springfield, Illinois'. The closest match is used. Leave blank if you are providing latitude and longitude instead.
- Latitude (`latitude`, number): Latitude of the location (-90 to 90). Use with longitude instead of a place name for an exact point. From -90 to 90.
- Longitude (`longitude`, number): Longitude of the location (-180 to 180). Use with latitude instead of a place name for an exact point. Locations in the Americas take a negative longitude. From -180 to 180.
- Variables (`variables`, text): Which daily aggregations to return. Defaults to the weather code, highs and lows, precipitation, wind, and sunrise and sunset. One or more of: `weather_code` (Weather code), `temperature_2m_max` (Maximum temperature (2 m)), `temperature_2m_min` (Minimum temperature (2 m)), `apparent_temperature_max` (Maximum apparent temperature), `apparent_temperature_min` (Minimum apparent temperature), `sunrise`, `sunset`, `daylight_duration` (Daylight duration), `sunshine_duration` (Sunshine duration), `uv_index_max` (UV index max), and 12 more. Default: `["weather_code", "temperature_2m_max", "temperature_2m_min", "precipitation_sum", "precipitation_probability_max", "wind_speed_10m_max", "sunrise", "sunset"]`.
- Additional variables (`additional_variables`, text): Comma-separated Open-Meteo variable names to request on top of the ones ticked above, for example 'soil_temperature_0cm' or 'temperature_850hPa'. See the Open-Meteo docs for the full list.
- Forecast days (`forecast_days`, number): How many days ahead to forecast, from 1 to 16. Defaults to 7. From 1 to 16. Default: `7`.
- Past days (`past_days`, number): How many days of already-issued forecasts to prepend, from 0 to 92. Defaults to 0. For measured weather further back, use the 'Get historical weather' action instead. From 0 to 92. Default: `0`.
- Temperature unit (`temperature_unit`, text): Unit for every temperature in the response. Defaults to Celsius. One of: `celsius` (Celsius (°C)), `fahrenheit` (Fahrenheit (°F)). Default: `celsius`.
- Wind speed unit (`wind_speed_unit`, text): Unit for every wind speed in the response. Defaults to km/h. One of: `kmh` (Kilometres per hour (km/h)), `ms` (Metres per second (m/s)), `mph` (Miles per hour (mph)), `kn` (Knots (kn)). Default: `kmh`.
- Precipitation unit (`precipitation_unit`, text): Unit for rain, showers, and snowfall amounts. Defaults to millimetres. One of: `mm` (Millimetres (mm)), `inch` (Inches (in)). Default: `mm`.
- Time zone (`timezone`, text): Time zone the timestamps are returned in, as a time-zone database name such as Europe/Berlin. Defaults to 'auto', which uses the local time zone of the location: the right choice for daily rows, which would otherwise be split across the wrong days. Default: `auto`.
- Weather models (`models`, text): Comma-separated weather models to use, for example 'ecmwf_ifs025,gfs_seamless'. Leave blank to let Open-Meteo pick the highest-resolution model available for the location.

**Outputs**

- `count` (number): Number of rows returned
- `country` (text): Country of the resolved place
- `elevation` (number): Elevation of the grid-cell, in metres above sea level
- `entries` (list)
- `latitude` (number): Latitude of the weather grid-cell used
- `location` (text): Resolved place name, or empty when coordinates were given
- `longitude` (number): Longitude of the weather grid-cell used
- `timezone` (text): Time zone the timestamps are in, e.g. 'Europe/Berlin'
- `timezone_abbreviation` (text): Abbreviation of that time zone, e.g. 'CEST'
- `units` (object): Unit of each requested variable, keyed by variable name
- `utc_offset_seconds` (number): Offset of that time zone from UTC, in seconds

**Example output**

```json
{
  "count": 2,
  "country": "Germany",
  "elevation": 38.0,
  "entries": [
    {
      "conditions": "Slight rain",
      "precipitation_probability_max": 71,
      "precipitation_sum": 4.2,
      "sunrise": "2026-07-24T05:11",
      "sunset": "2026-07-24T21:06",
      "temperature_2m_max": 25.1,
      "temperature_2m_min": 15.3,
      "time": "2026-07-24",
      "weather_code": 61,
      "wind_speed_10m_max": 18.4
    },
    {
      "conditions": "Overcast",
      "precipitation_probability_max": 12,
      "precipitation_sum": 0.0,
      "sunrise": "2026-07-25T05:13",
      "sunset": "2026-07-25T21:04",
      "temperature_2m_max": 22.7,
      "temperature_2m_min": 14.1,
      "time": "2026-07-25",
      "weather_code": 3,
      "wind_speed_10m_max": 15.1
    }
  ],
  "latitude": 52.52,
  "location": "Berlin",
  "longitude": 13.419998,
  "timezone": "Europe/Berlin",
  "timezone_abbreviation": "GMT+2",
  "units": {
    "precipitation_probability_max": "%",
    "precipitation_sum": "mm",
    "sunrise": "iso8601",
    "sunset": "iso8601",
    "temperature_2m_max": "\u00b0C",
    "temperature_2m_min": "\u00b0C",
    "weather_code": "wmo code",
    "wind_speed_10m_max": "km/h"
  },
  "utc_offset_seconds": 7200
}
```

### Get elevation

Look up how high the ground is at a place, or at up to 100 coordinates in one call. Heights come from the Copernicus digital elevation model on a 90 metre grid, in metres above sea level, and describe the terrain rather than anything standing on it. Paste a column of coordinates from a spreadsheet to profile a route or rank a list of sites.

**Inputs**

- Location (`location`, text): Place name to look up, for example 'Berlin' or 'Springfield, Illinois'. The closest match is used. Leave blank if you are providing latitude and longitude instead.
- Latitude (`latitude`, number): Latitude of the location (-90 to 90). Use with longitude instead of a place name for an exact point. From -90 to 90.
- Longitude (`longitude`, number): Longitude of the location (-180 to 180). Use with latitude instead of a place name for an exact point. Locations in the Americas take a negative longitude. From -180 to 180.
- Many coordinates (`coordinates`, text): One 'latitude, longitude' pair per line, for looking up to 100 points at once. Semicolons work as separators too. Takes precedence over the single location fields above.

**Outputs**

- `count` (number): Number of points looked up
- `points` (list)

**Example output**

```json
{
  "count": 2,
  "points": [
    {
      "elevation": 1608.0,
      "latitude": 46.01998,
      "location": "Zermatt",
      "longitude": 7.74863
    },
    {
      "elevation": 8194.0,
      "latitude": 27.99,
      "location": "",
      "longitude": 86.93
    }
  ]
}
```

### Get ensemble forecast

Run the forecast dozens of times over from slightly different starting conditions and get back how far the runs disagree. Where the members agree the forecast is confident; where they scatter it is not, which is the difference between 'it will rain' and 'it might'. Each row gives the lowest, highest and mean member value per variable, so a workflow can act on the confidence rather than only on the headline number.

**Inputs**

- Location (`location`, text): Place name to look up, for example 'Berlin' or 'Springfield, Illinois'. The closest match is used. Leave blank if you are providing latitude and longitude instead.
- Latitude (`latitude`, number): Latitude of the location (-90 to 90). Use with longitude instead of a place name for an exact point. From -90 to 90.
- Longitude (`longitude`, number): Longitude of the location (-180 to 180). Use with latitude instead of a place name for an exact point. Locations in the Americas take a negative longitude. From -180 to 180.
- Hourly variables (`variables`, text): Which readings to run the ensemble over, hourly. One or more of: `temperature_2m` (Temperature (2 m)), `relative_humidity_2m` (Relative humidity (2 m)), `dew_point_2m` (Dewpoint (2 m)), `apparent_temperature` (Apparent temperature), `precipitation`, `rain`, `snowfall`, `snow_depth` (Snow depth), `weather_code` (Weather code), `pressure_msl` (Sea level pressure), and 13 more. Default: `["temperature_2m", "precipitation"]`.
- Daily variables (`daily_variables`, text): Which readings to summarise per day. One or more of: `temperature_2m_mean` (Mean temperature (2 m)), `temperature_2m_max` (Maximum temperature (2 m)), `temperature_2m_min` (Minimum temperature (2 m)), `apparent_temperature_max` (Maximum apparent temperature), `apparent_temperature_min` (Minimum apparent temperature), `precipitation_sum` (Precipitation sum), `precipitation_hours` (Precipitation hours), `rain_sum` (Rain sum), `snowfall_sum` (Snowfall sum), `wind_speed_10m_max` (Maximum wind speed (10 m)), and 6 more.
- Additional variables (`additional_variables`, text): Comma-separated Open-Meteo variable names to request on top of the ones ticked above, for example 'soil_temperature_0cm' or 'temperature_850hPa'. See the Open-Meteo docs for the full list.
- Forecast days (`forecast_days`, number): How many days ahead to forecast, from 1 to 36. Defaults to 7. Ensembles run further out than a single forecast because the spread is the useful part at that range. From 1 to 36. Default: `7`.
- Past days (`past_days`, number): How many days of already-issued forecasts to prepend, from 0 to 92. Defaults to 0. For measured weather further back, use the 'Get historical weather' action instead. From 0 to 92. Default: `0`.
- Include every member (`include_members`, true/false): Return each ensemble member's own value alongside the summary. Off by default: fifty members across a long forecast is a very large response, and the lowest, highest and mean are what most workflows act on. Default: `false`.
- Time step (`temporal_resolution`, text): How closely spaced the rows are. 'Native' keeps whatever the model produces. The others resample to that many hours, which is a way to cut a long series down to a readable size. One of: `native` (As the model produces it), `hourly_1` (Every hour), `hourly_3` (Every 3 hours), `hourly_6` (Every 6 hours). Default: `native`.
- Temperature unit (`temperature_unit`, text): Unit for every temperature in the response. Defaults to Celsius. One of: `celsius` (Celsius (°C)), `fahrenheit` (Fahrenheit (°F)). Default: `celsius`.
- Wind speed unit (`wind_speed_unit`, text): Unit for every wind speed in the response. Defaults to km/h. One of: `kmh` (Kilometres per hour (km/h)), `ms` (Metres per second (m/s)), `mph` (Miles per hour (mph)), `kn` (Knots (kn)). Default: `kmh`.
- Precipitation unit (`precipitation_unit`, text): Unit for rain, showers, and snowfall amounts. Defaults to millimetres. One of: `mm` (Millimetres (mm)), `inch` (Inches (in)). Default: `mm`.
- Time zone (`timezone`, text): Time zone the timestamps are returned in, as a time-zone database name such as Europe/Berlin. Defaults to 'auto', which uses the local time zone of the location: the right choice for daily rows, which would otherwise be split across the wrong days. Default: `auto`.
- Ensemble models (`models`, text): Comma-separated ensembles to run, for example 'ecmwf_ifs025_ensemble'. Leave blank to let Open-Meteo pick the best ensemble for the location. A model ending in '_ensemble_mean' returns the members already averaged, so it carries no spread. The regional ensembles answer with blanks outside their own area.

**Outputs**

- `country` (text): Country of the resolved place
- `daily` (object): One row per timestep. Each variable carries how far the ensemble members disagreed at that timestep rather than a single number
- `elevation` (number): Elevation of the grid-cell, in metres above sea level
- `hourly` (object): One row per timestep. Each variable carries how far the ensemble members disagreed at that timestep rather than a single number
- `latitude` (number): Latitude of the weather grid-cell used
- `location` (text): Resolved place name, or empty when coordinates were given
- `longitude` (number): Longitude of the weather grid-cell used
- `timezone` (text): Time zone the timestamps are in, e.g. 'Europe/Berlin'
- `timezone_abbreviation` (text): Abbreviation of that time zone, e.g. 'CEST'
- `utc_offset_seconds` (number): Offset of that time zone from UTC, in seconds

**Example output**

```json
{
  "country": "Germany",
  "daily": {
    "count": 0,
    "entries": [],
    "members": 0,
    "units": {},
    "variables": []
  },
  "elevation": 38.0,
  "hourly": {
    "count": 1,
    "entries": [
      {
        "precipitation": {
          "control": 0.0,
          "maximum": 1.4,
          "mean": 0.2133,
          "members_reporting": 30,
          "minimum": 0.0,
          "range": 1.4
        },
        "temperature_2m": {
          "control": 13.2,
          "maximum": 13.9,
          "mean": 13.1567,
          "members_reporting": 30,
          "minimum": 12.8,
          "range": 1.1
        },
        "time": "2026-07-24T13:00"
      }
    ],
    "members": 30,
    "units": {
      "precipitation": "mm",
      "temperature_2m": "\u00b0C"
    },
    "variables": [
      "precipitation",
      "temperature_2m"
    ]
  },
  "latitude": 52.5,
  "location": "Berlin",
  "longitude": 13.5,
  "timezone": "Europe/Berlin",
  "timezone_abbreviation": "GMT+2",
  "utc_offset_seconds": 7200
}
```

### Get historical weather

Read the weather that actually happened over a past date range, from Open-Meteo's archive of reanalysis data going back to 1940. Returns daily aggregations, hourly readings, or both. The archive runs a few days behind; for the last day or two, use 'Past days' on a forecast action instead.

**Inputs**

- Start date (`start_date`, date, required): First day of the range, in YYYY-MM-DD format.
- End date (`end_date`, date, required): Last day of the range, in YYYY-MM-DD format.
- Location (`location`, text): Place name to look up, for example 'Berlin' or 'Springfield, Illinois'. The closest match is used. Leave blank if you are providing latitude and longitude instead.
- Latitude (`latitude`, number): Latitude of the location (-90 to 90). Use with longitude instead of a place name for an exact point. From -90 to 90.
- Longitude (`longitude`, number): Longitude of the location (-180 to 180). Use with latitude instead of a place name for an exact point. Locations in the Americas take a negative longitude. From -180 to 180.
- Daily variables (`daily_variables`, text): Which daily aggregations to return, one row per day. Defaults to the weather code, highs and lows, and precipitation when no hourly variables are chosen either. One or more of: `weather_code` (Weather code), `temperature_2m_mean` (Mean temperature (2 m)), `temperature_2m_max` (Maximum temperature (2 m)), `temperature_2m_min` (Minimum temperature (2 m)), `apparent_temperature_mean` (Mean apparent temperature), `apparent_temperature_max` (Maximum apparent temperature), `apparent_temperature_min` (Minimum apparent temperature), `sunrise`, `sunset`, `daylight_duration` (Daylight duration), and 10 more. Default: `["weather_code", "temperature_2m_max", "temperature_2m_min", "precipitation_sum"]`.
- Hourly variables (`hourly_variables`, text): Which hourly readings to return, one row per hour. Leave empty for daily rows only; an hourly range of more than a few weeks gets large quickly. One or more of: `temperature_2m` (Temperature (2 m)), `relative_humidity_2m` (Relative humidity (2 m)), `dew_point_2m` (Dewpoint (2 m)), `apparent_temperature` (Apparent temperature), `precipitation` (Precipitation (rain + snow)), `rain`, `snowfall`, `snow_depth` (Snow depth), `weather_code` (Weather code), `pressure_msl` (Sea level pressure), and 10 more.
- Additional hourly variables (`additional_hourly_variables`, text): Comma-separated Open-Meteo variable names to request on top of the ones ticked above, for example 'soil_temperature_0cm' or 'temperature_850hPa'. See the Open-Meteo docs for the full list.
- Temperature unit (`temperature_unit`, text): Unit for every temperature in the response. Defaults to Celsius. One of: `celsius` (Celsius (°C)), `fahrenheit` (Fahrenheit (°F)). Default: `celsius`.
- Wind speed unit (`wind_speed_unit`, text): Unit for every wind speed in the response. Defaults to km/h. One of: `kmh` (Kilometres per hour (km/h)), `ms` (Metres per second (m/s)), `mph` (Miles per hour (mph)), `kn` (Knots (kn)). Default: `kmh`.
- Precipitation unit (`precipitation_unit`, text): Unit for rain, showers, and snowfall amounts. Defaults to millimetres. One of: `mm` (Millimetres (mm)), `inch` (Inches (in)). Default: `mm`.
- Time zone (`timezone`, text): Time zone the timestamps are returned in, as a time-zone database name such as Europe/Berlin. Defaults to 'auto', which uses the local time zone of the location: the right choice for daily rows, which would otherwise be split across the wrong days. Default: `auto`.

**Outputs**

- `country` (text): Country of the resolved place
- `daily` (object): One row per timestep, each carrying every requested variable, plus the units the values are in
- `elevation` (number): Elevation of the grid-cell, in metres above sea level
- `end_date` (text): Last day of the range that was read
- `hourly` (object): One row per timestep, each carrying every requested variable, plus the units the values are in
- `latitude` (number): Latitude of the weather grid-cell used
- `location` (text): Resolved place name, or empty when coordinates were given
- `longitude` (number): Longitude of the weather grid-cell used
- `start_date` (text): First day of the range that was read
- `timezone` (text): Time zone the timestamps are in, e.g. 'Europe/Berlin'
- `timezone_abbreviation` (text): Abbreviation of that time zone, e.g. 'CEST'
- `utc_offset_seconds` (number): Offset of that time zone from UTC, in seconds

**Example output**

```json
{
  "country": "Germany",
  "daily": {
    "count": 2,
    "entries": [
      {
        "conditions": "Overcast",
        "precipitation_sum": 0.3,
        "temperature_2m_max": 5.4,
        "temperature_2m_min": 1.2,
        "time": "2026-01-01",
        "weather_code": 3
      },
      {
        "conditions": "Slight snow fall",
        "precipitation_sum": 2.6,
        "temperature_2m_max": 2.1,
        "temperature_2m_min": -1.8,
        "time": "2026-01-02",
        "weather_code": 71
      }
    ],
    "units": {
      "precipitation_sum": "mm",
      "temperature_2m_max": "\u00b0C",
      "temperature_2m_min": "\u00b0C",
      "weather_code": "wmo code"
    }
  },
  "elevation": 38.0,
  "end_date": "2026-01-02",
  "hourly": {
    "count": 0,
    "entries": [],
    "units": {}
  },
  "latitude": 52.5,
  "location": "Berlin",
  "longitude": 13.4,
  "start_date": "2026-01-01",
  "timezone": "Europe/Berlin",
  "timezone_abbreviation": "GMT+1",
  "utc_offset_seconds": 3600
}
```

### Get hourly forecast

Get an hour-by-hour forecast for up to 16 days, returned as one row per hour so a workflow can loop over the timesteps.

**Inputs**

- Location (`location`, text): Place name to look up, for example 'Berlin' or 'Springfield, Illinois'. The closest match is used. Leave blank if you are providing latitude and longitude instead.
- Latitude (`latitude`, number): Latitude of the location (-90 to 90). Use with longitude instead of a place name for an exact point. From -90 to 90.
- Longitude (`longitude`, number): Longitude of the location (-180 to 180). Use with latitude instead of a place name for an exact point. Locations in the Americas take a negative longitude. From -180 to 180.
- Variables (`variables`, text): Which variables to return for each hour. Defaults to temperature, precipitation and its probability, the weather code, and wind speed. One or more of: `temperature_2m` (Temperature (2 m)), `relative_humidity_2m` (Relative humidity (2 m)), `dew_point_2m` (Dewpoint (2 m)), `apparent_temperature` (Apparent temperature), `precipitation_probability` (Precipitation probability), `precipitation` (Precipitation (rain + showers + snow)), `rain`, `showers`, `snowfall`, `snow_depth` (Snow depth), and 21 more. Default: `["temperature_2m", "precipitation_probability", "precipitation", "weather_code", "wind_speed_10m"]`.
- Additional variables (`additional_variables`, text): Comma-separated Open-Meteo variable names to request on top of the ones ticked above, for example 'soil_temperature_0cm' or 'temperature_850hPa'. See the Open-Meteo docs for the full list.
- Forecast days (`forecast_days`, number): How many days ahead to forecast, from 1 to 16. Defaults to 7. From 1 to 16. Default: `7`.
- Past days (`past_days`, number): How many days of already-issued forecasts to prepend, from 0 to 92. Defaults to 0. For measured weather further back, use the 'Get historical weather' action instead. From 0 to 92. Default: `0`.
- Temperature unit (`temperature_unit`, text): Unit for every temperature in the response. Defaults to Celsius. One of: `celsius` (Celsius (°C)), `fahrenheit` (Fahrenheit (°F)). Default: `celsius`.
- Wind speed unit (`wind_speed_unit`, text): Unit for every wind speed in the response. Defaults to km/h. One of: `kmh` (Kilometres per hour (km/h)), `ms` (Metres per second (m/s)), `mph` (Miles per hour (mph)), `kn` (Knots (kn)). Default: `kmh`.
- Precipitation unit (`precipitation_unit`, text): Unit for rain, showers, and snowfall amounts. Defaults to millimetres. One of: `mm` (Millimetres (mm)), `inch` (Inches (in)). Default: `mm`.
- Time zone (`timezone`, text): Time zone the timestamps are returned in, as a time-zone database name such as Europe/Berlin. Defaults to 'auto', which uses the local time zone of the location: the right choice for daily rows, which would otherwise be split across the wrong days. Default: `auto`.
- Weather models (`models`, text): Comma-separated weather models to use, for example 'ecmwf_ifs025,gfs_seamless'. Leave blank to let Open-Meteo pick the highest-resolution model available for the location.

**Outputs**

- `count` (number): Number of rows returned
- `country` (text): Country of the resolved place
- `elevation` (number): Elevation of the grid-cell, in metres above sea level
- `entries` (list)
- `latitude` (number): Latitude of the weather grid-cell used
- `location` (text): Resolved place name, or empty when coordinates were given
- `longitude` (number): Longitude of the weather grid-cell used
- `timezone` (text): Time zone the timestamps are in, e.g. 'Europe/Berlin'
- `timezone_abbreviation` (text): Abbreviation of that time zone, e.g. 'CEST'
- `units` (object): Unit of each requested variable, keyed by variable name
- `utc_offset_seconds` (number): Offset of that time zone from UTC, in seconds

**Example output**

```json
{
  "count": 2,
  "country": "Germany",
  "elevation": 38.0,
  "entries": [
    {
      "conditions": "Partly cloudy",
      "precipitation": 0.0,
      "precipitation_probability": 3,
      "temperature_2m": 24.1,
      "time": "2026-07-24T13:00",
      "weather_code": 2,
      "wind_speed_10m": 11.0
    },
    {
      "conditions": "Overcast",
      "precipitation": 0.0,
      "precipitation_probability": 6,
      "temperature_2m": 24.8,
      "time": "2026-07-24T14:00",
      "weather_code": 3,
      "wind_speed_10m": 12.4
    }
  ],
  "latitude": 52.52,
  "location": "Berlin",
  "longitude": 13.419998,
  "timezone": "Europe/Berlin",
  "timezone_abbreviation": "GMT+2",
  "units": {
    "precipitation": "mm",
    "precipitation_probability": "%",
    "temperature_2m": "\u00b0C",
    "weather_code": "wmo code",
    "wind_speed_10m": "km/h"
  },
  "utc_offset_seconds": 7200
}
```

### Get location details

Look up one place by the id that a search returned, and get the fuller record: the postcodes it covers, the whole chain of administrative areas it sits in, its elevation, time zone and population. Use it as the second step after 'Search locations', once a particular match has been chosen.

**Inputs**

- Place id (`id`, number, required): The GeoNames id of the place, as returned in the 'id' field by the 'Search locations' action. At least 1.

**Outputs**

- `admin1` (text): First administrative level, e.g. the state
- `admin2` (text): Second administrative level, e.g. the county
- `admin3` (text): Third administrative level
- `admin4` (text): Fourth administrative level
- `country` (text): Country name
- `country_code` (text): Two-letter country code, e.g. 'DE'
- `elevation` (number): Elevation in metres above sea level
- `feature_code` (text): GeoNames feature code for the place
- `id` (number): GeoNames id of the place
- `latitude` (number): Latitude
- `longitude` (number): Longitude
- `name` (text): Name of the place
- `population` (number): Number of inhabitants
- `postcodes` (list): Postcodes covering the place
- `timezone` (text): Time zone of the place

**Example output**

```json
{
  "admin1": "State of Berlin",
  "admin3": "Berlin, Stadt",
  "admin4": "Berlin",
  "country": "Germany",
  "country_code": "DE",
  "country_id": 2921044,
  "elevation": 74.0,
  "feature_code": "PPLC",
  "id": 2950159,
  "latitude": 52.52437,
  "longitude": 13.41053,
  "name": "Berlin",
  "population": 3426354,
  "postcodes": [
    "10967",
    "13347"
  ],
  "timezone": "Europe/Berlin"
}
```

### Get marine forecast

Get sea conditions for a point on the water: wave height, direction and period, wind waves and swell separately, ocean currents, and sea surface temperature, now and by the hour and the day. The wave models only cover open water, so a point inland comes back as an error saying so rather than as a row of blanks.

**Inputs**

- Location (`location`, text): Place name to look up, for example 'Berlin' or 'Springfield, Illinois'. The closest match is used. Leave blank if you are providing latitude and longitude instead.
- Latitude (`latitude`, number): Latitude of the location (-90 to 90). Use with longitude instead of a place name for an exact point. From -90 to 90.
- Longitude (`longitude`, number): Longitude of the location (-180 to 180). Use with latitude instead of a place name for an exact point. Locations in the Americas take a negative longitude. From -180 to 180.
- Current variables (`variables`, text): Which sea conditions to read for right now. One or more of: `wave_height` (Wave height), `wave_direction` (Wave direction), `wave_period` (Wave period), `wind_wave_height` (Wind wave height), `wind_wave_direction` (Wind wave direction), `wind_wave_period` (Wind wave period), `wind_wave_peak_period` (Wind wave peak period), `swell_wave_height` (Swell wave height), `swell_wave_direction` (Swell wave direction), `swell_wave_period` (Swell wave period), and 4 more.
- Hourly variables (`hourly_variables`, text): Which sea conditions to return hour by hour. Used when nothing at all is ticked, so the action still returns a useful forecast. One or more of: `wave_height` (Wave height), `wave_direction` (Wave direction), `wave_period` (Wave period), `wave_peak_period` (Wave peak period), `wind_wave_height` (Wind wave height), `wind_wave_direction` (Wind wave direction), `wind_wave_period` (Wind wave period), `wind_wave_peak_period` (Wind wave peak period), `swell_wave_height` (Swell wave height), `swell_wave_direction` (Swell wave direction), and 12 more. Default: `["wave_height", "wave_direction", "wave_period", "wind_wave_height", "swell_wave_height", "sea_surface_temperature"]`.
- Daily variables (`daily_variables`, text): Which sea conditions to summarise per day. One or more of: `wave_height_max` (Maximum wave height), `wave_direction_dominant` (Dominant wave direction), `wave_period_max` (Maximum wave period), `wind_wave_height_max` (Maximum wind wave height), `wind_wave_direction_dominant` (Dominant wind wave direction), `wind_wave_period_max` (Maximum wind wave period), `wind_wave_peak_period_max` (Maximum wind wave peak period), `swell_wave_height_max` (Maximum swell wave height), `swell_wave_direction_dominant` (Dominant swell wave direction), `swell_wave_period_max` (Maximum swell wave period), `swell_wave_peak_period_max` (Maximum swell wave peak period).
- Additional hourly variables (`additional_hourly_variables`, text): Comma-separated Open-Meteo variable names to request on top of the ones ticked above, for example 'soil_temperature_0cm' or 'temperature_850hPa'. See the Open-Meteo docs for the full list.
- Forecast days (`forecast_days`, number): How many days ahead to forecast, from 1 to 16. Defaults to 7. From 1 to 16. Default: `7`.
- Past days (`past_days`, number): How many days of already-issued forecasts to prepend, from 0 to 92. Defaults to 0. For measured weather further back, use the 'Get historical weather' action instead. From 0 to 92. Default: `0`.
- Wave height unit (`length_unit`, text): Unit for wave and swell heights. Defaults to metres. One of: `metric` (Metres (m)), `imperial` (Feet (ft)). Default: `metric`.
- Time zone (`timezone`, text): Time zone the timestamps are returned in, as a time-zone database name such as Europe/Berlin. Defaults to 'auto', which uses the local time zone of the location: the right choice for daily rows, which would otherwise be split across the wrong days. Default: `auto`.
- Wave models (`models`, text): Comma-separated wave models to use. Leave blank to let Open-Meteo pick the best one for the location.
- Grid cell (`cell_selection`, text): Which grid cell to read when the point falls between two. 'Land' is the default and prefers a cell at a similar elevation, which matters in the mountains. 'Nearest cell at sea' snaps a coastal point onto the water, which is what a marine forecast for a harbour needs. One of: `land` (Nearest cell on land), `sea` (Nearest cell at sea), `nearest` (Nearest cell of any kind). Default: `land`.

**Outputs**

- `country` (text): Country of the resolved place
- `daily` (object): One row per timestep, each carrying every requested variable, plus the units the values are in
- `elevation` (number): Elevation of the grid-cell, in metres above sea level
- `hourly` (object): One row per timestep, each carrying every requested variable, plus the units the values are in
- `interval` (number): Length of the window the current readings cover, in seconds
- `latitude` (number): Latitude of the weather grid-cell used
- `location` (text): Resolved place name, or empty when coordinates were given
- `longitude` (number): Longitude of the weather grid-cell used
- `time` (text): Timestamp the current readings are valid for
- `timezone` (text): Time zone the timestamps are in, e.g. 'Europe/Berlin'
- `timezone_abbreviation` (text): Abbreviation of that time zone, e.g. 'CEST'
- `units` (object): Unit of each current reading
- `utc_offset_seconds` (number): Offset of that time zone from UTC, in seconds
- `values` (object): Each current reading, keyed by variable name

**Example output**

```json
{
  "country": "",
  "daily": {
    "count": 1,
    "entries": [
      {
        "time": "2026-07-24",
        "wave_direction_dominant": 233,
        "wave_height_max": 0.48,
        "wave_period_max": 2.7
      }
    ],
    "units": {
      "wave_height_max": "m"
    }
  },
  "elevation": 0.0,
  "hourly": {
    "count": 1,
    "entries": [
      {
        "sea_surface_temperature": 17.5,
        "swell_wave_height": 0.16,
        "time": "2026-07-24T13:00",
        "wave_direction": 281,
        "wave_height": 0.28,
        "wave_period": 2.4,
        "wind_wave_height": 0.22
      }
    ],
    "units": {
      "sea_surface_temperature": "\u00b0C",
      "wave_height": "m"
    }
  },
  "interval": 900,
  "latitude": 54.541664,
  "location": "",
  "longitude": 10.208344,
  "time": "2026-07-24T13:15",
  "timezone": "Europe/Berlin",
  "timezone_abbreviation": "GMT+2",
  "units": {
    "wave_height": "m",
    "wave_period": "s"
  },
  "utc_offset_seconds": 7200,
  "values": {
    "wave_height": 0.28,
    "wave_period": 2.4
  }
}
```

### Get past forecast

Read the forecast that was being issued on a past date, from the archive of model output kept since 2021. This is a different question from what the weather turned out to be: use it to score a forecast against the outcome, to reconstruct what a workflow would have seen on the day, or to settle an argument about what was predicted. For what actually happened, use 'Get historical weather' instead.

**Inputs**

- Start date (`start_date`, text, required): First day to return, as YYYY-MM-DD.
- End date (`end_date`, text, required): Last day to return, as YYYY-MM-DD.
- Location (`location`, text): Place name to look up, for example 'Berlin' or 'Springfield, Illinois'. The closest match is used. Leave blank if you are providing latitude and longitude instead.
- Latitude (`latitude`, number): Latitude of the location (-90 to 90). Use with longitude instead of a place name for an exact point. From -90 to 90.
- Longitude (`longitude`, number): Longitude of the location (-180 to 180). Use with latitude instead of a place name for an exact point. Locations in the Americas take a negative longitude. From -180 to 180.
- Daily variables (`daily_variables`, text): Which forecast values to return per day. Used when nothing at all is ticked. One or more of: `weather_code` (Weather code), `temperature_2m_max` (Maximum temperature (2 m)), `temperature_2m_min` (Minimum temperature (2 m)), `apparent_temperature_max` (Maximum apparent temperature), `apparent_temperature_min` (Minimum apparent temperature), `sunrise`, `sunset`, `daylight_duration` (Daylight duration), `sunshine_duration` (Sunshine duration), `uv_index_max` (UV index max), and 12 more. Default: `["weather_code", "temperature_2m_max", "temperature_2m_min", "precipitation_sum"]`.
- Hourly variables (`hourly_variables`, text): Which forecast values to return hour by hour. One or more of: `temperature_2m` (Temperature (2 m)), `relative_humidity_2m` (Relative humidity (2 m)), `dew_point_2m` (Dewpoint (2 m)), `apparent_temperature` (Apparent temperature), `precipitation_probability` (Precipitation probability), `precipitation` (Precipitation (rain + showers + snow)), `rain`, `showers`, `snowfall`, `snow_depth` (Snow depth), and 21 more.
- Additional hourly variables (`additional_hourly_variables`, text): Comma-separated Open-Meteo variable names to request on top of the ones ticked above, for example 'soil_temperature_0cm' or 'temperature_850hPa'. See the Open-Meteo docs for the full list.
- Temperature unit (`temperature_unit`, text): Unit for every temperature in the response. Defaults to Celsius. One of: `celsius` (Celsius (°C)), `fahrenheit` (Fahrenheit (°F)). Default: `celsius`.
- Wind speed unit (`wind_speed_unit`, text): Unit for every wind speed in the response. Defaults to km/h. One of: `kmh` (Kilometres per hour (km/h)), `ms` (Metres per second (m/s)), `mph` (Miles per hour (mph)), `kn` (Knots (kn)). Default: `kmh`.
- Precipitation unit (`precipitation_unit`, text): Unit for rain, showers, and snowfall amounts. Defaults to millimetres. One of: `mm` (Millimetres (mm)), `inch` (Inches (in)). Default: `mm`.
- Time zone (`timezone`, text): Time zone the timestamps are returned in, as a time-zone database name such as Europe/Berlin. Defaults to 'auto', which uses the local time zone of the location: the right choice for daily rows, which would otherwise be split across the wrong days. Default: `auto`.
- Weather models (`models`, text): Comma-separated weather models to use, for example 'ecmwf_ifs025,gfs_seamless'. Leave blank to let Open-Meteo pick the highest-resolution model available for the location.
- Grid cell (`cell_selection`, text): Which grid cell to read when the point falls between two. 'Land' is the default and prefers a cell at a similar elevation, which matters in the mountains. 'Nearest cell at sea' snaps a coastal point onto the water, which is what a marine forecast for a harbour needs. One of: `land` (Nearest cell on land), `sea` (Nearest cell at sea), `nearest` (Nearest cell of any kind). Default: `land`.

**Outputs**

- `country` (text): Country of the resolved place
- `daily` (object): One row per timestep, each carrying every requested variable, plus the units the values are in
- `elevation` (number): Elevation of the grid-cell, in metres above sea level
- `end_date` (text): Last day returned
- `hourly` (object): One row per timestep, each carrying every requested variable, plus the units the values are in
- `latitude` (number): Latitude of the weather grid-cell used
- `location` (text): Resolved place name, or empty when coordinates were given
- `longitude` (number): Longitude of the weather grid-cell used
- `start_date` (text): First day returned
- `timezone` (text): Time zone the timestamps are in, e.g. 'Europe/Berlin'
- `timezone_abbreviation` (text): Abbreviation of that time zone, e.g. 'CEST'
- `utc_offset_seconds` (number): Offset of that time zone from UTC, in seconds

**Example output**

```json
{
  "country": "Germany",
  "daily": {
    "count": 2,
    "entries": [
      {
        "conditions": "Overcast",
        "precipitation_sum": 0.0,
        "temperature_2m_max": 22.3,
        "temperature_2m_min": 13.3,
        "time": "2026-06-01",
        "weather_code": 3
      },
      {
        "conditions": "Slight rain",
        "precipitation_sum": 2.4,
        "temperature_2m_max": 26.2,
        "temperature_2m_min": 15.1,
        "time": "2026-06-02",
        "weather_code": 61
      }
    ],
    "units": {
      "precipitation_sum": "mm",
      "temperature_2m_max": "\u00b0C",
      "temperature_2m_min": "\u00b0C"
    }
  },
  "elevation": 38.0,
  "end_date": "2026-06-02",
  "hourly": {
    "count": 0,
    "entries": [],
    "units": {}
  },
  "latitude": 52.52,
  "location": "Berlin",
  "longitude": 13.419998,
  "start_date": "2026-06-01",
  "timezone": "Europe/Berlin",
  "timezone_abbreviation": "GMT+2",
  "utc_offset_seconds": 7200
}
```

### Get river discharge

Get the daily flow of the river nearest a point, in cubic metres per second, for up to a year ahead and three months back. The figures come from GloFAS, the global flood modelling system, and are what a flood watch or a river level alert is built on. Ask for the ensemble to get the spread between model runs rather than one number.

**Inputs**

- Location (`location`, text): Place name to look up, for example 'Berlin' or 'Springfield, Illinois'. The closest match is used. Leave blank if you are providing latitude and longitude instead.
- Latitude (`latitude`, number): Latitude of the location (-90 to 90). Use with longitude instead of a place name for an exact point. From -90 to 90.
- Longitude (`longitude`, number): Longitude of the location (-180 to 180). Use with latitude instead of a place name for an exact point. Locations in the Americas take a negative longitude. From -180 to 180.
- Variables (`variables`, text): Which discharge figures to return. The plain one is the headline value; the rest describe the spread across the ensemble. One or more of: `river_discharge` (River discharge), `river_discharge_mean` (River discharge mean), `river_discharge_median` (River discharge median), `river_discharge_max` (River discharge maximum), `river_discharge_min` (River discharge minimum), `river_discharge_p25` (River discharge 25th percentile), `river_discharge_p75` (River discharge 75th percentile). Default: `["river_discharge", "river_discharge_mean", "river_discharge_max", "river_discharge_min"]`.
- Forecast days (`forecast_days`, number): How many days ahead to return, from 1 to 366. Defaults to 92. Ignored when a start and end date are given. From 1 to 366. Default: `92`.
- Past days (`past_days`, number): How many days of already-issued forecasts to prepend, from 0 to 92. Defaults to 0. For measured weather further back, use the 'Get historical weather' action instead. From 0 to 92. Default: `0`.
- Start date (`start_date`, text): First day to return, as YYYY-MM-DD. Use with an end date to ask for a fixed range instead of a number of days either side of today.
- End date (`end_date`, text): Last day to return, as YYYY-MM-DD.
- Return every ensemble member (`ensemble`, true/false): Return each of the 50 GloFAS ensemble members as its own column rather than only the summary figures. Default: `false`.
- Model version (`models`, text): Which GloFAS version to read. Leave blank for the current one. One or more of: `seamless_v4` (GloFAS v4 seamless), `forecast_v4` (GloFAS v4 forecast), `consolidated_v4` (GloFAS v4 consolidated), `seamless_v3` (GloFAS v3 seamless), `forecast_v3` (GloFAS v3 forecast), `consolidated_v3` (GloFAS v3 consolidated).
- Time zone (`timezone`, text): Time zone the timestamps are returned in, as a time-zone database name such as Europe/Berlin. Defaults to 'auto', which uses the local time zone of the location: the right choice for daily rows, which would otherwise be split across the wrong days. Default: `auto`.

**Outputs**

- `count` (number): Number of rows returned
- `country` (text): Country of the resolved place
- `elevation` (number): Elevation of the grid-cell, in metres above sea level
- `entries` (list)
- `latitude` (number): Latitude of the weather grid-cell used
- `location` (text): Resolved place name, or empty when coordinates were given
- `longitude` (number): Longitude of the weather grid-cell used
- `timezone` (text): Time zone the timestamps are in, e.g. 'Europe/Berlin'
- `timezone_abbreviation` (text): Abbreviation of that time zone, e.g. 'CEST'
- `units` (object): Unit of each requested variable, keyed by variable name
- `utc_offset_seconds` (number): Offset of that time zone from UTC, in seconds

**Example output**

```json
{
  "count": 2,
  "country": "Germany",
  "elevation": 55.0,
  "entries": [
    {
      "river_discharge": 664.27,
      "river_discharge_max": 675.4,
      "river_discharge_mean": 658.71,
      "river_discharge_min": 641.02,
      "time": "2026-07-24"
    },
    {
      "river_discharge": 671.15,
      "river_discharge_max": 698.3,
      "river_discharge_mean": 663.88,
      "river_discharge_min": 635.77,
      "time": "2026-07-25"
    }
  ],
  "latitude": 50.925003,
  "location": "Cologne",
  "longitude": 6.925003,
  "timezone": "Europe/Berlin",
  "timezone_abbreviation": "GMT+2",
  "units": {
    "river_discharge": "m\u00b3/s",
    "river_discharge_max": "m\u00b3/s",
    "river_discharge_mean": "m\u00b3/s",
    "river_discharge_min": "m\u00b3/s"
  },
  "utc_offset_seconds": 7200
}
```

### Get seasonal forecast

Look months ahead, out to about seven, with ECMWF's seasonal forecast. This answers a different question from a daily forecast: not what the weather will be on a given day, but how a whole week or month is leaning against its own long run normal. The anomaly variables carry that lean, which is what a planting date, a heating budget or a stock forecast turns on.

**Inputs**

- Location (`location`, text): Place name to look up, for example 'Berlin' or 'Springfield, Illinois'. The closest match is used. Leave blank if you are providing latitude and longitude instead.
- Latitude (`latitude`, number): Latitude of the location (-90 to 90). Use with longitude instead of a place name for an exact point. From -90 to 90.
- Longitude (`longitude`, number): Longitude of the location (-180 to 180). Use with latitude instead of a place name for an exact point. Locations in the Americas take a negative longitude. From -180 to 180.
- Daily variables (`daily_variables`, text): Which readings to return per day. Used when nothing at all is ticked. One or more of: `temperature_2m_max` (Maximum temperature (2 m)), `temperature_2m_min` (Minimum temperature (2 m)), `temperature_2m_mean` (Mean temperature (2 m)), `precipitation_sum` (Precipitation sum), `weather_code` (Weather code), `sunrise`, `sunset`, `sunshine_duration` (Sunshine duration), `cloud_cover_mean` (Mean cloud cover), `dew_point_2m_mean` (Mean dewpoint (2 m)), and 5 more. Default: `["temperature_2m_max", "temperature_2m_min", "precipitation_sum"]`.
- Weekly variables (`weekly_variables`, text): Which readings to return per week. An 'anomaly' is the difference from that week's long run normal, so a temperature anomaly of 2 means two degrees warmer than usual for the time of year. One or more of: `temperature_2m_mean` (Mean temperature (2 m)), `temperature_2m_anomaly` (Temperature anomaly (2 m)), `precipitation_mean` (Mean precipitation), `precipitation_anomaly` (Precipitation anomaly), `dew_point_2m_mean` (Mean dewpoint (2 m)), `dew_point_2m_anomaly` (Dewpoint anomaly (2 m)), `cloud_cover_mean` (Mean cloud cover), `cloud_cover_anomaly` (Cloud cover anomaly), `sunshine_duration_mean` (Mean sunshine duration), `sunshine_duration_anomaly` (Sunshine duration anomaly), and 10 more.
- Monthly variables (`monthly_variables`, text): Which readings to return per calendar month, again with anomalies against the long run normal. One or more of: `temperature_2m_mean` (Mean temperature (2 m)), `temperature_2m_anomaly` (Temperature anomaly (2 m)), `precipitation_mean` (Mean precipitation), `precipitation_anomaly` (Precipitation anomaly), `dew_point_2m_mean` (Mean dewpoint (2 m)), `dew_point_2m_anomaly` (Dewpoint anomaly (2 m)), `cloud_cover_mean` (Mean cloud cover), `cloud_cover_anomaly` (Cloud cover anomaly), `sunshine_duration_mean` (Mean sunshine duration), `sunshine_duration_anomaly` (Sunshine duration anomaly), and 10 more.
- Additional daily variables (`additional_daily_variables`, text): Comma-separated Open-Meteo variable names to request on top of the ones ticked above, for example 'soil_temperature_0cm' or 'temperature_850hPa'. See the Open-Meteo docs for the full list.
- Forecast days (`forecast_days`, number): How far ahead to look, from 1 to 217 days. Defaults to 183, about six months. From 1 to 217. Default: `183`.
- Include every member (`include_members`, true/false): Return each ensemble member's own value alongside the summary. Off by default: fifty members across a long forecast is a very large response, and the lowest, highest and mean are what most workflows act on. Default: `false`.
- Temperature unit (`temperature_unit`, text): Unit for every temperature in the response. Defaults to Celsius. One of: `celsius` (Celsius (°C)), `fahrenheit` (Fahrenheit (°F)). Default: `celsius`.
- Wind speed unit (`wind_speed_unit`, text): Unit for every wind speed in the response. Defaults to km/h. One of: `kmh` (Kilometres per hour (km/h)), `ms` (Metres per second (m/s)), `mph` (Miles per hour (mph)), `kn` (Knots (kn)). Default: `kmh`.
- Precipitation unit (`precipitation_unit`, text): Unit for rain, showers, and snowfall amounts. Defaults to millimetres. One of: `mm` (Millimetres (mm)), `inch` (Inches (in)). Default: `mm`.
- Time zone (`timezone`, text): Time zone the timestamps are returned in, as a time-zone database name such as Europe/Berlin. Defaults to 'auto', which uses the local time zone of the location: the right choice for daily rows, which would otherwise be split across the wrong days. Default: `auto`.
- Seasonal models (`models`, text): Which seasonal model to run. Leave blank for the best available. A model ending in '_ensemble_mean' returns the members already averaged, so it carries no spread. One or more of: `ecmwf_seasonal_seamless` (ECMWF seasonal, seamless), `ecmwf_seas5` (ECMWF SEAS5 (out to 7 months)), `ecmwf_ec46` (ECMWF EC46 (out to 6 weeks)), `ecmwf_seasonal_ensemble_mean_seamless` (ECMWF seasonal, ensemble mean), `ecmwf_seas5_ensemble_mean` (ECMWF SEAS5, ensemble mean), `ecmwf_ec46_ensemble_mean` (ECMWF EC46, ensemble mean).

**Outputs**

- `country` (text): Country of the resolved place
- `daily` (object): One row per timestep. Each variable carries how far the ensemble members disagreed at that timestep rather than a single number
- `elevation` (number): Elevation of the grid-cell, in metres above sea level
- `latitude` (number): Latitude of the weather grid-cell used
- `location` (text): Resolved place name, or empty when coordinates were given
- `longitude` (number): Longitude of the weather grid-cell used
- `monthly` (object): One row per timestep, each carrying every requested variable, plus the units the values are in
- `timezone` (text): Time zone the timestamps are in, e.g. 'Europe/Berlin'
- `timezone_abbreviation` (text): Abbreviation of that time zone, e.g. 'CEST'
- `utc_offset_seconds` (number): Offset of that time zone from UTC, in seconds
- `weekly` (object): One row per timestep, each carrying every requested variable, plus the units the values are in

**Example output**

```json
{
  "country": "Germany",
  "daily": {
    "count": 0,
    "entries": [],
    "members": 0,
    "units": {},
    "variables": []
  },
  "elevation": 38.0,
  "latitude": 52.412178,
  "location": "Berlin",
  "longitude": 13.695653,
  "monthly": {
    "count": 1,
    "entries": [
      {
        "precipitation_anomaly": -1.4,
        "time": "2026-08-01"
      }
    ],
    "units": {
      "precipitation_anomaly": "mm"
    }
  },
  "timezone": "Europe/Berlin",
  "timezone_abbreviation": "GMT+2",
  "utc_offset_seconds": 7200,
  "weekly": {
    "count": 2,
    "entries": [
      {
        "temperature_2m_anomaly": 0.3,
        "temperature_2m_mean": 15.5,
        "time": "2026-07-20"
      },
      {
        "temperature_2m_anomaly": 1.4,
        "temperature_2m_mean": 17.1,
        "time": "2026-07-27"
      }
    ],
    "units": {
      "temperature_2m_anomaly": "K",
      "temperature_2m_mean": "\u00b0C"
    }
  }
}
```

### Get solar radiation

Read solar irradiance as weather satellites actually measured it, rather than as a weather model predicted it, going back as far as 1983. This is the number a solar yield or panel performance calculation wants. Set the tilt and the compass bearing of an array to get the irradiance falling on the panels rather than on flat ground.

**Inputs**

- Location (`location`, text): Place name to look up, for example 'Berlin' or 'Springfield, Illinois'. The closest match is used. Leave blank if you are providing latitude and longitude instead.
- Latitude (`latitude`, number): Latitude of the location (-90 to 90). Use with longitude instead of a place name for an exact point. From -90 to 90.
- Longitude (`longitude`, number): Longitude of the location (-180 to 180). Use with latitude instead of a place name for an exact point. Locations in the Americas take a negative longitude. From -180 to 180.
- Hourly variables (`variables`, text): Which irradiance readings to return hour by hour. One or more of: `shortwave_radiation` (Global horizontal irradiance (GHI)), `direct_radiation` (Direct horizontal irradiance), `diffuse_radiation` (Diffuse horizontal irradiance (DHI)), `direct_normal_irradiance` (Direct normal irradiance (DNI)), `global_tilted_irradiance` (Global tilted irradiance (GTI)), `shortwave_radiation_clear_sky` (Clear sky shortwave radiation), `terrestrial_radiation` (Terrestrial radiation), `sunshine_duration` (Sunshine duration), `is_day` (Is day or night). Default: `["shortwave_radiation", "direct_radiation", "diffuse_radiation", "direct_normal_irradiance"]`.
- Daily variables (`daily_variables`, text): Which readings to total or summarise per day. One or more of: `shortwave_radiation_sum` (Shortwave radiation sum), `sunshine_duration` (Sunshine duration), `daylight_duration` (Daylight duration), `sunrise`, `sunset`.
- Additional variables (`additional_variables`, text): Comma-separated Open-Meteo variable names to request on top of the ones ticked above, for example 'soil_temperature_0cm' or 'temperature_850hPa'. See the Open-Meteo docs for the full list.
- Start date (`start_date`, text): First day to return, as YYYY-MM-DD. Use with an end date to read a fixed past range instead of a window around today.
- End date (`end_date`, text): Last day to return, as YYYY-MM-DD.
- Forecast days (`forecast_days`, number): How many days ahead to forecast, from 1 to 16. Defaults to 7. From 1 to 16. Default: `7`.
- Past days (`past_days`, number): How many days of already-issued forecasts to prepend, from 0 to 92. Defaults to 0. For measured weather further back, use the 'Get historical weather' action instead. From 0 to 92. Default: `0`.
- Panel tilt (`tilt`, number): Angle of the panels from horizontal, 0 to 90 degrees. 0 is flat. Needed for the tilted irradiance variable. From 0 to 90. Default: `0`.
- Panel bearing (`azimuth`, number): Compass bearing the panels face, 0 to 360 degrees, where 0 is south, 90 is west and 270 is east. From 0 to 360. Default: `0`.
- Satellites (`models`, text): Which satellite to read. Leave blank to let Open-Meteo pick whichever one watches the location. Each watches its own part of the globe and its own span of years. One or more of: `satellite_radiation_seamless` (Whichever covers the location), `eumetsat_sarah3` (EUMETSAT SARAH3 (Europe, from 1983)), `eumetsat_msg` (EUMETSAT MSG (Europe and Africa)), `eumetsat_iodc` (EUMETSAT IODC (Indian Ocean)), `jma_jaxa_himawari` (JMA JAXA Himawari (Asia Pacific)).
- Time step (`temporal_resolution`, text): How closely spaced the rows are. 'Native' keeps whatever the model produces. The others resample to that many hours, which is a way to cut a long series down to a readable size. One of: `native` (As the model produces it), `hourly_1` (Every hour), `hourly_3` (Every 3 hours), `hourly_6` (Every 6 hours). Default: `native`.
- Time zone (`timezone`, text): Time zone the timestamps are returned in, as a time-zone database name such as Europe/Berlin. Defaults to 'auto', which uses the local time zone of the location: the right choice for daily rows, which would otherwise be split across the wrong days. Default: `auto`.

**Outputs**

- `country` (text): Country of the resolved place
- `daily` (object): One row per timestep, each carrying every requested variable, plus the units the values are in
- `elevation` (number): Elevation of the grid-cell, in metres above sea level
- `hourly` (object): One row per timestep, each carrying every requested variable, plus the units the values are in
- `latitude` (number): Latitude of the weather grid-cell used
- `location` (text): Resolved place name, or empty when coordinates were given
- `longitude` (number): Longitude of the weather grid-cell used
- `timezone` (text): Time zone the timestamps are in, e.g. 'Europe/Berlin'
- `timezone_abbreviation` (text): Abbreviation of that time zone, e.g. 'CEST'
- `utc_offset_seconds` (number): Offset of that time zone from UTC, in seconds

**Example output**

```json
{
  "country": "Germany",
  "daily": {
    "count": 1,
    "entries": [
      {
        "shortwave_radiation_sum": 16.57,
        "time": "2026-06-01"
      }
    ],
    "units": {
      "shortwave_radiation_sum": "MJ/m\u00b2"
    }
  },
  "elevation": 38.0,
  "hourly": {
    "count": 1,
    "entries": [
      {
        "diffuse_radiation": 214.0,
        "direct_normal_irradiance": 806.3,
        "direct_radiation": 528.0,
        "shortwave_radiation": 742.0,
        "time": "2026-06-01T12:00"
      }
    ],
    "units": {
      "diffuse_radiation": "W/m\u00b2",
      "direct_normal_irradiance": "W/m\u00b2",
      "direct_radiation": "W/m\u00b2",
      "shortwave_radiation": "W/m\u00b2"
    }
  },
  "latitude": 52.54833,
  "location": "Berlin",
  "longitude": 13.407822,
  "timezone": "Europe/Berlin",
  "timezone_abbreviation": "GMT+2",
  "utc_offset_seconds": 7200
}
```

### Search locations

Search the GeoNames database for places matching a name and get back their coordinates, elevation, time zone, region, and population. Useful for pinning an exact point to reuse, or for telling same-named towns apart.

**Inputs**

- Place name (`name`, text, required): Name to search for. Three or more characters enables fuzzy matching; shorter terms must match exactly.
- Max results (`count`, number): How many matches to return, from 1 to 100. Defaults to 10. From 1 to 100. Default: `10`.
- Language (`language`, text): Two-letter language code for the returned place and country names, such as en, de, fr, es, or ja. Defaults to English. Default: `en`.
- Country (`country_code`, text): Restrict the search to one country, as a two-letter ISO-3166-1 alpha-2 code such as US or DE.

**Outputs**

- `count` (number): Number of matches returned
- `locations` (list)

**Example output**

```json
{
  "count": 2,
  "locations": [
    {
      "admin1": "Berlin",
      "country": "Germany",
      "country_code": "DE",
      "elevation": 74.0,
      "feature_code": "PPLC",
      "id": 2950159,
      "latitude": 52.52437,
      "longitude": 13.41053,
      "name": "Berlin",
      "population": 3426354,
      "timezone": "Europe/Berlin"
    },
    {
      "admin1": "New Jersey",
      "country": "United States",
      "country_code": "US",
      "elevation": 27.0,
      "feature_code": "PPL",
      "id": 4348599,
      "latitude": 39.79178,
      "longitude": -75.21797,
      "name": "Berlin",
      "population": 7588,
      "timezone": "America/New_York"
    }
  ]
}
```
