Get Forecast for a Location
GET /points/{lat},{lon}/forecast
Returns the seven-day forecast (day & night periods) for thfor exampleid cell covering a latitude/longitude in the U.S. Use this endpoint when you have a point and want the official NWS text-based forecast without converting the point to grid coordinates. The points endpoint resolves your lat/lon to the correct 2.5 km NWS forecast grid and local forecast office behind the scenes.
HTTP request
GET https://api.weather.gov/points/{latitude},{longitude}/forecast
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.
Path Parameters
| Name | Type | Required | Constraints | Example |
|---|---|---|---|---|
latitude |
number | Yes | Decimal degrees (WGS84), −90…90 | 43.1610 |
longitude |
number | Yes | Decimal degrees (WGS84), −180…180 | -77.6109 |
Example Request (cURL)
curl -H "User-Agent: your-email@example.com"
https://api.weather.gov/points/38.8894,-77.0352
Example Response
Sample Response
{
"properties": {
"forecast": "https://api.weather.gov/gridpoints/LWX/96,70/forecast",
"forecastHourly": "https://api.weather.gov/gridpoints/LWX/96,70/forecast/hourly",
"forecastGridData": "https://api.weather.gov/gridpoints/LWX/96,70",
"observationStations": "https://api.weather.gov/gridpoints/LWX/96,70/stations",
"relativeLocation": {
"properties": {
"city": "Washington",
"state": "DC"
}
}
}
}
Example Request (JavaScript)
async function getForecast(lat, lon) {
const url = `https://api.weather.gov/points/${lat},${lon}/forecast`;
const res = await fetch(url, {
headers: {
"User-Agent": "MyWeatherApp/1.0 (me@example.com)",
"Accept": "application/geo+json"
}
});
if (!res.ok) throw new Error(`NWS error ${res.status}`);
return res.json();
}
getForecast(43.1610, -77.6109).then(data => {
// typical usage: render data.properties.periods
console.log(data.properties.periods.map(p => `${p.name}: ${p.temperature}°${p.temperatureUnit} ${p.shortForecast}`));
});
Example Responses
Sample Response - Forecast
{
"type": "Feature",
"properties": {
"updated": "2025-03-15T14:02:00-04:00",
"units": "us",
"forecastGenerator": "BaselineForecastGenerator",
"generatedAt": "2025-03-15T14:05:12-04:00",
"updateTime": "2025-03-15T14:02:00-04:00",
"validTimes": "2025-03-15T14:00:00+00:00/P7DT",
"elevation": { "unitCode": "wmoUnit:m", "value": 154.0 },
"periods": [
{
"number": 1,
"name": "This Afternoon",
"startTime": "2025-03-15T14:00:00-04:00",
"endTime": "2025-03-15T18:00:00-04:00",
"isDaytime": true,
"temperature": 46,
"temperatureUnit": "F",
"temperatureTrend": null,
"windSpeed": "10 to 15 mph",
"windDirection": "NW",
"shortForecast": "Partly Sunny",
"detailedForecast": "Partly sunny. High near 46. Northwest wind 10 to 15 mph."
},
{
"number": 2,
"name": "Tonight",
"startTime": "2025-03-15T18:00:00-04:00",
"endTime": "2025-03-16T06:00:00-04:00",
"isDaytime": false,
"temperature": 32,
"temperatureUnit": "F",
"temperatureTrend": null,
"windSpeed": "5 to 10 mph",
"windDirection": "NW",
"shortForecast": "Mostly Clear",
"detailedForecast": "Mostly clear, with a low around 32. Northwest wind 5 to 10 mph."
}
]
},
"geometry": {
"type": "Polygon",
"coordinates": [[[ -77.63,43.15 ],[ -77.58,43.15 ],[ -77.58,43.18 ],[ -77.63,43.18 ],[ -77.63,43.15 ]]]
}
}
400 Bad Request - Coordinates
{
"title": "Bad Request",
"type": "https://api.weather.gov/problems/InvalidParameter",
"detail": "Invalid 'point' parameter. Expected 'lat,lon'.",
"correlationId": "c6e1f8a4-7b77-4b1f-9a7a-0c0f0ea1f9a1"
}
Response fields for all queries (abbreviated list)
Extended field reference (selected)
| Field | Type | Description |
|---|---|---|
type |
string | Always Feature for this endpoint. |
geometry |
GeoJSON geometry | null |
properties.updated |
string (ISO 8601) | Timestamp the forecast text was last updated. |
properties.units |
string | Unit system (us commonly used). |
properties.updateTime |
string (ISO 8601) | Synced update timestamp. |
properties.validTimes |
string (ISO 8601 interval) | Range/time-step for which periods are valid. |
properties.elevation |
object | Elevation of forecast grid (meters, WMO unit code). |
properties.periods |
array |
Ordered list of day/night forecast periods. |
periods[].name |
string | Label like Today, Tonight, Monday. |
periods[].startTime / endTime |
string (ISO 8601) | Start/end of that period. |
periods[].isDaytime |
boolean | true for daytime periods. |
periods[].temperature |
number | Forecast temperature. |
periods[].temperatureUnit |
string | F or C (textual unit indicator). |
periods[].temperatureTrend |
string | null |
periods[].windSpeed |
string | Human-readable wind speed (for example, 10 to 15 mph). |
periods[].windDirection |
string | Compass direction (for example, NW). |
periods[].shortForecast |
string | Brief phrase (for example, Partly Sunny). |
periods[].detailedForecast |
string | Full text for the period. |
Common Status Codes
| Code | Meaning | Corrective action |
|---|---|---|
| 200 | OK | — |
| 400 | Bad Request | Verify latitude,longitude format and numeric ranges. |
| 404 | Not Found | Coordinates outside NWS coverage (rare) or service down; try nearby point. |
| 429 | Too Many Requests | Back off; respect cache headers and reduce request rate. |
| 500 | Server Error | Retry with exponential backoff. |
➡️ See HTTP Status Codes for a full reference.
Notes
-
Start with /points: It’s the supported way to map a lat/lon to the right grid and forecast office. The same route also advertises related URLs (for example, hourly forecast).
-
Grid resolution: Forecasts are issued on a 2.5 km grid by local offices; nfor exampleboring points can have wildly different forecasts.
-
Hourly forecasts: Use /points/{lat},{lon}/forecast/hourly for 48-hour hourly periods
Need an in-depth explanation on how the NWS API uses gridpoints? Gridpoints Explained.
👉Next: Endpoints: Grid Points →