Typical Weather API

Keyless REST API for the typical/normal weather at any US location, by month — from NOAA/NCEI 1991–2020 U.S. Climate Normals. ← Back to the free tool

No API key  Public-domain data  CORS enabled

Base URL is this site's origin. All endpoints are GET and return JSON with permissive CORS. A metered plan is planned; today it is free and keyless.

GET /typical-weather

Returns the normal weather for a US location and month (or the whole year).

Query parameters

ParamNotes
zip5-digit US ZIP. Use this or address.
addressStreet address or City, ST. Geocoded via the US Census (keyless); falls back to a city index.
monthOptional. Month name (January), abbreviation (Jan), or number 112. Omit for the whole-year table.
dateOptional. YYYY-MM-DD or MM-DD; resolved to that date's month (monthly resolution). Takes precedence over month.

Example — one month by city

curl "https://SITE/typical-weather?address=Denver,%20CO&month=January"
{
  "query": { "zip": "80202", "month": 1, "monthName": "January", "address": "Denver, CO" },
  "location": { "zip": "80202", "lat": 39.7491, "lon": -104.9899 },
  "station": { "name": "DENVER WATER DEPT, CO US", "distanceMi": 1.6, "elevationFt": 5210 },
  "confidence": "high",
  "confidenceNote": "Nearest normals station is 2 mi away — high confidence.",
  "normals": {
    "month": 1, "monthName": "January",
    "avgHighF": 48.5, "avgLowF": 21.3, "avgMeanF": 34.9,
    "avgPrecipIn": 0.43, "avgSnowIn": 5.5
  },
  "summary": "January in Denver, CO is typically chilly — highs around 49°F and lows near 21°F. Expect about 0.4 in of precipitation across the month, including roughly 5.5 in of snow.",
  "source": "NOAA/NCEI 1991–2020 U.S. Climate Normals (monthly)",
  "normalsPeriod": "1991–2020",
  "disclaimer": "Normals are 30-year averages (1991–2020). Any individual year can differ..."
}

Example — whole year (best time to visit)

curl "https://SITE/typical-weather?zip=33139"

Returns months (an array of 12 monthly normals) and yearSummary with warmestMonth, coolestMonth, wettestMonth, and driestMonth.

Response fields

FieldMeaning
normals.avgHighF / avgLowF / avgMeanFNormal daily max / min / mean temperature (°F) for the month.
normals.avgPrecipInNormal total monthly precipitation (inches). null if the nearest station has no precip normal.
normals.avgSnowInNormal total monthly snowfall (inches), or null.
station + confidenceNearest NOAA normals station, distance in miles, and an honest confidence tier (high <12 mi, medium <30, low <60, very-low ≥60).

Status codes

200OK.
400Missing zip/address, or an unparseable month/date.
404Address could not be geocoded to a US ZIP.
422ZIP is not in the US climate-normals dataset (non-US / PO-box-only / invalid). Never a silent wrong value.

GET /health

Service metadata + dataset coverage (ZIP and station counts). Also at /api.

Data & license

NOAA/NCEI 1991–2020 U.S. Climate Normals (monthly) + U.S. Census ZCTA centroids — both public domain (U.S. Government works). Normals are 30-year averages, not forecasts.

Machine-readable spec

The full API is described in OpenAPI 3.1 — import it into Postman, Insomnia, or a client generator, or hand it to an agent. The response schemas in it were generated from real responses this API actually returned, not written by hand, so they describe what you will receive rather than what someone intended you to receive.

https://typical-weather-api.netlify.app/openapi.json