Every forecast, as data.
Open JSON endpoints for the live forecasts, the evidence behind each one and the track record. No key, no sign-up. Please cite HazardPulse and link back when you use the data.
Quick start
curl https://hazardpulse.com/api/v1/live/pulse
Every response is wrapped the same way: the payload under data, and meta.version, meta.generated_at and meta.cache_ttl beside it. Errors carry error.code, error.message and a error.trace_id to quote if you contact us. All times are ISO 8601 in UTC.
Live forecasts
| Endpoint | Returns | Cache |
|---|---|---|
/api/v1/live/pulse | The current headline forecast for every hazard | 5 min |
/api/v1/live/earthquake | The current earthquake forecast, with its highest-chance cells | 5 min |
/api/v1/live/hurricane | Every active tropical cyclone with its rapid-intensification chance | 5 min |
/api/v1/live/tornado | Every tracked thunderstorm with its tornado chance | 5 min |
/api/v1/alerts/recent | Recent high-chance forecasts across hazards | 1 min |
Live events
What the agencies that observe hazards are reporting now, read from their public feeds at most once a minute. A source that did not answer is named under sources, and the counts it supplies are null — unknown, never zero.
| Endpoint | Returns | Cache |
|---|---|---|
/api/v1/now | The earthquakes of the last 24 hours (M2.5+, from the USGS) and the week’s largest; every active tropical cyclone (NOAA’s positions where NOAA forecasts, the HazardPulse feed elsewhere, each with its rapid-intensification chance); the US tornado warnings in effect (from the National Weather Service); and the counts of each | 1 min |
/api/v1/near | “Near you” for the caller’s approximate location, as the home page shows it; reliable is false where no location is available. The location is used for that one request only (see Privacy) | none |
Forecast records and evidence
Every forecast is frozen when it is issued. These endpoints return it exactly as published, with the hashes and checks that let you confirm nothing changed afterwards.
| Endpoint | Returns | Cache |
|---|---|---|
/api/v1/forecast/{forecast_id} | One forecast’s frozen record, for example eq_fcst_20261004_0600: the published numbers, the model version and the inputs it used (for earthquakes, the catalog window and its hash) | 1 year |
/api/v1/replay/{forecast_id} | The same record, under its older name | 1 year |
/api/v1/evidence/{provenance_id} | Input and output hashes and the sources used (prov_{forecast_id}) | 1 year |
/api/v1/gates/{gate_decision_id} | The automatic checks the forecast passed before publication (gdec_{forecast_id}) | 1 year |
Track record and models
| Endpoint | Returns | Cache |
|---|---|---|
/api/v1/verification/summary | How each live model has scored against what happened | 1 hour |
/api/v1/verification/tornado-recovery | The tornado model’s live scoring, run by run | 10 min |
/api/v1/registry/models | Every model that produces a live number, with its version, how it was chosen and where its forecasts are kept | 1 hour |
/api/v1/laic/summary | Results of the population-scale precursor tests on the research page | 1 hour |
/api/v1/ops/status | Each hazard’s latest forecast, its age and whether it is overdue, worked out when you ask | 1 min |
/api/v1/federation/atlas | This node’s federation fingerprint: its node id, its Ed25519 public key and the tables it offers to peers. A discovery record only; signed queries between nodes do not go through this endpoint | 1 hour |
Streams
Server-sent events. Each connection receives the current snapshot when it opens; reconnect on your own schedule for updates.
| Endpoint | Returns |
|---|---|
/stream/live/pulse | The live headline forecasts |
/stream/ops/status | System status |
Versioning and fair use
Stable within a version
- Every endpoint lives under
/api/v1/. Fields are never removed or renamed within a version; new fields may be added. - A breaking change ships as a new version, announced in the RSS feed before the old one is retired.
Fair use
- No key is needed. Please keep to 120 requests a minute from one address; above that the API may answer
429with an error you can retry after a minute. - Each response carries the cache lifetime above. The data behind it changes only when a forecast is published, so polling faster than that gains nothing.
/data/replay/ (index: replay-index.json), and the research datasets behind every model are published as versioned open-data releases with a hash for every file.