Get Zone Metadata
Zones endpoints:
## /zones
## /zones/{type}
## /zones/{type}/{zoneId}
The Zones endpoints let you look up NWS forecast, county, and fire weather zones and their metadata.
You can:
- List zones, optionally filtered by state, region, or point location
- Get metadata for a specific zone
- Include polygon geometry for mapping
- Use zone metadata with the Alerts API and other NWS endpoints
Headers & Auth
User-Agent (required): A string identifying your app and contact (for example, MyWeatherApp/1.0 (me@myweatherapp.com).
Accept (recommended): application/geo+json
Authorization: Not required.
HTTP Request
GET https://api.weather.gov/zones
List zones by type:
GET https://api.weather.gov/zones/{type}
Get metadata for a specific zone:
GET https://api.weather.gov/zones/{type}/{zoneId}
Path Parameters
These path parameters apply to GET /zones/{type} and GET /zones/{type}/{zoneId}.
| Name | Type | Required | Description |
|---|---|---|---|
| type | string | Yes | Zone type. Common values include forecast, county, and fire. |
| zoneId | string | Yes (for /zones/{type}/{zoneId}) |
Zone ID (for example, ALZ023 for a forecast zone or ALC125 for a county zone). |
Query Parameters
The /zones and /zones/{type} endpoints support several filters
Query Parameters
| Name | Type | Required | Applies to | Description |
|---|---|---|---|---|
id |
array* | No | /zones, /zones/{type} |
One or more zone IDs (forecast or county). Useful when you already know the IDs. |
area |
array* | No | /zones, /zones/{type} |
One or more state or marine area codes (for example, NY or a marine area code). |
region |
array* | No | /zones, /zones/{type} |
One or more region codes. |
type |
array* | No | /zones, /zones/{type} |
Zone types to include (for example, forecast, county, fire). |
point |
string | No | /zones, /zones/{type} |
Latitude/longitude in lat,lon format (for example, 40.7128,-74.0060). Returns containing zones. |
includfor exampleometry |
boolean | No | /zones, /zones/{type} |
If true, includes polygon geometry for each zone. |
limit |
integer | No | /zones, /zones/{type} |
Maximum number of zones to return. |
effective |
string | No | /zones, /zones/{type}, /zones/{type}/{zoneId} |
Effective date/time (ISO-8601) to use when selecting zone versions. |
Example Requests
cURL–List forecast zones for a state
Get forecast zones for New York, including geometry, limited to 50 results:
curl "https://api.weather.gov/zones/forecast?area=NY&includfor exampleometry=true&limit=50"
-H "User-Agent: MyWeatherApp/1.0 (me@myweatherapp.com)"
-H "Accept: application/geo+json"
cURL–Find zones that contain a point
Get any zones (all types) that contain a point near Tuscaloosa, AL:
curl "https://api.weather.gov/zones?point=33.212,-87.5459"
-H "User-Agent: MyWeatherApp/1.0 (me@myweatherapp.com)"
-H "Accept: application/geo+json"
JavaScript (fetch)–List forecast zones and log their names
const url = "https://api.weather.gov/zones/forecast?area=AL&limit=10";
fetch(url, {
headers: {
"User-Agent": "MyWeatherApp/1.0 (me@myweatherapp.com)",
"Accept": "application/geo+json"
}
})
.then((response) => {
if (!response.ok) {
throw new Error(`Request failed: ${response.status}`);
}
return response.json();
})
.then((data) => {
const zones = data.features || [];
zones.forEach((feature) => {
const props = feature.properties || {};
console.log(`${props.id}: ${props.name} (${props.state || props.area})`);
});
})
.catch((error) => {
console.error("Error fetching zones:", error);
});
JavaScript (fetch)–Get metadata for a single zone
const zoneType = "forecast";
const zoneId = "ALZ023";
const url = `https://api.weather.gov/zones/${zoneType}/${zoneId}`;
fetch(url, {
headers: {
"User-Agent": "MyWeatherApp/1.0 (me@myweatherapp.com)",
"Accept": "application/geo+json"
}
})
.then((response) => {
if (!response.ok) {
throw new Error(`Request failed: ${response.status}`);
}
return response.json();
})
.then((zone) => {
console.log(zone.properties.name);
console.log("Forecast URL:", zone.properties.forecast);
})
.catch((error) => {
console.error("Error fetching zone:", error);
});
Example responses
200 OK—List of forecast zones (truncated)
200 OK—List of forecast zones
{
"@context": [
"https://geojson.org/geojson-ld/geojson-context.jsonld",
{
"@version": "1.1",
"wx": "https://api.weather.gov/ontology#",
"s": "https://schema.org/",
"@vocab": "https://api.weather.gov/ontology#"
}
],
"type": "FeatureCollection",
"features": [
{
"id": "https://api.weather.gov/zones/forecast/ALZ023",
"type": "Feature",
"properties": {
"id": "ALZ023",
"type": "forecast",
"name": "Tuscaloosa",
"state": "AL",
"effectiveDate": "2025-03-21T00:00:00+00:00",
"expirationDate": null,
"forecastOffice": "https://api.weather.gov/offices/BMX",
"observationStations": "https://api.weather.gov/zones/forecast/ALZ023/stations"
},
"geometry": {
"type": "Polygon",
"coordinates": [
[
[-87.75, 33.40],
[-87.30, 33.40],
[-87.30, 33.05],
[-87.75, 33.05],
[-87.75, 33.40]
]
]
}
}
],
"pagination": {
"next": "https://api.weather.gov/zones/forecast?area=AL&limit=50&cursor=abc123",
"prev": null
}
}
200 OK—Zone metadata
200 OK—Single zone metadata
{
"@context": [
"https://geojson.org/geojson-ld/geojson-context.jsonld",
{
"@version": "1.1",
"wx": "https://api.weather.gov/ontology#",
"s": "https://schema.org/",
"@vocab": "https://api.weather.gov/ontology#"
}
],
"id": "https://api.weather.gov/zones/forecast/ALZ023",
"type": "Feature",
"properties": {
"id": "ALZ023",
"type": "forecast",
"name": "Tuscaloosa",
"state": "AL",
"effectiveDate": "2025-03-21T00:00:00+00:00",
"expirationDate": null,
"forecastOffice": "https://api.weather.gov/offices/BMX",
"relatedZones": {
"county": "https://api.weather.gov/zones/county/ALC125",
"fireWeatherZone": "https://api.weather.gov/zones/fire/ALZ023"
}
},
"geometry": {
"type": "Polygon",
"coordinates": [
[
[-87.75, 33.40],
[-87.30, 33.40],
[-87.30, 33.05],
[-87.75, 33.05],
[-87.75, 33.40]
]
]
}
}
Status Codes
Status Codes
| Status | Meaning | When you’ll see it |
|---|---|---|
200 OK |
Successful request | Zones or zone metadata returned. |
400 Bad Request |
Invalid parameter or format | For example, malformed point or invalid effective date/time. |
404 Not Found |
Resource not found | Unknown type or zoneId. |
406 Not Acceptable |
Unsupported Accept header |
Requesting a format the endpoint doesn’t support. |
429 Too Many Requests |
Rate limit exceeded | Too many requests in a short time window. |
500 Internal Server Error / 503 Service Unavailable |
Server-side issues | Temporary API or upstream data problems. |
Notes & Tips
- Pair zones with alerts. The Alerts API uses
affectedZonesto list the zones for each alert. Use the Zones endpoints to understand or map those areas. (National Weather Service) - Use
pointfor geolocation. If you have a latitude/longitude, thepointquery parameter can return zones that contain that location. This is handy if you’re building “what zone am I in?” features. - Be careful with
includfor exampleometry. Zone polygons can be large and add significant response size. Turn geometry on only when you need it (for example, when drawing maps). - Limit results. Always use
limitwhen listing zones to avoid large payloads and to stay within rate limits.