One grid cell in the National Weather Service's digital forecast grid — 2.5 km across — covering your home in Saddlebrooke, Arizona. This site explains the data pipeline behind it.
///cared.rangers.decor
🏢 NWS Tucson (TWC)
📡 Radar: KEMX
🗺️ Pinal County
Your home at ///cared.rangers.decor is mapped to a specific cell in the NWS Tucson forecast domain. The API snaps coordinates to the nearest supported grid point — about 875 m from your home.
| Address | 520 N Park Ave, Suite 304, Tucson, AZ 85719 |
| Phone | (520) 670-6526 |
| [email protected] | |
| Web | weather.gov/twc |
| Region | Western (parent: WSRH) |
| Counties | Pinal, Pima, Cochise, Santa Cruz, Graham, Greenlee |
| Radar | KEMX — Mt. Bigelow (~55 km SE) |
| Forecast Zone | AZZ506 (Tucson metro area) |
| County | Pinal (AZC021) |
| Time Zone | America/Phoenix — no DST |
| Elevation | 1,053 m (3,455 ft) |
| Nearest ASOS | KRYN (Tucson Int'l) ~40 km SE |
The National Weather Service provides a free, public JSON API at api.weather.gov — no API key needed, just a User-Agent header identifying your application. This is the same API that powers weather.gov, and many third-party services layer on top of it.
GET https://api.weather.gov/points/32.5471,-110.8514
Takes lat/lon, returns the grid office and grid coordinates for that location. The NWS divides the US into a grid managed by local Weather Forecast Offices (WFOs). The precision is limited — your coordinates get snapped to the nearest ~1 km supported point.
GET https://api.weather.gov/gridpoints/TWC/97,63/forecast
Returns the forecast for that grid cell as GeoJSON: 12-hour day/night periods for 7 days, plus detailedForecast text, wind, precipitation probability, and more.
The US is divided into a ~2.5 km grid by each local WFO. Every point in the country belongs to exactly one grid cell. Meteorologists at each WFO edit the model guidance cell-by-cell to produce the National Digital Forecast Database (NDFD) — the authoritative forecast for the US.
When you check weather on weather.gov, or use most weather APIs, they ultimately read from the NDFD grids. The forecast for your home in Saddlebrooke is produced at the Tucson office and comes from cell TWC/97,63.
A common question: "Do Apple Weather, AccuWeather, and The Weather Channel all start from this same NWS data?"
The honest answer is complicated — it varies by company and by data type.
Think of it like GPS: the government provides the foundational signals (NWS data), and companies build their own products on top — some just repackage (weather.gov apps), others layer proprietary models (AccuWeather, IBM), and some blend multiple sources (Apple Weather). The NWS data is the common foundation, but commercial forecasts diverge significantly due to proprietary downscaling and modeling.
Your forecast isn't just one model — it's the output of a pipeline. Global models feed regional models, which feed high-resolution models, and then a human meteorologist edits the final grid.
RAP (Rapid Refresh) shares the same 13 km grid as GFS, but covers only CONUS and updates hourly — used for convection and precipitation nowcasting.
The GFS sees your home as part of a 13 km block — roughly from Oracle to the eastern Tucson outskirts. The NAM narrows it to 12 km. The HRRR gets closer with 3 km covering your immediate neighborhood. But it's the NWS Tucson forecasters who take all of that and produce the final 2.5 km forecast specifically for TWC/97,63 — adjusting for Catalina Mountain foothills, urban heat effects, and local terrain that no model can fully resolve.
Each box shows the geographic coverage of a single grid cell at each model resolution. The yellow dot is your home. Use the ☰ toggle in the top-right to show or hide individual model layers.
The smallest red box is the NDFD cell. The largest purple dashed box is GFS. At this zoom level, the NDFD cell is tiny because it's genuinely only 1.5 miles across. Toggle layers on/off to compare.
Numerical models need real-world measurements to initialize and validate. The NWS operates one of the world's densest weather observation networks — every bit of it is free and public.
Automated Surface Observing Systems — over 900 stations nationwide reporting temperature, wind, pressure, visibility, and precipitation every 1–5 minutes. Run by NOAA, FAA, and DoD jointly. These are the primary validation data for all numerical models.
| Saddlebrooke | ~875 m from snapped NWS grid point |
| KRYN (Tucson Int'l) | ~40 km SE — major ASOS site |
| KPHX (Phoenix) | ~105 km NW |
The WSR-88D Doppler radar on Mt. Bigelow (~55 km SE of Saddlebrooke). Measures precipitation intensity, velocity (wind direction toward/away), and can detect tornado debris signatures. Data feeds into HRRR via data assimilation and directly into forecaster decisions.
Launched twice daily (00z and 12z) from ~92 stations globally — the only direct measurement of temperature, humidity, pressure, and wind above the surface. These are critical for initializing all numerical models. The nearest launch site is Tucson — balloons go up at 5 AM and 5 PM MST daily, reaching ~30 km altitude.
The Meteorological Assimilation Data Ingest System aggregates data from ASOS, DOT road sensors, private weather stations, aircraft reports (AMDAR), and more — standardizing and quality-checking everything before feeding it into the models. Observations may be delayed up to 20 minutes for QC processing.
ASOS station at KRYN records temperature: 97°F at 3:00 PM MST. KEMX radar shows a thunderstorm cell developing over the Catalinas. A radiosonde launched from Tucson measures the vertical profile of the atmosphere.
MADIS processes and quality-checks all observations. The HRRR model does this hourly — the most frequent data assimilation cycle of any operational model. Physical measurements become the model's "initial conditions."
NOAA's supercomputers (Gaea, Hera, Dogwood) run the models forward in time. GFS runs 16 days out at 13 km globally. NAM runs 84 hours at 12 km. HRRR runs 48 hours at 3 km. Each produces temperature, wind, precipitation, and dozens of other variables for every grid cell — including TWC/97,63.
A meteorologist at the Tucson WFO examines the model output, compares it to current observations (radar, satellite, surface), and overrides any grid cell where the model is wrong — including yours at TWC/97,63. The human is the last line of defense.
The edited forecast is published to the National Digital Forecast Database — a seamless national grid at 2.5 km resolution. Your weather.gov page, this API, and any service that reads NWS data all pull from the same NDFD grid.
Despite billion-dollar supercomputers and kilometer-scale models, the final forecast for your grid cell is edited by a person at the Tucson NWS office.
Meteorologists look at model output and literally ask: "Does this match what I see on radar, satellite, and from local observations?" They can adjust any parameter — temperature, precipitation probability, wind speed, sky cover — for any specific grid cell in their domain.
For Saddlebrooke specifically, the Tucson forecasters know that:
| AWIPS II | Main workstation — overlays models, radar, satellite, obs |
| Grid editing | Modify NDFD grid values cell by cell or by region |
| Satellite | GOES-16 — visible/infrared, updated every 30 seconds |
| Radar | KEMX + regional mosaic for storm tracking |
| Collaboration | Conference calls with neighboring offices during severe wx |
| Verification | Post-analysis of how well model forecasts matched reality |
The National Digital Forecast Database is the final, authoritative weather forecast for the United States. Every WFO's edited grids are stitched together into a seamless national mosaic. TWC/97,63 is one of millions of cells. This is the dataset served by api.weather.gov and displayed on weather.gov.
The forecast for your cell was last updated from the NWS Tucson office and covers 7 days forward. The 2.5 km cell specifically covers your immediate neighborhood — compare this to GFS which treats most of northeast Tucson as a single temperature.
Every endpoint from the NWS API for your grid cell, with example responses. You can paste any of these URLs directly into a browser or curl command.
GET https://api.weather.gov/points/32.5471,-110.8514
Returns everything needed to locate the forecast: grid office, coordinates, nearest station, timezone, radar, sunrise/sunset. First call in every weather query.
{
"properties": {
"cwa": "TWC",
"gridId": "TWC",
"gridX": 97,
"gridY": 63,
"timeZone": "America/Phoenix",
"radarStation": "KEMX",
"forecastZone": "https://api.weather.gov/zones/forecast/AZZ506",
"county": "https://api.weather.gov/zones/county/AZC021",
"relativeLocation": {
"properties": {
"city": "Saddlebrooke", "state": "AZ",
"distance": { "value": 875.6, "unitCode": "wmoUnit:m" },
"bearing": { "value": 31, "unitCode": "wmoUnit:degree_(angle)" }
}
},
"forecast": "https://api.weather.gov/gridpoints/TWC/97,63/forecast",
"forecastHourly": "https://api.weather.gov/gridpoints/TWC/97,63/forecast/hourly",
"forecastGridData": "https://api.weather.gov/gridpoints/TWC/97,63",
"observationStations": "https://api.weather.gov/gridpoints/TWC/97,63/stations",
"astronomicalData": {
"sunrise": "2026-05-13T05:24:42-07:00",
"sunset": "2026-05-13T19:14:49-07:00",
"civilTwilightBegin": "2026-05-13T04:59:05-07:00",
"civilTwilightEnd": "2026-05-13T19:40:25-07:00"
}
}
}GET https://api.weather.gov/gridpoints/TWC/97,63/forecast
12-hour day/night periods for 7 days. Each period includes temperature, wind, detailed text description, and precipitation probability.
{
"properties": {
"generatedAt": "2026-05-13T06:32:46+00:00",
"validTimes": "2026-05-13T00:00:00+00:00/P8DT1H",
"periods": [
{
"number": 1, "name": "Overnight",
"isDaytime": false,
"temperature": 69, "temperatureUnit": "F",
"windSpeed": "5 mph", "windDirection": "SE",
"shortForecast": "Mostly Cloudy",
"detailedForecast": "Mostly cloudy. Low around 69, with temperatures rising to around 72 overnight. Southeast wind around 5 mph.",
"probabilityOfPrecipitation": { "value": 1, "unitCode": "wmoUnit:percent" }
},
{
"number": 2, "name": "Wednesday",
"isDaytime": true,
"temperature": 97, "temperatureUnit": "F",
"windSpeed": "15 mph", "windDirection": "SSW",
"shortForecast": "Mostly Sunny",
"detailedForecast": "Mostly sunny, with a high near 97. South southwest wind 5 to 15 mph, with gusts as high as 25 mph.",
"probabilityOfPrecipitation": { "value": 1, "unitCode": "wmoUnit:percent" }
}
]
}
}Each period has: temperature, temperatureUnit, windSpeed, windDirection, shortForecast (icon text), detailedForecast (prose), probabilityOfPrecipitation (null = not modeled, 0-100 = %). Odd number = nighttime, even = daytime.
GET https://api.weather.gov/gridpoints/TWC/97,63/forecast/hourly
Same data structure as the 7-day forecast but in 1-hour increments (~168 periods for 7 days). Useful for knowing exactly when conditions change — wind shift at 2 PM, rain starting at 5 PM, etc.
{
"properties": {
"periods": [
{
"number": 1,
"startTime": "2026-05-13T04:00:00-07:00",
"endTime": "2026-05-13T05:00:00-07:00",
"isDaytime": false,
"temperature": 69, "temperatureUnit": "F",
"windSpeed": "5 mph", "windDirection": "SE",
"shortForecast": "Mostly Cloudy",
"probabilityOfPrecipitation": { "value": 1 },
"relativeHumidity": { "value": 37 },
"dewpoint": { "value": 41.0, "unitCode": "wmoUnit:degC" },
"wetBulbGlobeTemperature": { "value": 68.0 },
"skyCover": { "value": 75 }
}
]
}
}Hourly also includes relativeHumidity, dewpoint, wetBulbGlobeTemperature, and skyCover — all as QuantitativeValue objects.
GET https://api.weather.gov/gridpoints/TWC/97,63
The most powerful endpoint. Returns every forecast variable for this grid cell as separate time series arrays. This is what weather apps use to build custom graphs and overlays. Each variable is an array of [value, ISO-timestamp] pairs covering 7+ days.
{
"properties": {
"updateTime": "2026-05-13T06:32:46+00:00",
"validTimes": "2026-05-13T00:00:00+00:00/P8DT1H",
"elevation": { "value": 1053.084, "unitCode": "wmoUnit:m" },
"temperature": {
"uom": "wmoUnit:degC",
"values": [
{ "validTime": "2026-05-13T04:00:00+00:00/P6H", "value": 20.3 }
]
},
"dewpoint": { "uom": "wmoUnit:degC", "values": [...] },
"relativeHumidity": { "uom": "wmoUnit:percent", "values": [...] },
"apparentTemperature": { "uom": "wmoUnit:degC", "values": [...] },
"windSpeed": { "uom": "wmoUnit:km_h-1", "values": [...] },
"windGust": { "uom": "wmoUnit:km_h-1", "values": [...] },
"windDirection": { "uom": "wmoUnit:degree_(angle)", "values": [...] },
"skyCover": { "uom": "wmoUnit:percent", "values": [...] },
"probabilityOfPrecipitation": { "uom": "wmoUnit:percent", "values": [...] },
"quantitativePrecipitation": { "uom": "wmoUnit:mm", "values": [...] },
"snowfallAmount": { "uom": "wmoUnit:mm", "values": [...] },
"weather": { "values": [...] },
"hazards": { "values": [...] },
"ceilingHeight": { "uom": "wmoUnit:m", "values": [...] },
"visibility": { "uom": "wmoUnit:m", "values": [...] },
"lightningActivityLevel": { "uom": "wmoUnit:percent", "values": [...] },
"pressure": { "uom": "wmoUnit:Pa", "values": [...] },
"heatIndex": { "uom": "wmoUnit:degC", "values": [...] },
"windChill": { "uom": "wmoUnit:degC", "values": [...] },
"probabilityOfTropicalStormWinds": { "values": [] },
"probabilityOfHurricaneWinds": { "values": [] },
"redFlagThreatIndex": { "values": [...] },
"hainesIndex": { "values": [...] }
}
}Over 40+ variables including temperature, dewpoint, humidity, wind (speed/gust/direction), sky cover, precipitation (POP, QPF, snow, ice), ceiling, visibility, lightning, wave/swell data (coastal), pressure, heat index, wind chill, and severe weather probabilities.
GET https://api.weather.gov/gridpoints/TWC/97,63/stations
Returns a list of reporting stations near this grid cell, ranked by proximity. You can then fetch current observations from any individual station.
{
"features": [
{ "properties": { "stationIdentifier": "A1355", "name": "Tortolita Mtn" } },
{ "properties": { "stationIdentifier": "KRYN", "name": "Tucson International Airport" } },
{ "properties": { "stationIdentifier": "KTUS", "name": "Tucson / Ryan Airfield" } }
]
}Each station has a dedicated observation endpoint: GET /stations/KRYN/observations/latest returns the most recent reading.
GET /stations/KRYN/observations/latest
GET https://api.weather.gov/alerts/active?zone=AZZ506
Active weather alerts for forecast zone AZZ506 (Saddlebrooke area). Returns CAP (Common Alerting Protocol v1.2) format. Also filterable by state, region, point, or county.
{
"features": [
{
"properties": {
"event": "Excessive Heat Warning",
"headline": "Excessive Heat Warning issued May 12 at 12:41PM MST until May 15 at 8:00PM MST by NWS Tucson AZ",
"severity": "Severe",
"urgency": "Expected",
"certainty": "Likely",
"areaDesc": "Pinal County",
"effective": "2026-05-12T19:41:00+00:00",
"expires": "2026-05-15T03:00:00+00:00",
"description": "* WHAT...Dangerously hot conditions with temperatures up to 108 expected.",
"instruction": "Drink plenty of fluids, stay in an air-conditioned room..."
}
}
]
}Key fields: event (type), severity (Extreme/Severe/Moderate/Minor), urgency (Immediate/Expected/Future/Past/Unknown), certainty (Observed/Likely/Possible/Unlikely), headline (brief summary), description (full details), instruction (action items).
GET https://api.weather.gov/offices/TWC
Contact info, address, and full jurisdiction listing for the NWS Tucson office.
{
"@type": "GovernmentOrganization",
"id": "TWC",
"name": "NWS Tucson Arizona",
"address": {
"streetAddress": "520 North Park Ave, Suite 304",
"addressLocality": "Tucson", "addressRegion": "AZ", "postalCode": "85719"
},
"telephone": "(520) 670-6526",
"email": "[email protected]",
"sameAs": "https://www.weather.gov/twc",
"nwsRegion": "wr",
"responsibleCounties": [
"https://api.weather.gov/zones/county/AZC003",
"https://api.weather.gov/zones/county/AZC009",
"https://api.weather.gov/zones/county/AZC011",
"https://api.weather.gov/zones/county/AZC019",
"https://api.weather.gov/zones/county/AZC021",
"https://api.weather.gov/zones/county/AZC023"
],
"responsibleForecastZones": ["AZZ501", ..., "AZZ515"],
"responsibleFireZones": ["AZZ150", "AZZ151", "AZZ152", "AZZ153", "AZZ154"]
}GET https://api.weather.gov/points/32.5471,-110.8514
The points response includes NWR (NOAA Weather Radio) info for your location.
"nwr": {
"transmitter": "WXL30",
"sameCode": "004021",
"areaBroadcast": "https://api.weather.gov/radio/WXL30/broadcast",
"pointBroadcast": "https://api.weather.gov/points/32.5471,-110.8514/radio"
}| Endpoint | Purpose | Cache |
|---|---|---|
/points/{lat},{lon} | Resolve location to grid cell | Cache indefinitely (grid is stable) |
/gridpoints/{id}/{x},{y}/forecast | 7-day day/night forecast | ~15 min |
/gridpoints/{id}/{x},{y}/forecast/hourly | Hourly breakdown | ~15 min |
/gridpoints/{id}/{x},{y} | Raw multi-variable data | ~15 min |
/gridpoints/{id}/{x},{y}/stations | Nearest observation stations | Cache indefinitely |
/stations/{id}/observations/latest | Latest sensor readings | Fetch each request |
/alerts/active?zone={zone} | Active watches/warnings | ~2 min |
/offices/{id} | WFO contact info | Cache indefinitely |
All endpoints return JSON (GeoJSON). Set a User-Agent header identifying your app (required). No API key. Rate limits are generous but non-public — don't hammer the API.
curl -sL "https://api.weather.gov/gridpoints/TWC/97,63/forecast" \
-H "User-Agent: (my-app, [email protected])" | \
python3 -c "
import json,sys
d = json.load(sys.stdin)
for p in d['properties']['periods'][:2]:
print(f\"{p['name']}: {p['temperature']}°{p['temperatureUnit']} - {p['shortForecast']}\")
"