Storm Services

The Storm Services REST Interface

The National Hurricane Center (NHC) tracks tropical storms (hurricanes) and makes these data available to the generral public via their website (

Our ongoing processing detects new storm data as it occurs and enters it into our local database. The NHC reprocesses all the storm data annually, at which time we replace the data for the previous year with the reprocessed data. This can result in storms being deleted, changed, or added.

Two services are provided: The search service finds storms meeting the user's criteria. The track service provides detailed information about a storm's track. These services are invoked using a REST interface, obtaining all of their parameters via the GET (or POST) data and returning an XML-formatted response.

It must be noted that the NHC currently only provides storm tracking information at six-hour intervals, specifically at 00Z, 06Z, 12Z, and 18Z.

The search service

The search service searches for storms meeting the user's criteria.


The request

The service is invoked using the following syntax:[?options]

When invoked without any options, all of the storms in the database are returned. There are several thousand of them, so this is not recommended. The options are as follows:

  • name=string
    • A possibly wildcarded name of a storm. Unix wildcards ? (match a single character) and * (match zero or more characters) may be used. This parameter is optional.
  • from=yyyy[-mm-dd]
    • The earliest date of interest. This parameter is optional.
  • thru=yyyy[-mm-dd]
    • The latest date of interest. This parameter is optional.
  • north=float
    • The north bound of the area-of-interest in decimal degrees. Northern latitudes are positive, southern latitudes are negative. This parameter is optional.
  • south=float
    • The south bound of the area-of-interest in decimal degrees. Northern latitudes are positive, southern latitudes are negative. This parameter is optional.
  • west=float
    • The west bound of the area-of-interest in decimal degrees. Western hemisphere longitudes are native, eastern hemisphere longitudes are positive. This parameter is optional.
  • east=float
    • The east bound of the area-of-interest in decimal degrees. Western hemisphere longitudes are native, eastern hemisphere longitudes are positive. This parameter is optional.
  • minpressure=integer
    • The minimum pressure of interest in millibars. This parameter is optional.
  • maxpressure=integer
    • The maximum pressure of interest in millibars. This parameter is optional.
  • minwinds=integer
    • The minimum wind speed in knots. This parameter is optional.
  • maxwinds=integer
    • The maximum wind speed in knots. This parameter is optional.
  • mincategory=cat
    • The minimum storm category. See below for "cat" values. This parameter is optional.
  • maxcategory=cat
    • The maximum storm category. See below for "cat" values. This parameter is optional.
  • basin={AT|CP|EP}
    • The storm basin, Atlantic (AP), Central Pacific (CP), or Eastern Pacific (EP). This parameter is optional.

The "from" and "thru" values may indicate simply a year (yyyy) or a year, month, and day (yyyy-mm-dd). If "from" is specified and "thru" is not, all storms for the given date and after will be returned. Similarly, if "thru" is specified, and "from" is not, all storms up to the the given date will be returned.

The "north", "south", "east", "and "west" values specify a bounding box of interest. The box specifies only the center of the storms, not the storms' extents. If omitted, "north" defaults to 90, "south" defaults to "-90", "east" defaults to 180, and "west" defaults to -180. The "north" value must exceed the "south" value. If the "west" value exceeds the "east" value, then the area-of-interest crosses the Date Line.

"minpressure" must not exceed "maxpressure", if both are specified. Similarly, "minwinds" must not exceed "maxwinds" if both are specified.

"mincategory" and "maxcategory" use a shorthand form for the categories:

  • "L" for "not available", "disturbance", "wave", and "low pressure"
  • "D" for any kind of depression
  • "S" for any kind of storm
  • "1" through "5" for category 1 through 5 hurricanes

"L" is the minimum category and "5" is the maximum category. "mincategory" must not exceed "maxcategory" if both are specified.

If "basin" is specified, it must only specify one basin. Sorry, there is no mechanism for searching two of the basins and not the third in one query.


The response

The response is always in XML. It has the following format:

 {<Error msg="string"> |

If the request was invalid for some reason, a single "Error" tag will be returned and the "msg" attribute will describe the reason for the error.


If the request was successful, zero or more "Storm" tags will be returned. Note that finding no storms matching the search criteria is not an error; it will simply result in an empty response.

The "stormid" is our internal storm identifier. It is formatted as "yyyynnb" where "yyyy" is the year, "nn" is the storm within the year (01-99), and "b" is an encoded value identifying the basin: "1" for Atlantic, "2" for Eastern Pacific, and "3" for Central Pacific". You will need this value to use the "track" interface, described below.


The "hnumber" is the identification assigned to the storm by the NHC.

The "from" and "thru" values are expressed as ISO date/time strings: yyyy-mm-ddThh:mm:ssZ. All times are UTC.

The "north", "south", "east", and "west" values are the maximum extent of the center of the storm. This does not represent the full extent of the storm's winds.

The "maxwind" value indicates the maximum wind speed of the storm in knots. The "minpressure" value indicates the minimum barometric pressure of the storm in millibars. And the "maxcategory" value indicates the maximum category of the storm expressed in NHC codes:

  • LP - Low pressure
  • SD - Subtropical depression
  • TD - Tropical depression
  • ES - Extratropical storm
  • SS - Subtropical storm
  • TS - Tropical storm
  • H1 - Category 1 hurricane
  • H2 - Category 2 hurricane
  • H3 - Category 3 hurricane
  • H4 - Category 4 hurricane
  • H5 - Category 5 hurricane



Search for all storms named "KATRINA":


Search for KATRINA in 2005:


Search for all category-5 hurricanes in the 21st century:


Search for all storms with three-letter names in the 20th century in the Atlantic basin


Note that the "???" string in the last example should have been encoded using "%" syntax. Many interfaces allow this form and will fix the command for you.

The first example above results in the following response:

  <Storm stormid="1967102" hnumber="196710" name="KATRINA" from="1967-08-30T00:00:00Z" thru="1967-09-03T00:00:00Z"
    north="33.2" south="17.8" west="-114.6" east="-107.2" maxwind="75" minpressure="0" maxcategory="H1" basin="EP"/>
  <Storm stormid="1971112" hnumber="197111" name="KATRINA" from="1971-08-08T12:00:00Z" thru="1971-08-13T00:00:00Z"
    north="26.4" south="14.4" west="-109" east="-97.4" maxwind="55" minpressure="0" maxcategory="TS" basin="EP"/>
  <Storm stormid="1975112" hnumber="197511" name="KATRINA" from="1975-08-29T00:00:00Z" thru="1975-09-07T00:00:00Z"
    north="21.8" south="10.5" west="-128.9" east="-101" maxwind="115" minpressure="0" maxcategory="H4" basin="EP"/>
  <Storm stormid="1981211" hnumber="198121" name="KATRINA" from="1981-11-03T00:00:00Z" thru="1981-11-07T18:00:00Z"
    north="26.8" south="16.9" west="-81.4" east="-64.5" maxwind="75" minpressure="980" maxcategory="H1" basin="AT"/>
  <Storm stormid="1999151" hnumber="199915" name="KATRINA" from="1999-10-28T18:00:00Z" thru="1999-11-01T12:00:00Z"
    north="21.2" south="11.4" west="-89.8" east="-80.9" maxwind="35" minpressure="999" maxcategory="TS" basin="AT"/>
  <Storm stormid="2005121" hnumber="200512" name="KATRINA" from="2005-08-23T18:00:00Z" thru="2005-08-31T06:00:00Z"
    north="40.1" south="23.1" west="-89.6" east="-75.1" maxwind="150" minpressure="902" maxcategory="H5" basin="AT"/>


The track service

The track service provides all of the track records for a single storm.


The request

The service is invoked using the following syntax:

where "yyyynnb" is the storm-id returned by a "search" request. Note that this is not the NHC-supplied storm number.


The response

The response is returned in XML as follows:

If an error was encountered processing the request, the following is returned:

  <Error msg="string"/>

The "Error" tag's "msg" attribute will provide an explanation of the error.


If the request was successful, the following is returned:


The "StormTrackResponse" tag will contain the same information about the storm as returned by the "search" command (see above). There will be one or more "Track" tags within the "StormTrackResponse" tag, each indicating the characteristics of the storm at that date and time.


The "flag" attribute, if present, indicates additional information about the track record:

    "L" - The storm made landfall
    "W" - Maximum sustained wind
    "P" - Minimum central pressure
    "I" - Pressure/wind intensity peak
    "C" - Closest approach without landfall
    "S" - Change of system status
    "G" - Genesis
    "T" - Additional detail on track

Note that the latitude and longitude values indicate the center of the storm only.


The "r3rkt", "r50kt", and "464kt" attributes will be present in only a handfull of track records for storms from a previous year, never for the ongoing season. They indicate the 34 knot, 50 knot, and 64 knot wind radii in nautical miles from the storm's center in the northeast, southeast, southwest, and northwest directions, respectively.



Return the track information for 2005 KATRINA:

which returns:

  stormid="2005121" name="KATRINA" hnumber="200512" from="2005-08-23T18:00:00Z" thru="2005-08-31T06:00:00Z"
  minlat="23.1" maxlat="40.1" minlon="-89.6" maxlon="-75.1" maxwind="150" minpress="902" maxcat="H5" basin="AT">
  <Track date="2005-08-23T18:00:00Z" category="TD" latitude="23.1" longitude="-75.1" windspeed="30" pressure="1008"/>
  <Track date="2005-08-24T00:00:00Z" category="TD" latitude="23.4" longitude="-75.7" windspeed="30" pressure="1007"/>
  <Track date="2005-08-24T06:00:00Z" category="TD" latitude="23.8" longitude="-76.2" windspeed="30" pressure="1007"/>
  <Track date="2005-08-24T12:00:00Z" category="TS" latitude="24.5" longitude="-76.5" windspeed="35" pressure="1006"/>
  <Track date="2005-08-24T18:00:00Z" category="TS" latitude="25.4" longitude="-76.9" windspeed="40" pressure="1003"/>
  <Track date="2005-08-25T00:00:00Z" category="TS" latitude="26" longitude="-77.7" windspeed="45" pressure="1000"/>
  <Track date="2005-08-25T06:00:00Z" category="TS" latitude="26.1" longitude="-78.4" windspeed="50" pressure="997"/>
  <Track date="2005-08-25T12:00:00Z" category="TS" latitude="26.2" longitude="-79" windspeed="55"
    pressure="994" r34kt="60,60,30,50"/>
  <Track date="2005-08-25T18:00:00Z" category="TS" latitude="26.2" longitude="-79.6" windspeed="60"
    pressure="988" r34kt="70,70,50,60" r50kt="25,25,25,20"/>
  <Track date="2005-08-25T22:30:00Z" flag="L" category="H1" latitude="26" longitude="-80.1" windspeed="70" pressure="984"/>
  <Track date="2005-08-26T00:00:00Z" category="H1" latitude="25.9" longitude="-80.3" windspeed="70"
    pressure="983" r34kt="70,70,50,40" r50kt="20,20,20,20" r64kt="10,10,10,10"/>
  <Track date="2005-08-26T06:00:00Z" category="H1" latitude="25.4" longitude="-81.3" windspeed="65"
    pressure="987" r34kt="75,75,40,30" r50kt="60,60,60,20" r64kt="10,10,10,10"/>
  <Track date="2005-08-26T12:00:00Z" category="H1" latitude="25.1" longitude="-82" windspeed="75"
    pressure="979" r34kt="75,75,45,25" r50kt="60,60,60,25" r64kt="10,20,10,10"/>
  <Track date="2005-08-26T18:00:00Z" category="H2" latitude="24.9" longitude="-82.6" windspeed="85"
    pressure="968" r34kt="75,75,55,35" r50kt="60,60,60,35" r64kt="10,20,15,10"/>
  <Track date="2005-08-27T00:00:00Z" category="H2" latitude="24.6" longitude="-83.3" windspeed="90"
    pressure="959" r34kt="90,75,75,75" r50kt="60,60,60,40" r64kt="15,25,20,15"/>
  <Track date="2005-08-27T06:00:00Z" category="H2" latitude="24.4" longitude="-84" windspeed="95"
    pressure="950" r34kt="130,90,90,130" r50kt="60,60,60,45" r64kt="25,30,30,25"/>
  <Track date="2005-08-27T12:00:00Z" category="H3" latitude="24.4" longitude="-84.7" windspeed="100"
    pressure="942" r34kt="130,90,90,130" r50kt="60,60,60,45" r64kt="25,30,30,25"/>
  <Track date="2005-08-27T18:00:00Z" category="H3" latitude="24.5" longitude="-85.3" windspeed="100"
    pressure="948" r34kt="140,90,90,130" r50kt="70,70,70,60" r64kt="35,35,35,35"/>
  <Track date="2005-08-28T00:00:00Z" category="H3" latitude="24.8" longitude="-85.9" windspeed="100"
    pressure="941" r34kt="140,100,100,140" r50kt="80,80,80,65" r64kt="50,45,45,50"/>
  <Track date="2005-08-28T06:00:00Z" category="H4" latitude="25.2" longitude="-86.7" windspeed="125"
    pressure="930" r34kt="160,160,125,140" r50kt="100,100,100,75" r64kt="75,75,50,75"/>
  <Track date="2005-08-28T12:00:00Z" category="H5" latitude="25.7" longitude="-87.7" windspeed="145"
    pressure="909" r34kt="180,180,125,140" r50kt="120,120,120,75" r64kt="75,90,50,75"/>
  <Track date="2005-08-28T18:00:00Z" category="H5" latitude="26.3" longitude="-88.6" windspeed="150"
    pressure="902" r34kt="200,180,125,180" r50kt="120,120,120,75" r64kt="90,90,50,90"/>
  <Track date="2005-08-29T00:00:00Z" category="H5" latitude="27.2" longitude="-89.2" windspeed="140"
    pressure="905" r34kt="200,200,150,180" r50kt="120,120,120,75" r64kt="80,90,60,80"/>
  <Track date="2005-08-29T06:00:00Z" category="H4" latitude="28.2" longitude="-89.6" windspeed="125"
    pressure="913" r34kt="200,200,150,150" r50kt="120,120,120,75" r64kt="70,90,60,70"/>
  <Track date="2005-08-29T11:10:00Z" flag="L" category="H3" latitude="29.3" longitude="-89.6" windspeed="110" pressure="920"/>
  <Track date="2005-08-29T12:00:00Z" category="H3" latitude="29.5" longitude="-89.6" windspeed="110"
    pressure="923" r34kt="200,200,150,100" r50kt="120,120,120,75" r64kt="60,90,60,60"/>
  <Track date="2005-08-29T14:45:00Z" flag="L" category="H3" latitude="30.2" longitude="-89.6" windspeed="105" pressure="928"/>
  <Track date="2005-08-29T18:00:00Z" category="H1" latitude="31.1" longitude="-89.6" windspeed="80"
    pressure="948" r34kt="100,180,100,100" r50kt="75,75,100,75" r64kt="30,50,30,30"/>
  <Track date="2005-08-30T00:00:00Z" category="TS" latitude="32.6" longitude="-89.1" windspeed="50"
    pressure="961" r34kt="75,90,90,50"/>
  <Track date="2005-08-30T06:00:00Z" category="TS" latitude="34.1" longitude="-88.6" windspeed="40"
    pressure="978" r34kt="75,90,75,50"/>
  <Track date="2005-08-30T12:00:00Z" category="TD" latitude="35.6" longitude="-88" windspeed="30" pressure="985"/>
  <Track date="2005-08-30T18:00:00Z" category="TD" latitude="37" longitude="-87" windspeed="30" pressure="990"/>
  <Track date="2005-08-31T00:00:00Z" category="ES" latitude="38.6" longitude="-85.3" windspeed="30" pressure="994"/>
  <Track date="2005-08-31T06:00:00Z" category="ES" latitude="40.1" longitude="-82.9" windspeed="25" pressure="996"/>


Have you used our data? Register for updates