NOAA Weather.gov API
The National Weather Service (NWS) API provides free, open access to weather forecasts, alerts, observations, radar data, and more for the United States. All data is public domain — no API key or account required.
Always check the official API documentation and OpenAPI spec for the latest endpoint details.
Base URL
https://api.weather.gov
Authentication
No API key is needed. However, a User-Agent header is required on every request to identify your application.
User-Agent: (myweatherapp.com, contact@myweatherapp.com)
The string can be anything — the more unique to your application, the less likely it will be affected by a security event. Requests without a User-Agent may be blocked.
Key Concepts
| Term |
Description |
| Point |
A latitude/longitude coordinate. Use /points/{lat},{lon} to resolve it to grid and zone info. |
| Gridpoint |
A 2.5km forecast grid cell identified by a WFO office ID and x,y coordinates. |
| WFO |
Weather Forecast Office — the NWS office responsible for a geographic area (e.g., DEN, OKX, LOT). |
| Zone |
A geographic area used for forecasts and alerts. Types include land, marine, forecast, fire, county. |
| Station |
An observation station (e.g., KDEN for Denver International Airport) that reports current conditions. |
| Alert |
A weather warning, watch, or advisory issued by the NWS (e.g., tornado warning, winter storm watch). |
| SIGMET/AIRMET |
Aviation weather advisories for significant or airmen's meteorological conditions. |
| TAF |
Terminal Aerodrome Forecast — aviation weather forecast for an airport. |
| GeoJSON |
The default response format — standard JSON with geographic feature geometry. |
Core Workflow: Get a Forecast for a Location
The API uses a two-step pattern to get a forecast:
Step 1: Resolve coordinates to a grid point
GET /points/{latitude},{longitude}
This returns metadata including the WFO office, grid coordinates, and URLs for forecasts.
Step 2: Fetch the forecast using the grid info
GET /gridpoints/{wfo}/{gridX},{gridY}/forecast
This returns the human-readable 12-hour period forecast (7 days).
Example (curl)
# Step 1: Get grid info for Denver, CO
curl -s -H "User-Agent: MyApp" \
"https://api.weather.gov/points/39.7456,-104.9994" | jq '.properties.forecast'
# Returns: "https://api.weather.gov/gridpoints/BOU/63,62/forecast"
# Step 2: Get the forecast
curl -s -H "User-Agent: MyApp" \
"https://api.weather.gov/gridpoints/BOU/63,62/forecast" | jq '.properties.periods[0]'
Endpoint Reference
Points / Location Lookup
| Endpoint |
Description |
GET /points/{lat},{lon} |
Metadata for a coordinate — returns grid info, forecast URLs, timezone, county, zone |
GET /points/{lat},{lon}/stations |
Nearby observation stations (deprecated — use gridpoint stations instead) |
Forecasts
| Endpoint |
Description |
GET /gridpoints/{wfo}/{x},{y}/forecast |
12-hour period forecast (7-day), human-readable |
GET /gridpoints/{wfo}/{x},{y}/forecast/hourly |
Hourly forecast (7-day), human-readable |
GET /gridpoints/{wfo}/{x},{y} |
Raw numerical forecast data (temperature, wind, precip probability, etc.) |
GET /gridpoints/{wfo}/{x},{y}/stations |
Observation stations within the grid area |
Alerts
| Endpoint |
Description |
GET /alerts |
Query alerts (past 7 days) with filters: status, event, area, zone, urgency, severity, certainty |
GET /alerts/active |
All currently active alerts |
GET /alerts/active/count |
Count of active alerts by area, zone, and region |
GET /alerts/active/zone/{zoneId} |
Active alerts for a specific zone |
GET /alerts/active/area/{area} |
Active alerts for a state (2-letter code) or marine area |
GET /alerts/active/region/{region} |
Active alerts for a marine region |
GET /alerts/types |
List of recognized alert event types |
GET /alerts/{id} |
Retrieve a specific alert by its ID |
Stations & Observations
| Endpoint |
Description |
GET /stations |
List observation stations; filter by id, state, limit |
GET /stations/{stationId} |
Metadata for a specific station |
GET /stations/{stationId}/observations |
Historical observations (paginated) |
GET /stations/{stationId}/observations/latest |
Most recent observation |
GET /stations/{stationId}/observations/{time} |
Observation at a specific ISO-8601 timestamp |
Zones
| Endpoint |
Description |
GET /zones |
Query zones; filter by id, area, type, point, include_geometry |
GET /zones/{type} |
List zones of a specific type (land, marine, forecast, fire, county) |
GET /zones/{type}/{zoneId} |
Metadata for a specific zone |
GET /zones/{type}/{zoneId}/forecast |
Current text forecast for a zone |
GET /zones/forecast/{zoneId}/observations |
Observations within a forecast zone |
GET /zones/forecast/{zoneId}/stations |
Stations within a forecast zone |
Aviation
| Endpoint |
Description |
GET /stations/{stationId}/tafs |
Terminal Aerodrome Forecasts for a station |
GET /stations/{stationId}/tafs/{date}/{time} |
Specific TAF |
GET /aviation/cwsus/{cwsuId} |
Center Weather Service Unit metadata |
GET /aviation/cwsus/{cwsuId}/cwas |
Center Weather Advisories |
GET /aviation/sigmets |
Query SIGMETs/AIRMETs with filters |
GET /aviation/sigmets/{atsu} |
SIGMETs for a specific ATSU |
GET /aviation/cwsus/{cwsuId}/cwas/{date}/{sequence} |
Specific Center Weather Advisory |
GET /aviation/sigmets/{atsu}/{date}/{time} |
Specific SIGMET by date and time |
Radar
| Endpoint |
Description |
GET /radar/servers |
List of radar servers |
GET /radar/stations |
List of radar stations; filter by stationType, host |
GET /radar/stations/{stationId} |
Specific radar station metadata |
GET /radar/stations/{stationId}/alarms |
Alarms for a radar station |
GET /radar/profilers/{stationId} |
Wind profiler data |
Text Products
| Endpoint |
Description |
GET /products |
Query text products; filter by location, type, start, end |
GET /products/{productId} |
Specific text product |
GET /products/types |
List of valid product type codes |
GET /products/locations |
List of valid product issuance locations |
GET /products/types/{typeId} |
Products of a given type |
GET /products/types/{typeId}/locations |
Issuance locations for a product type |
GET /products/locations/{locationId}/types |
Product types for a location |
GET /products/types/{typeId}/locations/{locationId} |
Products by type and location |
GET /products/types/{typeId}/locations/{locationId}/latest |
Latest product by type and location |
Offices
| Endpoint |
Description |
GET /offices/{officeId} |
NWS forecast office metadata |
GET /offices/{officeId}/headlines |
News headlines from an office |
GET /offices/{officeId}/headlines/{headlineId} |
Specific headline |
GET /offices/{officeId}/briefing |
Active office briefing |
GET /offices/{officeId}/weatherstories |
Active weather stories |
Miscellaneous
| Endpoint |
Description |
GET /glossary |
Weather terminology definitions |
GET /points/{lat},{lon}/radio |
NOAA Weather Radio script for a location |
GET /radio/{callSign}/broadcast |
Weather Radio broadcast script by call sign |
Response Format
The default response format is GeoJSON (application/geo+json). Control the format with the Accept header:
| Format |
Accept Header |
| GeoJSON (default) |
application/geo+json |
| JSON-LD |
application/ld+json |
| DWML (XML) |
application/vnd.noaa.dwml+xml |
| CAP (Alerts XML) |
application/cap+xml |
| OXML (Observations XML) |
application/vnd.noaa.obs+xml |
| ATOM |
application/atom+xml |
All times are in ISO-8601 format.
Feature Flags
Optional headers to enable new features:
| Header Value |
Description |
Feature-Flags: forecast_temperature_qv |
Represent temperature as QuantitativeValue |
Feature-Flags: forecast_wind_speed_qv |
Represent wind speed as QuantitativeValue |
Feature-Flags: obs_station_provider |
Show MADIS provider details for stations |
Code Examples
Get Forecast for a Location (Python)
import requests
BASE = "https://api.weather.gov"
HEADERS = {"User-Agent": "(myapp, contact@example.com)"}
# Step 1: Resolve coordinates
point = requests.get(f"{BASE}/points/39.7456,-104.9994", headers=HEADERS).json()
forecast_url = point["properties"]["forecast"]
# Step 2: Get forecast
forecast = requests.get(forecast_url, headers=HEADERS).json()
for period in forecast["properties"]["periods"][:4]:
print(f"{period['name']}: {period['detailedForecast']}")
Get Active Alerts for a State (curl)
curl -s -H "User-Agent: MyApp" \
"https://api.weather.gov/alerts/active?area=CO" \
| jq '.features[] | {event: .properties.event, headline: .properties.headline}'
Get Current Observations (curl)
# Get latest observation from Denver International Airport
curl -s -H "User-Agent: MyApp" \
"https://api.weather.gov/stations/KDEN/observations/latest" \
| jq '.properties | {
temperature: .temperature.value,
windSpeed: .windSpeed.value,
description: .textDescription
}'
Get Hourly Forecast (Node.js)
const https = require("https");
const options = {
headers: { "User-Agent": "MyApp (contact@example.com)" },
};
// Step 1: Get grid info
https.get("https://api.weather.gov/points/40.7128,-74.0060", options, (res) => {
let data = "";
res.on("data", (chunk) => (data += chunk));
res.on("end", () => {
const forecastUrl = JSON.parse(data).properties.forecastHourly;
// Step 2: Get hourly forecast
https.get(forecastUrl, options, (res2) => {
let forecast = "";
res2.on("data", (chunk) => (forecast += chunk));
res2.on("end", () => {
const periods = JSON.parse(forecast).properties.periods;
periods.slice(0, 6).forEach((p) => {
console.log(`${p.startTime}: ${p.temperature}°${p.temperatureUnit} - ${p.shortForecast}`);
});
});
});
});
});
Find Nearby Stations (Python)
import requests
BASE = "https://api.weather.gov"
HEADERS = {"User-Agent": "(myapp, contact@example.com)"}
# Get grid info for a point
point = requests.get(f"{BASE}/points/34.0522,-118.2437", headers=HEADERS).json()
stations_url = point["properties"]["observationStations"]
# List nearby stations
stations = requests.get(stations_url, headers=HEADERS).json()
for station in stations["features"][:5]:
props = station["properties"]
print(f"{props['stationIdentifier']}: {props['name']}")
Rate Limits
The rate limit is not publicly documented but is described as "generous for typical use."
| Guideline |
Details |
| Rate limit |
Undisclosed, but generous |
| On limit exceeded |
Request returns an error; retry after ~5 seconds |
| User-Agent |
Required — requests without it may be blocked |
| Best practice |
Cache /points responses (they rarely change) to reduce calls |
Error Handling
| HTTP Status |
Meaning |
Action |
| 200 |
Success |
Parse the JSON response |
| 301/302 |
Redirect |
Follow the redirect |
| 404 |
Not found |
Check coordinates, station ID, or zone ID |
| 500 |
Server error |
Retry with backoff |
| 503 |
Service unavailable |
Common on /radar/queues — add filters to reduce results |
Error responses include a JSON body with type, title, status, detail, and correlationId fields.
Known Issues
/radar/queues endpoints may return 503 errors when results are large — filter with additional parameters.
- Station observations outside the central timezone may show null 24-hour max/min temperatures.
- Observation data can be delayed up to 20 minutes from the upstream MADIS source.
- Icon endpoints (
/icons) are deprecated.
Resources
Changelog
- 0.1.0 — Initial release with forecasts, alerts, observations, stations, zones, aviation, radar, and text products.
1---2name: noaa-weather3description: The NOAA Weather.gov API provides access to National Weather Service forecasts, alerts, observations, radar data, and more for the United States. Use this skill to fetch weather forecasts, active alerts, station observations, and zone data. No API key is required — just a User-Agent header.4---5
6# NOAA Weather.gov API
7
8The [National Weather Service (NWS) API](https://www.weather.gov/documentation/services-web-api) provides free, open access to weather forecasts, alerts, observations, radar data, and more for the United States. All data is public domain — no API key or account required.
9
10> Always check the [official API documentation](https://www.weather.gov/documentation/services-web-api) and [OpenAPI spec](https://api.weather.gov/openapi.json) for the latest endpoint details.
11
12---
13
14## Base URL
15
16```
17https://api.weather.gov
18```
19
20---
21
22## Authentication
23
24No API key is needed. However, a **User-Agent header is required** on every request to identify your application.
25
26```
27User-Agent: (myweatherapp.com, contact@myweatherapp.com)
28```
29
30The string can be anything — the more unique to your application, the less likely it will be affected by a security event. Requests without a User-Agent may be blocked.
31
32---
33
34## Key Concepts
35
36| Term | Description |
37|------|-------------|
38| **Point** | A latitude/longitude coordinate. Use `/points/{lat},{lon}` to resolve it to grid and zone info. |
39| **Gridpoint** | A 2.5km forecast grid cell identified by a WFO office ID and x,y coordinates. |
40| **WFO** | Weather Forecast Office — the NWS office responsible for a geographic area (e.g., `DEN`, `OKX`, `LOT`). |
41| **Zone** | A geographic area used for forecasts and alerts. Types include `land`, `marine`, `forecast`, `fire`, `county`. |
42| **Station** | An observation station (e.g., `KDEN` for Denver International Airport) that reports current conditions. |
43| **Alert** | A weather warning, watch, or advisory issued by the NWS (e.g., tornado warning, winter storm watch). |
44| **SIGMET/AIRMET** | Aviation weather advisories for significant or airmen's meteorological conditions. |
45| **TAF** | Terminal Aerodrome Forecast — aviation weather forecast for an airport. |
46| **GeoJSON** | The default response format — standard JSON with geographic feature geometry. |
47
48---
49
50## Core Workflow: Get a Forecast for a Location
51
52The API uses a **two-step pattern** to get a forecast:
53
54### Step 1: Resolve coordinates to a grid point
55
56```
57GET /points/{latitude},{longitude}
58```
59
60This returns metadata including the WFO office, grid coordinates, and URLs for forecasts.
61
62### Step 2: Fetch the forecast using the grid info
63
64```
65GET /gridpoints/{wfo}/{gridX},{gridY}/forecast
66```
67
68This returns the human-readable 12-hour period forecast (7 days).
69
70### Example (curl)
71
72```bash
73# Step 1: Get grid info for Denver, CO
74curl -s -H "User-Agent: MyApp" \
75 "https://api.weather.gov/points/39.7456,-104.9994" | jq '.properties.forecast'
76
77# Returns: "https://api.weather.gov/gridpoints/BOU/63,62/forecast"
78
79# Step 2: Get the forecast
80curl -s -H "User-Agent: MyApp" \
81 "https://api.weather.gov/gridpoints/BOU/63,62/forecast" | jq '.properties.periods[0]'
82```
83
84---
85
86## Endpoint Reference
87
88### Points / Location Lookup
89
90| Endpoint | Description |
91|----------|-------------|
92| `GET /points/{lat},{lon}` | Metadata for a coordinate — returns grid info, forecast URLs, timezone, county, zone |
93| `GET /points/{lat},{lon}/stations` | Nearby observation stations (deprecated — use gridpoint stations instead) |
94
95### Forecasts
96
97| Endpoint | Description |
98|----------|-------------|
99| `GET /gridpoints/{wfo}/{x},{y}/forecast` | 12-hour period forecast (7-day), human-readable |
100| `GET /gridpoints/{wfo}/{x},{y}/forecast/hourly` | Hourly forecast (7-day), human-readable |
101| `GET /gridpoints/{wfo}/{x},{y}` | Raw numerical forecast data (temperature, wind, precip probability, etc.) |
102| `GET /gridpoints/{wfo}/{x},{y}/stations` | Observation stations within the grid area |
103
104### Alerts
105
106| Endpoint | Description |
107|----------|-------------|
108| `GET /alerts` | Query alerts (past 7 days) with filters: `status`, `event`, `area`, `zone`, `urgency`, `severity`, `certainty` |
109| `GET /alerts/active` | All currently active alerts |
110| `GET /alerts/active/count` | Count of active alerts by area, zone, and region |
111| `GET /alerts/active/zone/{zoneId}` | Active alerts for a specific zone |
112| `GET /alerts/active/area/{area}` | Active alerts for a state (2-letter code) or marine area |
113| `GET /alerts/active/region/{region}` | Active alerts for a marine region |
114| `GET /alerts/types` | List of recognized alert event types |
115| `GET /alerts/{id}` | Retrieve a specific alert by its ID |
116
117### Stations & Observations
118
119| Endpoint | Description |
120|----------|-------------|
121| `GET /stations` | List observation stations; filter by `id`, `state`, `limit` |
122| `GET /stations/{stationId}` | Metadata for a specific station |
123| `GET /stations/{stationId}/observations` | Historical observations (paginated) |
124| `GET /stations/{stationId}/observations/latest` | Most recent observation |
125| `GET /stations/{stationId}/observations/{time}` | Observation at a specific ISO-8601 timestamp |
126
127### Zones
128
129| Endpoint | Description |
130|----------|-------------|
131| `GET /zones` | Query zones; filter by `id`, `area`, `type`, `point`, `include_geometry` |
132| `GET /zones/{type}` | List zones of a specific type (`land`, `marine`, `forecast`, `fire`, `county`) |
133| `GET /zones/{type}/{zoneId}` | Metadata for a specific zone |
134| `GET /zones/{type}/{zoneId}/forecast` | Current text forecast for a zone |
135| `GET /zones/forecast/{zoneId}/observations` | Observations within a forecast zone |
136| `GET /zones/forecast/{zoneId}/stations` | Stations within a forecast zone |
137
138### Aviation
139
140| Endpoint | Description |
141|----------|-------------|
142| `GET /stations/{stationId}/tafs` | Terminal Aerodrome Forecasts for a station |
143| `GET /stations/{stationId}/tafs/{date}/{time}` | Specific TAF |
144| `GET /aviation/cwsus/{cwsuId}` | Center Weather Service Unit metadata |
145| `GET /aviation/cwsus/{cwsuId}/cwas` | Center Weather Advisories |
146| `GET /aviation/sigmets` | Query SIGMETs/AIRMETs with filters |
147| `GET /aviation/sigmets/{atsu}` | SIGMETs for a specific ATSU |
148| `GET /aviation/cwsus/{cwsuId}/cwas/{date}/{sequence}` | Specific Center Weather Advisory |
149| `GET /aviation/sigmets/{atsu}/{date}/{time}` | Specific SIGMET by date and time |
150
151### Radar
152
153| Endpoint | Description |
154|----------|-------------|
155| `GET /radar/servers` | List of radar servers |
156| `GET /radar/stations` | List of radar stations; filter by `stationType`, `host` |
157| `GET /radar/stations/{stationId}` | Specific radar station metadata |
158| `GET /radar/stations/{stationId}/alarms` | Alarms for a radar station |
159| `GET /radar/profilers/{stationId}` | Wind profiler data |
160
161### Text Products
162
163| Endpoint | Description |
164|----------|-------------|
165| `GET /products` | Query text products; filter by `location`, `type`, `start`, `end` |
166| `GET /products/{productId}` | Specific text product |
167| `GET /products/types` | List of valid product type codes |
168| `GET /products/locations` | List of valid product issuance locations |
169| `GET /products/types/{typeId}` | Products of a given type |
170| `GET /products/types/{typeId}/locations` | Issuance locations for a product type |
171| `GET /products/locations/{locationId}/types` | Product types for a location |
172| `GET /products/types/{typeId}/locations/{locationId}` | Products by type and location |
173| `GET /products/types/{typeId}/locations/{locationId}/latest` | Latest product by type and location |
174
175### Offices
176
177| Endpoint | Description |
178|----------|-------------|
179| `GET /offices/{officeId}` | NWS forecast office metadata |
180| `GET /offices/{officeId}/headlines` | News headlines from an office |
181| `GET /offices/{officeId}/headlines/{headlineId}` | Specific headline |
182| `GET /offices/{officeId}/briefing` | Active office briefing |
183| `GET /offices/{officeId}/weatherstories` | Active weather stories |
184
185### Miscellaneous
186
187| Endpoint | Description |
188|----------|-------------|
189| `GET /glossary` | Weather terminology definitions |
190| `GET /points/{lat},{lon}/radio` | NOAA Weather Radio script for a location |
191| `GET /radio/{callSign}/broadcast` | Weather Radio broadcast script by call sign |
192
193---
194
195## Response Format
196
197The default response format is **GeoJSON** (`application/geo+json`). Control the format with the `Accept` header:
198
199| Format | Accept Header |
200|--------|---------------|
201| GeoJSON (default) | `application/geo+json` |
202| JSON-LD | `application/ld+json` |
203| DWML (XML) | `application/vnd.noaa.dwml+xml` |
204| CAP (Alerts XML) | `application/cap+xml` |
205| OXML (Observations XML) | `application/vnd.noaa.obs+xml` |
206| ATOM | `application/atom+xml` |
207
208All times are in **ISO-8601** format.
209
210---
211
212## Feature Flags
213
214Optional headers to enable new features:
215
216| Header Value | Description |
217|--------------|-------------|
218| `Feature-Flags: forecast_temperature_qv` | Represent temperature as QuantitativeValue |
219| `Feature-Flags: forecast_wind_speed_qv` | Represent wind speed as QuantitativeValue |
220| `Feature-Flags: obs_station_provider` | Show MADIS provider details for stations |
221
222---
223
224## Code Examples
225
226### Get Forecast for a Location (Python)
227
228```python
229import requests
230
231BASE = "https://api.weather.gov"
232HEADERS = {"User-Agent": "(myapp, contact@example.com)"}
233
234# Step 1: Resolve coordinates
235point = requests.get(f"{BASE}/points/39.7456,-104.9994", headers=HEADERS).json()
236forecast_url = point["properties"]["forecast"]
237
238# Step 2: Get forecast
239forecast = requests.get(forecast_url, headers=HEADERS).json()
240for period in forecast["properties"]["periods"][:4]:
241 print(f"{period['name']}: {period['detailedForecast']}")
242```
243
244### Get Active Alerts for a State (curl)
245
246```bash
247curl -s -H "User-Agent: MyApp" \
248 "https://api.weather.gov/alerts/active?area=CO" \
249 | jq '.features[] | {event: .properties.event, headline: .properties.headline}'
250```
251
252### Get Current Observations (curl)
253
254```bash
255# Get latest observation from Denver International Airport
256curl -s -H "User-Agent: MyApp" \
257 "https://api.weather.gov/stations/KDEN/observations/latest" \
258 | jq '.properties | {
259 temperature: .temperature.value,
260 windSpeed: .windSpeed.value,
261 description: .textDescription
262 }'
263```
264
265### Get Hourly Forecast (Node.js)
266
267```javascript
268const https = require("https");
269
270const options = {
271 headers: { "User-Agent": "MyApp (contact@example.com)" },
272};
273
274// Step 1: Get grid info
275https.get("https://api.weather.gov/points/40.7128,-74.0060", options, (res) => {
276 let data = "";
277 res.on("data", (chunk) => (data += chunk));
278 res.on("end", () => {
279 const forecastUrl = JSON.parse(data).properties.forecastHourly;
280
281 // Step 2: Get hourly forecast
282 https.get(forecastUrl, options, (res2) => {
283 let forecast = "";
284 res2.on("data", (chunk) => (forecast += chunk));
285 res2.on("end", () => {
286 const periods = JSON.parse(forecast).properties.periods;
287 periods.slice(0, 6).forEach((p) => {
288 console.log(`${p.startTime}: ${p.temperature}°${p.temperatureUnit} - ${p.shortForecast}`);
289 });
290 });
291 });
292 });
293});
294```
295
296### Find Nearby Stations (Python)
297
298```python
299import requests
300
301BASE = "https://api.weather.gov"
302HEADERS = {"User-Agent": "(myapp, contact@example.com)"}
303
304# Get grid info for a point
305point = requests.get(f"{BASE}/points/34.0522,-118.2437", headers=HEADERS).json()
306stations_url = point["properties"]["observationStations"]
307
308# List nearby stations
309stations = requests.get(stations_url, headers=HEADERS).json()
310for station in stations["features"][:5]:
311 props = station["properties"]
312 print(f"{props['stationIdentifier']}: {props['name']}")
313```
314
315---
316
317## Rate Limits
318
319The rate limit is not publicly documented but is described as "generous for typical use."
320
321| Guideline | Details |
322|-----------|---------|
323| Rate limit | Undisclosed, but generous |
324| On limit exceeded | Request returns an error; retry after ~5 seconds |
325| User-Agent | Required — requests without it may be blocked |
326| Best practice | Cache `/points` responses (they rarely change) to reduce calls |
327
328---
329
330## Error Handling
331
332| HTTP Status | Meaning | Action |
333|-------------|---------|--------|
334| 200 | Success | Parse the JSON response |
335| 301/302 | Redirect | Follow the redirect |
336| 404 | Not found | Check coordinates, station ID, or zone ID |
337| 500 | Server error | Retry with backoff |
338| 503 | Service unavailable | Common on `/radar/queues` — add filters to reduce results |
339
340Error responses include a JSON body with `type`, `title`, `status`, `detail`, and `correlationId` fields.
341
342---
343
344## Known Issues
345
346- `/radar/queues` endpoints may return 503 errors when results are large — filter with additional parameters.
347- Station observations outside the central timezone may show null 24-hour max/min temperatures.
348- Observation data can be delayed up to 20 minutes from the upstream MADIS source.
349- Icon endpoints (`/icons`) are deprecated.
350
351---
352
353## Resources
354
355| Resource | URL |
356|----------|-----|
357| API Documentation | [weather.gov/documentation/services-web-api](https://www.weather.gov/documentation/services-web-api) |
358| OpenAPI Specification | [api.weather.gov/openapi.json](https://api.weather.gov/openapi.json) |
359| GitHub Discussion | [weather-gov.github.io/api](https://weather-gov.github.io/api/) |
360| Operational Support | nco.ops@noaa.gov |
361
362---
363
364## Changelog
365
366- **0.1.0** — Initial release with forecasts, alerts, observations, stations, zones, aviation, radar, and text products.