Hail MapsKarpets A.V.

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:

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" }
}

Limits

PlanPriceLook-ups a monthA day, at mostWidget domains“Powered by Hail Maps” link
FreeFree5051Required
Starter$29 a month500503Not required
Growth$79 a month3,00030010Not required
Scale$199 a month15,0001,50050Not 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": "…"}}.

HTTPCodeMeaning
400key_in_urlSend the key in the Authorization header (Bearer) or X-API-Key, never in the URL.
401missing_keyAn API key is required: Authorization: Bearer hm_sk_...
401invalid_keyThis API key does not exist.
401key_revokedThis API key was revoked.
403key_blockedThis API key is blocked. Write to support@myhailmap.com.
403origin_not_allowedThis public key does not work from this website. Add the domain in your account.
403secret_key_in_browserA secret key must not be used in a browser. Use your public key (hm_pk_) on web pages.
429rate_limitedToo many requests. Slow down to under 3 a second.
429daily_limitDaily look-up limit reached (a tenth of the monthly one). It resets at 00:00 UTC.
429monthly_limitMonthly look-up limit reached. Upgrade your plan or wait for the 1st (UTC).
400bad_requestPass address (up to 200 characters) or lat and lon.
404not_foundThe address was not found.
400outside_coverageThe point is outside the contiguous United States.
502geocoder_unavailableAddress search is unavailable right now. Try again in a minute, or pass lat and lon.
500internalSomething 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.