Agronomy Forecast - Growing Conditions & Soil Status

## Agronomy Forecast

Agronomy Forecast

Point forecast of growing conditions and soil status, tuned for turfgrass and general agricultural use.

Always returns exactly 384 hourly timestamps (one per hour, starting at the current top of the hour), for CONUS and non-CONUS locations alike - the array shape is always the same. What backs each hour differs by field and by location; see the per-field notes below and metadata on the actual response for exactly where real data ends at the location you queried. The endpoint picks the best available source automatically; there is no parameter to select it.

Use vars to request a subset of fields, and start_hour/end_hour (1-384) to request a sub-range - same conventions as /forecast/point/. Use turf_type (cool or warm, default cool) to control which optimal-temperature curve grow_score is computed against - same parameter and same curve /agronomy/gdd/ uses for its own daily grow_score.

Fields

FieldDescription
dew_probDew formation probability (0-100)
shaded_dewDew formation probability for shaded turf (smoothed, holds moisture longer)
frost_probFrost probability (0-100)
shaded_frostFrost probability for shaded turf (smoothed)
canopyCanopy water content (kg/m^2), CONUS near-term only, from the high-resolution short-range model
soiltSoil temperature of the 0-5 cm (top 2 in) layer: cooler than 5 cm on clear nights, warmer at midday. CONUS near-term blends the high-resolution short-range model, calibrated against in-ground sensors, with global model guidance; global model guidance beyond that and worldwide
soilt_5cmSoil temperature at 5 cm (2 in), same sources, calibrated against in-ground 5 cm sensors
soilt_10cmSoil temperature at 10 cm (4 in), same sources, calibrated against in-ground 10 cm sensors
et_rateEvapotranspiration rate, real ASCE-EWRI hourly throughout
tmp_2m2-meter air temperature
rhRelative humidity (0-100)
soilmSoil moisture, volumetric percent 0-100, CONUS near-term at 5 cm from the high-resolution short-range model, top 10 cm layer from global model guidance beyond that and worldwide
low_cloudLow-layer cloud cover (0-100), CONUS near-term from the high-resolution short-range model, global model guidance beyond that and worldwide
mid_cloudMid-layer cloud cover (0-100), CONUS near-term from the high-resolution short-range model, global model guidance beyond that and worldwide
high_cloudHigh-layer cloud cover (0-100), CONUS near-term from the high-resolution short-range model, global model guidance beyond that and worldwide
dswrfDownward solar radiation, W/m^2, CONUS from the blended forecast through 180 hours, global model guidance beyond that and worldwide
grow_scoreProprietary growing-conditions index (0-100), computed per hour from real tmp_2m; depends on turf_type

Every field is linearly interpolated for any gap inside real coverage, so a lower-cadence source (e.g. a 3-hourly global-model reading) never shows up as null in between. soilm, canopy, dswrf, low_cloud, mid_cloud, and high_cloud never extend past their own last real reading once real coverage ends - every other field instead holds the last real value for the remaining hours. Check metadata on the actual response for exactly where real coverage ends per field at the location you queried, rather than assuming a fixed hour - it varies by location and by which upstream models are covering that point at request time.

daily_average collapses each field to one value per calendar day: a mean of that day's hourly values, except et_rate, which is a rate and so is summed to a daily total instead (matching how ET is normally reported, e.g. inches/day). For the first day only, that et_rate total also includes hours already elapsed today (from local midnight through now), so it reflects the true full-day figure even partway through the day, not just the hours still ahead in the hourly array.

Frost outlook

  • One entry per night (local date of the morning it ends), CONUS only; null outside the high-resolution grid or before the fields are published for the served run, an empty list where no night is covered
  • frost_probability: chance of visible frost on open ground at some point of the night, the night's peak of the hourly frost probability
  • coverage: the expected share of the surrounding 5-10 km with frost (none, low_spots_only, scattered, widespread) with percent and its range (percent_p10 to percent_p90) and a confidence (high, medium, low). "Scattered, low confidence, range 0-95%" reads as "scattered frost possible, could be widespread or none"
  • intensity: where frost forms, light, moderate, heavy or killing_freeze, with its confidence
  • ground_min and shelter_min: the night's minimum on open ground (frost forms there) and in the air at 5 ft, as p10/p50/p90; the p10-p90 range holds about 80% of nights
  • freeze_probability and hard_freeze_probability: chance the air at 5 ft reaches 32F and 28F
  • Temperatures in F (english) or C (metric)

Units

Set units=metric for Celsius and mm. Default is units=english (deg F, inches).

Example Requests

# CONUS point (English units, default)
GET /agronomy/forecast/?lat=33.47&lon=-82.01

# Metric units
GET /agronomy/forecast/?lat=51.5&lon=-0.13&units=metric
GET
/agronomy/forecast/

Authorization

Authorization<token>

Token-based authentication with required prefix "Token"

In: header

Query Parameters

end_hour?integer

Ending forecast hour (1-384). Must be provided together with start_hour.

lat*number

Latitude in decimal degrees (-90 to 90).

Formatfloat
lon*number

Longitude in decimal degrees (-180 to 180).

Formatfloat
start_hour?integer

Starting forecast hour (1-384). Must be provided together with end_hour.

turf_type?string

Turf 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).

Default"cool"

Value in

  • "cool"
  • "warm"
units?string

Unit system for returned values. English (default): °F, inches. Metric: °C, mm.

Default"english"

Value in

  • "english"
  • "metric"
vars?string

Optional: comma-separated list of fields to return. Omit for all fields. Valid values: dew_prob, shaded_dew, frost_prob, shaded_frost, canopy, soilt, soilt_5cm, soilt_10cm, et_rate, tmp_2m, rh, soilm.

Response Body

application/json

application/json

application/json

curl -X GET "https://example.com/agronomy/forecast/?end_hour=384&lat=33.4735&lon=-82.0105&start_hour=1&turf_type=cool&units=english&vars=dew_prob"

{  "timestamps": [    "2026-06-05T00:00:00Z",    "2026-06-05T01:00:00Z",    "...382 more"  ],  "data": {    "dew_prob": [      72.5,      68,      "..."    ],    "shaded_dew": [      72.5,      70.3,      "..."    ],    "frost_prob": [      0,      0,      "..."    ],    "shaded_frost": [      0,      0,      "..."    ],    "canopy": [      0.05,      0.04,      "..."    ],    "soilt": [      66.1,      65.3,      "..."    ],    "soilt_5cm": [      68.4,      68.1,      "..."    ],    "soilt_10cm": [      69.2,      69,      "..."    ],    "et_rate": [      0.012,      0.014,      "..."    ],    "tmp_2m": [      72.4,      71.8,      "..."    ],    "rh": [      82,      84.5,      "..."    ],    "soilm": [      28,      28,      "...",      null,      null    ],    "low_cloud": [      20,      35,      "..."    ],    "mid_cloud": [      10,      15,      "..."    ],    "high_cloud": [      5,      8,      "..."    ],    "dswrf": [      0,      45,      "..."    ],    "grow_score": [      88.4,      90.1,      "..."    ]  },  "daily_average": {    "days": [      "2026-06-05",      "...15 more"    ],    "data": {      "dew_prob": [        70.25,        "..."      ],      "shaded_dew": [        71.4,        "..."      ],      "frost_prob": [        0,        "..."      ],      "shaded_frost": [        0,        "..."      ],      "canopy": [        0.045,        "..."      ],      "soilt": [        68,        "..."      ],      "soilt_5cm": [        68.25,        "..."      ],      "soilt_10cm": [        68.9,        "..."      ],      "et_rate": [        0.21,        "..."      ],      "tmp_2m": [        72.1,        "..."      ],      "rh": [        83.25,        "..."      ],      "soilm": [        28,        "...",        null      ],      "low_cloud": [        27.5,        "..."      ],      "mid_cloud": [        12.5,        "..."      ],      "high_cloud": [        6.5,        "..."      ],      "dswrf": [        22,        "..."      ],      "grow_score": [        89.2,        "..."      ]    }  },  "metadata": {    "soilm": "No data available beyond the near-term forecast window for this location."  },  "lat": 33.4735,  "lon": -82.0105,  "units": "english"}

On this page