# National Weather Service

> Read official US weather straight from the National Weather Service: forecasts by the day and by the hour for any coordinate, current conditions and observation history from its reporting stations, every watch, warning and advisory in force, the zones and local offices behind them, the text bulletins forecasters write, and a glossary that explains the jargon. No account or API key required.

App · Weather & Space · 15 actions. Web page: https://docs.lodol.com/docs/integrations/national-weather-service

## Actions

### Find text bulletins

Find the text bulletins forecasters write, newest first - area forecast discussions, public information statements, river statements, hurricane advisories and about 340 other kinds. Filter by kind, by the office that issued it, and by time. Each row names a bulletin; 'Read a text bulletin' returns its words.

**Inputs**

- Bulletin types (`types`, list): Only these kinds of bulletin. Leave empty for every kind. 'Area Forecast Discussion (AFD)' is the forecaster's reasoning behind today's forecast.
- Issued by (`locations`, list): Only bulletins from these offices. Leave empty for every office. Pick from the list: this is the three-letter office code (LOT), not the four-letter one a result shows as 'issuingOffice' (KLOT).
- From (`start`, date and time): Only results at or after this time. Leave blank for no floor.
- Until (`end`, date and time): Only results at or before this time. Leave blank for no ceiling.
- How many (`limit`, number): Most results to return. Defaults to 25; the API's ceiling is 500. From 1 to 500. Default: `25`.

**Outputs**

- `count` (number): Number of rows in 'entries'
- `entries` (list): The results, or an empty list when there are none

**Example output**

```json
{
  "count": 1,
  "entries": [
    {
      "id": "bb0cad13-f767-4641-9424-f410ee7cb4cf",
      "issuanceTime": "2026-09-02T18:32:00+00:00",
      "issuingOffice": "KLOT",
      "productCode": "AFD",
      "productName": "Area Forecast Discussion",
      "wmoCollectiveId": "FXUS63"
    }
  ]
}
```

### Find weather stations

Find the weather stations that report observations, either the ones nearest a latitude and longitude (closest first) or every station across whole states. Each comes back with its ID, name, position, elevation and the zones it sits in. Search one way at a time: by coordinate or by state.

**Inputs**

- Latitude (`latitude`, number): Latitude of the place, in degrees. Positive north of the equator. Fill in both latitude and longitude, or neither. From -90 to 90.
- Longitude (`longitude`, number): Longitude of the place, in degrees. Negative in the Americas. Fill in both latitude and longitude, or neither. From -180 to 180.
- States (`states`, list): Only cover these states and territories. The last fifteen entries are the coastal, Great Lakes and offshore marine areas, which the National Weather Service files separately from the states beside them. One or more of: `AL` (Alabama (AL)), `AK` (Alaska (AK)), `AS` (American Samoa (AS)), `AZ` (Arizona (AZ)), `AR` (Arkansas (AR)), `CA` (California (CA)), `CO` (Colorado (CO)), `CT` (Connecticut (CT)), `DE` (Delaware (DE)), `DC` (District of Columbia (DC)), and 64 more.
- How many (`limit`, number): Most results to return. Defaults to 25; the API's ceiling is 500. From 1 to 500. Default: `25`.

**Outputs**

- `count` (number): Number of rows in 'entries'
- `entries` (list): The results, or an empty list when there are none

**Example output**

```json
{
  "count": 1,
  "entries": [
    {
      "bearing": 228,
      "bearingUnit": "degrees",
      "county": "ILC031",
      "distance": 9.58,
      "distanceUnit": "mi",
      "elevation": 617,
      "elevationUnit": "ft",
      "fireWeatherZone": "ILZ014",
      "forecast": "ILZ104",
      "latitude": 41.78417,
      "longitude": -87.75528,
      "name": "Chicago, Chicago Midway Airport",
      "stationIdentifier": "KMDW",
      "timeZone": "America/Chicago"
    }
  ]
}
```

### Find zones

Find the zones the National Weather Service divides the country into - the areas forecasts and alerts are issued against. Search across states, or around a latitude and longitude, one way at a time. Defaults to public forecast zones; county and fire weather zones are the other two most alerts name.

**Inputs**

- States (`states`, list): Only cover these states and territories. The last fifteen entries are the coastal, Great Lakes and offshore marine areas, which the National Weather Service files separately from the states beside them. One or more of: `AL` (Alabama (AL)), `AK` (Alaska (AK)), `AS` (American Samoa (AS)), `AZ` (Arizona (AZ)), `AR` (Arkansas (AR)), `CA` (California (CA)), `CO` (Colorado (CO)), `CT` (Connecticut (CT)), `DE` (Delaware (DE)), `DC` (District of Columbia (DC)), and 64 more.
- Zone type (`zone_type`, text): Which kind of zone to look for. Forecast zones are what the public forecast is written against and are the usual answer. One of: `forecast` (Forecast zones (public forecasts)), `county` (Counties), `fire` (Fire weather zones), `public` (Public zones), `coastal` (Coastal marine zones), `offshore` (Offshore marine zones), `land` (All land zones), `marine` (All marine zones). Default: `forecast`.
- Latitude (`latitude`, number): Latitude of the place, in degrees. Positive north of the equator. Fill in both latitude and longitude, or neither. From -90 to 90.
- Longitude (`longitude`, number): Longitude of the place, in degrees. Negative in the Americas. Fill in both latitude and longitude, or neither. From -180 to 180.
- How many (`limit`, number): Most results to return. Defaults to 50; the API's ceiling is 500. From 1 to 500. Default: `50`.

**Outputs**

- `count` (number): Number of rows in 'entries'
- `entries` (list): The results, or an empty list when there are none

**Example output**

```json
{
  "count": 1,
  "entries": [
    {
      "cwa": [
        "LOT"
      ],
      "forecastOffice": "LOT",
      "id": "ILZ014",
      "name": "Cook",
      "observationStations": [
        "KORD",
        "KMDW",
        "KPWK"
      ],
      "radarStation": "LOT",
      "state": "IL",
      "timeZone": [
        "America/Chicago"
      ],
      "type": "public"
    }
  ]
}
```

### Get active alerts

Read every watch, warning and advisory in force right now - tornado warnings, winter storm watches, flood advisories, heat advisories and the rest - with the areas each covers, its severity and urgency, when it expires, and the full text and safety instructions. Narrow it one way at a time: to a latitude and longitude, to states, or to zones. Leave the scope empty for the whole country. No alerts in force is an empty list, not an error.

**Inputs**

- Latitude (`latitude`, number): Latitude of the place, in degrees. Positive north of the equator. Fill in both latitude and longitude, or neither. From -90 to 90.
- Longitude (`longitude`, number): Longitude of the place, in degrees. Negative in the Americas. Fill in both latitude and longitude, or neither. From -180 to 180.
- States (`areas`, list): Only alerts in these states and territories. The last fifteen entries are the coastal, Great Lakes and offshore marine areas, where marine warnings are issued. Narrow the search one way only: by coordinate, by state, or by zone. One or more of: `AL` (Alabama (AL)), `AK` (Alaska (AK)), `AS` (American Samoa (AS)), `AZ` (Arizona (AZ)), `AR` (Arkansas (AR)), `CA` (California (CA)), `CO` (Colorado (CO)), `CT` (Connecticut (CT)), `DE` (Delaware (DE)), `DC` (District of Columbia (DC)), and 64 more.
- Zones (`zones`, text): Only alerts covering these zones, such as ILZ104 or ILC031. Both forecast zones and counties work here. Use 'Find zones' to look them up. Narrow the search one way only: by coordinate, by state, or by zone.
- Alert types (`event`, list): Only these kinds of alert, such as Tornado Warning or Heat Advisory. Leave empty for every kind.
- Severity (`severity`, list): Only alerts of this severity - how bad the expected impact is. Leave empty for every severity. One or more of: `Extreme` (Extreme - extraordinary threat to life or property), `Severe` (Severe - significant threat to life or property), `Moderate` (Moderate - possible threat to life or property), `Minor` (Minor - minimal threat to life or property), `Unknown`.
- Urgency (`urgency`, list): Only alerts of this urgency - how soon action is needed. Leave empty for every urgency. One or more of: `Immediate` (Immediate - act now), `Expected` (Expected - act within the hour), `Future` (Future - act in the near future), `Past` (Past - the event is over), `Unknown`.
- Certainty (`certainty`, list): Only alerts of this certainty - how likely the event is. Leave empty for every certainty. One or more of: `Observed` (Observed - it is happening), `Likely` (Likely - more than even odds), `Possible` (Possible - less than even odds), `Unlikely`, `Unknown`.

**Outputs**

- `count` (number): Number of rows in 'entries'
- `entries` (list): The results, or an empty list when there are none

**Example output**

```json
{
  "count": 1,
  "entries": [
    {
      "affectedZones": [
        "ILZ014",
        "ILZ013",
        "ILZ103",
        "ILZ104"
      ],
      "areaDesc": "Cook; DuPage; Lake; Will",
      "category": "Met",
      "certainty": "Likely",
      "description": "SEVERE THUNDERSTORM WATCH 604 IS IN EFFECT UNTIL 8 PM CDT THIS EVENING FOR THE FOLLOWING AREAS IN ILLINOIS: COOK, DUPAGE, LAKE, WILL.",
      "effective": "2026-09-02T13:47:00-05:00",
      "ends": "2026-09-02T20:00:00-05:00",
      "event": "Severe Thunderstorm Watch",
      "expires": "2026-09-02T19:15:00-05:00",
      "headline": "Severe Thunderstorm Watch issued September 2 at 1:47PM CDT until September 2 at 8:00PM CDT by NWS Chicago IL",
      "id": "urn:oid:2.49.0.1.840.0.a094c3e16b7371eb3d3d755fca6df17ab4eee494.001.1",
      "instruction": "Remain alert for approaching severe thunderstorms and be ready to move to a place of safety.",
      "messageType": "Alert",
      "onset": "2026-09-02T13:47:00-05:00",
      "response": "Prepare",
      "senderName": "NWS Chicago IL",
      "sent": "2026-09-02T13:47:00-05:00",
      "severity": "Severe",
      "status": "Actual",
      "urgency": "Expected"
    }
  ]
}
```

### Get alert

Read one alert in full by its ID, including the areas it covers, its timing, and the complete text and safety instructions. IDs come from the two alert search actions.

**Inputs**

- Alert (`alert_id`, text, required): The ID of the alert to read, as returned by 'Get active alerts' or 'Search past alerts'.

**Outputs**

- `affectedZones` (list): Zone IDs the alert covers
- `areaDesc` (text): The places it covers
- `certainty` (text): Observed … Unlikely
- `description` (text): The full text
- `ends` (text): When the event ends
- `event` (text): e.g. 'Tornado Warning'
- `expires` (text): When the alert lapses
- `headline` (text): The one-line summary
- `id` (text): The alert's ID
- `instruction` (text): What people should do
- `onset` (text): When the event begins
- `senderName` (text): The office that issued it
- `severity` (text): Extreme … Minor
- `urgency` (text): Immediate … Past

**Example output**

```json
{
  "affectedZones": [
    "ILZ014",
    "ILZ013",
    "ILZ103",
    "ILZ104"
  ],
  "areaDesc": "Cook; DuPage; Lake; Will",
  "category": "Met",
  "certainty": "Likely",
  "description": "SEVERE THUNDERSTORM WATCH 604 IS IN EFFECT UNTIL 8 PM CDT THIS EVENING FOR THE FOLLOWING AREAS IN ILLINOIS: COOK, DUPAGE, LAKE, WILL.",
  "effective": "2026-09-02T13:47:00-05:00",
  "ends": "2026-09-02T20:00:00-05:00",
  "event": "Severe Thunderstorm Watch",
  "expires": "2026-09-02T19:15:00-05:00",
  "headline": "Severe Thunderstorm Watch issued September 2 at 1:47PM CDT until September 2 at 8:00PM CDT by NWS Chicago IL",
  "id": "urn:oid:2.49.0.1.840.0.a094c3e16b7371eb3d3d755fca6df17ab4eee494.001.1",
  "instruction": "Remain alert for approaching severe thunderstorms and be ready to move to a place of safety.",
  "messageType": "Alert",
  "onset": "2026-09-02T13:47:00-05:00",
  "response": "Prepare",
  "senderName": "NWS Chicago IL",
  "sent": "2026-09-02T13:47:00-05:00",
  "severity": "Severe",
  "status": "Actual",
  "urgency": "Expected"
}
```

### Get current conditions

Read the weather happening right now: temperature, what it feels like, humidity, wind, pressure, visibility and a one-line description. Name a station, or give a latitude and longitude and the nearest reporting station is used. The readings come back at the top level, so a step reads 'temperature' directly.

**Inputs**

- Station (`station`, text): Which observation station to read, such as KORD. Leave blank and give a latitude and longitude instead to use the nearest station. Use 'Find weather stations' to see what is nearby.
- Latitude (`latitude`, number): Latitude of the place, in degrees. Positive north of the equator. Fill in both latitude and longitude, or neither. From -90 to 90.
- Longitude (`longitude`, number): Longitude of the place, in degrees. Negative in the Americas. Fill in both latitude and longitude, or neither. From -180 to 180.
- Units (`units`, text): Which units the readings come back in. US customary gives Fahrenheit, miles per hour and inches; metric gives Celsius, kilometres per hour and millimetres. Every reading is published with a matching '<field>Unit' label either way. One of: `us` (US customary (°F, mph, in)), `si` (Metric (°C, km/h, mm)). Default: `us`.

**Outputs**

- `barometricPressure` (number): Station pressure
- `dewpoint` (number): Dew point
- `heatIndex` (number): Apparent temperature, if hot
- `rawMessage` (text): The METAR bulletin the station filed, verbatim
- `relativeHumidity` (number): Humidity, percent
- `stationId` (text): The station that reported
- `stationName` (text): Its plain-language name
- `temperature` (number): Air temperature
- `temperatureUnit` (text): 'F' or 'C'
- `textDescription` (text): The conditions in a few words, e.g. 'Mostly Cloudy'
- `timestamp` (text): When it was observed
- `units` (text): 'us' or 'si'
- `visibility` (number): How far you can see
- `windChill` (number): Apparent temperature, if cold
- `windDirection` (number): Direction the wind blows from, in degrees
- `windGust` (number): Gust speed, if any
- `windSpeed` (number): Sustained wind speed

**Example output**

```json
{
  "barometricPressure": 29.87,
  "barometricPressureUnit": "inHg",
  "dewpoint": 62.6,
  "dewpointUnit": "F",
  "elevation": 662.73,
  "elevationUnit": "ft",
  "heatIndex": 88.2,
  "heatIndexUnit": "F",
  "rawMessage": "KORD 022151Z 23011KT 10SM BKN055 30/17 A2987 RMK AO2 SLP111",
  "relativeHumidity": 45.6,
  "relativeHumidityUnit": "percent",
  "stationId": "KORD",
  "stationName": "Chicago, Chicago O'Hare International Airport",
  "temperature": 86,
  "temperatureUnit": "F",
  "textDescription": "Mostly Cloudy",
  "timestamp": "2026-09-02T21:51:00+00:00",
  "units": "us",
  "visibility": 10,
  "visibilityUnit": "mi",
  "windChill": null,
  "windChillUnit": "F",
  "windDirection": 230,
  "windDirectionUnit": "degrees",
  "windGust": null,
  "windGustUnit": "mph",
  "windSpeed": 12.66,
  "windSpeedUnit": "mph"
}
```

### Get forecast

Read the official forecast for a place, period by period (this afternoon, tonight, Thursday, and so on for about a week): temperature, chance of rain, wind, a short summary and the forecaster's full wording. Give a latitude and longitude; the nearest city, the forecast office, the zones covering the point and today's sunrise and sunset come back with it.

**Inputs**

- Latitude (`latitude`, number, required): Latitude of the place, in degrees. Positive north of the equator. Coordinates are rounded to four decimal places, which is about 10 metres. From -90 to 90.
- Longitude (`longitude`, number, required): Longitude of the place, in degrees. Negative in the Americas, which is everywhere the National Weather Service forecasts. From -180 to 180.
- Units (`units`, text): Which units the readings come back in. US customary gives Fahrenheit, miles per hour and inches; metric gives Celsius, kilometres per hour and millimetres. Every reading is published with a matching '<field>Unit' label either way. One of: `us` (US customary (°F, mph, in)), `si` (Metric (°C, km/h, mm)). Default: `us`.

**Outputs**

- `count` (number): Number of forecast periods
- `entries` (list): The forecast periods, in order
- `location` (object): The place the forecast is for: nearest city and state, time zone, forecast office, forecast and fire zones, county, radar station, and today's sunrise and sunset
- `units` (text): 'us' or 'si'
- `updated` (text): When the National Weather Service last revised it

**Example output**

```json
{
  "count": 1,
  "entries": [
    {
      "detailedForecast": "A chance of showers and thunderstorms. Partly sunny, with a high near 88. Southwest wind around 10 mph.",
      "endTime": "2026-09-02T18:00:00-05:00",
      "isDaytime": true,
      "name": "This Afternoon",
      "number": 1,
      "probabilityOfPrecipitation": 20,
      "probabilityOfPrecipitationUnit": "percent",
      "shortForecast": "Chance Showers And Thunderstorms",
      "startTime": "2026-09-02T16:00:00-05:00",
      "temperature": 88,
      "temperatureTrend": null,
      "temperatureUnit": "F",
      "windDirection": "SW",
      "windSpeed": "10 mph"
    }
  ],
  "location": {
    "city": "Chicago",
    "county": "ILC031",
    "fireWeatherZone": "ILZ014",
    "forecastZone": "ILZ014",
    "gridX": 76,
    "gridY": 73,
    "latitude": 41.8781,
    "longitude": -87.6298,
    "office": "LOT",
    "radarStation": "KLOT",
    "state": "IL",
    "sunrise": "2026-09-02T06:24:11-05:00",
    "sunset": "2026-09-02T19:22:47-05:00",
    "timeZone": "America/Chicago"
  },
  "units": "us",
  "updated": "2026-09-02T18:32:00+00:00"
}
```

### Get forecast office

Look up one of the 124 local forecast offices: its address, telephone number, public email address and website, plus every county, forecast zone, fire weather zone and reporting station it is responsible for.

**Inputs**

- Forecast office (`office`, text, required): Which local forecast office to look up. One of: `ABR` (Aberdeen, SD (ABR)), `ALY` (Albany, NY (ALY)), `ABQ` (Albuquerque, NM (ABQ)), `AMA` (Amarillo, TX (AMA)), `AER` (Anchorage East, AK (AER)), `ALU` (Anchorage West, AK (ALU)), `AFC` (Anchorage, AK (AFC)), `FFC` (Atlanta/Peachtree City, GA (FFC)), `EWX` (Austin/San Antonio, TX (EWX)), `LWX` (Baltimore, MD / Washington, DC (LWX)), and 114 more. Default: `LOT`.

**Outputs**

- `city` (text): City
- `counties` (list): County zone IDs the office covers
- `email` (text): Public email address
- `fireZones` (list): Fire weather zone IDs the office covers
- `forecastZones` (list): Forecast zone IDs the office covers
- `id` (text): The office's code, e.g. 'LOT'
- `name` (text): e.g. 'Chicago, IL'
- `observationStations` (list): Station IDs the office reports from
- `postalCode` (text): ZIP code
- `region` (text): NWS region, e.g. 'cr'
- `state` (text): State
- `streetAddress` (text): Street address
- `telephone` (text): Public telephone number
- `website` (text): The office's own site

**Example output**

```json
{
  "city": "Romeoville",
  "counties": [
    "ILC031",
    "ILC043",
    "ILC097"
  ],
  "email": "nws.chicago@noaa.gov",
  "fireZones": [
    "ILZ003",
    "ILZ004",
    "ILZ014"
  ],
  "forecastZones": [
    "ILZ003",
    "ILZ004",
    "ILZ014"
  ],
  "id": "LOT",
  "name": "Chicago, IL",
  "observationStations": [
    "KORD",
    "KMDW",
    "KDPA"
  ],
  "postalCode": "60446",
  "region": "cr",
  "state": "IL",
  "streetAddress": "333 West University Drive",
  "telephone": "815-834-1435",
  "website": "https://www.weather.gov/lot"
}
```

### Get hourly forecast

Read the forecast for a place hour by hour for the next week: temperature, dew point, humidity, chance of rain, wind and a short summary for each hour. Give a latitude and longitude.

**Inputs**

- Latitude (`latitude`, number, required): Latitude of the place, in degrees. Positive north of the equator. Coordinates are rounded to four decimal places, which is about 10 metres. From -90 to 90.
- Longitude (`longitude`, number, required): Longitude of the place, in degrees. Negative in the Americas, which is everywhere the National Weather Service forecasts. From -180 to 180.
- Units (`units`, text): Which units the readings come back in. US customary gives Fahrenheit, miles per hour and inches; metric gives Celsius, kilometres per hour and millimetres. Every reading is published with a matching '<field>Unit' label either way. One of: `us` (US customary (°F, mph, in)), `si` (Metric (°C, km/h, mm)). Default: `us`.

**Outputs**

- `count` (number): Number of forecast periods
- `entries` (list): The forecast periods, in order
- `location` (object): The place the forecast is for: nearest city and state, time zone, forecast office, forecast and fire zones, county, radar station, and today's sunrise and sunset
- `units` (text): 'us' or 'si'
- `updated` (text): When the National Weather Service last revised it

**Example output**

```json
{
  "count": 1,
  "entries": [
    {
      "dewpoint": 62.1,
      "dewpointUnit": "F",
      "endTime": "2026-09-02T17:00:00-05:00",
      "isDaytime": true,
      "number": 1,
      "probabilityOfPrecipitation": 20,
      "probabilityOfPrecipitationUnit": "percent",
      "relativeHumidity": 43,
      "relativeHumidityUnit": "percent",
      "shortForecast": "Chance Showers And Thunderstorms",
      "startTime": "2026-09-02T16:00:00-05:00",
      "temperature": 88,
      "temperatureUnit": "F",
      "windDirection": "SW",
      "windSpeed": "10 mph"
    }
  ],
  "location": {
    "city": "Chicago",
    "county": "ILC031",
    "fireWeatherZone": "ILZ014",
    "forecastZone": "ILZ014",
    "gridX": 76,
    "gridY": 73,
    "latitude": 41.8781,
    "longitude": -87.6298,
    "office": "LOT",
    "radarStation": "KLOT",
    "state": "IL",
    "sunrise": "2026-09-02T06:24:11-05:00",
    "sunset": "2026-09-02T19:22:47-05:00",
    "timeZone": "America/Chicago"
  },
  "units": "us",
  "updated": "2026-09-02T18:32:00+00:00"
}
```

### Get past observations

Read what a weather station recorded over a stretch of time, newest first - one row per observation, usually hourly. Name a station, or give a latitude and longitude and the nearest reporting station is used. Defaults to the last 24 observations.

**Inputs**

- Station (`station`, text): Which observation station to read, such as KORD. Leave blank and give a latitude and longitude instead to use the nearest station. Use 'Find weather stations' to see what is nearby.
- Latitude (`latitude`, number): Latitude of the place, in degrees. Positive north of the equator. Fill in both latitude and longitude, or neither. From -90 to 90.
- Longitude (`longitude`, number): Longitude of the place, in degrees. Negative in the Americas. Fill in both latitude and longitude, or neither. From -180 to 180.
- From (`start`, date and time): Only results at or after this time. Leave blank for no floor.
- Until (`end`, date and time): Only results at or before this time. Leave blank for no ceiling.
- How many (`limit`, number): Most observations to return. Defaults to 24, which is about a day; the API's ceiling is 500. From 1 to 500. Default: `24`.
- Units (`units`, text): Which units the readings come back in. US customary gives Fahrenheit, miles per hour and inches; metric gives Celsius, kilometres per hour and millimetres. Every reading is published with a matching '<field>Unit' label either way. One of: `us` (US customary (°F, mph, in)), `si` (Metric (°C, km/h, mm)). Default: `us`.

**Outputs**

- `count` (number): Number of rows in 'entries'
- `entries` (list): The results, or an empty list when there are none

**Example output**

```json
{
  "count": 1,
  "entries": [
    {
      "barometricPressure": 29.87,
      "barometricPressureUnit": "inHg",
      "dewpoint": 62.6,
      "dewpointUnit": "F",
      "elevation": 662.73,
      "elevationUnit": "ft",
      "heatIndex": 88.2,
      "heatIndexUnit": "F",
      "rawMessage": "KORD 022151Z 23011KT 10SM BKN055 30/17 A2987 RMK AO2 SLP111",
      "relativeHumidity": 45.6,
      "relativeHumidityUnit": "percent",
      "stationId": "KORD",
      "stationName": "Chicago, Chicago O'Hare International Airport",
      "temperature": 86,
      "temperatureUnit": "F",
      "textDescription": "Mostly Cloudy",
      "timestamp": "2026-09-02T21:51:00+00:00",
      "units": "us",
      "visibility": 10,
      "visibilityUnit": "mi",
      "windChill": null,
      "windChillUnit": "F",
      "windDirection": 230,
      "windDirectionUnit": "degrees",
      "windGust": null,
      "windGustUnit": "mph",
      "windSpeed": 12.66,
      "windSpeedUnit": "mph"
    }
  ],
  "stationId": "KORD",
  "units": "us"
}
```

### Get zone forecast

Read the forecast a local office wrote for a whole forecast zone - the county-sized areas the National Weather Service divides the country into - rather than for one point. This is the wording that goes out over NOAA Weather Radio. Use 'Look up a location' or 'Find zones' to get a zone ID.

**Inputs**

- Forecast zone (`zone`, text, required): Which forecast zone to read, such as ILZ104. Use 'Look up a location' and take its 'forecastZone', or 'Find zones' to look one up by state. It has to be a forecast zone (the Z form) rather than a county (the C form): no forecast is written for a county.

**Outputs**

- `count` (number): Number of rows in 'entries'
- `entries` (list): The results, or an empty list when there are none

**Example output**

```json
{
  "count": 1,
  "entries": [
    {
      "detailedForecast": "Partly sunny, with a high near 88. Southwest winds 10 to 15 mph.",
      "name": "This Afternoon",
      "number": 1
    }
  ],
  "updated": "2026-09-02T18:52:00-05:00",
  "zone": "ILZ014"
}
```

### Look up a location

Find out who forecasts for a coordinate and what it belongs to: the nearest named city, the time zone, the local forecast office, the forecast, county and fire weather zones covering it, the nearest radar, and today's sunrise and sunset. Use it to turn a coordinate into the zone and office IDs the other actions take.

**Inputs**

- Latitude (`latitude`, number, required): Latitude of the place, in degrees. Positive north of the equator. Coordinates are rounded to four decimal places, which is about 10 metres. From -90 to 90.
- Longitude (`longitude`, number, required): Longitude of the place, in degrees. Negative in the Americas, which is everywhere the National Weather Service forecasts. From -180 to 180.

**Outputs**

- `city` (text): Nearest named place
- `county` (text): County zone ID
- `fireWeatherZone` (text): Fire weather zone ID
- `forecastZone` (text): Public forecast zone ID
- `gridX` (number): Forecast grid column
- `gridY` (number): Forecast grid row
- `latitude` (number): The coordinate asked about
- `longitude` (number): The coordinate asked about
- `office` (text): The forecast office, e.g. 'LOT'
- `radarStation` (text): Nearest radar, e.g. 'KLOT'
- `state` (text): Its state or territory
- `sunrise` (text): Today's sunrise, local time
- `sunset` (text): Today's sunset, local time
- `timeZone` (text): e.g. 'America/Chicago'

**Example output**

```json
{
  "city": "Chicago",
  "county": "ILC031",
  "fireWeatherZone": "ILZ014",
  "forecastZone": "ILZ014",
  "gridX": 76,
  "gridY": 73,
  "latitude": 41.8781,
  "longitude": -87.6298,
  "office": "LOT",
  "radarStation": "KLOT",
  "state": "IL",
  "sunrise": "2026-09-02T06:24:11-05:00",
  "sunset": "2026-09-02T19:22:47-05:00",
  "timeZone": "America/Chicago"
}
```

### Look up a weather term

Explain a weather term in plain English, straight out of the National Weather Service's own glossary - useful for turning the jargon in an alert or a forecast discussion into something a reader understands. An exact match wins; otherwise every term containing the words comes back, closest first.

**Inputs**

- Term (`term`, text, required): The word or phrase to explain.

**Outputs**

- `count` (number): Number of rows in 'entries'
- `entries` (list): The results, or an empty list when there are none

**Example output**

```json
{
  "count": 1,
  "entries": [
    {
      "definition": "The Heat Index is a measure of how hot it really feels when relative humidity is factored in with the actual air temperature.",
      "term": "Heat Index"
    }
  ],
  "term": "Heat Index"
}
```

### Read a text bulletin

Read the full text of one bulletin by its ID, as the forecaster wrote it. IDs come from 'Find text bulletins'.

**Inputs**

- Bulletin (`product_id`, text, required): The ID of the bulletin to read, as returned by 'Find text bulletins'.

**Outputs**

- `id` (text): The bulletin's ID
- `issuanceTime` (text): When it was issued
- `issuingOffice` (text): e.g. 'KLOT'
- `productCode` (text): e.g. 'AFD'
- `productName` (text): e.g. 'Area Forecast Discussion'
- `text` (text): The bulletin, verbatim
- `wmoCollectiveId` (text): Its WMO header

**Example output**

```json
{
  "id": "bb0cad13-f767-4641-9424-f410ee7cb4cf",
  "issuanceTime": "2026-09-02T18:32:00+00:00",
  "issuingOffice": "KLOT",
  "productCode": "AFD",
  "productName": "Area Forecast Discussion",
  "text": "Area Forecast Discussion\nNational Weather Service Chicago IL\n132 PM CDT Wed Sep 2 2026\n\n.SYNOPSIS...\nScattered showers and thunderstorms are expected this afternoon and evening.",
  "wmoCollectiveId": "FXUS63"
}
```

### Search past alerts

Search recent alerts, including ones that have already expired, newest first. Same filters as 'Get active alerts', plus a from and until time. The National Weather Service keeps roughly the last week to ten days here, so a search further back than that comes back empty rather than as an error - it means the alerts have aged out, not that nothing happened.

**Inputs**

- From (`start`, date and time): Only results at or after this time. Leave blank for no floor.
- Until (`end`, date and time): Only results at or before this time. Leave blank for no ceiling.
- Latitude (`latitude`, number): Latitude of the place, in degrees. Positive north of the equator. Fill in both latitude and longitude, or neither. From -90 to 90.
- Longitude (`longitude`, number): Longitude of the place, in degrees. Negative in the Americas. Fill in both latitude and longitude, or neither. From -180 to 180.
- States (`areas`, list): Only alerts in these states and territories. The last fifteen entries are the coastal, Great Lakes and offshore marine areas, where marine warnings are issued. Narrow the search one way only: by coordinate, by state, or by zone. One or more of: `AL` (Alabama (AL)), `AK` (Alaska (AK)), `AS` (American Samoa (AS)), `AZ` (Arizona (AZ)), `AR` (Arkansas (AR)), `CA` (California (CA)), `CO` (Colorado (CO)), `CT` (Connecticut (CT)), `DE` (Delaware (DE)), `DC` (District of Columbia (DC)), and 64 more.
- Zones (`zones`, text): Only alerts covering these zones, such as ILZ104 or ILC031. Both forecast zones and counties work here. Use 'Find zones' to look them up. Narrow the search one way only: by coordinate, by state, or by zone.
- Alert types (`event`, list): Only these kinds of alert, such as Tornado Warning or Heat Advisory. Leave empty for every kind.
- Severity (`severity`, list): Only alerts of this severity - how bad the expected impact is. Leave empty for every severity. One or more of: `Extreme` (Extreme - extraordinary threat to life or property), `Severe` (Severe - significant threat to life or property), `Moderate` (Moderate - possible threat to life or property), `Minor` (Minor - minimal threat to life or property), `Unknown`.
- Urgency (`urgency`, list): Only alerts of this urgency - how soon action is needed. Leave empty for every urgency. One or more of: `Immediate` (Immediate - act now), `Expected` (Expected - act within the hour), `Future` (Future - act in the near future), `Past` (Past - the event is over), `Unknown`.
- Certainty (`certainty`, list): Only alerts of this certainty - how likely the event is. Leave empty for every certainty. One or more of: `Observed` (Observed - it is happening), `Likely` (Likely - more than even odds), `Possible` (Possible - less than even odds), `Unlikely`, `Unknown`.
- How many (`limit`, number): Most results to return. Defaults to 50; the API's ceiling is 500. From 1 to 500. Default: `50`.

**Outputs**

- `count` (number): Number of rows in 'entries'
- `entries` (list): The results, or an empty list when there are none

**Example output**

```json
{
  "count": 1,
  "entries": [
    {
      "affectedZones": [
        "ILZ014",
        "ILZ013",
        "ILZ103",
        "ILZ104"
      ],
      "areaDesc": "Cook; DuPage; Lake; Will",
      "category": "Met",
      "certainty": "Likely",
      "description": "SEVERE THUNDERSTORM WATCH 604 IS IN EFFECT UNTIL 8 PM CDT THIS EVENING FOR THE FOLLOWING AREAS IN ILLINOIS: COOK, DUPAGE, LAKE, WILL.",
      "effective": "2026-09-02T13:47:00-05:00",
      "ends": "2026-09-02T20:00:00-05:00",
      "event": "Severe Thunderstorm Watch",
      "expires": "2026-09-02T19:15:00-05:00",
      "headline": "Severe Thunderstorm Watch issued September 2 at 1:47PM CDT until September 2 at 8:00PM CDT by NWS Chicago IL",
      "id": "urn:oid:2.49.0.1.840.0.a094c3e16b7371eb3d3d755fca6df17ab4eee494.001.1",
      "instruction": "Remain alert for approaching severe thunderstorms and be ready to move to a place of safety.",
      "messageType": "Alert",
      "onset": "2026-09-02T13:47:00-05:00",
      "response": "Prepare",
      "senderName": "NWS Chicago IL",
      "sent": "2026-09-02T13:47:00-05:00",
      "severity": "Severe",
      "status": "Actual",
      "urgency": "Expected"
    }
  ]
}
```
