# National Hurricane Center API

> National Hurricane Center provides active storm listings and advisories as a workflow and API.

National Hurricane Center, also called NHC, lists active tropical cyclones by basin, with current conditions, advisories, and forecast cone pages. List active storms accepts an optional basin; Get storm advisory returns the latest public advisory for an active storm by name.

- Page: https://fous.com/workflows/national-hurricane-center
- Handle: `@national-hurricane-center`
- Category: [Weather](https://fous.com/workflows/category/weather)
- Source website: https://nhc.noaa.gov
- Last verified: Sep 30, 2026
- Fous is not affiliated with National Hurricane Center.

## Methods

### Get storm advisory

Operation `get_storm_advisory`, version 1. 1 credit per call.

Get the latest public advisory for an active NHC storm by name, including its position, intensity, watches, hazards, and next advisory time. Only active storms are available; hazard topics not mentioned in the advisory are null.

**Input**

| Field | Type | Required | Example | Description |
|---|---|---|---|---|
| `storm_name` | string | yes | `"Hurricane Polo"` | Active storm name, for example "Polo" or "Hurricane Polo". |

**Input schema**

```json
{
  "type": "object",
  "required": [
    "storm_name"
  ],
  "properties": {
    "storm_name": {
      "type": "string",
      "description": "Active storm name, for example \"Polo\" or \"Hurricane Polo\".",
      "examples": [
        "Hurricane Polo",
        "Fay",
        "Hurricane Nolo"
      ]
    }
  },
  "additionalProperties": false,
  "examples": [
    {
      "storm_name": "Hurricane Polo"
    },
    {
      "storm_name": "Fay"
    },
    {
      "storm_name": "Hurricane Nolo"
    }
  ]
}
```

**Output**

| Field | Type | Example | Description |
|---|---|---|---|
| `hazards` | object |  | Land hazards mentioned in this advisory; missing hazard topics are null. |
| `hazards.wind` | string or null | `"Hurricane conditions are expected in the Hurricane Warning area in the Papahanaumokuakea Marine National Monument by We` | Wind hazards. |
| `hazards.rainfall` | string or null | `"Outer bands east of Nolo’s track will produce 3 to 6 inches of rain across Kauai and Niihau between Tuesday and Thursda` | Rainfall hazards. |
| `hazards.tornadoes` | string or null |  | Tornado hazards. |
| `hazards.storm_surge` | string or null |  | Storm surge hazards. |
| `latitude` | number or null | `26.6` | Latitude in degrees north (negative for south). |
| `location` | string or null | `"26.6°N 45.3°W; ABOUT 1325 MI...2130 KM WSW OF THE AZORES"` | Current coordinates and geographical position stated in the advisory. |
| `longitude` | number or null | `-45.3` | Longitude in degrees east (negative for west). |
| `storm_name` | string | `"Fay"` | Name of the active storm. |
| `storm_type` | string or null | `"Tropical Depression"` | Storm classification stated in the advisory. |
| `issued_time` | string or null | `"2026-09-28T17:00-04:00"` | Time the advisory was issued, ISO 8601 with offset. |
| `nhc_storm_id` | string or null | `"al062026"` | NHC storm ID. |
| `advisory_link` | string | `"https://www.nhc.noaa.gov/text/MIATCPAT1.shtml"` | Page for the current public advisory. |
| `advisory_text` | string |  | Complete official public advisory text. |
| `advisory_number` | string or null | `"35"` | Number of the latest public advisory, including an intermediate advisory suffix. |
| `hurricane_category` | integer or null | `4` | Saffir-Simpson category, if the storm is a hurricane. |
| `movement_direction` | string or null | `"Southwest"` | Current movement direction. |
| `movement_speed_mph` | integer or null | `9` | Movement speed in miles per hour. |
| `next_advisory_time` | string or null | `"2026-09-28T23:00-04:00"` | Next scheduled advisory time, ISO 8601 with offset, if stated. |
| `minimum_pressure_mb` | integer or null | `1011` | Minimum central pressure in millibars. |
| `watches_and_warnings` | array |  | Watches and warnings now in effect, with their affected areas. |
| `maximum_sustained_winds_kmh` | integer or null | `55` | Maximum sustained winds in kilometers per hour. |
| `maximum_sustained_winds_mph` | integer or null | `35` | Maximum sustained winds in miles per hour. |

**Example input**

```json
{
  "storm_name": "Fay"
}
```

**Example output**

```json
{
  "hazards": {
    "wind": null,
    "rainfall": null,
    "tornadoes": null,
    "storm_surge": null
  },
  "latitude": 26.6,
  "location": "26.6°N 45.3°W; ABOUT 1325 MI...2130 KM WSW OF THE AZORES",
  "longitude": -45.3,
  "storm_name": "Fay",
  "storm_type": "Tropical Depression",
  "issued_time": "2026-09-28T17:00-04:00",
  "nhc_storm_id": "al062026",
  "advisory_link": "https://www.nhc.noaa.gov/text/MIATCPAT1.shtml",
  "advisory_text": "000\nWTNT31 KNHC 282032\nTCPAT1\n \nBULLETIN\nTropical Depression Fay Advisory Number  35\nNWS National Hurricane Center Miami FL       AL062026\n500 PM AST Mon Sep 28 2026\n \n...FAY HOLDING STEADY...\n \n \nSUM…",
  "advisory_number": "35",
  "hurricane_category": null,
  "movement_direction": "Southwest",
  "movement_speed_mph": 9,
  "next_advisory_time": "2026-09-28T23:00-04:00",
  "minimum_pressure_mb": 1011,
  "watches_and_warnings": [],
  "maximum_sustained_winds_kmh": 55,
  "maximum_sustained_winds_mph": 35
}
```

### List active storms

Operation `list_active_storms`, version 1. 1 credit per call.

List active tropical cyclones in the selected basin, strongest first, with their current conditions, advisory, and forecast cone. Location and rounded wind values follow the latest public advisory when available.

**Input**

| Field | Type | Required | Example | Description |
|---|---|---|---|---|
| `basin` | string | no | `"central_pacific"` | Select a hurricane basin, for example eastern_pacific. Default: all. |

**Input schema**

```json
{
  "type": "object",
  "properties": {
    "basin": {
      "enum": [
        "all",
        "atlantic",
        "eastern_pacific",
        "central_pacific"
      ],
      "type": "string",
      "default": "all",
      "description": "Select a hurricane basin, for example eastern_pacific. Default: all.",
      "examples": [
        "central_pacific",
        "atlantic",
        "eastern_pacific"
      ]
    }
  },
  "additionalProperties": false,
  "examples": [
    {
      "basin": "central_pacific"
    },
    {},
    {
      "basin": "atlantic"
    }
  ]
}
```

**Output**

| Field | Type | Example | Description |
|---|---|---|---|
| `storms` | array |  | Active storms, strongest first. |
| `storms[].name` | string or null | `"Nolo"` | Storm name. |
| `storms[].type` | string | `"hurricane"` | Cyclone type in words. |
| `storms[].basin` | string | `"central Pacific"` | Atlantic, eastern Pacific, or central Pacific. |
| `storms[].latitude` | number or null | `18.2` | Latitude in decimal degrees. |
| `storms[].location` | string or null | `"435 mi Sse of French Frigate Shoals"` | Location relative to a landmark in the advisory. |
| `storms[].storm_id` | string or null | `"ep152026"` | NHC storm identifier. |
| `storms[].longitude` | number or null | `-163.4` | Longitude in decimal degrees. |
| `storms[].advisory_url` | string or null | `"https://www.nhc.noaa.gov/text/HFOTCPCP2.shtml"` | Page for the current public advisory. |
| `storms[].forecast_cone_url` | string or null | `"https://www.nhc.noaa.gov/graphics_cp2.shtml"` | Page with the current forecast cone. |
| `storms[].hurricane_category` | integer or null | `4` | Saffir-Simpson category from 1 to 5, or null for non-hurricanes. |
| `storms[].movement_direction` | string or null | `"NW"` | Direction of storm motion. |
| `storms[].movement_speed_mph` | integer or null | `12` | Movement speed in miles per hour. |
| `storms[].minimum_pressure_mb` | integer or null | `933` | Minimum central pressure in millibars. |
| `storms[].latest_advisory_time` | string or null | `"2026-09-29T00:00:00+00:00"` | Latest advisory issue time in ISO 8601 with UTC offset. |
| `storms[].maximum_sustained_winds_kmh` | integer or null | `230` | Maximum sustained winds in kilometers per hour. |
| `storms[].maximum_sustained_winds_mph` | integer or null | `145` | Maximum sustained winds in miles per hour. |
| `summary` | string | `"1 active storm in the central Pacific."` | Plain-language count of active storms. |

**Example input**

```json
{
  "basin": "central_pacific"
}
```

**Example output**

```json
{
  "storms": [
    {
      "name": "Nolo",
      "type": "hurricane",
      "basin": "central Pacific",
      "latitude": 18.2,
      "location": "435 mi Sse of French Frigate Shoals",
      "storm_id": "ep152026",
      "longitude": -163.4,
      "advisory_url": "https://www.nhc.noaa.gov/text/HFOTCPCP2.shtml",
      "forecast_cone_url": "https://www.nhc.noaa.gov/graphics_cp2.shtml",
      "hurricane_category": 4,
      "movement_direction": "NW",
      "movement_speed_mph": 12,
      "minimum_pressure_mb": 933,
      "latest_advisory_time": "2026-09-29T00:00:00+00:00",
      "maximum_sustained_winds_kmh": 230,
      "maximum_sustained_winds_mph": 145
    }
  ],
  "summary": "1 active storm in the central Pacific."
}
```

## Quick start

Call the API with a Fous API key (`FOUS_API_KEY`). To create one, turn on Developer mode in Fous Studio, then open Keys & connections → API keys (https://app.fous.com/keys).

```bash
# First set your key: export FOUS_API_KEY='YOUR_FOUS_API_KEY'
: "${FOUS_API_KEY:?Set FOUS_API_KEY before running this example}"

curl 'https://api.fous.com/v1/query' \
  --fail-with-body --silent --show-error --max-time 120 \
  -H "Authorization: Bearer $FOUS_API_KEY" \
  -H 'Content-Type: application/json' \
  --data-raw '{
  "api": "@national-hurricane-center",
  "visibility": "public",
  "operation": "get_storm_advisory",
  "version": 1,
  "input": {
    "storm_name": "Hurricane Polo"
  },
  "response": {
    "format": "json"
  }
}'
```

```python
# Save as fous.py and run with python3 fous.py. No packages needed.
# First set your key: export FOUS_API_KEY='YOUR_FOUS_API_KEY'
import json
import os
import urllib.error
import urllib.request

api_key = os.environ.get("FOUS_API_KEY")
if not api_key:
    raise RuntimeError("Set FOUS_API_KEY before running this example")

body = json.loads("{\n  \"api\": \"@national-hurricane-center\",\n  \"visibility\": \"public\",\n  \"operation\": \"get_storm_advisory\",\n  \"version\": 1,\n  \"input\": {\n    \"storm_name\": \"Hurricane Polo\"\n  },\n  \"response\": {\n    \"format\": \"json\"\n  }\n}")
request = urllib.request.Request(
    "https://api.fous.com/v1/query",
    data=json.dumps(body).encode("utf-8"),
    headers={
        "Authorization": f"Bearer {api_key}",
        "Content-Type": "application/json",
    },
    method="POST",
)
try:
    with urllib.request.urlopen(request, timeout=120) as response:
        result = json.load(response)
except urllib.error.HTTPError as error:
    raise RuntimeError(f"HTTP {error.code}: {error.read().decode('utf-8', errors='replace')}") from error
if result.get("success") is False:
    raise RuntimeError(result.get("error", {}).get("message", "Request failed"))
print(json.dumps(result["data"]["output"], indent=2))
```

```typescript
// Save as fous.mts and run with npx tsx fous.mts.
// First set your key: export FOUS_API_KEY='YOUR_FOUS_API_KEY'
const apiKey = process.env.FOUS_API_KEY;
if (!apiKey) throw new Error("Set FOUS_API_KEY before running this example");

const response = await fetch("https://api.fous.com/v1/query", {
  method: "POST",
  headers: {
    "Authorization": `Bearer ${apiKey}`,
    "Content-Type": "application/json",
  },
  signal: AbortSignal.timeout(120_000),
  body: JSON.stringify({
  "api": "@national-hurricane-center",
  "visibility": "public",
  "operation": "get_storm_advisory",
  "version": 1,
  "input": {
    "storm_name": "Hurricane Polo"
  },
  "response": {
    "format": "json"
  }
}),
});
type ApiResult = { success: boolean; data?: { output: unknown }; error?: { message: string } };
const result: ApiResult = await response.json();
if (!response.ok || result.success === false) {
  throw new Error(result.error?.message ?? `HTTP ${response.status}`);
}
if (!result.data) throw new Error("Missing API response data");
console.log(result.data.output);
```

Or describe the data in plain language: send `{"api":"@national-hurricane-center","prompt":"Describe the data you need, with every detail"}` to the same URL. Fous fills in the input, runs the method that fits and returns only the fields you asked for; `data.route.calls[].request` is the exact call it made. Routing is free; the run costs the same.

## Use cases

- Track active storms by basin
- Review current storm positions and movement
- Check storm intensity and hurricane category
- Find watches, warnings, and land hazards
- Share current advisory and forecast cone pages

## FAQ

### Is Fous affiliated with National Hurricane Center?

No. Fous is not affiliated with National Hurricane Center. This workflow reads the public nhc.noaa.gov website and returns its data.

### How much does it cost?

Each run costs 1 credit. With pay-as-you-go, a credit costs 1¢; monthly plans cost less per credit.

### Do I need a National Hurricane Center account?

No. You only need a Fous account.

### How current is the data?

Fous gets the data from nhc.noaa.gov when you run it; repeating the same request within a day may return the saved result. Fous checks this workflow automatically; it last passed a check on Sep 30, 2026.

### Which storms are active in a basin?

List active storms returns active tropical cyclones for a selected basin, or all basins by default.

### What is a storm's current position and intensity?

Get storm advisory returns the latest public advisory for an active storm, including its position and intensity.

### What watches and hazards are in effect?

Get storm advisory returns watches and warnings, plus wind, rainfall, tornado, and storm surge hazards mentioned in the advisory.

## Related

- [National Weather Service API](https://fous.com/workflows/national-weather-service.md): National Weather Service provides U.S. day-and-night forecasts for seven days, hourly forecasts for up to 156 hours where available, active alerts, and latest nearby station observations.
- [The Weather Channel API](https://fous.com/workflows/the-weather-channel.md): The Weather Channel returns current conditions, today’s high/low, up to 15 daily forecasts (sometimes fewer), 1–48 local hourly forecasts, and active severe weather alerts.
- [NOAA Tides and Currents API](https://fous.com/workflows/noaa-tides-and-currents.md): NOAA Tides and Currents provides coastal observations and predictions: tide times within 30 miles of prediction stations, latest levels within 50 miles of reporting stations.
- [NOAA Space Weather API](https://fous.com/workflows/noaa-space-weather.md): NOAA Space Weather provides near-term aurora chances, current geomagnetic activity, a three-day Kp outlook, and NOAA alerts from the past 1–7 days.
- [Surfline API](https://fous.com/workflows/surfline.md): Surf conditions and forecasts for surf spots.
- [US State Department API](https://fous.com/workflows/us-state-department.md): US State Department provides current travel advisories, entry rules, embassy and consulate contacts, and published monthly visa bulletin dates; guidance may be incomplete; consular agencies are excluded.
- [AccuWeather API](https://fous.com/workflows/accuweather.md): AccuWeather provides current conditions and RealFeel, plus up to 15 available daily forecasts; shorter public forecasts may return fewer days.
- [InciWeb API](https://fous.com/workflows/inciweb.md): InciWeb provides US interagency information on active wildfires and related incidents, with latest dated updates and evacuation or closure notices; past notices may no longer apply.
- [All Weather workflows](https://fous.com/workflows/category/weather)
