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
Currency 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: discover what is live and copy the contract from
/api/v1/packs/{pack_id}. - Structured dataset query: use
/api/v1/query/datasetor MCPquery_datasetfor normal rows, counts, rankings, and time-series work. This is also the default path for packs without a narrow tool. - Exact event lookup: use
/api/events/exact/{event_id}when you already know one concrete event id. - Free geography lookup: use
resolve_pointwhen you need to turn a click or coordinate into aloc_id. - Preliminary live wrappers: use
get_live_earthquake_eventsorget_live_volcano_eventsonly when the caller explicitly wants live upstream updates rather than the canonical pack lane. - Event relationships: use the aftershock helper or disaster-links helpers when the question is about sequences or chains rather than a plain filtered query.
Keep the identifiers straight. event_id is for exact-event
lookup. loc_id is for filters.region_ids in the
dataset lane.
Currency - free
Use pack_id = "currency". This pack returns
local_per_usd and expects ISO date ranges plus an
explicit filters.time.granularity such as
daily, weekly, or monthly.
The first call below returns monthly rows for three countries over one
quarter.
curl -X POST https://app.daedalmap.com/api/v1/query/dataset \
-H "Content-Type: application/json" \
-d '{
"request_id": "docs_currency_example",
"pack_id": "currency",
"metrics": ["local_per_usd"],
"filters": {
"region_ids": ["ARG", "BRA", "CHL"],
"time": {
"start": "2024-01-01",
"end": "2024-03-31",
"granularity": "monthly"
}
},
"sort": { "field": "date", "direction": "asc" },
"limit": 12,
"output": { "format": "rows", "include_provenance": true }
}'
Once that works, widen or reshape it with one small change at a time:
- Daily rates: set
filters.time.granularitytodailyand narrow the date range. - Compare currencies: include multiple
region_idsover the same range. - Cross-rate (e.g. CAD/EUR): query both, then compute
cad_per_usd / eur_per_usdclient-side.
curl -X POST https://app.daedalmap.com/api/v1/query/dataset \
-H "Content-Type: application/json" \
-d '{
"request_id": "docs_currency_daily_example",
"pack_id": "currency",
"metrics": ["local_per_usd"],
"filters": {
"region_ids": ["EUR", "CAN"],
"time": {
"start": "2024-01-01",
"end": "2024-01-31",
"granularity": "daily"
}
},
"sort": { "field": "date", "direction": "asc" },
"limit": 31,
"output": { "format": "rows" }
}'
Currency via MCP
curl -X POST https://app.daedalmap.com/mcp/currency \
-H "Content-Type: application/json" \
-H "MCP-Protocol-Version: 2025-06-18" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "get_fx_rates",
"arguments": {
"request_id": "docs_currency_mcp_example",
"metrics": ["local_per_usd"],
"filters": {
"region_ids": ["ARG", "BRA", "CHL"],
"time": {
"start": "2024-01-01",
"end": "2024-03-31",
"granularity": "monthly"
}
},
"sort": { "field": "date", "direction": "asc" },
"limit": 12,
"output": { "format": "rows", "include_provenance": true }
}
}
}'
Earthquakes - paid (x402)
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
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_earthquake_events",
"arguments": {
"request_id": "docs_mcp_earthquakes_example",
"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.
Live wrappers
These tools are opt-in. Use them only when the question is explicitly about recent preliminary upstream activity that may not be in the canonical pack yet.
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_live_earthquake_events",
"arguments": {
"request_id": "docs_live_eq_example",
"hours": 6,
"min_magnitude": 5,
"limit": 3,
"orderby": "time"
}
}
}'
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_live_volcano_events",
"arguments": {
"request_id": "docs_live_volcano_example",
"days": 30,
"limit": 3,
"orderby": "time"
}
}
}'
Live wrappers are upstream snapshots, not the canonical historical pack. If you need stable loc_id joins, pack metadata, or cross-pack comparison, start with the canonical tool first and only fall back to a live wrapper on purpose.
Geography tools - free
Resolve any coordinate or loc_id onto the shared geography
spine, then query any pack with the result. Free, no payment - the
/mcp/geography facade (also on the umbrella /mcp).
resolve_point- latitude/longitude -> deepestloc_idplus full parent chainget_boundary-loc_id-> bbox + centroid (full polygon on request)loc_id_hierarchy/loc_id_info- parent/ancestors/children and descriptive metadata
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 }
}
}'
# -> deepest loc_id USA-CA-037-207400-1-1024 plus the USA -> USA-CA -> USA-CA-037 chain.
# Take any level (e.g. USA-CA) and pass it as filters.region_ids in a pack 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": "2",
"method": "tools/call",
"params": {
"name": "get_boundary",
"arguments": { "loc_id": "USA-CA" }
}
}'
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": "loc_id_hierarchy",
"arguments": { "loc_id": "USA-CA" }
}
}'
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": "loc_id_info",
"arguments": { "loc_id": "USA-CA" }
}
}'
Use get_boundary for bounding boxes and centroids,
loc_id_hierarchy to move up or down the spine, and
loc_id_info when you just need the basic record for one
geography.
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 Linking and Causal Chains.
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 (x402)
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 ocean-region ids such as XOO. 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", "XOO"],
"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", "XOO"],
"time": { "start": 2000, "end": 2024 }
},
"sort": { "field": "value", "direction": "desc" },
"limit": 1,
"output": { "format": "rows" }
}'
Hurricanes - paid (x402)
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 (x402)
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.
Distributed Manufacturing - free
Use source_id = "distributed_manufacturing". This is a
static point-location source, so do not send a time filter. Start with
latitude and longitude, then narrow by
region_ids, facility_type, or
source.
curl -X POST https://app.daedalmap.com/api/v1/query/dataset \
-H "Content-Type: application/json" \
-d '{
"request_id": "docs_distributed_manufacturing_example",
"source_id": "distributed_manufacturing",
"metrics": ["latitude", "longitude"],
"filters": {
"region_ids": ["DEU"],
"facility_type": "fab_lab"
},
"sort": { "field": "name", "direction": "asc" },
"limit": 25,
"output": { "format": "rows", "include_provenance": true }
}'
- Static source: omit
filters.time. - Facility categories include fab labs, makerspaces, hackerspaces, Precious Plastic workshops, and Prusa World user printers.
OWID CO2 - free
Use source_id = "owid_co2". Time uses numeric years.
Start with exact metric ids such as co2,
co2_per_capita, cumulative_co2, or
total_ghg.
curl -X POST https://app.daedalmap.com/api/v1/query/dataset \
-H "Content-Type: application/json" \
-d '{
"request_id": "docs_owid_co2_example",
"source_id": "owid_co2",
"metrics": ["co2", "co2_per_capita"],
"filters": {
"region_ids": ["CHN", "USA", "IND"],
"time": { "start": 2020, "end": 2024 }
},
"sort": { "field": "year", "direction": "desc" },
"limit": 50,
"output": { "format": "rows", "include_provenance": true }
}'
- Do not mix totals, per-capita rates, cumulative metrics, and shares without naming the unit.
- Use numeric years, not ISO date strings.
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 (x402)
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.
WorldPop - paid (x402)
This pack is paid: the first unpaid call returns a 402
challenge with the exact price; a payment-aware client retries for rows.
WorldPop data is CC-BY 4.0; attribution to WorldPop is included in the
pack's upstream_sources metadata.
Use source_id = "worldpop". This source requires a
geo_level filter to select the geographic grain:
admin_0 for country totals, admin_1 for
states and provinces, admin_2 for districts. Country
totals at admin_0 are pre-aggregated. The first call
below returns population for three countries in 2020.
curl -X POST https://app.daedalmap.com/api/v1/query/dataset \
-H "Content-Type: application/json" \
-d '{
"request_id": "docs_worldpop_example",
"source_id": "worldpop",
"metrics": ["population"],
"filters": {
"region_ids": ["USA", "BRA", "IND"],
"geo_level": "admin_0",
"time": { "value": 2020 }
},
"sort": { "field": "value", "direction": "desc" },
"limit": 25,
"output": { "format": "rows", "include_provenance": true }
}'
geo_levelis required - omitting it will return an error.- Coverage: global at
admin_0,admin_1,admin_2; USA only atadmin_3(Census tract). - Temporal range: 2000-2030 (projections included).
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 (x402)
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.