ACE Data API

JSON endpoint

GET https://aceofcanes.com/api/v1/season.json

One file with both basins’ current season: ACE total, NOAA classification, storm counts, rank since 1991, every named storm with its landfalls and track, and the ACE of every season since 1991. It is rebuilt with the site, about once an hour during the season. No key, no sign-up, CORS-friendly static file.

Versioning

The /api/v1/ shape is a public contract. New fields can be added to v1 at any time, so ignore fields you don’t know. A field will never be renamed or removed in v1: that ships as a new /api/v2/ path, and v1 keeps working.

Examples

curl + jq

curl -s https://aceofcanes.com/api/v1/season.json | jq '.basins.atlantic | {ace_total, classification, rank}'

JavaScript

const res = await fetch('https://aceofcanes.com/api/v1/season.json');
const data = await res.json();
const atl = data.basins.atlantic;
console.log(`${atl.year} Atlantic ACE: ${atl.ace_total} (${atl.classification})`);

Python

import requests

data = requests.get('https://aceofcanes.com/api/v1/season.json', timeout=10).json()
for s in data['basins']['atlantic']['storms']:
    print(s['name'], s['ace'], s['category'])

Fields

<basin> is atlantic or pacific; [] means each item of an array.

FieldTypeDescription
versionintegerSchema version. Always 1 at this URL.
generated_atstringUTC time the file was built, ISO 8601 (2026-09-20T12:00:00Z).
sourcestringWhere the data comes from.
sitestringSite URL.
notestringThe preliminary-data caveat, in plain text.
basinsobjectOne entry per basin, keyed atlantic and pacific (East & Central Pacific).
basins.<basin>.namestringDisplay name of the basin.
basins.<basin>.yearintegerSeason year.
basins.<basin>.preseasonbooleantrue before the season has any named storm.
basins.<basin>.is_backup_databooleantrue when the live fetch failed and the numbers are a stored fallback.
basins.<basin>.data_as_ofstringTime of the latest storm data point, ISO 8601 UTC. Can be empty.
basins.<basin>.ace_totalnumberSeason ACE so far, 2 decimals.
basins.<basin>.normal_acenumber1991–2020 average season ACE for the basin.
basins.<basin>.pct_of_normalnumberace_total as a percent of normal_ace, 1 decimal.
basins.<basin>.classificationstringNOAA class: Below Normal, Near Normal, Above Normal or Extremely Active.
basins.<basin>.named_stormsintegerNamed storms so far.
basins.<basin>.hurricanesintegerHurricanes so far.
basins.<basin>.major_hurricanesintegerCategory 3+ hurricanes so far.
basins.<basin>.rankintegerRank of this season’s ACE among all seasons since 1991 (1 = highest).
basins.<basin>.seasons_rankedintegerHow many seasons rank is out of.
basins.<basin>.stormsarrayNamed storms this season.
basins.<basin>.storms[].namestringStorm name.
basins.<basin>.storms[].slugstringURL-safe id, unique within the season.
basins.<basin>.storms[].urlstringThe storm’s page on this site.
basins.<basin>.storms[].acenumberStorm ACE, 2 decimals.
basins.<basin>.storms[].pct_of_seasonnumberShare of the season’s ACE, 1 decimal.
basins.<basin>.storms[].max_wind_ktintegerPeak sustained wind in knots.
basins.<basin>.storms[].categorystringPeak category: TS, Cat 1 … Cat 5.
basins.<basin>.storms[].is_majorbooleanReached Category 3 or higher.
basins.<basin>.storms[].is_activebooleanStill active at build time.
basins.<basin>.storms[].start_datestringFormation date as M/D in the season year; — if unknown.
basins.<basin>.storms[].landfallsarrayLandfalls, in order. Empty if none.
basins.<basin>.storms[].landfalls[].locationstringWhere it made landfall.
basins.<basin>.storms[].landfalls[].categorystringCategory at landfall, not at peak.
basins.<basin>.storms[].landfall_estimatedbooleantrue when landfall was estimated from the track instead of the NHC record.
basins.<basin>.storms[].trackarrayTrack points, oldest first.
basins.<basin>.storms[].track[].latnumberLatitude, degrees north.
basins.<basin>.storms[].track[].lonnumberLongitude, degrees east (negative = west).
basins.<basin>.storms[].track[].wind_ktintegerSustained wind in knots.
basins.<basin>.storms[].track[].statusstringHURDAT2 status code (DB, TD, TS, HU, SS, EX, …). Only TS, SS and HU count toward ACE.
basins.<basin>.storms[].track[].timestringTime of the point as M/D HHZ in UTC (10/5 00Z).
basins.<basin>.yearly_aceobjectSeason ACE for every year since 1991, keyed by year as a string.

RSS feed

https://aceofcanes.com/feed.xml

One item per named storm in both basins, newest first, with its ACE, peak intensity and landfalls. Each storm keeps the same guid, so your reader announces it once and the description updates as the storm grows.

Data: NOAA National Hurricane Center HURDAT2 and real-time best track, via Tropycal. NOAA data is public domain; please credit NOAA NHC, and a link back to aceofcanes.com is appreciated.

This site is maintained by a hurricane data enthusiast, not a meteorologist. For forecasts, watches and warnings, always use the National Hurricane Center.