Growing Degree Days (GDD) Forecast
## Growing Degree Days
Growing Degree Days
Returns daily growing degree days (GDD) at four base temperatures, with running cumulative totals, and a growing-condition index. Coverage is up to 15 days ahead everywhere the underlying global model has data.
GDD Bases
| Field | Base | Use Case |
|---|---|---|
gdd32 / cum_gdd32 | 32 deg F (0 deg C) | General biological heat accumulation |
gdd50 / cum_gdd50 | 50 deg F (10 deg C) | Turfgrass and warm-season weed germination threshold |
gdd10c / cum_gdd10c | 10 deg C (50 deg F) | Same threshold as gdd50, Celsius output |
gdd0c / cum_gdd0c | 0 deg C (32 deg F) | Same threshold as gdd32, Celsius output |
Season-to-Date Baseline
For CONUS locations, the cum_gdd* fields continue from a real season-to-date total
(January 1 through yesterday) instead of starting at zero on the first forecast day. That
baseline is echoed back in historical, including a historical.daily array with one
entry per calendar day since January 1. Locations outside CONUS coverage don't get a
historical block, and their cum_gdd* fields start from the first forecast day.
Forecast Band and Confidence
Each day carries cum_*_low / cum_*_high band edges around the cum_gdd* totals, plus
confidence_* scores. The band is the season-to-date baseline plus a running sum of each
forecast day's GDD at the mean temperature minus (low) or plus (high) half the ensemble
P10-P90 temperature spread. It is a sum of per-day bounds, not a percentile of season totals.
Ensemble spread is only available on a grid covering roughly the contiguous US plus a margin.
Outside it, low == high == cum_gdd*. A zero-width band means no spread data, not a certain
forecast, and confidence on those days is 45 or lower. With ensemble spread, confidence tops
out at 75. The four confidence_* fields currently always carry the same value.
Custom Base Temperature
Pass base_temperature (with base_unit, default f) to get GDD at any base, not just
the four fixed ones. Adds gdd_custom/cum_gdd_custom to each day. The custom cumulative
total always starts from the first forecast day. It does not include a historical
baseline, since the historical dataset only pre-computes the four fixed bases.
Growing-Condition Index
grow_score (0-100) reflects how close the day's mean temperature is to the optimum for
the selected turf type. 90+ is near-ideal, 60-89 is good, 30-59 is moderate stress, and
below 30 is significant heat, cold, or drought limitation. Always this field name,
regardless of turf_type.
Pass turf_type=warm for bermudagrass, zoysia, or St. Augustine. This shifts the optimum
from 68°F (20°C) to 88°F (31°C). GDD values themselves do not change with turf_type.
Example Requests
# Cool-season (default)
GET /agronomy/gdd/?lat=33.47&lon=-82.01
# Warm-season turf
GET /agronomy/gdd/?lat=33.47&lon=-82.01&turf_type=warm
# Custom base temperature (45 deg F)
GET /agronomy/gdd/?lat=33.47&lon=-82.01&base_temperature=45&base_unit=fToken-based authentication with required prefix "Token"
In: header
Query Parameters
Optional custom GDD base temperature. When set, the response adds a gdd_custom/cum_gdd_custom pair to each day alongside the four standard bases. Must be paired with base_unit.
floatUnit of base_temperature. Defaults to 'f'.
"f"Value in
- "c"
- "f"
Latitude in decimal degrees (-90 to 90).
floatLongitude in decimal degrees (-180 to 180).
floatTurf species type. Selects the temperature optimum used for the growing-condition index. cool (default): cool-season grasses (Kentucky bluegrass, fescue, ryegrass, bentgrass). Peak growth at 68°F (20°C). warm: warm-season grasses (bermudagrass, zoysia, St. Augustine). Peak growth at 88°F (31°C).
"cool"Value in
- "cool"
- "warm"
Response Body
application/json
application/json
application/json
curl -X GET "https://example.com/agronomy/gdd/?base_temperature=40&lat=33.4735&lon=-82.0105&turf_type=cool"{ "lat": 33.4735, "lon": -82.0105, "days": 2, "daily": [ { "date": "2026-06-07", "tmax_f": 88, "tmin_f": 68, "tmean_f": 78, "gdd32": 46, "gdd50": 28, "gdd10c": 15.6, "gdd0c": 25.6, "cum_gdd32": 5067.4, "cum_gdd50": 2869.2, "cum_gdd10c": 1594, "cum_gdd0c": 2815.3, "cum_32_low": 5064.4, "cum_32_high": 5070.4, "cum_50_low": 2866.2, "cum_50_high": 2872.2, "cum_10c_low": 1592.3, "cum_10c_high": 1595.6, "cum_0c_low": 2813.6, "cum_0c_high": 2816.9, "confidence_32": 62, "confidence_50": 62, "confidence_10c": 62, "confidence_0c": 62, "grow_score": 71.2 }, { "date": "2026-06-08", "tmax_f": 91, "tmin_f": 71, "tmean_f": 81, "gdd32": 49, "gdd50": 31, "gdd10c": 17.2, "gdd0c": 27.2, "cum_gdd32": 5116.4, "cum_gdd50": 2900.2, "cum_gdd10c": 1611.2, "cum_gdd0c": 2842.5, "cum_32_low": 5109.4, "cum_32_high": 5123.4, "cum_50_low": 2893.2, "cum_50_high": 2907.2, "cum_10c_low": 1607.3, "cum_10c_high": 1615.1, "cum_0c_low": 2838.6, "cum_0c_high": 2846.4, "confidence_32": 58, "confidence_50": 58, "confidence_10c": 58, "confidence_0c": 58, "grow_score": 42.3 } ], "historical": { "season_start": "2026-01-01", "through_date": "2026-06-06", "n_days": 157, "cum_32": 5021.4, "cum_50": 2841.2, "cum_10c": 1578.4, "cum_0c": 2789.7, "source": "prism", "daily": [ { "date": "2026-01-01", "gdd32": 0, "gdd50": 0, "gdd10c": 0, "gdd0c": 0, "cum_gdd32": 0, "cum_gdd50": 0, "cum_gdd10c": 0, "cum_gdd0c": 0 }, { "date": "2026-06-06", "gdd32": 41.2, "gdd50": 23.2, "gdd10c": 12.9, "gdd0c": 22.9, "cum_gdd32": 5021.4, "cum_gdd50": 2841.2, "cum_gdd10c": 1578.4, "cum_gdd0c": 2789.7 } ], "daily_through_date": "2026-06-04" }}
