Flood Zone API Get a free key

Get the FEMA flood zone for any US address in one API call

Send a street address, or a latitude and longitude. The JSON that comes back names the flood zone, says whether the point is in a Special Flood Hazard Area, gives the base flood elevation where FEMA publishes one, and identifies the FIRM panel and the date it took effect.

  • 100 free calls a month, no card
  • Paid plans from $19 a month
  • Answers from FEMA's live National Flood Hazard Layer
Request
curl -sG https://api.floodzoneapi.com/api/v1/flood/zone \
  -H "Authorization: Bearer $FZA_KEY" \
  --data-urlencode "address=1700 Convention Center Dr, Miami Beach, FL 33139"
Response 200, recorded September 29, 2026
{
  "query": {
    "address": "1700 Convention Center Dr, Miami Beach, FL 33139"
  },
  "location": {
    "lat": 25.792247,
    "lon": -80.134934,
    "geocoder": "census",
    "precision": "address_range",
    "matched_address": "1700 CONVENTION CENTER DR, MIAMI BEACH, FL, 33139",
    "candidates": 1,
    "county": "Miami-Dade County",
    "county_fips": "12086",
    "state": "FL"
  },
  "flood_zone": {
    "mapped": true,
    "zone": "AE",
    "subtype": null,
    "description": "1% annual chance flood hazard. Base flood elevations determined.",
    "sfha": true,
    "static_bfe": {
      "elevation": 8.0,
      "unit": "Feet",
      "datum": "NGVD29"
    },
    "depth": null,
    "dfirm_id": "12086C",
    "polygon_id": "12086C_1179",
    "at_zone_boundary": false,
    "other_zones": []
  },
  "firm_panel": {
    "panel": "12086C0317L",
    "effective_date": "2009-09-11",
    "panel_type": "Countywide, Panel Printed",
    "dfirm_id": "12086C",
    "other_panels": []
  },
  "source": {
    "dataset": "FEMA National Flood Hazard Layer (NFHL)",
    "service": "https://hazards.fema.gov/arcgis/rest/services/public/NFHL/MapServer",
    "layers": [
      {
        "id": 28,
        "name": "Flood Hazard Zones"
      },
      {
        "id": 3,
        "name": "FIRM Panels"
      }
    ],
    "query_point": {
      "lat": 25.79225,
      "lon": -80.13493
    },
    "queried_at": "2026-09-29T08:36:12Z",
    "cached": true,
    "cache_ttl_seconds": 86400
  },
  "notice": "Informational. This is the zone shown on FEMA's effective flood map (NFHL) at this point. It is not a Standard Flood Hazard Determination (FEMA Form 086-0-32), a prediction of flood risk, or an insurance quote, and it does not reflect a Letter of Map Amendment issued for a single structure."
}

What comes back for each address

flood_zone.zonesubtype, description

The zone on FEMA's effective map at the point (AE here), FEMA's subtype where there is one (for example "0.2 PCT ANNUAL CHANCE FLOOD HAZARD" or "FLOODWAY"), and a one-line definition from the FIRM legend.

flood_zone.sfhatrue, false or null

Whether the point is in a Special Flood Hazard Area, the area where lenders that are federally regulated or backed must require flood insurance.

flood_zone.static_bfeelevation, unit, datum

The base flood elevation FEMA publishes for the zone, with its unit and vertical datum. This answer is 8 feet in NGVD29; many newer maps use NAVD88, so compare elevations in the same datum.

firm_panelpanel, effective_date, panel_type

The Flood Insurance Rate Map panel covering the point (12086C0317L) and the date it took effect (2009-09-11), so you can tell how current the map is. Where panels overlap at a county line, the others are listed.

locationlat, lon, geocoder, precision

The point we looked up, the address we matched, which geocoder matched it and how precisely: interpolated along the street's address range (US Census) or a building point (OpenStreetMap).

sourcelayers, queried_at, cached

The NFHL layers queried, when FEMA was asked, and whether the answer came from our 24-hour cache.

Every field, with types, in the reference

FEMA quirks you do not have to handle

Dropped connections
FEMA's map server resets TLS connections from some cloud hosting ranges, including ours on AWS. Our requests go through a relay FEMA accepts, so your server never talks to FEMA directly.
Placeholder numbers
FEMA stores a missing elevation as -9999 and some missing dates as 9999-09-09. You get null.
Map seams
Where two counties' panels overlap, you get the panel from the same map database as the zone polygon, with the others in other_panels.
Zone boundaries
A point on the line between two zones returns the more hazardous zone, with at_zone_boundary: true and the other zone listed.
Gaps in the digital map
Where FEMA has no digital flood map, the answer says "mapped": false instead of defaulting to Zone X. See the gaps by state.
Outages
When FEMA or the geocoder does not answer you get a 503 with Retry-After, and the call is not counted against your quota.

A zone lookup is not a flood determination

The zone is what FEMA's effective map shows at the point. It is not a Standard Flood Hazard Determination (FEMA Form 086-0-32), the form lenders use for a loan secured by a building, and it is not a prediction of whether a building will flood.

Since Risk Rating 2.0 (new NFIP policies from October 1, 2021, renewals from April 1, 2022) the zone does not by itself set an NFIP premium. A Letter of Map Amendment issued for a single building is not part of the map polygons, so a house with a LOMA can still show inside the SFHA here. Every response carries a notice saying this, so it travels with the data.

Plans

Every plan returns the same data from the same endpoint. Plans differ only in how many calls a month they include.

Free

$0

100 calls a month

no card needed

Choose Free

Starter

$19 / month

2,500 calls a month

$0.0076 per call at full use

Choose Starter

Growth

$49 / month

10,000 calls a month

$0.0049 per call at full use

Choose Growth

Scale

$149 / month

50,000 calls a month

$0.0030 per call at full use

Choose Scale

Get a free API key

Free plan: we email a confirmation link, then you create keys on your account page. Paid plans: you go to Stripe to pay, then straight to your account.

By signing up you agree to the terms. We email you only about your account.