Build a topography grid from 3DEP
You are viewing in-progress documentation for v2 (Beta). Switch to the stable version for the current production release.
Fire spreads uphill, and slope and aspect drive that. This guide builds a topography grid — elevation, slope, and aspect — for your domain from the USGS 3DEP elevation program.
Prerequisites
Section titled “Prerequisites”-
An API key: my-api-key.
-
A domain within CONUS: your-domain-id. See Create a domain.
Step 1 (optional) — Check 3DEP coverage
Section titled “Step 1 (optional) — Check 3DEP coverage”3DEP publishes seamless 10 m and 30 m DEMs nationwide, plus 1 m lidar where it’s been flown. Before requesting high-resolution data, check what’s available over your domain:
curl -X 'GET' \ 'https://api-v2-prod-nyvjyh5ywa-uw.a.run.app/domains/your-domain-id/grids/topography/3dep/coverage' \ -H 'accept: application/json' \ -H 'api-key: my-api-key'{ "resolution": 1, "available": false, "tile_count": 0, "tiles": [], "acquisition_dates": null}Here available: false means no 1 m lidar tiles intersect this domain — so
fall back to the seamless 10 m DEM (the default). When 1 m lidar is
available, tiles and acquisition_dates list what would be used.
Step 2 — Create the topography grid
Section titled “Step 2 — Create the topography grid”source_resolution picks the 3DEP product to sample (10 for the seamless
10 m DEM; 1 only where the coverage check reports it). bands selects which
surfaces to compute — slope and aspect are derived from the elevation
surface.
curl -X 'POST' \ 'https://api-v2-prod-nyvjyh5ywa-uw.a.run.app/domains/your-domain-id/grids/topography/3dep' \ -H 'accept: application/json' \ -H 'api-key: my-api-key' \ -H 'Content-Type: application/json' \ -d '{ "name": "Topography (3DEP 10 m)", "source_resolution": 10, "bands": ["elevation", "slope", "aspect"]}'{ "id": "your-grid-id", "domain_id": "your-domain-id", "name": "Topography (3DEP 10 m)", "description": "", "status": "pending", "progress": null, "created_on": "2026-05-25T18:47:45.060982", "modified_on": "2026-05-25T18:47:45.060982", "source": { "name": "3dep", "product": "topography", "source_resolution": 10, "description": "3DEP topographic data (elevation, slope, aspect)", "extent_buffer_cells": 0, "alignment": { "target": "domain", "resolution": null, "method": null }, "bands": ["elevation", "slope", "aspect"], "tile_metadata": null }, "modifications": [], "bands": [ { "key": "elevation", "type": "continuous", "unit": "m", "index": 0 }, { "key": "slope", "type": "continuous", "unit": "deg", "index": 1 }, { "key": "aspect", "type": "continuous", "unit": "deg", "index": 2 } ], "georeference": null, "error": null, "chunks": { "shape": [512, 512], "count": null, "count_by_axis": null }, "tags": []}Record the grid id: your-grid-id.
Step 3 — Poll until completed
Section titled “Step 3 — Poll until completed”curl -X 'GET' \ 'https://api-v2-prod-nyvjyh5ywa-uw.a.run.app/domains/your-domain-id/grids/your-grid-id' \ -H 'accept: application/json' \ -H 'api-key: my-api-key'{ "id": "your-grid-id", "domain_id": "your-domain-id", "name": "Topography (3DEP 10 m)", "description": "", "status": "completed", "progress": { "percent": 100, "message": "Complete" }, "created_on": "2026-05-25T18:47:45.060982Z", "modified_on": "2026-05-25T18:47:48.430060Z", "source": { "name": "3dep", "bands": ["elevation", "slope", "aspect"], "description": "3DEP topographic data (elevation, slope, aspect)", "alignment": { "target": "domain", "method": null, "resolution": null }, "extent_buffer_cells": 0, "source_resolution": 10, "tile_metadata": { "tile_count": 1, "acquisition_dates": null, "tile_source": null, "native_crs": "EPSG:4326", "tiles": [ "https://prd-tnm.s3.amazonaws.com/StagedProducts/Elevation/13/TIFF/current/n47w115/USGS_13_n47w115.tif" ] }, "product": "topography" }, "modifications": [], "bands": [ { "key": "elevation", "type": "continuous", "unit": "m", "index": 0 }, { "key": "slope", "type": "continuous", "unit": "deg", "index": 1 }, { "key": "aspect", "type": "continuous", "unit": "deg", "index": 2 } ], "georeference": { "crs": "EPSG:32611", "transform": [ 7.7301175133338464, 0.0, 720227.9398802927, 0.0, -7.730117513336364, 5190652.2875135 ], "shape": [115, 169] }, "error": null, "chunks": { "shape": [512, 512], "count": 1, "count_by_axis": { "x": 1, "y": 1 } }, "tags": []}The three bands come back with units m (elevation) and deg (slope,
aspect). On the Blue Mountain domain elevation runs ≈957–1170 m up the
valley flank — real sampled terrain, not a placeholder.
Common pitfalls
Section titled “Common pitfalls”- Requesting
source_resolution: 1where lidar isn’t flown. The coverage check (step 1) tells you up front — ifavailableisfalse, use10. - Domain outside CONUS. 3DEP is a US program; domains elsewhere have no coverage.
- Expecting slope/aspect without elevation. They’re derived from the elevation surface; the service computes them from the sampled DEM, so just list the bands you want.