Step 1 - run these first
Treat these as the mandatory setup step. The first call tells you what is live. The second tells you exactly what one pack expects before you send a query. Run both once, then pick a pack below.
curl https://app.daedalmap.com/api/v1/catalog
curl https://app.daedalmap.com/api/v1/packs/earthquakes
Recommended first path: run the two discovery calls above, then use
World Bank WDI if you want immediate free rows or
Earthquakes if you want to use the full
discovery -> 402 -> paid retry flow.
Step 2 - choose your pack for the first call
Pick the lane that matches what you want first: immediate free rows,
or a paid pack that starts with a 402 challenge and then
returns rows after payment.
request_id is optional. Keep it in examples when you want
easier tracing, debugging, or idempotent retries.
Pick the right tool first
- Catalog and pack detail: MCP
get_catalogandget_pack, or HTTP/api/v1/catalogand/api/v1/packs/{pack_id}. Copy the request shape from the pack detail. - Rows, counts, rankings, time series: MCP
get_datawith apack_id, or HTTP/api/v1/query/datasetwith asource_idorpack_id.get_dataaccepts onlypack_id; do not sendsource_idover MCP. - One disaster event: MCP
get_eventwith anevent_idfrom aget_datarow, or HTTP/api/events/exact/{event_id}. - Geography:
resolve_pointfor a coordinate,convert_referencefor a ZIP, admin code, or other outside identifier,get_loc_id_infoandget_geometryfor a knownloc_id. See Geography tools below. - Event chains: the aftershock and disaster-links HTTP helpers, or
get_eventwithinclude=["relationships"]. - Any tool contract:
get_tool_helpwith atool_name, or atopicofoverview,data,disasters,custom_data, orgeometry.
Keep the identifiers straight. event_id is for exact-event
lookup. loc_id is for filters.region_ids in a
data query.
Earthquakes - paid
Use source_id = "earthquakes_events". This paid source
uses ISO date ranges, country-style region_ids such as
JPN, CHL, and IDN, and
event-style metrics such as event_count and
magnitude. The first unpaid call should return a
402; the payment-aware retry returns rows.
curl -X POST https://app.daedalmap.com/api/v1/query/dataset \
-H "Content-Type: application/json" \
-d '{
"request_id": "docs_earthquakes_example",
"source_id": "earthquakes_events",
"metrics": ["event_count"],
"filters": {
"region_ids": ["JPN", "CHL", "IDN"],
"time": { "start": "2011-01-01", "end": "2011-12-31" }
},
"sort": { "field": "value", "direction": "desc" },
"limit": 25,
"output": { "format": "rows", "include_provenance": true }
}'
The first success condition here is not "avoid the 402." The first
success condition is: unpaid request returns 402,
payment-aware retry returns rows.
Visible event properties and queryable metrics are not the same
thing. For example, exact-event records can show helper fields such
as source or event_subtype even when the
dataset query lane only exposes metrics such as
event_count, magnitude, and
depth_km. Read the pack detail before you add fields.
Once that path works, move on to narrower variations:
- Largest single event:
metrics = ["magnitude"], sortvalue desc,limit = 1. - Events above a threshold: add
filters.compare = [{"field":"magnitude","op":">=","value":6}].
curl -X POST https://app.daedalmap.com/api/v1/query/dataset \
-H "Content-Type: application/json" \
-d '{
"request_id": "docs_earthquakes_largest_example",
"source_id": "earthquakes_events",
"metrics": ["magnitude"],
"filters": {
"region_ids": ["JPN"],
"time": { "start": "2011-01-01", "end": "2011-12-31" }
},
"sort": { "field": "value", "direction": "desc" },
"limit": 1,
"output": { "format": "rows" }
}'
curl -X POST https://app.daedalmap.com/api/v1/query/dataset \
-H "Content-Type: application/json" \
-d '{
"request_id": "docs_earthquakes_threshold_count_example",
"source_id": "earthquakes_events",
"metrics": ["event_count"],
"filters": {
"region_ids": ["JPN"],
"time": { "start": "2011-01-01", "end": "2011-12-31" },
"compare": [{ "field": "magnitude", "op": ">=", "value": 6 }]
},
"sort": { "field": "value", "direction": "desc" },
"limit": 25,
"output": { "format": "rows" }
}'
Earthquakes via MCP
On /mcp without a payment method, a paid call returns
payment_choice_required with the price. Send an
account API key in X-API-Key to /mcp/account
to spend account credit. Over HTTP the same unpaid query returns
402.
curl -X POST https://app.daedalmap.com/mcp \
-H "Content-Type: application/json" \
-H "MCP-Protocol-Version: 2025-06-18" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "get_data",
"arguments": {
"request_id": "docs_mcp_earthquakes_example",
"pack_id": "earthquakes",
"metrics": ["event_count"],
"filters": {
"region_ids": ["JPN", "CHL", "IDN"],
"time": { "start": "2011-01-01", "end": "2011-12-31" }
},
"limit": 10,
"output": { "format": "rows", "include_provenance": true }
}
}
}'
Exact event lookup
Use the exact-event endpoint when you already know one event id and want the concrete row, geometry, and helper fields without building a structured query first.
curl "https://app.daedalmap.com/api/events/exact/NRCAN-20191231T235323Z-45.0834--74.7183-M1.90?pack_id=earthquakes"
That returns one canonical earthquake record from the published
earthquakes_events lane. Expect fields such as:
event_id, loc_id, magnitude,
source, and event_subtype. For this NRCAN
example the returned event-shaped loc_id is:
CAN-EQ-NRCAN-20191231T235323Z-45.0834--74.7183-M1.90.
Use exact-event lookup when the question is "show me this event." Use
/api/v1/query/dataset when the question is "rank, count,
compare, or filter events like this."
curl -X POST https://app.daedalmap.com/api/v1/query/dataset \
-H "Content-Type: application/json" \
-d '{
"request_id": "docs_earthquakes_exact_locid_example",
"source_id": "earthquakes_events",
"metrics": ["magnitude", "depth_km"],
"filters": {
"region_ids": ["CAN-EQ-NRCAN-20191231T235323Z-45.0834--74.7183-M1.90"],
"time": { "value": 2019 }
},
"limit": 3,
"output": { "format": "rows" }
}'
The same pattern also works for marine events. Example event-shaped
loc_id: XOP-EQ-NRCAN-20191231T122246Z-50.9130--130.5705-M3.40.
Event drill-down
Disaster get_data rows carry a stable event_id.
Pass it to get_event for the full record, then ask for
companion layers only when you need them.
curl -X POST https://app.daedalmap.com/mcp -H "Content-Type: application/json" -H "MCP-Protocol-Version: 2025-06-18" -d '{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "get_data",
"arguments": {
"pack_id": "volcanoes",
"metrics": ["VEI"],
"filters": { "region_ids": ["IDN"], "time": { "start": 2015, "end": 2024 } },
"sort": { "field": "VEI", "direction": "desc" },
"limit": 2
}
}
}'
# -> rows with event_id values such as IDN-G165028918B43243108525571-VOLC-VE022513
curl -X POST https://app.daedalmap.com/mcp -H "Content-Type: application/json" -H "MCP-Protocol-Version: 2025-06-18" -d '{
"jsonrpc": "2.0",
"id": 2,
"method": "tools/call",
"params": {
"name": "get_event",
"arguments": {
"event_id": "IDN-G165028918B43243108525571-VOLC-VE022513",
"pack_id": "volcanoes"
}
}
}'
# -> Semeru, VEI 4, 2017-06-06 to 2018-10-28, plus next calls for
# include=["relationships"], ["affected_places"], or ["geometry"]
Geometry is never returned unless you include it. Volcanoes is a free pack; the same pattern works on the paid disaster packs after payment.
Geography tools
The geography tools are free within each tool's per-call allowance
(see pricing). They are on the umbrella /mcp
endpoint and on the /mcp/geography facade. Start with the
one that matches the input you have; the returned loc_id
carries into the next geography call or into a get_data
filter.
- I have a coordinate:
resolve_pointreturns the administrative chain down to Admin 3. For Admin 4-6 or one other geometry family, pass the deepest returnedloc_idtoresolve_deep_point. - I have a ZIP, admin code, or other outside identifier:
convert_referenceconverts it to aloc_id, or throughloc_idto another system withto_system. - I do not know the identifier system:
identify_reference_systemfor one column of codes, oridentify_dataset_geographyfor a table when you do not know which column is geographic. - I have a loc_id:
get_loc_id_inforeturns identity, hierarchy, and which data packs and geometry families cover it;get_geometryreturns shape metadata, withinclude_polygon=trueonly when you need coordinates. - I have two loc_ids:
compare_geographieschecks containment and temporal validity. - I want to see what exists:
get_catalogandget_packwithcatalog="geometry"list geometry families and the countries that publish them.
curl -X POST https://app.daedalmap.com/mcp -H "Content-Type: application/json" -H "MCP-Protocol-Version: 2025-06-18" -d '{
"jsonrpc": "2.0",
"id": "1",
"method": "tools/call",
"params": {
"name": "resolve_point",
"arguments": { "lat": 34.0522, "lon": -118.2437 }
}
}'
# -> USA -> USA-CA -> USA-CA-037 (Los Angeles County) -> USA-CA-037-207400
# (Census Tract 2074), with deeper_available admin_4 and admin_5.
curl -X POST https://app.daedalmap.com/mcp -H "Content-Type: application/json" -H "MCP-Protocol-Version: 2025-06-18" -d '{
"jsonrpc": "2.0",
"id": "2",
"method": "tools/call",
"params": {
"name": "resolve_deep_point",
"arguments": { "lat": 34.0522, "lon": -118.2437, "shallow_loc_id": "USA-CA-037-207400" }
}
}'
# -> USA-CA-037-207400-1-024 (Block 1024). Pass any level, such as USA-CA,
# as filters.region_ids in a get_data query.
curl -X POST https://app.daedalmap.com/mcp -H "Content-Type: application/json" -H "MCP-Protocol-Version: 2025-06-18" -d '{
"jsonrpc": "2.0",
"id": "3",
"method": "tools/call",
"params": {
"name": "convert_reference",
"arguments": { "from_system": "zip", "value": "90012", "iso3": "USA" }
}
}'
# -> USA-CA-037, with the measured ZIP-to-county overlap share.
curl -X POST https://app.daedalmap.com/mcp -H "Content-Type: application/json" -H "MCP-Protocol-Version: 2025-06-18" -d '{
"jsonrpc": "2.0",
"id": "4",
"method": "tools/call",
"params": {
"name": "get_geometry",
"arguments": { "loc_id": "USA-CA", "include_polygon": false }
}
}'
# -> has_shape, centroid, and bbox for California. Set include_polygon to true
# only when you need the GeoJSON coordinates.
These calls compose, but you do not need all of them. Use the one that
answers the immediate question, then carry the returned
loc_id forward only when the next question needs it.
Free linking helpers
Two free helper paths sit next to the main pack/query flow. Use them when you already have an exact event id and want either a same-pack earthquake sequence or a cross-hazard chain.
/api/v1/earthquakes/aftershocks/{event_id}- earthquake-native same-pack sequence helper/api/v1/disaster-links/event/{event_id}and/api/v1/disaster-links/chain/{event_id}- exact-event cross-hazard link helpers/api/v1/disaster-links/search- discovery helper for ranked cross-hazard chains when you do not know the seed event yet
Rule of thumb: aftershocks stay in the earthquake pack. Cross-hazard cascades such as earthquake-to-tsunami or volcano-to-tsunami use the shared disaster-links helper.
Link assumptions and confidence thresholds are documented at Disaster event methodology.
curl https://app.daedalmap.com/api/v1/earthquakes/aftershocks/us20002bi4
curl "https://app.daedalmap.com/api/v1/disaster-links/event/NOAA-SIG-2?pack_id=earthquakes"
curl "https://app.daedalmap.com/api/v1/disaster-links/chain/NOAA-SIG-2?pack_id=earthquakes&depth=1"
curl "https://app.daedalmap.com/api/v1/disaster-links/search?start_event_type=volcano&via_event_type=earthquake&end_event_type=tsunami&limit=5"
Volcanoes - free
Use source_id = "volcanoes_events". This source uses
year-style time filters, so pass time.value or a numeric
year range rather than ISO date strings. The first call below returns
event_count rows for three countries in one year.
curl -X POST https://app.daedalmap.com/api/v1/query/dataset \
-H "Content-Type: application/json" \
-d '{
"request_id": "docs_volcanoes_example",
"source_id": "volcanoes_events",
"metrics": ["event_count"],
"filters": {
"region_ids": ["IDN", "JPN", "CHL"],
"time": { "value": 2020 }
},
"sort": { "field": "value", "direction": "desc" },
"limit": 25,
"output": { "format": "rows", "include_provenance": true }
}'
- Largest eruption by VEI:
metrics = ["VEI"], sortvalue desc,limit = 1. - Eruptions above a threshold: add
filters.compareagainstVEI.
curl -X POST https://app.daedalmap.com/api/v1/query/dataset \
-H "Content-Type: application/json" \
-d '{
"request_id": "docs_volcanoes_largest_example",
"source_id": "volcanoes_events",
"metrics": ["VEI"],
"filters": {
"region_ids": ["IDN"],
"time": { "start": 2015, "end": 2024 }
},
"sort": { "field": "value", "direction": "desc" },
"limit": 1,
"output": { "format": "rows" }
}'
Tsunamis - paid
Use source_id = "tsunamis_events". This paid source uses
year-style time filters, so pass numeric years rather than ISO dates.
Region filters accept both ISO3 country ids such as JPN
and reviewed named-water loc_ids such as IHO1953-240001002
for the Mediterranean Sea. The legacy XOO id is deprecated. The first unpaid call
should return a 402; the payment-aware retry returns rows.
curl -X POST https://app.daedalmap.com/api/v1/query/dataset \
-H "Content-Type: application/json" \
-d '{
"request_id": "docs_tsunamis_example",
"source_id": "tsunamis_events",
"metrics": ["event_count"],
"filters": {
"region_ids": ["JPN", "IDN", "IHO1953-240001002"],
"time": { "value": 2011 }
},
"sort": { "field": "value", "direction": "desc" },
"limit": 25,
"output": { "format": "rows", "include_provenance": true }
}'
- Largest wave height:
metrics = ["max_water_height_m"], sortvalue desc,limit = 1. - Events above a threshold: add
filters.compareagainstmax_water_height_m.
curl -X POST https://app.daedalmap.com/api/v1/query/dataset \
-H "Content-Type: application/json" \
-d '{
"request_id": "docs_tsunamis_largest_example",
"source_id": "tsunamis_events",
"metrics": ["max_water_height_m"],
"filters": {
"region_ids": ["JPN", "IHO1953-240001002"],
"time": { "start": 2000, "end": 2024 }
},
"sort": { "field": "value", "direction": "desc" },
"limit": 1,
"output": { "format": "rows" }
}'
Hurricanes - paid
This pack is paid: the first unpaid call returns a 402
challenge with the exact price; a payment-aware client retries for rows.
Use source_id = "hurricanes". This source uses ISO date
ranges, not numeric years. Region filters accept basin ids such as
XNA, XOP, and XIN, and they
also accept ISO3 country ids for landfall-style queries. The first
call below returns event_count rows for one basin over a
date range.
curl -X POST https://app.daedalmap.com/api/v1/query/dataset \
-H "Content-Type: application/json" \
-d '{
"request_id": "docs_hurricanes_example",
"source_id": "hurricanes",
"metrics": ["event_count"],
"filters": {
"region_ids": ["XNA"],
"time": { "start": "2000-01-01", "end": "2024-12-31" }
},
"sort": { "field": "timestamp", "direction": "desc" },
"limit": 25,
"output": { "format": "rows", "include_provenance": true }
}'
- Most intense storm:
metrics = ["max_wind_kt"], sortvalue desc,limit = 1. - Landfalling storms in a country: replace basin code with an ISO3 id such as
USAorPHL.
curl -X POST https://app.daedalmap.com/api/v1/query/dataset \
-H "Content-Type: application/json" \
-d '{
"request_id": "docs_hurricanes_intensity_example",
"source_id": "hurricanes",
"metrics": ["max_wind_kt"],
"filters": {
"region_ids": ["XNA"],
"time": { "start": "2005-01-01", "end": "2005-12-31" }
},
"sort": { "field": "value", "direction": "desc" },
"limit": 5,
"output": { "format": "rows" }
}'
UN SDG - free
UN SDG is pack-shaped but source-driven: use goal ids
01 through 17 as the source_id.
Time uses numeric years. Metrics are indicator ids scoped to that goal.
The first call below uses source 01 and one poverty
indicator across three countries.
curl -X POST https://app.daedalmap.com/api/v1/query/dataset \
-H "Content-Type: application/json" \
-d '{
"request_id": "docs_unsdg_example",
"source_id": "01",
"metrics": ["ind_1_1_1"],
"filters": {
"region_ids": ["BRA", "IND", "NGA"],
"time": { "start": 2010, "end": 2022 }
},
"sort": { "field": "year", "direction": "desc" },
"limit": 25,
"output": { "format": "rows", "include_provenance": true }
}'
- Check the pack detail for available indicator codes per goal before querying.
- Track one indicator over time or compare the same indicator across countries in a single year.
- Separate questions by SDG goal using source ids
01through17.
Wildfires - paid
This pack is paid: the first unpaid call returns a 402
challenge with the exact price; a payment-aware client retries for rows.
Use source_id = "global_fire_atlas" for global fire events
(or wildfires_usa / can_wildfires for those
countries). This source uses ISO date ranges. event_count
is the easiest first metric and must be requested on its own.
curl -X POST https://app.daedalmap.com/api/v1/query/dataset \
-H "Content-Type: application/json" \
-d '{
"request_id": "docs_wildfires_example",
"source_id": "global_fire_atlas",
"metrics": ["event_count"],
"filters": {
"region_ids": ["BRA", "AUS", "CAN"],
"time": { "start": "2019-01-01", "end": "2023-12-31" }
},
"sort": { "field": "timestamp", "direction": "desc" },
"limit": 25,
"output": { "format": "rows", "include_provenance": true }
}'
- event_count must be requested on its own; do not combine it with other metrics.
- Use ISO date ranges, not numeric years, for the time filter.
- Use
wildfire_aggregatesfor yearly admin2 rollups and regional rankings.
World Bank WDI - free
World Bank WDI is pack-shaped but source-driven: choose one category
source_id at a time -
wb_economy, wb_environment,
wb_health, wb_education, wb_debt,
wb_infrastructure, or wb_social. Time uses
numeric years and metric ids are category-specific. Each metric carries
a tier (core, extended, experimental);
prefer core for a first query. The first call below uses
wb_economy and GDP across three countries.
curl -X POST https://app.daedalmap.com/api/v1/query/dataset \
-H "Content-Type: application/json" \
-d '{
"request_id": "docs_wbwdi_example",
"source_id": "wb_economy",
"metrics": ["gdp_current_usd"],
"filters": {
"region_ids": ["USA", "CHN", "IND"],
"time": { "start": 2010, "end": 2024 }
},
"sort": { "field": "year", "direction": "desc" },
"limit": 25,
"output": { "format": "rows", "include_provenance": true }
}'
- Check the pack detail for the metric ids in each category source before querying; casing matters.
- Pick one category source_id at a time (economy, health, education, debt, environment, infrastructure, social).
- Prefer core-tier metrics first; treat experimental metrics as sparse or uncertain.
CEJST environmental justice - free
Use cejst_classification for tract classification flags and cejst_burdens for individual burden metrics. This is the CEJST v2.0 2024 screening snapshot.
curl -X POST https://app.daedalmap.com/api/v1/query/dataset \
-H "Content-Type: application/json" \
-d '{
"request_id": "docs_cejst_example",
"source_id": "cejst_classification",
"metrics": ["total_categories_exceeded"],
"filters": {"region_ids": ["USA-CA"], "disadvantaged": 1, "time": {"value": 2024}},
"sort": {"field": "total_categories_exceeded", "direction": "desc"},
"limit": 25
}'
ERA5-Land monthly temperature - free
Use era5_land_temperature for historical monthly reanalysis. It is not a forecast; anomaly values use the 1991-2020 baseline.
curl -X POST https://app.daedalmap.com/api/v1/query/dataset \
-H "Content-Type: application/json" \
-d '{
"request_id": "docs_era5_temperature_example",
"source_id": "era5_land_temperature",
"metrics": ["air_temperature_2m_anomaly_c"],
"filters": {"region_ids": ["USA", "CAN", "MEX"], "time": {"start": "2024-01-01", "end": "2024-12-31"}},
"sort": {"field": "timestamp", "direction": "asc"},
"limit": 50
}'
NWS historical alerts - free
Use nws_alerts_historical for the retained archive of U.S. watches, warnings, and advisories. The current live NWS feed remains a separate Ops surface.
curl -X POST https://app.daedalmap.com/api/v1/query/dataset \
-H "Content-Type: application/json" \
-d '{
"request_id": "docs_nws_alerts_example",
"source_id": "nws_alerts_historical",
"metrics": ["event_count"],
"filters": {"region_ids": ["USA-CA"], "time": {"start": "2024-01-01", "end": "2024-12-31"}},
"limit": 25
}'
U.S. Opportunity Zones - free
Use usa_opportunity_zones for the canonical 2020-tract view of OZ 1.0 designation and OZ 2.0 eligibility. The pack carries the 2010/2020 crosswalk needed for historical tract identity.
curl -X POST https://app.daedalmap.com/api/v1/query/dataset \
-H "Content-Type: application/json" \
-d '{
"request_id": "docs_usa_opportunity_zones_example",
"source_id": "usa_opportunity_zones",
"metrics": ["oz2_eligible"],
"filters": {"region_ids": ["USA-CA"], "oz2_eligible": 1},
"limit": 25
}'
U.S. industrial activity packs - free
Use pack_id = "usa_lodes" for tract-level workplace jobs,
usa_cbp for county establishments and payroll, and
usa_susb for county firm and enterprise-size structure.
Each pack is independently callable and downloadable.
curl -X POST https://app.daedalmap.com/api/v1/query/dataset \
-H "Content-Type: application/json" \
-d '{
"request_id": "docs_usa_lodes_example",
"source_id": "lodes",
"metrics": ["CNS05"],
"filters": {
"region_ids": ["USA-GA"],
"time": { "value": 2022 }
},
"sort": { "field": "CNS05", "direction": "desc" },
"limit": 25,
"output": { "format": "rows", "include_provenance": true }
}'
- LODES is tract-level; CBP and SUSB are county-level.
- CBP manufacturing sector rows use
naics = "31----". - SUSB manufacturing rows use
naics = "31-33"and can filterenterprise_size.
UN World Population Prospects - free
Use source_id = "un_wpp". Time uses numeric years.
Historical estimates and medium-variant projections live in the same
country-year source, so describe future years as projections.
curl -X POST https://app.daedalmap.com/api/v1/query/dataset \
-H "Content-Type: application/json" \
-d '{
"request_id": "docs_un_wpp_example",
"source_id": "un_wpp",
"metrics": ["TPopulation1July", "PopGrowthRate"],
"filters": {
"region_ids": ["NGA", "IND", "BRA"],
"time": { "start": 2020, "end": 2050 }
},
"sort": { "field": "year", "direction": "desc" },
"limit": 50,
"output": { "format": "rows", "include_provenance": true }
}'
- Use exact WPP metric ids such as
TPopulation1July,TFR,LEx, orNetMigrations. - Values after the latest historical year are projections.
FEMA NRI - free
NRI is pack-shaped but hazard-source driven: choose one member
source_id at a time, such as nri_wildfire
or nri_inland_flood. It is static county data, so do not
send a time filter.
curl -X POST https://app.daedalmap.com/api/v1/query/dataset \
-H "Content-Type: application/json" \
-d '{
"request_id": "docs_nri_example",
"source_id": "nri_wildfire",
"metrics": ["risk_score"],
"filters": {
"region_ids": ["USA-CA"]
},
"sort": { "field": "risk_score", "direction": "desc" },
"limit": 25,
"output": { "format": "rows", "include_provenance": true }
}'
- Use USA state or county loc_ids such as
USA-CAorUSA-CA-037. - Future scenario fields exist only for selected hazard members and scenarios; inspect the selected source metrics first.
World Factbook - paid
This pack is paid: the first unpaid call returns a 402
challenge with the exact price; a payment-aware client retries for rows.
Use source_id = "world_factbook". This source uses
numeric years and returns country-level reference metrics whose field
names map directly to the metric ids. Returned annual rows should carry
a year field. Start with a dense metric such as
population for the first time-series request.
curl -X POST https://app.daedalmap.com/api/v1/query/dataset \
-H "Content-Type: application/json" \
-d '{
"request_id": "docs_worldfactbook_example",
"source_id": "world_factbook",
"metrics": ["population"],
"filters": {
"region_ids": ["USA", "CAN", "BRA", "AUS", "IND"],
"time": { "start": 2010, "end": 2024 }
},
"sort": { "field": "year", "direction": "desc" },
"limit": 25,
"output": { "format": "rows", "include_provenance": true }
}'
- Check the pack detail for available metric names - Factbook field names map directly.
- If you are testing row shape, prefer one dense metric before trying a sparse multi-metric yearly request.
- Works well as a cross-reference layer alongside disaster or SDG data.
Floods - free
Use source_id = "floods". This source uses numeric years
and returns admin2-level aggregate metrics including event counts,
severity, affected area, and duration. Coverage runs 1985-2019.
curl -X POST https://app.daedalmap.com/api/v1/query/dataset \
-H "Content-Type: application/json" \
-d '{
"request_id": "docs_floods_example",
"source_id": "floods",
"metrics": ["event_count"],
"filters": {
"region_ids": ["BGD", "IND", "CHN"],
"time": { "start": 2000, "end": 2019 }
},
"sort": { "field": "year", "direction": "desc" },
"limit": 25,
"output": { "format": "rows", "include_provenance": true }
}'
- Coverage ends at 2019 - queries for later years will return no rows.
- Check pack detail for the full metric list including area, duration, and severity fields.
Tornadoes - paid
This pack is paid: the first unpaid call returns a 402
challenge with the exact price; a payment-aware client retries for rows.
Use source_id = "tornadoes". This source uses numeric
years and returns admin2-level aggregate metrics including event
counts, EF scale severity, track miles, casualties, and damage.
Coverage runs 1950-2025. Data is primarily USA-focused.
curl -X POST https://app.daedalmap.com/api/v1/query/dataset \
-H "Content-Type: application/json" \
-d '{
"request_id": "docs_tornadoes_example",
"source_id": "tornadoes",
"metrics": ["event_count"],
"filters": {
"region_ids": ["USA"],
"time": { "start": 2010, "end": 2024 }
},
"sort": { "field": "year", "direction": "desc" },
"limit": 25,
"output": { "format": "rows", "include_provenance": true }
}'
- Results are at admin2 (county) level - use a state prefix such as
USA-TX-inregion_idsto scope to one state. - Check pack detail for EF scale and damage metrics.