BYTETOOLS

OpenFEMA API

Free OpenFEMA API with no key: every US federal disaster declaration since 1953 with county-level detail, plus assistance, claims and shelter datasets. Tested example included.

No API key requiredCORS enabledHTTPSFree tier

Endpoint tested and returned HTTP 200 on 21 Aug 2026

What is the OpenFEMA API?

OpenFEMA is the Federal Emergency Management Agency's public data API, free and needing no key. Its Disaster Declarations Summaries dataset covers every US federal disaster declaration since 1953, one row per designated county, with incident type, dates and which assistance programmes were activated.

The disaster declarations dataset is the backbone of most FEMA analysis, and its shape catches people out: it is one row per declared county, not per disaster. A hurricane affecting sixty counties produces sixty rows sharing a `disasterNumber`, each with its own `designatedArea` and FIPS codes. Group by `disasterNumber` when you want events and leave it ungrouped when you want geographic exposure — conflating the two is how you end up reporting sixty hurricanes.

OpenFEMA uses OData-style query parameters — `$top`, `$skip`, `$filter`, `$select`, `$orderby` — and returns a `metadata` block echoing exactly what it applied, which makes debugging a filter much easier than usual. Note that `metadata.count` is 0 unless you pass `$inlinecount=allpages`, so do not read it as a total by default. The four boolean programme flags (`iaProgramDeclared`, `paProgramDeclared`, `ihProgramDeclared`, `hmProgramDeclared`) tell you what was actually authorised: individual assistance, public assistance, individual and households, and hazard mitigation.

Quick facts

Base URL
https://www.fema.gov/api/open/v2
Authentication
No API key or registration for any OpenFEMA dataset. There is no authenticated tier.
Rate limit
No published request limit; responses are capped at 1,000 records per page. Page with `$skip`.
Pricing
Free. US government works are in the public domain.
CORS
Enabled — callable directly from browser JavaScript
Official docs
Read the docs

How to use the OpenFEMA API

Every request below was executed against the live API on 21 Aug 2026, and the response shown is the real body it returned — not an illustration.

1. Fetch the most recent FEMA disaster declaration

GET https://www.fema.gov/api/open/v2/DisasterDeclarationsSummaries?$top=1

curl
curl 'https://www.fema.gov/api/open/v2/DisasterDeclarationsSummaries?$top=1'
JavaScript (fetch)
const res = await fetch("https://www.fema.gov/api/open/v2/DisasterDeclarationsSummaries?$top=1");
if (!res.ok) throw new Error(`Request failed: ${res.status}`);
const data = await res.json();
console.log(data);
Python (requests)
import requests

res = requests.get("https://www.fema.gov/api/open/v2/DisasterDeclarationsSummaries?$top=1", timeout=20)
res.raise_for_status()
print(res.json())
Response — HTTP 200
{
  "metadata": {
    "skip": 0,
    "select": null,
    "rundate": "2026-08-21T07:59:36.096Z",
    "top": 1,
    "filter": "",
    "format": "json",
    "metadata": true,
    "orderby": "",
    "entityname": "DisasterDeclarationsSummaries",
    "version": "v2",
    "url": "/api/open/v2/DisasterDeclarationsSummaries?$top=1",
    "count": 0
  },
  "DisasterDeclarationsSummaries": [
    {
      "femaDeclarationString": "FM-5672-AK",
      "disasterNumber": 5672,
      "state": "AK",
      "declarationType": "FM",
      "declarationDate": "2026-08-18T00:00:00.000Z",
      "fyDeclared": 2026,
      "incidentType": "Fire",
      "declarationTitle": "MUKLUK FIRE",
      "ihProgramDeclared": false,
      "iaProgramDeclared": false,
      "paProgramDeclared": true,
      "hmProgramDeclared": false,
      "incidentBeginDate": "2026-08-17T00:00:00.000Z",
      "incidentEndDate": null,
      "disasterCloseoutDate": null,
      "tribalRequest": false,
      "fipsStateCode": "02",
      "fipsCountyCode": "240",
      "placeCode": "99240",
      "designatedArea": "Southeast Fairbanks (Census Area)",
      "declarationRequestNumber": "26140",
      "declarationRequestDate": "2026-08-17T00:00:00.000Z",
      "lastIAFilingDate": null,
      "incidentId": "2026081802",
      "region": 10,
      "designatedIncidentTypes": "R",
      "lastRefresh": "2026-08-20T20:50:08.994Z",
      "hash": "608a749843b5ff3e0033264b77220e1f58aac816",
      "id": "5f3cd139-146c-4b95-be63-f0e4f19e02af"
    }
  ]
}

Parameters

ParameterTypeRequiredDescription
$topqueryOptionalRecords to return, up to 1,000. 1
$skipqueryOptionalPagination offset. 1000
$filterqueryOptionalOData filter over any field. state eq 'CA' and incidentType eq 'Fire'
$selectqueryOptionalFields to return, which cuts response size sharply. disasterNumber,state,incidentType
$orderbyqueryOptionalSort clause. declarationDate desc
$inlinecountqueryOptionalSet to `allpages` to populate `metadata.count` with the true total. allpages

Response fields

metadataobject
Echo of the query applied, plus `count` — which stays 0 unless you request `$inlinecount=allpages`.
DisasterDeclarationsSummariesarray
The records, named after the entity rather than a generic `data` key.
femaDeclarationStringstring
Composite identifier such as `FM-5672-AK`, combining type, number and state.
disasterNumberinteger
The event identifier. Repeated across every county row for the same disaster.
declarationTypestring
`DR` major disaster, `EM` emergency, `FM` fire management assistance.
incidentTypestring
`Fire`, `Hurricane`, `Flood`, `Severe Storm` and similar.
designatedAreastring
The county or equivalent designated in that row.
fipsStateCode / fipsCountyCodestring
Zero-padded FIPS codes — keep them as strings or you lose the leading zero.
iaProgramDeclared / paProgramDeclared / ihProgramDeclared / hmProgramDeclaredboolean
Which assistance programmes were authorised.

What you can build with the OpenFEMA API

  • Map US disaster declarations by county and incident type
  • Count disasters per state per year for trend analysis
  • Check whether a specific county has an active declaration
  • Correlate declarations with climate or insurance data
  • Build an emergency management dashboard

Common errors and how to fix them

Disaster counts are far too high

One row per designated county, not per event.

Fix: Group by `disasterNumber` when counting events; leave rows ungrouped only when measuring geographic extent.

metadata.count is 0

Counting is opt-in.

Fix: Add `$inlinecount=allpages` to get the true total for your filter.

FIPS codes lose their leading zero

They were parsed as integers.

Fix: Keep them as strings — `02` for Alaska becomes `2` and stops matching any shapefile.

400 on a filter

OData syntax error.

Fix: String literals use single quotes and field names are camelCase, matching the response exactly.

OpenFEMA API — frequently asked questions

Does OpenFEMA require an API key?

No. Every OpenFEMA dataset is open and unauthenticated, and there is no paid or registered tier to upgrade to.

Why are there multiple rows with the same disaster number?

Because the dataset records one row per designated county. A large hurricane covering sixty counties yields sixty rows sharing a `disasterNumber`, which is what makes county-level analysis possible.

How far back does the data go?

To 1953, the first year of the modern federal declaration process. That makes it one of the longest continuous US federal datasets available without a key.

What do the programme flags mean?

They record which assistance was authorised: `ia` individual assistance, `pa` public assistance, `ih` individuals and households, and `hm` hazard mitigation. A declaration can activate any combination, and the flags are the fastest way to filter by severity of response.

Tools that pair with this API

Alternatives to OpenFEMA API

If OpenFEMA does not fit, these government & open data apis cover similar ground. Every one was called before publishing, and each links to its own reference page with a working curl command and the response it returned.

APIWhat it doesAuthCORSLast verified
Federal RegisterFree US Federal Register API with no key: executive orders, rules, notices and proposed regulations with full text search back to 1994. Tested curl example.No keyYes19 Aug 2026
USAspendingFree US federal spending API with no key: agency budgets, contracts, grants and award data covering trillions in government spending. Tested curl example.No keyNo19 Aug 2026
UK Parliament MembersFree UK Parliament Members API with no key: MPs and Lords, constituencies, party affiliation, contact details and voting records. Tested curl example.No keyNo19 Aug 2026
UK Police DataFree UK Police API with no key: street-level crime data, police forces, neighbourhood teams and stop-and-search records by location and month. Tested example.No keyYes19 Aug 2026
Paris Open DataFree Paris open data API with no key: 490 city datasets on the Opendatasoft Explore v2.1 API, with per-field types and French descriptions returned in the catalogue itself. Tested example.No keyYes21 Aug 2026
dane.gov.plFree Polish open data API with no key: thousands of government datasets covering statistics, health, transport and environment in JSON:API format. Tested.No keyNo20 Aug 2026
All Government & Open Data APIs

OpenFEMA is an independent third-party service and is not affiliated with ByteTools or ByteVancer. Details on this page were verified on 21 Aug 2026; always check the official documentation before relying on this API in production, as terms and limits can change.