# Windy

> Read Windy's weather in a workflow. Get a point forecast for any coordinates from 21 models (temperature, wind and gusts, rain and snow, cloud, humidity and pressure), a marine forecast with waves, swell and ocean currents, and an air quality forecast with the US AQI, pollutants and European pollen. Also search Windy's worldwide webcam collection by place or category and get each camera's still image, live stream and timelapse links.

App · Weather & Space · 16 actions. Web page: https://docs.lodol.com/docs/integrations/windy

## Actions

### Find webcams in an area

Find the webcams inside a rectangle on the map, given its north, east, south and west edges. Use it to cover a region, a coastline or a mountain range rather than a single point.

**Inputs**

- North edge (latitude) (`north_latitude`, number, required): Latitude of the top edge of the area, between -90 and 90. From -90 to 90.
- East edge (longitude) (`east_longitude`, number, required): Longitude of the right edge of the area, between -180 and 180. From -180 to 180.
- South edge (latitude) (`south_latitude`, number, required): Latitude of the bottom edge of the area, between -90 and 90. From -90 to 90.
- West edge (longitude) (`west_longitude`, number, required): Longitude of the left edge of the area, between -180 and 180. From -180 to 180.
- Categories (`categories`, text): Only return webcams in these categories, at most 10. One or more of: `airport`, `beach`, `building`, `city`, `coast`, `forest`, `indoor`, `lake`, `landscape`, `meteo` (Weather station), and 8 more.
- How many webcams (`limit`, number): How many webcams to return, from 1 to 50. From 1 to 50. Default: `10`.
- Skip this many (`offset`, number): Where to start in the result list, for paging. The free Webcams plan stops at 1000 and the professional plan at 10000. From 0 to 100000. Default: `0`.
- Details to include (`include`, text): Which parts of each webcam record to fetch. Everything is included when nothing is chosen. One or more of: `categories`, `images` (Still images), `location`, `player` (Live and timelapse players), `urls` (Links).
- Language (`language`, text): Language for webcam titles, category names and place names. Defaults to English.

**Outputs**

- `bounding_box` (object): The area that was searched
- `limit` (number): The limit that was applied
- `returned` (number): How many are in this result
- `total` (number): How many webcams are in the box
- `webcams` (list): The webcams inside the area

**Example output**

```json
{
  "bounding_box": {
    "east_longitude": 13.0,
    "north_latitude": 47.9,
    "south_latitude": 45.8,
    "west_longitude": 6.0
  },
  "limit": 10,
  "returned": 1,
  "total": 340,
  "webcams": [
    {
      "categories": [
        {
          "id": "landscape",
          "name": "Landscape"
        }
      ],
      "category_ids": [
        "landscape"
      ],
      "detail_url": "https://www.windy.com/webcams/1179853135",
      "images": {
        "current": {
          "preview": "https://images-webcams.windy.com/35/1179853135/current/preview/1179853135.jpg",
          "thumbnail": "https://images-webcams.windy.com/35/1179853135/current/thumbnail/1179853135.jpg"
        },
        "daylight": {},
        "sizes": {
          "preview": {
            "height": 224,
            "width": 400
          }
        }
      },
      "last_updated_on": "2026-08-19T14:52:11.000Z",
      "latitude": -33.84903,
      "live_stream_url": "https://webcams.windy.com/webcams/public/embed/player/1179853135/live",
      "location": {
        "city": "Sydney",
        "city_code": "AU.02.Sydney",
        "continent": "Oceania",
        "continent_code": "OC",
        "country": "Australia",
        "country_code": "AU",
        "latitude": -33.84903,
        "longitude": 151.21559,
        "region": "New South Wales",
        "region_code": "AU.02"
      },
      "longitude": 151.21559,
      "place": "Sydney, Australia",
      "player": {
        "day": "https://webcams.windy.com/webcams/public/embed/player/1179853135/day",
        "lifetime": "https://webcams.windy.com/webcams/public/embed/player/1179853135/lifetime",
        "live": "https://webcams.windy.com/webcams/public/embed/player/1179853135/live",
        "month": "https://webcams.windy.com/webcams/public/embed/player/1179853135/month",
        "year": "https://webcams.windy.com/webcams/public/embed/player/1179853135/year"
      },
      "preview_image_url": "https://images-webcams.windy.com/35/1179853135/current/preview/1179853135.jpg",
      "provider_url": "https://www.example-webcam-owner.com/",
      "status": "active",
      "title": "Sydney: Sydney Harbour Bridge - Sydney Opera House",
      "view_count": 1282618,
      "webcam_id": 1179853135
    }
  ]
}
```

### Find webcams nearby

Find the webcams around a point, within a radius you choose. Give it the coordinates of a place and it answers with the cameras looking at it, each with its location, still image and player links.

**Inputs**

- Latitude (`latitude`, number, required): Latitude of the point, between -90 and 90. From -90 to 90.
- Longitude (`longitude`, number, required): Longitude of the point, between -180 and 180. From -180 to 180.
- Radius (km) (`radius_km`, number): How far around the point to search, in kilometres. From 0.1 to 500.0. Default: `25.0`.
- Categories (`categories`, text): Only return webcams in these categories, at most 10. One or more of: `airport`, `beach`, `building`, `city`, `coast`, `forest`, `indoor`, `lake`, `landscape`, `meteo` (Weather station), and 8 more.
- How many webcams (`limit`, number): How many webcams to return, from 1 to 50. From 1 to 50. Default: `10`.
- Details to include (`include`, text): Which parts of each webcam record to fetch. Everything is included when nothing is chosen. One or more of: `categories`, `images` (Still images), `location`, `player` (Live and timelapse players), `urls` (Links).
- Language (`language`, text): Language for webcam titles, category names and place names. Defaults to English.

**Outputs**

- `latitude` (number): Latitude searched around
- `limit` (number): The limit that was applied
- `longitude` (number): Longitude searched around
- `radius_km` (number): Radius searched, in km
- `returned` (number): How many are in this result
- `total` (number): How many webcams are in range
- `webcams` (list): The webcams in range

**Example output**

```json
{
  "latitude": -33.8688,
  "limit": 10,
  "longitude": 151.2093,
  "radius_km": 25.0,
  "returned": 1,
  "total": 12,
  "webcams": [
    {
      "categories": [
        {
          "id": "landscape",
          "name": "Landscape"
        }
      ],
      "category_ids": [
        "landscape"
      ],
      "detail_url": "https://www.windy.com/webcams/1179853135",
      "images": {
        "current": {
          "preview": "https://images-webcams.windy.com/35/1179853135/current/preview/1179853135.jpg",
          "thumbnail": "https://images-webcams.windy.com/35/1179853135/current/thumbnail/1179853135.jpg"
        },
        "daylight": {},
        "sizes": {
          "preview": {
            "height": 224,
            "width": 400
          }
        }
      },
      "last_updated_on": "2026-08-19T14:52:11.000Z",
      "latitude": -33.84903,
      "live_stream_url": "https://webcams.windy.com/webcams/public/embed/player/1179853135/live",
      "location": {
        "city": "Sydney",
        "city_code": "AU.02.Sydney",
        "continent": "Oceania",
        "continent_code": "OC",
        "country": "Australia",
        "country_code": "AU",
        "latitude": -33.84903,
        "longitude": 151.21559,
        "region": "New South Wales",
        "region_code": "AU.02"
      },
      "longitude": 151.21559,
      "place": "Sydney, Australia",
      "player": {
        "day": "https://webcams.windy.com/webcams/public/embed/player/1179853135/day",
        "lifetime": "https://webcams.windy.com/webcams/public/embed/player/1179853135/lifetime",
        "live": "https://webcams.windy.com/webcams/public/embed/player/1179853135/live",
        "month": "https://webcams.windy.com/webcams/public/embed/player/1179853135/month",
        "year": "https://webcams.windy.com/webcams/public/embed/player/1179853135/year"
      },
      "preview_image_url": "https://images-webcams.windy.com/35/1179853135/current/preview/1179853135.jpg",
      "provider_url": "https://www.example-webcam-owner.com/",
      "status": "active",
      "title": "Sydney: Sydney Harbour Bridge - Sydney Opera House",
      "view_count": 1282618,
      "webcam_id": 1179853135
    }
  ]
}
```

### Get a webcam

Get one webcam by its id, with its current still image, its live and timelapse player links, where it is and when it last refreshed. Image links are signed and expire (15 minutes on the free plan), so read this action again when you need a fresh one.

**Inputs**

- Webcam id (`webcam_id`, number, required): Windy's id for the webcam, from any of the search actions.
- Details to include (`include`, text): Which parts of each webcam record to fetch. Everything is included when nothing is chosen. One or more of: `categories`, `images` (Still images), `location`, `player` (Live and timelapse players), `urls` (Links).
- Language (`language`, text): Language for webcam titles, category names and place names. Defaults to English.

**Outputs**

- `categories` (list): Categories the webcam is filed under
- `category_ids` (list): Just the category ids
- `cluster_size` (number): On the map action only: how many webcams this one stands in for
- `detail_url` (text): The webcam's page on windy.com
- `images` (object): Windy's image URLs by size, as returned
- `last_updated_on` (text): When the image last refreshed
- `latitude` (number): Latitude of the webcam
- `live_stream_url` (text): Embeddable live player link, when the webcam has a live stream
- `location` (object)
- `longitude` (number): Longitude of the webcam
- `place` (text): Readable place, for example 'Sydney, Australia'
- `player` (object): Embeddable player links: live, day, month, year and lifetime
- `preview_image_url` (text): Still image URL. Signed and short-lived, so fetch it when you need it
- `provider_url` (text): The webcam owner's own page
- `status` (text): active, inactive or another Windy status
- `title` (text): Webcam title
- `view_count` (number): Views since the webcam was added
- `webcam_id` (number): Windy's id for this webcam

**Example output**

```json
{
  "categories": [
    {
      "id": "landscape",
      "name": "Landscape"
    }
  ],
  "category_ids": [
    "landscape"
  ],
  "detail_url": "https://www.windy.com/webcams/1179853135",
  "images": {
    "current": {
      "preview": "https://images-webcams.windy.com/35/1179853135/current/preview/1179853135.jpg",
      "thumbnail": "https://images-webcams.windy.com/35/1179853135/current/thumbnail/1179853135.jpg"
    },
    "daylight": {},
    "sizes": {
      "preview": {
        "height": 224,
        "width": 400
      }
    }
  },
  "last_updated_on": "2026-08-19T14:52:11.000Z",
  "latitude": -33.84903,
  "live_stream_url": "https://webcams.windy.com/webcams/public/embed/player/1179853135/live",
  "location": {
    "city": "Sydney",
    "city_code": "AU.02.Sydney",
    "continent": "Oceania",
    "continent_code": "OC",
    "country": "Australia",
    "country_code": "AU",
    "latitude": -33.84903,
    "longitude": 151.21559,
    "region": "New South Wales",
    "region_code": "AU.02"
  },
  "longitude": 151.21559,
  "place": "Sydney, Australia",
  "player": {
    "day": "https://webcams.windy.com/webcams/public/embed/player/1179853135/day",
    "lifetime": "https://webcams.windy.com/webcams/public/embed/player/1179853135/lifetime",
    "live": "https://webcams.windy.com/webcams/public/embed/player/1179853135/live",
    "month": "https://webcams.windy.com/webcams/public/embed/player/1179853135/month",
    "year": "https://webcams.windy.com/webcams/public/embed/player/1179853135/year"
  },
  "preview_image_url": "https://images-webcams.windy.com/35/1179853135/current/preview/1179853135.jpg",
  "provider_url": "https://www.example-webcam-owner.com/",
  "status": "active",
  "title": "Sydney: Sydney Harbour Bridge - Sydney Opera House",
  "view_count": 1282618,
  "webcam_id": 1179853135
}
```

### Get air quality forecast

Get the air quality forecast for a point: the US Air Quality Index with the band it falls in, fine and coarse particulates, nitrogen dioxide, ozone, sulfur dioxide, carbon monoxide and dust. The European model (camsEu) adds the six pollen counts.

**Inputs**

- Latitude (`latitude`, number, required): Latitude of the point, between -90 and 90. From -90 to 90.
- Longitude (`longitude`, number, required): Longitude of the point, between -180 and 180. From -180 to 180.
- Air quality model (`model`, text): Which air quality model to read. CAMS covers the whole world; the European model adds pollen. One of: `cams` (Global air quality (cams, free key)), `camsEu` (Europe, air quality including pollen (camsEu)). Default: `cams`.
- Hours ahead (`hours_ahead`, number): How far into the future to return, in hours. The models run from about 2 days (high resolution) to about 10 days out; anything past the end of the run simply returns fewer steps. From 1 to 384. Default: `24`.

**Outputs**

- `forecast_end` (text): Time of the last step (UTC)
- `forecast_start` (text): Time of the first step (UTC)
- `hours_ahead` (number): Requested window, in hours
- `latitude` (number): Latitude the forecast is for
- `longitude` (number): Longitude the forecast is for
- `model` (text): Forecast model used
- `model_coverage` (text): What the model covers, for example 'Global'
- `row_count` (number): How many forecast steps returned
- `rows` (list): One entry per forecast step, earliest first
- `units` (object): Windy's own unit for each raw response key

**Example output**

```json
{
  "forecast_end": "2026-08-20T15:00:00Z",
  "forecast_start": "2026-08-19T15:00:00Z",
  "hours_ahead": 24,
  "latitude": 50.088,
  "longitude": 14.42,
  "model": "cams",
  "model_coverage": "Global air quality",
  "row_count": 1,
  "rows": [
    {
      "aqi": 42.0,
      "aqi_category": "Good",
      "carbon_monoxide": 118.2,
      "dust": 2.4,
      "nitrogen_dioxide": 12.1,
      "ozone": 61.3,
      "pm10": 16.4,
      "pm2_5": 9.8,
      "sulfur_dioxide": 1.7,
      "time": "2026-08-19T15:00:00Z",
      "timestamp_ms": 1787151600000
    }
  ],
  "units": {
    "pm2p5-surface": "\u00b5g*m-3"
  }
}
```

### Get current weather

Get the conditions at a point right now, or at a time you choose. Windy publishes forecast runs rather than live observations, so this returns the forecast step nearest the moment asked for and says how far from it that step is.

**Inputs**

- Latitude (`latitude`, number, required): Latitude of the point, between -90 and 90. From -90 to 90.
- Longitude (`longitude`, number, required): Longitude of the point, between -180 and 180. From -180 to 180.
- Forecast model (`model`, text): Which weather model to read. GFS covers the whole world; the others are sharper but regional. One of: `arome` (France and surrounding areas (arome, free key)), `aromeAntilles` (French Antilles (aromeAntilles)), `aromeFrance` (Metropolitan France (aromeFrance)), `aromeReunion` (Réunion island (aromeReunion)), `icon` (Global (ICON-Global) (icon)), `iconD2` (Germany, Austria and Switzerland, high resolution (iconD2)), `iconEu` (Europe and surrounding areas (iconEu, free key)), `gfs` (Global (gfs, free key)), `namConus` (Continental USA and surrounding areas (namConus, free key)), `namHawaii` (Hawaii (namHawaii, free key)), and 4 more. Default: `gfs`.
- At this time (`at_time`, date and time): The moment to report on. Leave empty for right now. Times are handled in UTC.

**Outputs**

- `conditions` (object)
- `forecast_time` (text): The forecast step returned, in UTC
- `latitude` (number): Latitude reported on
- `longitude` (number): Longitude reported on
- `model` (text): Forecast model used
- `model_coverage` (text): What the model covers
- `offset_minutes` (number): How far the step is from the moment asked for
- `requested_time` (text): The moment asked for, in UTC
- `units` (object): Windy's own units

**Example output**

```json
{
  "conditions": {
    "cape_j_per_kg": 118.0,
    "convective_precipitation_mm": 0.0,
    "dew_point_c": 12.1,
    "dew_point_f": 53.8,
    "high_cloud_percent": 21.0,
    "humidity_percent": 47.0,
    "low_cloud_percent": 12.0,
    "medium_cloud_percent": 3.0,
    "precipitation_mm": 0.0,
    "precipitation_type": "No precipitation",
    "pressure_hpa": 1016.4,
    "snow_mm": 0.0,
    "temperature_c": 24.3,
    "temperature_f": 75.7,
    "time": "2026-08-19T15:00:00Z",
    "timestamp_ms": 1787151600000,
    "wind_direction": "WSW",
    "wind_direction_degrees": 245.0,
    "wind_gust_kmh": 29.5,
    "wind_gust_knots": 15.9,
    "wind_gust_ms": 8.2,
    "wind_speed_kmh": 16.6,
    "wind_speed_knots": 8.9,
    "wind_speed_ms": 4.6
  },
  "forecast_time": "2026-08-19T15:00:00Z",
  "latitude": 50.088,
  "longitude": 14.42,
  "model": "gfs",
  "model_coverage": "Global",
  "offset_minutes": -12,
  "requested_time": "2026-08-19T15:12:00Z",
  "units": {
    "temp-surface": "K"
  }
}
```

### Get marine forecast

Get the sea forecast for a point: wave height, period and direction, wind waves, primary and secondary swell, and (with the Copernicus model) ocean surface and tidal currents.

**Inputs**

- Latitude (`latitude`, number, required): Latitude of the point, between -90 and 90. From -90 to 90.
- Longitude (`longitude`, number, required): Longitude of the point, between -180 and 180. From -180 to 180.
- Sea model (`model`, text): Which sea model to read. The wave models carry waves and swell; the Copernicus model (cmems) carries ocean currents instead. One of: `gfsWave` (Global waves (excludes parts of Hudson Bay, the Black and Caspian Seas and most of the Arctic Ocean) (gfsWave, free key)), `iconWave` (Global waves (ICON-GWAM) (iconWave)), `iconEuWave` (European seas (ICON-EWAM) (iconEuWave)), `canRdwpsWave` (Canadian waters (canRdwpsWave)), `cmems` (Global ocean currents (Copernicus Marine Service) (cmems)). Default: `gfsWave`.
- Hours ahead (`hours_ahead`, number): How far into the future to return, in hours. The models run from about 2 days (high resolution) to about 10 days out; anything past the end of the run simply returns fewer steps. From 1 to 384. Default: `24`.

**Outputs**

- `forecast_end` (text): Time of the last step (UTC)
- `forecast_start` (text): Time of the first step (UTC)
- `hours_ahead` (number): Requested window, in hours
- `latitude` (number): Latitude the forecast is for
- `longitude` (number): Longitude the forecast is for
- `model` (text): Forecast model used
- `model_coverage` (text): What the model covers, for example 'Global'
- `row_count` (number): How many forecast steps returned
- `rows` (list): One entry per forecast step, earliest first
- `units` (object): Windy's own unit for each raw response key

**Example output**

```json
{
  "forecast_end": "2026-08-20T15:00:00Z",
  "forecast_start": "2026-08-19T15:00:00Z",
  "hours_ahead": 24,
  "latitude": 36.0,
  "longitude": -9.5,
  "model": "gfsWave",
  "model_coverage": "Global waves",
  "row_count": 1,
  "rows": [
    {
      "swell_direction": "WNW",
      "swell_direction_degrees": 301.0,
      "swell_height_m": 1.28,
      "swell_period_s": 9.1,
      "time": "2026-08-19T15:00:00Z",
      "timestamp_ms": 1787151600000,
      "wave_direction": "WNW",
      "wave_direction_degrees": 292.0,
      "wave_height_m": 1.42,
      "wave_period_s": 7.4,
      "wave_power": 8.6,
      "wave_power_unit": "kW*m-1",
      "wind_wave_direction": "W",
      "wind_wave_direction_degrees": 268.0,
      "wind_wave_height_m": 0.61,
      "wind_wave_period_s": 3.9
    }
  ],
  "units": {
    "waves_height-surface": "m"
  }
}
```

### Get raw point forecast

Get raw forecast values for a point: pick any of Windy's 21 models, any of its 39 parameters and, for temperature, dew point, humidity, wind and geopotential height, any pressure level. Values come back under Windy's own keys with the units it reports them in. Use this when the weather, marine and air quality actions do not carry the value you need.

**Inputs**

- Latitude (`latitude`, number, required): Latitude of the point, between -90 and 90. From -90 to 90.
- Longitude (`longitude`, number, required): Longitude of the point, between -180 and 180. From -180 to 180.
- Model (`model`, text, required): Which of Windy's models to read. Each publishes its own set of parameters; anything the model does not publish is reported back as skipped.
- Parameters (`parameters`, list, required): Which values to fetch. Pick as many as the model publishes.
- Altitude levels (`levels`, text): Which pressure levels to read, for the parameters that have them (temperature, dew point, humidity, wind and geopotential height). Surface is used when nothing is chosen, and for every other parameter. One or more of: `surface`, `1000h` (1000 hPa), `950h` (950 hPa), `925h` (925 hPa), `900h` (900 hPa), `850h` (850 hPa), `800h` (800 hPa), `700h` (700 hPa), `600h` (600 hPa), `500h` (500 hPa), and 4 more.
- Hours ahead (`hours_ahead`, number): How far into the future to return, in hours. The models run from about 2 days (high resolution) to about 10 days out; anything past the end of the run simply returns fewer steps. From 1 to 384. Default: `24`.

**Outputs**

- `forecast_end` (text): Time of the last step (UTC)
- `forecast_start` (text): Time of the first step (UTC)
- `hours_ahead` (number): Requested window, in hours
- `latitude` (number): Latitude the forecast is for
- `levels` (list): Levels that were requested
- `longitude` (number): Longitude the forecast is for
- `model` (text): Forecast model used
- `model_coverage` (text): What the model covers, for example 'Global'
- `parameters_returned` (list): Parameters this model publishes and returned
- `parameters_skipped` (list): Requested parameters this model does not publish
- `row_count` (number): How many forecast steps returned
- `rows` (list): One entry per forecast step, carrying 'time', 'timestamp_ms' and one field per value key
- `units` (object): Windy's own unit for each raw response key
- `value_keys` (list): The keys each row carries, for example 'temp-surface'

**Example output**

```json
{
  "forecast_end": "2026-08-20T15:00:00Z",
  "forecast_start": "2026-08-19T15:00:00Z",
  "hours_ahead": 24,
  "latitude": 50.088,
  "levels": [
    "surface",
    "800h"
  ],
  "longitude": 14.42,
  "model": "gfs",
  "model_coverage": "Global",
  "parameters_returned": [
    "temp",
    "rh"
  ],
  "parameters_skipped": [
    "waves"
  ],
  "row_count": 1,
  "rows": [
    {
      "rh-800h": 38.0,
      "rh-surface": 47.0,
      "temp-800h": 285.12,
      "temp-surface": 297.45,
      "time": "2026-08-19T15:00:00Z",
      "timestamp_ms": 1787151600000
    }
  ],
  "units": {
    "rh-surface": "%",
    "temp-surface": "K"
  },
  "value_keys": [
    "temp-surface",
    "temp-800h",
    "rh-surface",
    "rh-800h"
  ]
}
```

### Get several webcams

Get up to 50 webcams at once by their ids, each with its location, still image and player links. Windy ignores every other filter when ids are given, so this is a lookup rather than a search.

**Inputs**

- Webcam ids (`webcam_ids`, list, required): The ids to fetch, at most 50. Accepts a list or a comma-separated string.
- Details to include (`include`, text): Which parts of each webcam record to fetch. Everything is included when nothing is chosen. One or more of: `categories`, `images` (Still images), `location`, `player` (Live and timelapse players), `urls` (Links).
- Language (`language`, text): Language for webcam titles, category names and place names. Defaults to English.

**Outputs**

- `limit` (number): How many ids were asked for
- `requested_ids` (list): The ids that were asked for
- `returned` (number): How many are in this result
- `total` (number): How many Windy matched
- `webcams` (list): The webcams found

**Example output**

```json
{
  "limit": 1,
  "requested_ids": [
    1179853135
  ],
  "returned": 1,
  "total": 1,
  "webcams": [
    {
      "categories": [
        {
          "id": "landscape",
          "name": "Landscape"
        }
      ],
      "category_ids": [
        "landscape"
      ],
      "detail_url": "https://www.windy.com/webcams/1179853135",
      "images": {
        "current": {
          "preview": "https://images-webcams.windy.com/35/1179853135/current/preview/1179853135.jpg",
          "thumbnail": "https://images-webcams.windy.com/35/1179853135/current/thumbnail/1179853135.jpg"
        },
        "daylight": {},
        "sizes": {
          "preview": {
            "height": 224,
            "width": 400
          }
        }
      },
      "last_updated_on": "2026-08-19T14:52:11.000Z",
      "latitude": -33.84903,
      "live_stream_url": "https://webcams.windy.com/webcams/public/embed/player/1179853135/live",
      "location": {
        "city": "Sydney",
        "city_code": "AU.02.Sydney",
        "continent": "Oceania",
        "continent_code": "OC",
        "country": "Australia",
        "country_code": "AU",
        "latitude": -33.84903,
        "longitude": 151.21559,
        "region": "New South Wales",
        "region_code": "AU.02"
      },
      "longitude": 151.21559,
      "place": "Sydney, Australia",
      "player": {
        "day": "https://webcams.windy.com/webcams/public/embed/player/1179853135/day",
        "lifetime": "https://webcams.windy.com/webcams/public/embed/player/1179853135/lifetime",
        "live": "https://webcams.windy.com/webcams/public/embed/player/1179853135/live",
        "month": "https://webcams.windy.com/webcams/public/embed/player/1179853135/month",
        "year": "https://webcams.windy.com/webcams/public/embed/player/1179853135/year"
      },
      "preview_image_url": "https://images-webcams.windy.com/35/1179853135/current/preview/1179853135.jpg",
      "provider_url": "https://www.example-webcam-owner.com/",
      "status": "active",
      "title": "Sydney: Sydney Harbour Bridge - Sydney Opera House",
      "view_count": 1282618,
      "webcam_id": 1179853135
    }
  ]
}
```

### Get weather forecast

Get the weather forecast for a point on the map, step by step: temperature, wind speed and direction, gusts, rain and snow, cloud cover, humidity and pressure. Values arrive in everyday units (°C and °F, km/h and knots, mm, hPa), and the forecast model decides the coverage and resolution.

**Inputs**

- Latitude (`latitude`, number, required): Latitude of the point, between -90 and 90. From -90 to 90.
- Longitude (`longitude`, number, required): Longitude of the point, between -180 and 180. From -180 to 180.
- Forecast model (`model`, text): Which weather model to read. GFS covers the whole world; the others are sharper but regional. Models marked 'free key' are the ones a free Windy Point Forecast key can request. One of: `arome` (France and surrounding areas (arome, free key)), `aromeAntilles` (French Antilles (aromeAntilles)), `aromeFrance` (Metropolitan France (aromeFrance)), `aromeReunion` (Réunion island (aromeReunion)), `icon` (Global (ICON-Global) (icon)), `iconD2` (Germany, Austria and Switzerland, high resolution (iconD2)), `iconEu` (Europe and surrounding areas (iconEu, free key)), `gfs` (Global (gfs, free key)), `namConus` (Continental USA and surrounding areas (namConus, free key)), `namHawaii` (Hawaii (namHawaii, free key)), and 4 more. Default: `gfs`.
- Hours ahead (`hours_ahead`, number): How far into the future to return, in hours. The models run from about 2 days (high resolution) to about 10 days out; anything past the end of the run simply returns fewer steps. From 1 to 384. Default: `24`.

**Outputs**

- `forecast_end` (text): Time of the last step (UTC)
- `forecast_start` (text): Time of the first step (UTC)
- `hours_ahead` (number): Requested window, in hours
- `latitude` (number): Latitude the forecast is for
- `longitude` (number): Longitude the forecast is for
- `model` (text): Forecast model used
- `model_coverage` (text): What the model covers, for example 'Global'
- `row_count` (number): How many forecast steps returned
- `rows` (list): One entry per forecast step, earliest first
- `units` (object): Windy's own unit for each raw response key

**Example output**

```json
{
  "forecast_end": "2026-08-20T15:00:00Z",
  "forecast_start": "2026-08-19T15:00:00Z",
  "hours_ahead": 24,
  "latitude": 50.088,
  "longitude": 14.42,
  "model": "gfs",
  "model_coverage": "Global",
  "row_count": 1,
  "rows": [
    {
      "cape_j_per_kg": 118.0,
      "convective_precipitation_mm": 0.0,
      "dew_point_c": 12.1,
      "dew_point_f": 53.8,
      "high_cloud_percent": 21.0,
      "humidity_percent": 47.0,
      "low_cloud_percent": 12.0,
      "medium_cloud_percent": 3.0,
      "precipitation_mm": 0.0,
      "precipitation_type": "No precipitation",
      "pressure_hpa": 1016.4,
      "snow_mm": 0.0,
      "temperature_c": 24.3,
      "temperature_f": 75.7,
      "time": "2026-08-19T15:00:00Z",
      "timestamp_ms": 1787151600000,
      "wind_direction": "WSW",
      "wind_direction_degrees": 245.0,
      "wind_gust_kmh": 29.5,
      "wind_gust_knots": 15.9,
      "wind_gust_ms": 8.2,
      "wind_speed_kmh": 16.6,
      "wind_speed_knots": 8.9,
      "wind_speed_ms": 4.6
    }
  ],
  "units": {
    "pressure-surface": "Pa",
    "temp-surface": "K"
  }
}
```

### Get webcams for a map

Get webcams spread evenly across a map view, for a rectangle and a zoom level, so pins do not pile up on top of each other. Where several webcams sit close together one stands in for the group and carries how many it represents. The rectangle may not be wider than the zoom level allows: 22.5° of latitude at zoom 4, halving with every level in.

**Inputs**

- North edge (latitude) (`north_latitude`, number, required): Latitude of the top edge of the area, between -90 and 90. From -90 to 90.
- East edge (longitude) (`east_longitude`, number, required): Longitude of the right edge of the area, between -180 and 180. From -180 to 180.
- South edge (latitude) (`south_latitude`, number, required): Latitude of the bottom edge of the area, between -90 and 90. From -90 to 90.
- West edge (longitude) (`west_longitude`, number, required): Longitude of the left edge of the area, between -180 and 180. From -180 to 180.
- Zoom level (`zoom`, number, required): Map zoom level, 4 (continents) to 18 (streets). It decides how many webcams are grouped together, and how wide the rectangle may be. From 4 to 18. Default: `8`.
- Details to include (`include`, text): Which parts of each webcam record to fetch. Everything is included when nothing is chosen. One or more of: `categories`, `images` (Still images), `location`, `player` (Live and timelapse players), `urls` (Links).
- Language (`language`, text): Language for webcam titles, category names and place names. Defaults to English.

**Outputs**

- `bounding_box` (object): The area covered
- `returned` (number): How many webcams returned
- `webcams` (list): The webcams, each possibly standing in for a cluster
- `zoom` (number): The zoom level used

**Example output**

```json
{
  "bounding_box": {
    "east_longitude": 9.0,
    "north_latitude": 47.0,
    "south_latitude": 46.0,
    "west_longitude": 7.0
  },
  "returned": 1,
  "webcams": [
    {
      "categories": [
        {
          "id": "landscape",
          "name": "Landscape"
        }
      ],
      "category_ids": [
        "landscape"
      ],
      "cluster_size": 14,
      "detail_url": "https://www.windy.com/webcams/1179853135",
      "images": {
        "current": {
          "preview": "https://images-webcams.windy.com/35/1179853135/current/preview/1179853135.jpg",
          "thumbnail": "https://images-webcams.windy.com/35/1179853135/current/thumbnail/1179853135.jpg"
        },
        "daylight": {},
        "sizes": {
          "preview": {
            "height": 224,
            "width": 400
          }
        }
      },
      "last_updated_on": "2026-08-19T14:52:11.000Z",
      "latitude": -33.84903,
      "live_stream_url": "https://webcams.windy.com/webcams/public/embed/player/1179853135/live",
      "location": {
        "city": "Sydney",
        "city_code": "AU.02.Sydney",
        "continent": "Oceania",
        "continent_code": "OC",
        "country": "Australia",
        "country_code": "AU",
        "latitude": -33.84903,
        "longitude": 151.21559,
        "region": "New South Wales",
        "region_code": "AU.02"
      },
      "longitude": 151.21559,
      "place": "Sydney, Australia",
      "player": {
        "day": "https://webcams.windy.com/webcams/public/embed/player/1179853135/day",
        "lifetime": "https://webcams.windy.com/webcams/public/embed/player/1179853135/lifetime",
        "live": "https://webcams.windy.com/webcams/public/embed/player/1179853135/live",
        "month": "https://webcams.windy.com/webcams/public/embed/player/1179853135/month",
        "year": "https://webcams.windy.com/webcams/public/embed/player/1179853135/year"
      },
      "preview_image_url": "https://images-webcams.windy.com/35/1179853135/current/preview/1179853135.jpg",
      "provider_url": "https://www.example-webcam-owner.com/",
      "status": "active",
      "title": "Sydney: Sydney Harbour Bridge - Sydney Opera House",
      "view_count": 1282618,
      "webcam_id": 1179853135
    }
  ],
  "zoom": 8
}
```

### List webcam categories

List the categories a webcam can be filed under, with their names in the language you choose. These are the values the category filters accept.

**Inputs**

- Language (`language`, text): Language for webcam titles, category names and place names. Defaults to English.

**Outputs**

- `categories` (list): The categories
- `returned` (number): How many categories

**Example output**

```json
{
  "categories": [
    {
      "id": "beach",
      "name": "Beach"
    },
    {
      "id": "mountain",
      "name": "Mountain"
    }
  ],
  "returned": 2
}
```

### List webcam cities

List the city codes the webcam filters accept, with their localised names. Search by name or code to find one.

**Inputs**

- Search (`search`, text): Only return entries whose name or code contains this text.
- How many to return (`limit`, number): How many entries to return after the search filter, from 1 to 5000. From 1 to 5000. Default: `250`.
- Language (`language`, text): Language for webcam titles, category names and place names. Defaults to English.

**Outputs**

- `cities` (list): The cities, code and name
- `matched` (number): How many matched the search
- `returned` (number): How many are in this result
- `total` (number): How many Windy publishes in all

**Example output**

```json
{
  "cities": [
    {
      "code": "AU.02.Sydney",
      "name": "Sydney"
    }
  ],
  "matched": 1,
  "returned": 1,
  "total": 21453
}
```

### List webcam continents

List the continent codes the webcam filters accept, with their localised names.

**Inputs**

- Search (`search`, text): Only return entries whose name or code contains this text.
- How many to return (`limit`, number): How many entries to return after the search filter, from 1 to 5000. From 1 to 5000. Default: `250`.
- Language (`language`, text): Language for webcam titles, category names and place names. Defaults to English.

**Outputs**

- `continents` (list): The continents, code and name
- `matched` (number): How many matched the search
- `returned` (number): How many are in this result
- `total` (number): How many Windy publishes in all

**Example output**

```json
{
  "continents": [
    {
      "code": "EU",
      "name": "Europe"
    },
    {
      "code": "OC",
      "name": "Oceania"
    }
  ],
  "matched": 7,
  "returned": 2,
  "total": 7
}
```

### List webcam countries

List the country codes the webcam filters accept, with their localised names. Search by name or code to find one.

**Inputs**

- Search (`search`, text): Only return entries whose name or code contains this text.
- How many to return (`limit`, number): How many entries to return after the search filter, from 1 to 5000. From 1 to 5000. Default: `250`.
- Language (`language`, text): Language for webcam titles, category names and place names. Defaults to English.

**Outputs**

- `countries` (list): The countries, code and name
- `matched` (number): How many matched the search
- `returned` (number): How many are in this result
- `total` (number): How many Windy publishes in all

**Example output**

```json
{
  "countries": [
    {
      "code": "AU",
      "name": "Australia"
    }
  ],
  "matched": 1,
  "returned": 1,
  "total": 214
}
```

### List webcam regions

List the region codes the webcam filters accept, with their localised names. Regions are states and provinces, coded like 'AU.02'; search by name or code to find one.

**Inputs**

- Search (`search`, text): Only return entries whose name or code contains this text.
- How many to return (`limit`, number): How many entries to return after the search filter, from 1 to 5000. From 1 to 5000. Default: `250`.
- Language (`language`, text): Language for webcam titles, category names and place names. Defaults to English.

**Outputs**

- `matched` (number): How many matched the search
- `regions` (list): The regions, code and name
- `returned` (number): How many are in this result
- `total` (number): How many Windy publishes in all

**Example output**

```json
{
  "matched": 1,
  "regions": [
    {
      "code": "AU.02",
      "name": "New South Wales"
    }
  ],
  "returned": 1,
  "total": 3894
}
```

### Search webcams

Search Windy's worldwide webcam collection by category and place. Filter by what the camera looks at (beach, mountain, traffic and so on) and by continent, country, region or city, and sort by popularity or by when the webcam was added. Each result carries its location, still image, live and timelapse player links and its page on windy.com.

**Inputs**

- Categories (`categories`, text): Only return webcams in these categories, at most 10. One or more of: `airport`, `beach`, `building`, `city`, `coast`, `forest`, `indoor`, `lake`, `landscape`, `meteo` (Weather station), and 8 more.
- Category matching (`category_operation`, text): Whether a webcam has to be in every chosen category or just one of them. Only applies when categories are chosen; every category by default. One of: `and` (Match every chosen category), `or` (Match any chosen category).
- Continents (`continents`, text): Only return webcams on these continents, at most 2. One or more of: `AF` (Africa), `AN` (Antarctica), `AS` (Asia), `EU` (Europe), `NA` (North America), `OC` (Oceania), `SA` (South America).
- Countries (`countries`, list): Only return webcams in these countries, at most 10.
- Regions (`regions`, list): Only return webcams in these regions (states or provinces), at most 10.
- Cities (`cities`, list): Only return webcams in these cities, at most 10.
- Sort by (`sort_by`, text): How to order the results. Windy's own order is used when this is empty. One of: `popularity`, `createdOn` (When it was added).
- Sort direction (`sort_direction`, text): Which end of the sort to start from. Only applies when a sort is chosen; highest or newest first by default. One of: `desc` (Highest or newest first), `asc` (Lowest or oldest first).
- How many webcams (`limit`, number): How many webcams to return, from 1 to 50. From 1 to 50. Default: `10`.
- Skip this many (`offset`, number): Where to start in the result list, for paging. The free Webcams plan stops at 1000 and the professional plan at 10000. From 0 to 100000. Default: `0`.
- Details to include (`include`, text): Which parts of each webcam record to fetch. Everything is included when nothing is chosen. One or more of: `categories`, `images` (Still images), `location`, `player` (Live and timelapse players), `urls` (Links).
- Language (`language`, text): Language for webcam titles, category names and place names. Defaults to English.

**Outputs**

- `filters` (object): The filters that were applied
- `limit` (number): The limit that was applied
- `returned` (number): How many are in this result
- `total` (number): How many webcams match the filters in all
- `webcams` (list): The matching webcams

**Example output**

```json
{
  "filters": {
    "categories": [
      "beach"
    ],
    "cities": [],
    "continents": [],
    "countries": [
      "AU"
    ],
    "regions": []
  },
  "limit": 10,
  "returned": 1,
  "total": 1284,
  "webcams": [
    {
      "categories": [
        {
          "id": "landscape",
          "name": "Landscape"
        }
      ],
      "category_ids": [
        "landscape"
      ],
      "detail_url": "https://www.windy.com/webcams/1179853135",
      "images": {
        "current": {
          "preview": "https://images-webcams.windy.com/35/1179853135/current/preview/1179853135.jpg",
          "thumbnail": "https://images-webcams.windy.com/35/1179853135/current/thumbnail/1179853135.jpg"
        },
        "daylight": {},
        "sizes": {
          "preview": {
            "height": 224,
            "width": 400
          }
        }
      },
      "last_updated_on": "2026-08-19T14:52:11.000Z",
      "latitude": -33.84903,
      "live_stream_url": "https://webcams.windy.com/webcams/public/embed/player/1179853135/live",
      "location": {
        "city": "Sydney",
        "city_code": "AU.02.Sydney",
        "continent": "Oceania",
        "continent_code": "OC",
        "country": "Australia",
        "country_code": "AU",
        "latitude": -33.84903,
        "longitude": 151.21559,
        "region": "New South Wales",
        "region_code": "AU.02"
      },
      "longitude": 151.21559,
      "place": "Sydney, Australia",
      "player": {
        "day": "https://webcams.windy.com/webcams/public/embed/player/1179853135/day",
        "lifetime": "https://webcams.windy.com/webcams/public/embed/player/1179853135/lifetime",
        "live": "https://webcams.windy.com/webcams/public/embed/player/1179853135/live",
        "month": "https://webcams.windy.com/webcams/public/embed/player/1179853135/month",
        "year": "https://webcams.windy.com/webcams/public/embed/player/1179853135/year"
      },
      "preview_image_url": "https://images-webcams.windy.com/35/1179853135/current/preview/1179853135.jpg",
      "provider_url": "https://www.example-webcam-owner.com/",
      "status": "active",
      "title": "Sydney: Sydney Harbour Bridge - Sydney Opera House",
      "view_count": 1282618,
      "webcam_id": 1179853135
    }
  ]
}
```
