{
  "openapi": "3.1.0",
  "info": {
    "title": "Hurricanes API",
    "version": "1.0.0",
    "description": "Every Atlantic and Pacific tropical cyclone NOAA has tracked since 1851: 3,266 storms with six-hourly tracks.\n\nEvery tropical cyclone NOAA has ever tracked: the official HURDAT2 best-track record — 3,266 storms with 87,631 six-hourly track points covering the Atlantic since 1851 and the NE/Central Pacific since 1949, through the 2025 season. Each storm carries its peak Saffir-Simpson category, maximum winds, minimum pressure, landfall flag and full track (position, winds, pressure and status every six hours, with landfall points marked). Katrina returns category 5, 150 kt and 902 mb with its three landfalls; the strongest storm ever recorded is Patricia 2015 at 185 kt; the record 2005 Atlantic season shows its famous 31 storms, 15 hurricanes and 7 majors. The nearby endpoint answers the underwriting question directly — every category 4+ storm that passed within 100 km of Miami includes Andrew at 28.9 km and Katrina at 19.1 km, each with its closest approach and winds at that moment. Season stats trend storms, hurricanes and majors by year and basin. Built for insurance and catastrophe modeling, real estate risk, weather products, journalism and education. Public-domain NOAA data, self-hosted — no third-party calls at request time.",
    "contact": {
      "name": "Data and APIs",
      "url": "https://dataandapis.com/contact"
    },
    "termsOfService": "https://dataandapis.com/terms-of-service",
    "license": {
      "name": "Data and APIs Terms of Service",
      "url": "https://dataandapis.com/terms-of-service"
    },
    "x-logo": {
      "url": "https://dataandapis.com/images/hurricanes.webp"
    }
  },
  "externalDocs": {
    "description": "Documentation, live tester and pricing",
    "url": "https://dataandapis.com/apis/hurricanes"
  },
  "servers": [
    {
      "url": "https://api-hurricanes.dataandapis.com"
    }
  ],
  "tags": [
    {
      "name": "Data",
      "description": "Hurricanes API belongs to the Data category of the Data and APIs catalog."
    }
  ],
  "paths": {
    "/v1/sources": {
      "get": {
        "operationId": "dataSources",
        "summary": "Data Sources",
        "description": "Data Sources endpoint of the Hurricanes API. Costs 1 token per call.",
        "externalDocs": {
          "url": "https://dataandapis.com/apis/hurricanes/data-sources"
        },
        "responses": {
          "200": {
            "description": "Successful response",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                },
                "example": {
                  "ok": true,
                  "coverage": "NOAA HURDAT2: Atlantic 1851-present, NE/Central Pacific 1949-present",
                  "count": 2,
                  "sources": [
                    {
                      "slug": "hurdat2-atlantic",
                      "name": "HURDAT2 Atlantic best tracks (1851-present)",
                      "publisher": "NOAA National Hurricane Center",
                      "licence": "US Government work - public domain",
                      "source_url": "https://www.nhc.noaa.gov/data/",
                      "file_url": "https://www.nhc.noaa.gov/data/hurdat/hurdat2-1851-2025-02272026.txt",
                      "cadence": "annual (post-season reanalysis each spring)",
                      "record_count": 2004,
                      "retrieved_at": "2026-09-06"
                    },
                    {
                      "slug": "hurdat2-pacific",
                      "name": "HURDAT2 NE/Central Pacific best tracks (1949-present)",
                      "publisher": "NOAA National Hurricane Center",
                      "licence": "US Government work - public domain",
                      "source_url": "https://www.nhc.noaa.gov/data/",
                      "file_url": "https://www.nhc.noaa.gov/data/hurdat/hurdat2-nepac-1949-2025-02272026.txt",
                      "cadence": "annual (post-season reanalysis each spring)",
                      "record_count": 1262,
                      "retrieved_at": "2026-09-06"
                    }
                  ]
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid API key"
          },
          "402": {
            "description": "Subscription past due; the response carries a payment_url"
          },
          "429": {
            "description": "Monthly token allowance exhausted"
          }
        },
        "security": [
          {
            "ApiKey": []
          }
        ]
      }
    },
    "/v1/storms/{id}": {
      "get": {
        "operationId": "getStormTrack",
        "summary": "Get Storm Track",
        "description": "Get Storm Track endpoint of the Hurricanes API. Costs 1 token per call.",
        "externalDocs": {
          "url": "https://dataandapis.com/apis/hurricanes/get-storm-track"
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "AL122005"
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                },
                "example": {
                  "ok": true,
                  "storm": {
                    "id": "AL122005",
                    "name": "Katrina",
                    "basin": "atlantic",
                    "year": 2005,
                    "start_date": "2005-08-23",
                    "end_date": "2005-08-31",
                    "category": "5",
                    "max_wind_kt": 150,
                    "max_wind_mph": 173,
                    "min_pressure_mb": 902,
                    "made_landfall": true,
                    "track_points": 34,
                    "track": [
                      {
                        "time": "2005-08-23T18:00:00Z",
                        "latitude": 23.1,
                        "longitude": -75.1,
                        "wind_kt": 30,
                        "pressure_mb": 1008,
                        "status": "TD",
                        "category": "TD",
                        "landfall": false
                      },
                      {
                        "time": "2005-08-24T00:00:00Z",
                        "latitude": 23.4,
                        "longitude": -75.7,
                        "wind_kt": 30,
                        "pressure_mb": 1007,
                        "status": "TD",
                        "category": "TD",
                        "landfall": false
                      },
                      {
                        "time": "2005-08-24T06:00:00Z",
                        "latitude": 23.8,
                        "longitude": -76.2,
                        "wind_kt": 30,
                        "pressure_mb": 1007,
                        "status": "TD",
                        "category": "TD",
                        "landfall": false
                      },
                      {
                        "time": "2005-08-24T12:00:00Z",
                        "latitude": 24.5,
                        "longitude": -76.5,
                        "wind_kt": 35,
                        "pressure_mb": 1006,
                        "status": "TS",
                        "category": "TS",
                        "landfall": false
                      }
                    ]
                  }
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid API key"
          },
          "402": {
            "description": "Subscription past due; the response carries a payment_url"
          },
          "429": {
            "description": "Monthly token allowance exhausted"
          }
        },
        "security": [
          {
            "ApiKey": []
          }
        ]
      }
    },
    "/v1/storms": {
      "get": {
        "operationId": "searchStorms",
        "summary": "Search Storms",
        "description": "Search Storms endpoint of the Hurricanes API. Costs 1 token per call.",
        "externalDocs": {
          "url": "https://dataandapis.com/apis/hurricanes/search-storms"
        },
        "parameters": [
          {
            "name": "basin",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "example": "atlantic"
          },
          {
            "name": "landfall",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "example": "true"
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "example": "20"
          },
          {
            "name": "min_category",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "example": "4"
          },
          {
            "name": "name",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "example": "Katrina"
          },
          {
            "name": "page",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "example": "1"
          },
          {
            "name": "year",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "example": "2005"
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                },
                "example": {
                  "ok": true,
                  "total": 1,
                  "page": 1,
                  "limit": 20,
                  "count": 1,
                  "results": [
                    {
                      "id": "AL122005",
                      "name": "Katrina",
                      "basin": "atlantic",
                      "year": 2005,
                      "start_date": "2005-08-23",
                      "end_date": "2005-08-31",
                      "category": "5",
                      "max_wind_kt": 150,
                      "max_wind_mph": 173,
                      "min_pressure_mb": 902,
                      "made_landfall": true,
                      "track_points": 34
                    }
                  ]
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid API key"
          },
          "402": {
            "description": "Subscription past due; the response carries a payment_url"
          },
          "429": {
            "description": "Monthly token allowance exhausted"
          }
        },
        "security": [
          {
            "ApiKey": []
          }
        ]
      }
    },
    "/v1/storms/stats": {
      "get": {
        "operationId": "seasonStatistics",
        "summary": "Season Statistics",
        "description": "Season Statistics endpoint of the Hurricanes API. Costs 1 token per call.",
        "externalDocs": {
          "url": "https://dataandapis.com/apis/hurricanes/season-statistics"
        },
        "parameters": [
          {
            "name": "basin",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "example": "atlantic"
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                },
                "example": {
                  "ok": true,
                  "basin": "atlantic",
                  "count": 5,
                  "results": [
                    {
                      "year": 2025,
                      "storms": 13,
                      "hurricanes": 6,
                      "major_hurricanes": 4
                    },
                    {
                      "year": 2024,
                      "storms": 18,
                      "hurricanes": 11,
                      "major_hurricanes": 5
                    },
                    {
                      "year": 2023,
                      "storms": 21,
                      "hurricanes": 7,
                      "major_hurricanes": 3
                    },
                    {
                      "year": 2022,
                      "storms": 16,
                      "hurricanes": 9,
                      "major_hurricanes": 3
                    },
                    {
                      "year": 2021,
                      "storms": 21,
                      "hurricanes": 7,
                      "major_hurricanes": 4
                    }
                  ]
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid API key"
          },
          "402": {
            "description": "Subscription past due; the response carries a payment_url"
          },
          "429": {
            "description": "Monthly token allowance exhausted"
          }
        },
        "security": [
          {
            "ApiKey": []
          }
        ]
      }
    },
    "/v1/storms/nearby": {
      "get": {
        "operationId": "stormsNearAPoint",
        "summary": "Storms Near A Point",
        "description": "Storms Near A Point endpoint of the Hurricanes API. Costs 1 token per call.",
        "externalDocs": {
          "url": "https://dataandapis.com/apis/hurricanes/storms-near-a-point"
        },
        "parameters": [
          {
            "name": "lat",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "25.76"
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "example": "25"
          },
          {
            "name": "lon",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "-80.19"
          },
          {
            "name": "min_category",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "example": "4"
          },
          {
            "name": "radius",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "example": "100"
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                },
                "example": {
                  "ok": true,
                  "lat": 25.76,
                  "lon": -80.19,
                  "radius_km": 100,
                  "count": 5,
                  "results": [
                    {
                      "id": "AL252005",
                      "name": "Wilma",
                      "basin": "atlantic",
                      "year": 2005,
                      "start_date": "2005-10-15",
                      "end_date": "2005-10-26",
                      "category": "5",
                      "max_wind_kt": 160,
                      "max_wind_mph": 184,
                      "min_pressure_mb": 882,
                      "made_landfall": true,
                      "track_points": 48,
                      "closest_approach_km": 94.6,
                      "wind_kt_at_approach": 95,
                      "approach_time": "2005-10-24T12:00:00Z"
                    },
                    {
                      "id": "AL041992",
                      "name": "Andrew",
                      "basin": "atlantic",
                      "year": 1992,
                      "start_date": "1992-08-16",
                      "end_date": "1992-08-28",
                      "category": "5",
                      "max_wind_kt": 150,
                      "max_wind_mph": 173,
                      "min_pressure_mb": 922,
                      "made_landfall": true,
                      "track_points": 52,
                      "closest_approach_km": 28.9,
                      "wind_kt_at_approach": 145,
                      "approach_time": "1992-08-24T08:40:00Z"
                    },
                    {
                      "id": "AL122005",
                      "name": "Katrina",
                      "basin": "atlantic",
                      "year": 2005,
                      "start_date": "2005-08-23",
                      "end_date": "2005-08-31",
                      "category": "5",
                      "max_wind_kt": 150,
                      "max_wind_mph": 173,
                      "min_pressure_mb": 902,
                      "made_landfall": true,
                      "track_points": 34,
                      "closest_approach_km": 19.1,
                      "wind_kt_at_approach": 70,
                      "approach_time": "2005-08-26T00:00:00Z"
                    },
                    {
                      "id": "AL091979",
                      "name": "David",
                      "basin": "atlantic",
                      "year": 1979,
                      "start_date": "1979-08-25",
                      "end_date": "1979-09-08",
                      "category": "5",
                      "max_wind_kt": 150,
                      "max_wind_mph": 173,
                      "min_pressure_mb": 924,
                      "made_landfall": false,
                      "track_points": 55,
                      "closest_approach_km": 84.1,
                      "wind_kt_at_approach": 85,
                      "approach_time": "1979-09-03T12:00:00Z"
                    },
                    {
                      "id": "AL092004",
                      "name": "Ivan",
                      "basin": "atlantic",
                      "year": 2004,
                      "start_date": "2004-09-02",
                      "end_date": "2004-09-24",
                      "category": "5",
                      "max_wind_kt": 145,
                      "max_wind_mph": 167,
                      "min_pressure_mb": 910,
                      "made_landfall": true,
                      "track_points": 94,
                      "closest_approach_km": 43.9,
                      "wind_kt_at_approach": 25,
                      "approach_time": "2004-09-21T06:00:00Z"
                    }
                  ]
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid API key"
          },
          "402": {
            "description": "Subscription past due; the response carries a payment_url"
          },
          "429": {
            "description": "Monthly token allowance exhausted"
          }
        },
        "security": [
          {
            "ApiKey": []
          }
        ]
      }
    }
  },
  "components": {
    "securitySchemes": {
      "ApiKey": {
        "type": "apiKey",
        "in": "header",
        "name": "X-Api-Key",
        "description": "Create a free key at https://dataandapis.com/sign-up. 500 tokens a month on the Free plan; this API costs 1 token per call."
      }
    }
  },
  "security": [
    {
      "ApiKey": []
    }
  ]
}