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.
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 'https://www.fema.gov/api/open/v2/DisasterDeclarationsSummaries?$top=1'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);import requests
res = requests.get("https://www.fema.gov/api/open/v2/DisasterDeclarationsSummaries?$top=1", timeout=20)
res.raise_for_status()
print(res.json()){
"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
| Parameter | Type | Required | Description |
|---|---|---|---|
$top | query | Optional | Records to return, up to 1,000. 1 |
$skip | query | Optional | Pagination offset. 1000 |
$filter | query | Optional | OData filter over any field. state eq 'CA' and incidentType eq 'Fire' |
$select | query | Optional | Fields to return, which cuts response size sharply. disasterNumber,state,incidentType |
$orderby | query | Optional | Sort clause. declarationDate desc |
$inlinecount | query | Optional | Set 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
JSON to CSV Converter
Convert a JSON array of objects to CSV online. Automatic column headers from the union of all keys, delimiter choice and proper quoting — all in-browser.
CSV Viewer & Table
View CSV as a clean HTML table online. Live search filter, row and column counts, delimiter and header options — all processed locally in your browser.
Date Difference Calculator
Calculate the exact difference between two dates in years, months and days, plus total days, weeks, hours and minutes. Free, fast and private.
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.
| API | What it does | Auth | CORS | Last verified |
|---|---|---|---|---|
| Federal Register | Free 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 key | Yes | 19 Aug 2026 |
| USAspending | Free US federal spending API with no key: agency budgets, contracts, grants and award data covering trillions in government spending. Tested curl example. | No key | No | 19 Aug 2026 |
| UK Parliament Members | Free UK Parliament Members API with no key: MPs and Lords, constituencies, party affiliation, contact details and voting records. Tested curl example. | No key | No | 19 Aug 2026 |
| UK Police Data | Free 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 key | Yes | 19 Aug 2026 |
| Paris Open Data | Free 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 key | Yes | 21 Aug 2026 |
| dane.gov.pl | Free Polish open data API with no key: thousands of government datasets covering statistics, health, transport and environment in JSON:API format. Tested. | No key | No | 20 Aug 2026 |
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.