Free hardiness zone JSON API
Look up the 2023 USDA plant hardiness zone for any U.S. ZIP code as JSON. No API key, open CORS, free for apps, garden blogs, nurseries and research. Zones come from the PRISM Group / Oregon State University ZIP listings behind the USDA map.
Quick start
GET https://usgrowzones.com/api/v1/zip/10001
Example response:
{
"zip": "10001",
"zone": "7b",
"temperature_range": "5 to 10",
"temperature_unit": "F",
"zone_2012": "7b",
"links": {
"zone_guide": "https://usgrowzones.com/zone/7b/",
"frost_lookup": "https://usgrowzones.com/?zip=10001",
"methodology": "https://usgrowzones.com/methodology/",
"docs": "https://usgrowzones.com/developers/"
},
"attribution": "Zones from PRISM Group / Oregon State University ZIP listings for the USDA Plant Hardiness Zone Map. US Grow Zones is independent and not affiliated with USDA or OSU."
}
Try it: /api/v1/zip/80202 · /api/v1/zip/60601 · /api/v1/zip/98101
Endpoint
| Method | Path | Notes |
|---|---|---|
| GET | /api/v1/zip/{zip} | zip must be exactly 5 digits. Returns 200, 400, 404 or 502. |
| OPTIONS | same | CORS preflight. Access-Control-Allow-Origin: * |
Successful responses are cached for 24 hours (Cache-Control: public, max-age=86400).
Response fields
| Field | Type | Meaning |
|---|---|---|
zip | string | 5-digit ZIP code requested |
zone | string | 2023 USDA half-zone (e.g. 6b) |
temperature_range | string | Average annual extreme minimum temperature range in °F for that zone |
temperature_unit | string | Always F |
zone_2012 | string? | 2012 map zone when the ZIP appears in both listings |
links | object | Human pages for the zone, frost lookup, methodology and these docs |
attribution | string | Required credit line when you display the data |
Bulk / shard files
For offline use or many lookups, download the same data as prefix shards (two leading ZIP digits):
GET https://usgrowzones.com/data/zw/10.json
Each file is a map of ZIP → [zone_2023, temperature_range, zone_2012?]. CORS is open on /data/* too. Prefer the /api/v1/zip/ endpoint for single lookups.
curl and JavaScript
curl -s https://usgrowzones.com/api/v1/zip/10001
const r = await fetch("https://usgrowzones.com/api/v1/zip/10001");
const data = await r.json();
console.log(data.zone);
Terms
- Free for personal, commercial and research use. No key, no rate-limit registration.
- Keep the
attributiontext (or an equivalent credit linking to usgrowzones.com and naming PRISM/OSU) wherever you show zone data. - Do not present the data as the official USDA map. See methodology and disclaimer.
- Please cache responses; avoid hammering the endpoint. For bulk work, use the
/data/zw/shards or our Zenodo dataset (DOI 10.5281/zenodo.23661628). - Need an embeddable UI instead of JSON? Use the free zone-finder widget.