Frost and freeze risk check
A forecast low of 2 °C (35.6 °F) means no frost risk, 30 °F is light frost and 25 °F is a hard freeze: one overnight low, one clear label for covering plants or starting heaters. Free in your browser.
- Free
- Runs in your browser
- No sign-up
- Your data stays on your device
Run — free
Worked example
- Forecast low
- 2
- Forecast low c
- 2 c
- Forecast low f
- 35.6
- Risk
- none
- Risk label
- None
Gardeners, greenhouse operators, and municipal frost-alert pages need a single, reproducible answer when the overnight low is published: is there no freeze risk, only light frost for tender plants, or a hard freeze that kills annuals and damages semi-hardy crops? This frost freeze risk check takes the forecast low temperature—optionally in Celsius or Fahrenheit—and classifies it against common gardening and National Weather Service style thresholds. Temperatures above freezing map to none; lows at or below 0 °C (32 °F) but still above 28 °F map to light frost; 28 °F (−2.2 °C) and colder map to hard freeze.
What frost and freeze risk categories mean for gardens
Frost and freeze language on weather products is not the same as a thermometer anecdote. Public guidance and extension services often distinguish nights that merely touch freezing from nights cold enough to freeze plant tissue deeply and kill tender annuals over a wide area. This capability collapses that guidance into three stable categories for product and education use.
None means the forecast overnight low stays strictly above 0 °C (32 °F), so free air is not expected to freeze water at the surface under the simplified rule set. Light frost covers lows from just above the hard-freeze line through freezing inclusive: that is greater than 28 °F up through 32 °F, or in Celsius greater than −20⁄9 °C up through 0 °C. In that band tender bedding plants, tropical houseplants left outside, and many vegetable seedlings can be damaged even when woody ornamentals survive.
Hard freeze is the band at or below 28 °F (−20⁄9 °C ≈ −2.2222 °C), the threshold many garden columns and freeze warnings treat as broadly destructive for tender and many semi-hardy plants. The classifier does not model radiational frost in cold air drainage hollows, wind, humidity, or plant hardiness zones: it is a deterministic map from one number—the forecast low—to one risk label so dashboards and lesson checks stay comparable night after night.
Where a frost risk check helps most
Nursery ecommerce sites, community garden SMS bots, school phenology projects, and municipal winterization checklists all need the same night-low classification without embedding ad-hoc if-else trees in every language stack. Farm-market apps can batch overnight grid cells into categories before deciding which rows need covers or heaters. Failed validation does not consume balance.
What you can do with it
Garden cover and heater alerts
Map each night’s forecast low into none, light frost, or hard freeze so apps can prompt row covers, move pots, or start heaters.
Classroom and extension demos
Let students convert Celsius and Fahrenheit lows into the same frost categories used in garden guidance and freeze terminology.
Content and municipal frost pages
Power SEO widgets and city winterization checklists with a deterministic risk code from a single published overnight low.
FAQ
What temperature is a hard freeze for gardens?
This tool treats a hard freeze as a forecast low at or below 28 °F (−20⁄9 °C ≈ −2.22 °C). Above that through freezing is light frost; above 32 °F is none.
Can I send Fahrenheit overnight lows?
Yes. Set unit to f or fahrenheit. Default unit is c (Celsius).
Does a low of exactly 0 °C count as frost?
Yes. A low of exactly 0 °C, or 32 °F, is classed as light frost. The result is no risk only when the forecast low stays strictly above freezing, so a borderline night is never waved through.
What should I do when the result is light frost?
Protect tender plants: bedding plants, tropical houseplants left outside and many vegetable seedlings can be damaged even when woody shrubs survive. Row covers or moving pots under shelter are the usual responses.
Does the check consider low spots, wind or hardiness zones?
No. It turns one number, the forecast low, into one label. Cold air pooling in hollows, wind, humidity and plant hardiness zones are not modelled, so adjust the result if your site usually runs colder.
Related tools
For developers — API access
Everything on this page is available programmatically. This section is for teams who want to wire it into their own systems; everyone else can just use the tool above.
API endpoint
Prefer to automate it? One authenticated POST creates the task; the result comes back by webhook or a signed link. The same capability also runs here on the web, by email and from Telegram — and soon from our app too.
Call it from your stack
curl -X POST https://api.kit.forhosting.com/weather/frost-freeze-risk-check \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"forecast_low":2}'const res = await fetch("https://api.kit.forhosting.com/weather/frost-freeze-risk-check", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"forecast_low": 2
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/weather/frost-freeze-risk-check",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"forecast_low": 2
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/weather/frost-freeze-risk-check", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"forecast_low":2}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"forecast_low":2}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/weather/frost-freeze-risk-check", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Example request
{
"forecast_low": 2
}Example response
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "weather.frost_freeze_risk_check",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}The API is asynchronous: the call returns a task_id immediately and the result arrives by webhook. Polling is capped at 1 req/s per task.
Pricing
Published price — no tokens, no invented credits. A failed task is never charged.
Errors
| HTTP | Code | Meaning |
|---|---|---|
401 | unauthorized | Missing or invalid API key. |
402 | insufficient_balance | Your balance doesn't cover the task price. |
404 | unknown_type | That task type doesn't exist. |
429 | rate_limited | Too many requests. Use the webhook instead of polling. |
Technical notes
Missing forecast lows fail with invalid_input so automation never invents a category.
Input contract, units, response fields, and errors
Non-finite values such as NaN or Infinity also fail. Pin the four-decimal converted fields and the exact risk string in tests so clients do not depend on free-text summary wording alone. POST a JSON body with forecast_low as a required finite number: the overnight or period low you are classifying. If the field is missing, null, or an empty string the task fails with invalid_input and the message names forecast_low; those failures are not billed. Optional unit accepts c, celsius, f, or fahrenheit (default c) so US forecast products in Fahrenheit and metric forecasts share one endpoint. Aliases for forecast_low include low, temperature, temp, low_temp, forecast_low_temp, and overnight_low; unit also accepts units, temp_unit, and scale. On success the response echoes forecast_low and unit, always provides forecast_low_c and forecast_low_f rounded to four decimal places for dual-unit displays, returns risk as none, light_frost, or hard_freeze, and risk_label as a short English phrase for UI chips. threshold_freeze_c and threshold_hard_freeze_c expose the numeric cut-lines used, summary explains the category in one sentence, and formula restates the three-way rule for audit beside the answer. Example: forecast_low of 2 with unit c yields none; 30 with unit f yields light frost; 25 with unit f yields hard freeze.
Where a frost freeze risk API earns its keep
Content teams ranking for frost freeze risk or hard freeze threshold phrases can embed the free browser path while automation posts the same forecast_low used in the article example and stores the structured risk code. Document that radiational frost under clear calm skies can still damage plants when the shelter temperature is slightly above freezing, treat this endpoint as a threshold classifier not a microclimate model, and you get reproducible garden risk labels for education, media, and edge workers without re-deriving Fahrenheit and Celsius cut-lines each season.
Technical questions
How do I check frost or freeze risk from a forecast low?
Send forecast_low (and optional unit c or f). The API returns risk none, light_frost, or hard_freeze using 0 °C / 32 °F and 28 °F (−2.2 °C) thresholds, plus Celsius and Fahrenheit conversions.
What if forecast_low is missing?
The task fails with invalid_input. A temperature value is required; empty or missing lows are not billed and do not invent a risk category.
What does the frost freeze risk check cost?
The browser tool is free. API requests use prepaid KIT balance at $0.002 per successful call; invalid input is not billed.