Hail & hurricane history API
One endpoint answers what NOAA recorded near a U.S. address: radar-estimated hail since October 2019 and tropical storm and hurricane tracks since 1851. The same data as the $19 address report, as JSON. The widget uses it too.
Keys
Sign in at your account and open API & widget. There are two kinds of key:
- Secret key
hm_sk_…— for your server. Send it in theAuthorization: BearerorX-API-Keyheader. It is shown once; we keep only its SHA-256 hash. Requests from a browser (with anOriginheader) are refused, so it cannot leak through a web page. - Public key
hm_pk_…— for the widget and your own browser code. It works only from the domains listed in your account (https, with and without www;localhostfor testing), with CORS.
Never put a key in the URL: a request with ?key= is refused. Revoke a key in the account at any time.
GET /v1/history
Parameters: address (one line, up to 200 characters, geocoded by the U.S. Census Geocoder) or lat and lon
(contiguous United States).
curl -H "Authorization: Bearer hm_sk_…" \
"https://myhailmap.com/v1/history?address=222%20W%20Main%20St%2C%20Pensacola%2C%20FL%2032502"
curl -H "X-API-Key: hm_sk_…" "https://myhailmap.com/v1/history?lat=40.8093&lon=-96.7011"// browser, public key, from a listed domain
const r = await fetch('https://myhailmap.com/v1/history?address=' + encodeURIComponent(address), {
headers: { 'X-API-Key': 'hm_pk_…' }, credentials: 'omit',
});
const body = await r.json();
if (!r.ok) throw new Error(body.error.message);
console.log(body.hail.days.length, body.hurricanes.systems.length);Response
{
"point": { "lat": 30.406892, "lon": -87.217973, "matched_address": "222 MAIN ST, PENSACOLA, FL, 32502" },
"data_through": "2026-10-27",
"hail": {
"since": "2019-10-01", "radius_km": 5,
"days": [ { "date": "2026-03-07", "max_in_1km": null, "max_in_3km": null, "max_in_5km": 0.82, "nearest_report": null }, … ],
"date_of_loss": { "last_1in_within_1km": null,
"last_1in_within_3km": { "day": "2025-10-26", "size_in": 1.02, "days_ago": 366 },
"largest_within_1km": { "day": "2023-04-27", "size_in": 0.91, "days_ago": 1279 } },
"ground_reports": [ { "date": "2026-03-15", "time_utc": "2026-03-16T11:35:00Z", "size_in": 1, "distance_km": 7.3,
"place": "BRENT, FLORIDA", "source": "NCEI Storm Events" }, … ],
"source": "…", "note": "…"
},
"hurricanes": {
"radius_mi": 75, "first_season": 1851, "last_season": 2025,
"systems": [ { "id": "AL192020", "name": "Sally", "year": 2020, "basin": "AL", "closest_mi": 22.9, "wind_at_closest_kt": 82,
"max_wind_near_kt": 95, "category_near": 2, "peak_wind_kt": 95, "closest_date": "2020-09-16" }, … ],
"strongest": { "id": "AL111979", "name": "Frederic", "year": 1979, "category_near": 4, "closest_mi": 61.1, … },
"compare": { "recent_from": 1996, "recent_to": 2025, "recent_count": 13, "recent_per_decade": 4.3,
"before_from": 1851, "before_to": 1995, "before_count": 58, "before_per_decade": 4 },
"source": { "name": "NOAA National Hurricane Center HURDAT2", "url": "https://www.nhc.noaa.gov/data/#hurdat" },
"note": "…"
},
"attribution": { "required": true, "text": "Powered by Hail Maps", "url": "https://myhailmap.com/widget" },
"disclaimer": "Historical NOAA data. Not a forecast, not an official National Weather Service …",
"usage": { "charged": true, "month_used": 12, "month_limit": 50, "day_limit": 5, "plan": "Free" }
}hail.days— every day with radar hail (MESH) within 5 km, newest first; maximum estimated size in inches within 1, 3 and 5 km (nullwhen none in that ring) and the nearest ground report that day within 10 km.hail.date_of_loss— the latest day with 1" or larger within 1 and 3 km, and the largest within 1 km.hail.ground_reports— up to 15 NOAA SPC and NCEI Storm Events reports within 10 km, newest first.hurricanes.systems— every system that came within 75 miles as a tropical storm or hurricane (HURDAT2 status TS or HU), newest first: closest distance from the point to the track centre line, wind there, the highest wind and Saffir-Simpson category while within 75 miles (0 = tropical storm), the peak of the whole track and the date of the closest approach.hurricanes.compare— the last 30 seasons against all earlier ones, per decade; records before satellites (mid-1960s) miss some storms.attribution— whenrequiredis true (Free), show the “Powered by Hail Maps” link next to the data.
Limits
| Plan | Price | Look-ups a month | A day, at most | Widget domains | “Powered by Hail Maps” link |
|---|---|---|---|---|---|
| Free | Free | 50 | 5 | 1 | Required |
| Starter | $29 a month | 500 | 50 | 3 | Not required |
| Growth | $79 a month | 3,000 | 300 | 10 | Not required |
| Scale | $199 a month | 15,000 | 1,500 | 50 | Not required |
A look-up is one new address or point: asking again about the same place within 30 days is free. Limits reset on the 1st of the month and at midnight (UTC). Paid plans renew monthly through Dodo Payments and can be cancelled at any time in your account.
Each response carries X-RateLimit-Limit (look-ups a month), X-RateLimit-Remaining, X-RateLimit-Reset (Unix time
of the next month) and X-Lookup-Charged. Bursts: up to 30 requests in 10 seconds per key. Address searches that find nothing and
requests that fail are not counted.
Errors
Errors are JSON: {"error": {"code": "monthly_limit", "message": "…"}}.
| HTTP | Code | Meaning |
|---|---|---|
| 400 | key_in_url | Send the key in the Authorization header (Bearer) or X-API-Key, never in the URL. |
| 401 | missing_key | An API key is required: Authorization: Bearer hm_sk_... |
| 401 | invalid_key | This API key does not exist. |
| 401 | key_revoked | This API key was revoked. |
| 403 | key_blocked | This API key is blocked. Write to support@myhailmap.com. |
| 403 | origin_not_allowed | This public key does not work from this website. Add the domain in your account. |
| 403 | secret_key_in_browser | A secret key must not be used in a browser. Use your public key (hm_pk_) on web pages. |
| 429 | rate_limited | Too many requests. Slow down to under 3 a second. |
| 429 | daily_limit | Daily look-up limit reached (a tenth of the monthly one). It resets at 00:00 UTC. |
| 429 | monthly_limit | Monthly look-up limit reached. Upgrade your plan or wait for the 1st (UTC). |
| 400 | bad_request | Pass address (up to 200 characters) or lat and lon. |
| 404 | not_found | The address was not found. |
| 400 | outside_coverage | The point is outside the contiguous United States. |
| 502 | geocoder_unavailable | Address search is unavailable right now. Try again in a minute, or pass lat and lon. |
| 500 | internal | Something went wrong on our side. Try again in a minute. |
Data and terms
Hail: NOAA MRMS MESH radar estimates (0.01° grid, daily maxima) and NOAA/NWS ground reports. Hurricanes: NOAA National Hurricane Center HURDAT2 (Atlantic since 1851, north-east and central Pacific since 1949). Historical data, not a forecast and not an official National Weather Service warning; not an inspection, insurance or legal advice. Use is subject to the API terms. Questions: support@myhailmap.com.