Your Weather Forecast from
TWC/97,63

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 Location

Where is TWC/97,63?

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.

🗺️ Coordinates

32.54707, -110.85137
Snapped by NWS API → 32.5471, -110.8514

🔢 Grid Cell

TWC / 97 / 63
Tucson office · column 97 · row 63

📐 Resolution

2.5 km
~1.5 × 1.5 miles — about 1.5 sq mi

🏢 NWS Tucson (TWC)

Address520 N Park Ave, Suite 304, Tucson, AZ 85719
Phone(520) 670-6526
Email[email protected]
Webweather.gov/twc
RegionWestern (parent: WSRH)
CountiesPinal, Pima, Cochise, Santa Cruz, Graham, Greenlee

📡 Infrastructure

RadarKEMX — Mt. Bigelow (~55 km SE)
Forecast ZoneAZZ506 (Tucson metro area)
CountyPinal (AZC021)
Time ZoneAmerica/Phoenix — no DST
Elevation1,053 m (3,455 ft)
Nearest ASOSKRYN (Tucson Int'l) ~40 km SE
⚙️ How It Works

The NWS API in Two Steps

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.

Step 1: Resolve Location to Grid

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.

Step 2: Fetch the Forecast

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 Full Picture

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.

🧐 Who Actually Uses This Data?

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.

Data that IS from NWS/NOAA:
  • Raw surface observations (ASOS stations) — all companies use these
  • Doppler radar mosaics — the only US radar network
  • Weather balloon (radiosonde) data — the only upper-air soundings
  • GOES satellite imagery — operated by NOAA
  • GFS model output — freely available global model
Data that is not from NWS:
  • AccuWeather's proprietary forecast models (AccuWeather Global)
  • IBM/Weather Channel's GRAF model (3 km global)
  • Apple's hyperlocal downscaling from Dark Sky acquisition
  • Crowdsourced data (Weather Underground PWS network)
  • Temporal's hyperlocal microclimate predictions

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.

🧮 The Models

Numerical Weather Prediction Pipeline

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.

GFS 13km
Global
NAM 12km
N. America
HRRR 3km
CONUS
Forecasters
TWC Office
NDFD 2.5km
NDFD
2.5 km
National Digital Forecast Database — the final published forecast for your cell
Updated ~4x daily by NWS forecasters
Your actual forecast
HRRR
3 km
High-Resolution Rapid Refresh — the best model for 0–48 hours. Updated hourly.
Hourly · 1.4× NDFD per dimension
Today's best
NAM
12 km
North American Mesoscale — good for days 3–7, especially large-scale weather patterns.
1
×23 more
6-hourly · 4.8× NDFD per dimension
Medium range
GFS
13 km
Global Forecast System — covers the entire planet. Used for boundary conditions and day 7+.
1
×27 of these
6-hourly · 5.2× NDFD per dimension · 🌍 Global
Global

RAP (Rapid Refresh) shares the same 13 km grid as GFS, but covers only CONUS and updates hourly — used for convection and precipitation nowcasting.

📏 Relative grid cell sizes

NDFD
2.5 km · 1 cell
HRRR
1.2×
3 km · ~1.4 cells wide
NAM
4.8×
12 km · ~23 NDFD cells fit across
GFS
5.2×
13 km · ~27 NDFD cells fit across

🧠 What This Means for Saddlebrooke

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.

🗺️ Grid Cells on a Live Map

See the Model Grids Overlaid on Saddlebrooke

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.

NDFD — 2.5 km — your forecast HRRR — 3 km — hourly NAM — 12 km — 6-hourly GFS — 13 km — global NWS Tucson Office KEMX Radar

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.

📡 Observations

Ground Truth — Measuring Reality

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.

📊 ASOS / AWOS Stations

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

📡 Radar — KEMX (Mt. Bigelow)

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.

🎈 Radiosondes (Weather Balloons)

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.

🔄 MADIS Data Assimilation

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.

🔁 How Observations Feed the Forecast Loop

1. Physical measurement

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.

2. Data assimilation (model initialization)

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."

3. Model integration

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.

4. Forecaster review & edit

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.

5. Published as NDFD

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.

👨‍🔬 The Human Factor

Why Humans Are Still in the Loop

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.

👨‍🔬 What Forecasters Do

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:

  • Summer thunderstorms often develop over the Catalinas in the afternoon and drift southwest toward your area
  • The 3,455 ft elevation means temperatures run 5–10°F cooler than downtown Tucson
  • Monsoon outflows arrive differently in the foothills vs. the valley floor
  • Cold air drains from higher terrain overnight, creating temperature inversions

🛠️ The Forecaster's Toolkit

AWIPS IIMain workstation — overlays models, radar, satellite, obs
Grid editingModify NDFD grid values cell by cell or by region
SatelliteGOES-16 — visible/infrared, updated every 30 seconds
RadarKEMX + regional mosaic for storm tracking
CollaborationConference calls with neighboring offices during severe wx
VerificationPost-analysis of how well model forecasts matched reality

📋 The NDFD — What You Actually Receive

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.

🔌 API Reference

All API Endpoints for TWC/97,63

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.

📍 1. Points Lookup — the entry point
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.

GET /points/32.5471,-110.8514
{
  "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"
    }
  }
}
🌤️ 2. 7-Day Forecast — what your weather app shows
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.

GET /gridpoints/TWC/97,63/forecast
{
  "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.

⏰ 3. Hourly Forecast — hour by hour
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.

GET /gridpoints/TWC/97,63/forecast/hourly
{
  "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.

📊 4. Grid Data — raw multi-variable time series
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.

GET /gridpoints/TWC/97,63
{
  "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.

🏢 5. Observation Stations — nearest sensors
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.

GET /gridpoints/TWC/97,63/stations
{
  "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
⚠️ 6. Active Alerts — watches and warnings
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.

GET /alerts/active?zone=AZZ506
{
  "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).

🏛️ 7. NWS Office Info — Tucson (TWC)
GET https://api.weather.gov/offices/TWC

Contact info, address, and full jurisdiction listing for the NWS Tucson office.

GET /offices/TWC
{
  "@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"]
}
📻 8. NOAA Weather Radio
GET https://api.weather.gov/points/32.5471,-110.8514

The points response includes NWR (NOAA Weather Radio) info for your location.

In the points response:
"nwr": {
  "transmitter": "WXL30",
  "sameCode": "004021",
  "areaBroadcast": "https://api.weather.gov/radio/WXL30/broadcast",
  "pointBroadcast": "https://api.weather.gov/points/32.5471,-110.8514/radio"
}

📖 Quick Reference — Using the API

EndpointPurposeCache
/points/{lat},{lon}Resolve location to grid cellCache indefinitely (grid is stable)
/gridpoints/{id}/{x},{y}/forecast7-day day/night forecast~15 min
/gridpoints/{id}/{x},{y}/forecast/hourlyHourly breakdown~15 min
/gridpoints/{id}/{x},{y}Raw multi-variable data~15 min
/gridpoints/{id}/{x},{y}/stationsNearest observation stationsCache indefinitely
/stations/{id}/observations/latestLatest sensor readingsFetch each request
/alerts/active?zone={zone}Active watches/warnings~2 min
/offices/{id}WFO contact infoCache 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.

💡 Terminal example: Run this from any machine to fetch the forecast for Saddlebrooke:
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']}\")
"