Developer · public API

Build on the atlas.

REST endpoints over every hail cell HailScout has ingested, across MRMS & NEXRAD. Returns proper GeoJSON. No auth required for any read endpoint listed here.

Base URL:https://hail-scout-production.up.railway.app
GET/v1/stormsList storm cells in a bounding box + date window

Query parameters

  • bboxstringWGS84: minlon,minlat,maxlon,maxlate.g. -105,30,-90,42
  • fromISO dateStart of window (inclusive)e.g. 2026-04-01
  • toISO dateEnd of window (inclusive)e.g. 2026-05-13
  • limit?intMax rows. 1-200.e.g. 50
  • include?stringComma-separated extras. "swaths" embeds the per-cell hail polygons.e.g. swaths
  • simplify?floatST_SimplifyPreserveTopology tolerance (degrees) when include=swaths. 0 = full precision.e.g. 0.02
  • source?stringFilter pipeline source: 'MRMS' or 'NEXRAD'.e.g. MRMS
  • min_size?floatDrop cells with peak hail < this size (inches).e.g. 1.0
  • order?string'recent' (default) or 'peak' (biggest first).e.g. peak

cURL

curl "https://hail-scout-production.up.railway.app/v1/storms?bbox=-105,30,-90,42&from=2026-04-01&to=2026-05-13&limit=10&order=peak"

Response

{
  "storms": [
    {
      "id": "storm_5pYhBb3LZqq0cA",
      "start_time": "2026-04-12T11:00:00Z",
      "end_time": "2026-04-12T11:00:00Z",
      "max_hail_size_in": 2.5,
      "source": "MRMS",
      "centroid": {
        "type": "Point",
        "coordinates": [-97.95, 37.79]
      },
      "bbox": {
        "type": "Polygon",
        "coordinates": [[[ ... ]]]
      }
    }
  ],
  "cursor": null,
  "total": 1
}
GET/v1/storms/statsAggregate counts over the whole storms table

cURL

curl "https://hail-scout-production.up.railway.app/v1/storms/stats"

Response

{
  "total_cells": 12345,
  "cells_last_24h": 27,
  "cells_last_7d": 198,
  "cells_last_30d": 921,
  "peak_hail_in": 4.97,
  "earliest": "2025-05-13T00:00:00Z",
  "latest":   "2026-05-13T11:30:00Z",
  "sources": { "MRMS": 12000, "NEXRAD": 345 }
}
GET/v1/storms/at-pointWhat hit this exact address? Returns the storms whose swaths contain the (lat, lng) point.

Query parameters

  • latfloatLatitude (WGS84). -90 to 90.e.g. 32.78
  • lngfloatLongitude (WGS84). -180 to 180.e.g. -96.80
  • from?ISO dateWindow start. Optional.e.g. 2025-05-13
  • to?ISO dateWindow end. Optional.e.g. 2026-05-13
  • limit?intMax hits. 1-200.e.g. 20

cURL

curl "https://hail-scout-production.up.railway.app/v1/storms/at-point?lat=32.78&lng=-96.80"

Response

{
  "lat": 32.78,
  "lng": -96.8,
  "hits": [
    {
      "id": "storm_xxx",
      "start_time": "2026-04-12T11:00:00Z",
      "end_time": "2026-04-12T11:00:00Z",
      "max_hail_size_in": 2.5,
      "source": "MRMS",
      "category_at_point": "2.5"
    }
  ],
  "total": 1
}
GET/v1/storms/{storm_id}Full storm detail with every hail swath as GeoJSON MultiPolygon

cURL

curl "https://hail-scout-production.up.railway.app/v1/storms/storm_5pYhBb3LZqq0cA"

Response

{
  "id": "storm_5pYhBb3LZqq0cA",
  "start_time": "2026-04-12T11:00:00Z",
  "end_time": "2026-04-12T11:00:00Z",
  "max_hail_size_in": 2.5,
  "source": "MRMS",
  "centroid": { "type": "Point", "coordinates": [-97.95, 37.79] },
  "bbox":     { "type": "Polygon", "coordinates": [[[ ... ]]] },
  "swaths": [
    {
      "id": "swath_yyy",
      "hail_size_category": "1.5",
      "geometry": {
        "type": "MultiPolygon",
        "coordinates": [[[[ ... ]]]]
      },
      "updated_at": "2026-04-12T11:00:00Z"
    }
  ]
}

Notes

Things to know

  • Sort order: default is start_time DESC (most recent first). Pass ?order=peak to sort by peak hail size for "biggest events" views.
  • Geometry payload: swaths can be huge. Use ?simplify=0.02 (~2 km tolerance) for map-rendering use cases; drop to 0 for full precision in analytics.
  • Source field: MRMS for the 1 km CONUS-wide instantaneous-MESH pipeline, NEXRAD for the sub-km Level II / SCIT pipeline. Same schema, different upstream.
  • Rate limits: none published right now. Be reasonable — we run on a shared Railway instance.
  • Auth: none for the endpoints above. Customer-data endpoints (alerts, markers, contacts) require a Clerk-issued JWT and are not documented here.

Need authenticated endpoints, webhooks, or higher quotas?

Sign up for an account — you'll get a Clerk-issued token that unlocks the customer-data endpoints (alerts, monitored addresses, exports).

API · HailScout · HailScout